');
});
});
});
diff --git a/app/javascript/mastodon/features/emoji/emoji.js b/app/javascript/mastodon/features/emoji/emoji.js
index 1f469aced7..66dcd89488 100644
--- a/app/javascript/mastodon/features/emoji/emoji.js
+++ b/app/javascript/mastodon/features/emoji/emoji.js
@@ -97,30 +97,30 @@ const emojifyTextNode = (node, customEmojis) => {
const { filename, shortCode } = unicodeMapping[unicode_emoji];
const title = shortCode ? `:${shortCode}:` : '';
- replacement = document.createElement('picture');
-
const isSystemTheme = !!document.body?.classList.contains('theme-system');
- if(isSystemTheme) {
- let source = document.createElement('source');
- source.setAttribute('media', '(prefers-color-scheme: dark)');
- source.setAttribute('srcset', `${assetHost}/emoji/${emojiFilename(filename, "dark")}.svg`);
- replacement.appendChild(source);
- }
+ const theme = (isSystemTheme || document.body?.classList.contains('theme-mastodon-light')) ? 'light' : 'dark';
- let img = document.createElement('img');
+ const imageFilename = emojiFilename(filename, theme);
+
+ const img = document.createElement('img');
img.setAttribute('draggable', 'false');
img.setAttribute('class', 'emojione');
img.setAttribute('alt', unicode_emoji);
img.setAttribute('title', title);
+ img.setAttribute('src', `${assetHost}/emoji/${imageFilename}.svg`);
- let theme = "light";
+ if (isSystemTheme && imageFilename !== emojiFilename(filename, 'dark')) {
+ replacement = document.createElement('picture');
- if(!isSystemTheme && !document.body?.classList.contains('theme-mastodon-light'))
- theme = "dark";
-
- img.setAttribute('src', `${assetHost}/emoji/${emojiFilename(filename, theme)}.svg`);
- replacement.appendChild(img);
+ const source = document.createElement('source');
+ source.setAttribute('media', '(prefers-color-scheme: dark)');
+ source.setAttribute('srcset', `${assetHost}/emoji/${emojiFilename(filename, 'dark')}.svg`);
+ replacement.appendChild(source);
+ replacement.appendChild(img);
+ } else {
+ replacement = img;
+ }
}
// Add the processed-up-to-now string and the emoji replacement
@@ -135,7 +135,7 @@ const emojifyTextNode = (node, customEmojis) => {
};
const emojifyNode = (node, customEmojis) => {
- for (const child of node.childNodes) {
+ for (const child of Array.from(node.childNodes)) {
switch(child.nodeType) {
case Node.TEXT_NODE:
emojifyTextNode(child, customEmojis);
diff --git a/app/javascript/mastodon/locales/az.json b/app/javascript/mastodon/locales/az.json
index 5f1efe3d72..a60087890b 100644
--- a/app/javascript/mastodon/locales/az.json
+++ b/app/javascript/mastodon/locales/az.json
@@ -86,6 +86,13 @@
"alert.unexpected.message": "Bilinməyən bir xəta baş verdi.",
"alert.unexpected.title": "Ah!",
"alt_text_badge.title": "Alternativ mətn",
+ "alt_text_modal.add_alt_text": "Alternativ mətn əlavə et",
+ "alt_text_modal.add_text_from_image": "Şəkildəki mətni əlavə et",
+ "alt_text_modal.cancel": "İmtina",
+ "alt_text_modal.change_thumbnail": "Miniatürü dəyişdir",
+ "alt_text_modal.describe_for_people_with_hearing_impairments": "Eşitmə məhdudiyyətli insanlar üçün bunu izah et…",
+ "alt_text_modal.describe_for_people_with_visual_impairments": "Görmə məhdudiyyətli insanlar üçün bunu təsvir et…",
+ "alt_text_modal.done": "Oldu",
"announcement.announcement": "Elan",
"annual_report.summary.archetype.booster": "Trend ovçusu",
"annual_report.summary.archetype.lurker": "Lurker",
@@ -211,6 +218,10 @@
"confirmations.logout.confirm": "Çıxış et",
"confirmations.logout.message": "Çıxmaq istədiyinizə əminsiniz?",
"confirmations.logout.title": "Çıxış edilsin?",
+ "confirmations.missing_alt_text.confirm": "Alternativ mətn əlavə et",
+ "confirmations.missing_alt_text.message": "Paylaşımınız alternativ mətn ehtiva etmir. Təsvir əlavə etmək onun daha çox insan üçün əlçatan olmasına kömək edir.",
+ "confirmations.missing_alt_text.secondary": "Yenə də paylaş",
+ "confirmations.missing_alt_text.title": "Alternativ mətn əlavə edilsin?",
"confirmations.mute.confirm": "Səssizləşdir",
"confirmations.redraft.confirm": "Sil və qaralamaya köçür",
"confirmations.redraft.message": "Bu paylaşımı silmək və qaralamaya köçürmək istədiyinizə əminsiniz? Bəyənmələr və gücləndirmələr itəcək və orijinal paylaşıma olan cavablar tənha qalacaq.",
@@ -241,6 +252,7 @@
"dismissable_banner.dismiss": "Bağla",
"dismissable_banner.explore_links": "Bu xəbərlər bu gün fediversedə ən çox paylaşılır. Daha fərqli insanlar tərəfindən dərc edilən daha yeni xəbərlər daha yuxarıda sıralanır.",
"dismissable_banner.explore_statuses": "Fediversedən olan bu paylaşımlar bu gün maraq qazanır. Daha çox gücləndirici və bəyənmə olan daha yeni paylaşımlar daha yuxarıda sıralanır.",
+ "dismissable_banner.explore_tags": "Bu heşteqlər fediverse-də trend olublar. Daha çox fərqli insanlar tərəfindən istifadə olunan heşteqlər daha yuxarıda sıralanır.",
"domain_block_modal.block_account_instead": "@{name} istifadəçisini blokla",
"domain_block_modal.they_can_interact_with_old_posts": "Bu serverdən olan insanlar köhnə paylaşımlarınızla əlaqə qura bilər."
}
diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json
index cdcbddf55a..e01f6dd448 100644
--- a/app/javascript/mastodon/locales/bg.json
+++ b/app/javascript/mastodon/locales/bg.json
@@ -218,6 +218,10 @@
"confirmations.logout.confirm": "Излизане",
"confirmations.logout.message": "Наистина ли искате да излезете?",
"confirmations.logout.title": "Излизате ли от системата?",
+ "confirmations.missing_alt_text.confirm": "Добавяне на алтернативен текст",
+ "confirmations.missing_alt_text.message": "Вашата публикация съдържа мултимедия без алтернативен текст. Добавянето на описание помага да направите съдържанието си по-достъпно за повече хора.",
+ "confirmations.missing_alt_text.secondary": "Все пак да се публикува",
+ "confirmations.missing_alt_text.title": "Добавяте ли алтернативен текст?",
"confirmations.mute.confirm": "Заглушаване",
"confirmations.redraft.confirm": "Изтриване и преработване",
"confirmations.redraft.message": "Наистина ли искате да изтриете тази публикация и да я направите чернова? Означаванията като любими и подсилванията ще се изгубят, а и отговорите към първоначалната публикация ще осиротеят.",
diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json
index 74d33c2357..27683a0933 100644
--- a/app/javascript/mastodon/locales/ca.json
+++ b/app/javascript/mastodon/locales/ca.json
@@ -180,7 +180,7 @@
"compose.published.open": "Obre",
"compose.saved.body": "Tut desat.",
"compose_form.direct_message_warning_learn_more": "Més informació",
- "compose_form.encryption_warning": "Les publicacions a Mastodon no estant xifrades punt a punt. No comparteixis informació sensible mitjançant Mastodon.",
+ "compose_form.encryption_warning": "Els tuts a Mastodon no estan xifrats punt a punt. No compartiu informació confidencial mitjançant Mastodon.",
"compose_form.hashtag_warning": "Aquest tut no apareixerà a les llistes d'etiquetes perquè no és públic. Només els tuts públics apareixen a les cerques per etiqueta.",
"compose_form.lock_disclaimer": "El teu compte no està {locked}. Tothom pot seguir-te i veure els tuts de només per a seguidors.",
"compose_form.lock_disclaimer.lock": "blocat",
@@ -218,7 +218,7 @@
"confirmations.logout.confirm": "Tanca la sessió",
"confirmations.logout.message": "Segur que vols tancar la sessió?",
"confirmations.logout.title": "Tancar la sessió?",
- "confirmations.missing_alt_text.confirm": "Afegiu text alternatiu",
+ "confirmations.missing_alt_text.confirm": "Afegiu un text alternatiu",
"confirmations.missing_alt_text.message": "La vostra publicació té contingut sense text alternatiu. Afegir-hi descripcions la farà accessible a més persones.",
"confirmations.missing_alt_text.secondary": "Publica-la igualment",
"confirmations.missing_alt_text.title": "Hi voleu afegir text alternatiu?",
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index 66cc0727b6..62df3be279 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -218,6 +218,10 @@
"confirmations.logout.confirm": "Odhlásit se",
"confirmations.logout.message": "Opravdu se chcete odhlásit?",
"confirmations.logout.title": "Odhlásit se?",
+ "confirmations.missing_alt_text.confirm": "Přidat alt text",
+ "confirmations.missing_alt_text.message": "Váš příspěvek obsahuje média bez alt textu. Přidání popisů pomáhá zpřístupnit váš obsah většímu počtu lidí.",
+ "confirmations.missing_alt_text.secondary": "Přesto odeslat",
+ "confirmations.missing_alt_text.title": "Přidat alt text?",
"confirmations.mute.confirm": "Skrýt",
"confirmations.redraft.confirm": "Smazat a přepsat",
"confirmations.redraft.message": "Jste si jistí, že chcete odstranit tento příspěvek a vytvořit z něj koncept? Oblíbené a boosty budou ztraceny a odpovědi na původní příspěvek ztratí kontext.",
diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json
index b30ae5e215..c9a22ff8f1 100644
--- a/app/javascript/mastodon/locales/cy.json
+++ b/app/javascript/mastodon/locales/cy.json
@@ -86,6 +86,13 @@
"alert.unexpected.message": "Digwyddodd gwall annisgwyl.",
"alert.unexpected.title": "Wps!",
"alt_text_badge.title": "Testun Amgen",
+ "alt_text_modal.add_alt_text": "Ychwanegu testun amgen",
+ "alt_text_modal.add_text_from_image": "Ychwanegu testun o'r ddelwedd",
+ "alt_text_modal.cancel": "Diddymu",
+ "alt_text_modal.change_thumbnail": "Newid llun bach",
+ "alt_text_modal.describe_for_people_with_hearing_impairments": "Disgrifiwch hyn ar gyfer pobl â nam ar eu clyw…",
+ "alt_text_modal.describe_for_people_with_visual_impairments": "Disgrifiwch hyn ar gyfer pobl â nam ar eu golwg…",
+ "alt_text_modal.done": "Gorffen",
"announcement.announcement": "Cyhoeddiad",
"annual_report.summary.archetype.booster": "Y hyrwyddwr",
"annual_report.summary.archetype.lurker": "Yr arsylwr",
@@ -211,6 +218,10 @@
"confirmations.logout.confirm": "Allgofnodi",
"confirmations.logout.message": "Ydych chi'n siŵr eich bod am allgofnodi?",
"confirmations.logout.title": "Allgofnodi?",
+ "confirmations.missing_alt_text.confirm": "Ychwanegu testun amgen",
+ "confirmations.missing_alt_text.message": "Mae eich postiad yn cynnwys cyfryngau heb destun amgen. Mae ychwanegu disgrifiadau yn helpu i wneud eich cynnwys yn hygyrch i fwy o bobl.",
+ "confirmations.missing_alt_text.secondary": "Postio beth bynnag",
+ "confirmations.missing_alt_text.title": "Ychwanegu testun amgen?",
"confirmations.mute.confirm": "Tewi",
"confirmations.redraft.confirm": "Dileu ac ailddrafftio",
"confirmations.redraft.message": "Ydych chi wir eisiau'r dileu'r postiad hwn a'i ailddrafftio? Bydd ffefrynnau a hybiau'n cael eu colli, a bydd atebion i'r post gwreiddiol yn mynd yn amddifad.",
@@ -407,6 +418,8 @@
"ignore_notifications_modal.not_followers_title": "Anwybyddu hysbysiadau gan bobl nad ydynt yn eich dilyn?",
"ignore_notifications_modal.not_following_title": "Anwybyddu hysbysiadau gan bobl nad ydych yn eu dilyn?",
"ignore_notifications_modal.private_mentions_title": "Anwybyddu hysbysiadau o Grybwylliadau Preifat digymell?",
+ "info_button.label": "Cymorth",
+ "info_button.what_is_alt_text": "
Beth yw testun amgen?
Mae Testun Amgen yn darparu disgrifiadau delwedd ar gyfer pobl â nam ar eu golwg, cysylltiadau lled band isel, neu'r rhai sy'n ceisio cyd-destun ychwanegol.
Gallwch wella hygyrchedd a dealltwriaeth i bawb trwy ysgrifennu testun amgen clir, cryno a gwrthrychol.
Dal elfennau pwysig
Crynhoi testun mewn delweddau
Defnyddiwch strwythur brawddegau rheolaidd
Osgoi gwybodaeth ddiangen
Canolbwyntio ar dueddiadau a chanfyddiadau allweddol mewn delweddau cymhleth (fel diagramau neu fapiau)
",
"interaction_modal.action.favourite": "I barhau, mae angen i chi hoffi o'ch cyfrif.",
"interaction_modal.action.follow": "I barhau, mae angen i chi ddilyn o'ch cyfrif.",
"interaction_modal.action.reblog": "I barhau, mae angen i chi ail-flogio o'ch cyfrif.",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 7f198727a9..3fa92cd53e 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -29,7 +29,7 @@
"account.endorse": "Fremhæv på profil",
"account.featured_tags.last_status_at": "Seneste indlæg {date}",
"account.featured_tags.last_status_never": "Ingen indlæg",
- "account.featured_tags.title": "{name}s fremhævede hashtags",
+ "account.featured_tags.title": "{name}s fremhævede etiketter",
"account.follow": "Følg",
"account.follow_back": "Følg tilbage",
"account.followers": "Følgere",
@@ -39,7 +39,7 @@
"account.following_counter": "{count, plural, one {{counter} følger} other {{counter} følger}}",
"account.follows.empty": "Denne bruger følger ikke nogen endnu.",
"account.go_to_profile": "Gå til profil",
- "account.hide_reblogs": "Skjul boosts fra @{name}",
+ "account.hide_reblogs": "Skjul fremhævelser fra @{name}",
"account.in_memoriam": "Til minde om.",
"account.joined_short": "Oprettet",
"account.languages": "Skift abonnementssprog",
@@ -49,9 +49,9 @@
"account.mention": "Nævn @{name}",
"account.moved_to": "{name} har angivet, at vedkommendes nye konto nu er:",
"account.mute": "Skjul @{name}",
- "account.mute_notifications_short": "Slå lyden fra for notifikationer",
- "account.mute_short": "Skjul (mute)",
- "account.muted": "Skjult (muted)",
+ "account.mute_notifications_short": "Sluk for notifikationer",
+ "account.mute_short": "Skjul",
+ "account.muted": "Skjult",
"account.mutual": "Fælles",
"account.no_bio": "Ingen beskrivelse til rådighed.",
"account.open_original_page": "Åbn oprindelig side",
@@ -63,14 +63,14 @@
"account.share": "Del @{name}s profil",
"account.show_reblogs": "Vis fremhævelser fra @{name}",
"account.statuses_counter": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}}",
- "account.unblock": "Afblokér @{name}",
- "account.unblock_domain": "Afblokér domænet {domain}",
- "account.unblock_short": "Afblokér",
+ "account.unblock": "Fjern blokering af @{name}",
+ "account.unblock_domain": "Fjern blokering af domænet {domain}",
+ "account.unblock_short": "Fjern blokering",
"account.unendorse": "Fjern visning på din profil",
"account.unfollow": "Følg ikke længere",
- "account.unmute": "Vis @{name} igen (unmute)",
- "account.unmute_notifications_short": "Slå lyden fra for notifikationer",
- "account.unmute_short": "Vis igen (unmute)",
+ "account.unmute": "Vis @{name} igen",
+ "account.unmute_notifications_short": "Tænd for notifikationer",
+ "account.unmute_short": "Vis igen",
"account_note.placeholder": "Klik for at tilføje notat",
"admin.dashboard.daily_retention": "Brugerfastholdelsesrate per dag efter tilmelding",
"admin.dashboard.monthly_retention": "Brugerfastholdelsesrate per måned efter tilmelding",
@@ -94,38 +94,38 @@
"alt_text_modal.describe_for_people_with_visual_impairments": "Beskriv dette for personer med nedsat syn…",
"alt_text_modal.done": "Færdig",
"announcement.announcement": "Bekendtgørelse",
- "annual_report.summary.archetype.booster": "Cool-hunter",
- "annual_report.summary.archetype.lurker": "Lurker",
- "annual_report.summary.archetype.oracle": "Oracle",
- "annual_report.summary.archetype.pollster": "Pollster",
- "annual_report.summary.archetype.replier": "Social butterfly",
+ "annual_report.summary.archetype.booster": "Fremhæveren",
+ "annual_report.summary.archetype.lurker": "Lureren",
+ "annual_report.summary.archetype.oracle": "Oraklet",
+ "annual_report.summary.archetype.pollster": "Afstemningsmageren",
+ "annual_report.summary.archetype.replier": "Den social sommerfugl",
"annual_report.summary.followers.followers": "følgere",
"annual_report.summary.followers.total": "{count} i alt",
- "annual_report.summary.here_it_is": "Her er {year} i sammendrag:",
+ "annual_report.summary.here_it_is": "Her er dit {year} i sammendrag:",
"annual_report.summary.highlighted_post.by_favourites": "mest favoritmarkerede indlæg",
- "annual_report.summary.highlighted_post.by_reblogs": "mest boostede indlæg",
- "annual_report.summary.highlighted_post.by_replies": "indlæg med flest svar",
+ "annual_report.summary.highlighted_post.by_reblogs": "mest fremhævede indlæg",
+ "annual_report.summary.highlighted_post.by_replies": "mest besvarede indlæg",
"annual_report.summary.highlighted_post.possessive": "{name}s",
"annual_report.summary.most_used_app.most_used_app": "mest benyttede app",
- "annual_report.summary.most_used_hashtag.most_used_hashtag": "mest benyttede hashtag",
+ "annual_report.summary.most_used_hashtag.most_used_hashtag": "mest benyttede etiket",
"annual_report.summary.most_used_hashtag.none": "Intet",
"annual_report.summary.new_posts.new_posts": "nye indlæg",
"annual_report.summary.percentile.text": "Det betyder, at man er i topaf {domain}-brugere.",
- "annual_report.summary.percentile.we_wont_tell_bernie": "Vi fortæller det ikke til Bernie.",
+ "annual_report.summary.percentile.we_wont_tell_bernie": "Vi fortæller det ikke til Pernille Skipper.",
"annual_report.summary.thanks": "Tak for at være en del af Mastodon!",
"attachments_list.unprocessed": "(ubehandlet)",
"audio.hide": "Skjul lyd",
"block_modal.remote_users_caveat": "Serveren {domain} vil blive bedt om at respektere din beslutning. Overholdelse er dog ikke garanteret, da nogle servere kan håndtere blokke forskelligt. Offentlige indlæg kan stadig være synlige for ikke-indloggede brugere.",
- "block_modal.show_less": "Vis mindre",
+ "block_modal.show_less": "Vis færre",
"block_modal.show_more": "Vis flere",
- "block_modal.they_cant_mention": "Vedkommende kan ikke nævne eller følge dig.",
+ "block_modal.they_cant_mention": "Vedkommende kan ikke omtale eller følge dig.",
"block_modal.they_cant_see_posts": "Vedkommende kan ikke se dine indlæg, og du vil ikke se vedkommendes.",
"block_modal.they_will_know": "Vedkommende kan se den aktive blokering.",
"block_modal.title": "Blokér bruger?",
- "block_modal.you_wont_see_mentions": "Du vil ikke se indlæg, som nævner vedkommende.",
+ "block_modal.you_wont_see_mentions": "Du vil ikke se indlæg, som omtaler vedkommende.",
"boost_modal.combo": "Du kan trykke {combo} for at springe dette over næste gang",
- "boost_modal.reblog": "Boost indlæg?",
- "boost_modal.undo_reblog": "Fjern boost af indlæg?",
+ "boost_modal.reblog": "Fremhæv indlæg?",
+ "boost_modal.undo_reblog": "Fjern fremhævning af indlæg?",
"bundle_column_error.copy_stacktrace": "Kopiér fejlrapport",
"bundle_column_error.error.body": "Den anmodede side kunne ikke gengives. Dette kan skyldes flere typer fejl.",
"bundle_column_error.error.title": "Åh nej!",
@@ -153,12 +153,12 @@
"column.domain_blocks": "Blokerede domæner",
"column.edit_list": "Redigér liste",
"column.favourites": "Favoritter",
- "column.firehose": "Live feeds",
+ "column.firehose": "Realtids-strømme",
"column.follow_requests": "Følgeanmodninger",
"column.home": "Hjem",
"column.list_members": "Håndtér listemedlemmer",
"column.lists": "Lister",
- "column.mutes": "Skjulte brugere (mutede)",
+ "column.mutes": "Skjulte brugere",
"column.notifications": "Notifikationer",
"column.pins": "Fastgjorte indlæg",
"column.public": "Fælles tidslinje",
@@ -168,7 +168,7 @@
"column_header.moveRight_settings": "Flyt kolonne til højre",
"column_header.pin": "Fastgør",
"column_header.show_settings": "Vis indstillinger",
- "column_header.unpin": "Løsgør",
+ "column_header.unpin": "Frigør",
"column_search.cancel": "Afbryd",
"column_subheading.settings": "Indstillinger",
"community.column_settings.local_only": "Kun lokalt",
@@ -181,7 +181,7 @@
"compose.saved.body": "Indlæg gemt.",
"compose_form.direct_message_warning_learn_more": "Få mere at vide",
"compose_form.encryption_warning": "Indlæg på Mastodon er ikke ende-til-ende-krypteret. Del derfor ikke sensitiv information via Mastodon.",
- "compose_form.hashtag_warning": "Da indlægget ikke er offentligt, vises det ikke under noget hashtag, da kun offentlige indlæg er søgbare via hashtags.",
+ "compose_form.hashtag_warning": "Da indlægget ikke er offentligt, vises det ikke under nogen etiket, da kun offentlige indlæg er søgbare via etiketter.",
"compose_form.lock_disclaimer": "Din konto er ikke {locked}. Enhver kan følge dig og se indlæg kun beregnet for følgere.",
"compose_form.lock_disclaimer.lock": "låst",
"compose_form.placeholder": "Hvad tænker du på?",
@@ -196,9 +196,9 @@
"compose_form.publish_form": "Publicér",
"compose_form.reply": "Svar",
"compose_form.save_changes": "Opdatér",
- "compose_form.spoiler.marked": "Fjern indholdsadvarsel",
- "compose_form.spoiler.unmarked": "Tilføj indholdsadvarsel",
- "compose_form.spoiler_placeholder": "Indholdsadvarsel (valgfri)",
+ "compose_form.spoiler.marked": "Fjern emnefelt",
+ "compose_form.spoiler.unmarked": "Tilføj emnefelt",
+ "compose_form.spoiler_placeholder": "Emnefelt (valgfrit)",
"confirmation_modal.cancel": "Afbryd",
"confirmations.block.confirm": "Blokér",
"confirmations.delete.confirm": "Slet",
@@ -222,9 +222,9 @@
"confirmations.missing_alt_text.message": "Indlægget indeholder medier uden alt-tekst. Tilføjelse af beskrivelser bidrager til at gøre indholdet tilgængeligt for flere brugere.",
"confirmations.missing_alt_text.secondary": "Læg op alligevel",
"confirmations.missing_alt_text.title": "Tilføj alt-tekst?",
- "confirmations.mute.confirm": "Skjul (mute)",
+ "confirmations.mute.confirm": "Skjul",
"confirmations.redraft.confirm": "Slet og omformulér",
- "confirmations.redraft.message": "Sikker på, at dette indlæg skal slettes og omskrives? Favoritter og boosts går tabt, og svar til det oprindelige indlæg mister tilknytningen.",
+ "confirmations.redraft.message": "Sikker på, at dette indlæg skal slettes og omskrives? Favoritter og fremhævelser går tabt, og svar til det oprindelige indlæg mister tilknytningen.",
"confirmations.redraft.title": "Slet og omformulér indlæg?",
"confirmations.reply.confirm": "Svar",
"confirmations.reply.message": "Hvis du svarer nu, vil det overskrive den besked, du er ved at skrive. Fortsæt alligevel?",
@@ -242,7 +242,7 @@
"copy_icon_button.copied": "Kopieret til udklipsholderen",
"copypaste.copied": "Kopieret",
"copypaste.copy_to_clipboard": "Kopiér til udklipsholder",
- "directory.federated": "Fra kendt fedivers",
+ "directory.federated": "Fra kendt fødivers",
"directory.local": "Kun fra {domain}",
"directory.new_arrivals": "Nye ankomster",
"directory.recently_active": "Aktive for nyligt",
@@ -250,10 +250,10 @@
"disabled_account_banner.text": "Din konto {disabledAccount} er pt. deaktiveret.",
"dismissable_banner.community_timeline": "Disse er de seneste offentlige indlæg fra personer med konti hostet af {domain}.",
"dismissable_banner.dismiss": "Afvis",
- "dismissable_banner.explore_links": "Disse nyhedshistorier deles mest på fediverset i dag. Nyere nyhedshistorier lagt op af flere forskellige personer rangeres højere.",
- "dismissable_banner.explore_statuses": "Disse indlæg på tværs af fediverset opnår momentum i dag. Nyere indlæg med flere boosts og favoritter rangeres højere.",
- "dismissable_banner.explore_tags": "Disse hashtags opnår momentum på fediverset i dag. Hashtags brugt af flere forskellige personer rangeres højere.",
- "dismissable_banner.public_timeline": "Dette er de seneste offentlige indlæg fra personer på fediverset, som folk på {domain} følger.",
+ "dismissable_banner.explore_links": "Disse nyhedshistorier deles mest på fødiverset i dag. Nyere nyhedshistorier lagt op af flere forskellige personer rangeres højere.",
+ "dismissable_banner.explore_statuses": "Disse indlæg på tværs af fødiverset opnår momentum i dag. Nyere indlæg med flere fremhævninger og favoritmærker rangeres højere.",
+ "dismissable_banner.explore_tags": "Disse etiketter opnår momentum på fødiverset i dag. Etiketter brugt af flere forskellige personer rangeres højere.",
+ "dismissable_banner.public_timeline": "Dette er de seneste offentlige indlæg fra personer på fødiverset, som folk på {domain} følger.",
"domain_block_modal.block": "Blokér server",
"domain_block_modal.block_account_instead": "Blokér i stedet @{name}",
"domain_block_modal.they_can_interact_with_old_posts": "Folk fra denne server kan interagere med de gamle indlæg.",
@@ -263,20 +263,20 @@
"domain_block_modal.you_will_lose_num_followers": "Man vil miste {followersCount, plural, one {{followersCountDisplay} følger} other {{followersCountDisplay} følgere}} og {followingCount, plural, one {{followingCountDisplay} person, man følger} other {{followingCountDisplay} personer, man følger}}.",
"domain_block_modal.you_will_lose_relationships": "Alle følgere og personer som følges på denne server mistes.",
"domain_block_modal.you_wont_see_posts": "Indlæg eller notifikationer fra brugere på denne server vises ikke.",
- "domain_pill.activitypub_lets_connect": "Det muliggør at komme i forbindelse og interagere med folk ikke kun på Mastodon, men også på tværs af forskellige sociale apps.",
- "domain_pill.activitypub_like_language": "ActivityPub er \"sproget\", Mastodon taler med andre sociale netværk.",
+ "domain_pill.activitypub_lets_connect": "Det muliggører at forbinde og interagere med folk, ikke kun på Mastodon, men også på tværs af forskellige sociale apps.",
+ "domain_pill.activitypub_like_language": "ActivityPub er \"sproget\", som Mastodon taler med andre sociale netværk.",
"domain_pill.server": "Server",
- "domain_pill.their_handle": "Vedkommendes handle:",
+ "domain_pill.their_handle": "Deres greb:",
"domain_pill.their_server": "Det digitale hjem, hvor alle indlæggene findes.",
"domain_pill.their_username": "Entydig identifikator på denne server. Det er muligt at finde brugere med samme brugernavn på forskellige servere.",
"domain_pill.username": "Brugernavn",
- "domain_pill.whats_in_a_handle": "Hvad er der i et handle (@brugernavn)?",
- "domain_pill.who_they_are": "Da et handle fortæller, hvem nogen er, og hvor de er, kan man interagere med folk på tværs af det sociale net af .",
- "domain_pill.who_you_are": "Da et handle fortæller, hvem man er, og hvor man er, kan man interagere med folk på tværs af det sociale net af .",
- "domain_pill.your_handle": "Dit handle:",
- "domain_pill.your_server": "Dit digitale hjem, hvor alle dine indlæg lever. Synes ikke om denne? Overfør til enhver tid servere samt tilhængere også.",
+ "domain_pill.whats_in_a_handle": "Hvad er der i et greb?",
+ "domain_pill.who_they_are": "Da et greb fortæller, hvem nogen er, og hvor de er, kan man interagere med folk på tværs af det sociale net af .",
+ "domain_pill.who_you_are": "Da et greb fortæller, hvem man er, og hvor man er, kan man interagere med folk på tværs af det sociale net af .",
+ "domain_pill.your_handle": "Dit greb:",
+ "domain_pill.your_server": "Dit digitale hjem, hvor alle dine indlæg lever. Synes ikke om den her server? Du kan til enhver tid rykke over på en anden server og beholde dine følgere.",
"domain_pill.your_username": "Din entydige identifikator på denne server. Det er muligt at finde brugere med samme brugernavn på forskellige servere.",
- "embed.instructions": "Indlejr dette indlæg på dit websted ved at kopiere nedenstående kode.",
+ "embed.instructions": "Indlejr dette indlæg på din hjemmeside ved at kopiere nedenstående kode.",
"embed.preview": "Sådan kommer det til at se ud:",
"emoji_button.activity": "Aktivitet",
"emoji_button.clear": "Ryd",
@@ -295,36 +295,36 @@
"emoji_button.travel": "Rejser og steder",
"empty_column.account_hides_collections": "Brugeren har valgt ikke at gøre denne information tilgængelig",
"empty_column.account_suspended": "Konto suspenderet",
- "empty_column.account_timeline": "Ingen indlæg hér!",
+ "empty_column.account_timeline": "Ingen indlæg her!",
"empty_column.account_unavailable": "Profil utilgængelig",
"empty_column.blocks": "Ingen brugere blokeret endnu.",
"empty_column.bookmarked_statuses": "Du har ingen bogmærkede indlæg endnu. Når du bogmærker ét, vil det dukke op hér.",
"empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at sætte tingene i gang!",
- "empty_column.direct": "Der er endnu ingen private omtaler. Når en sendes eller modtages, dukker den op hér.",
+ "empty_column.direct": "Der er endnu ingen private omtaler. Når en sendes eller modtages, dukker den op her.",
"empty_column.domain_blocks": "Ingen blokerede domæner endnu.",
"empty_column.explore_statuses": "Ingen nye tendenser lige nu. Tjek igen senere!",
- "empty_column.favourited_statuses": "Du har endnu ingen favoritindlæg. Når du favoritmarkerer ét, vil det dukke op hér.",
- "empty_column.favourites": "Ingen har endnu gjort dette indlæg til favorit. Når nogen gør dét, vil det dukke op hér.",
- "empty_column.follow_requests": "Du har endnu ingen følgeanmodninger. Når du modtager én, vil den dukke op hér.",
- "empty_column.followed_tags": "Ingen hashtags følges endnu. Når det sker, vil de fremgå hér.",
- "empty_column.hashtag": "Der er intet med dette hashtag endnu.",
- "empty_column.home": "Din hjemmetidslinje er tom! Følg nogle personer, for at udfylde den. {suggestions}",
- "empty_column.list": "Der er ikke noget på denne liste endnu. Når medlemmer af listen udgiver nye indlæg vil de fremgå hér.",
- "empty_column.mutes": "Du har endnu ikke skjult (muted) nogle brugere.",
- "empty_column.notification_requests": "Alt er klar! Der er intet her. Når der modtages nye notifikationer, fremgår de her jf. dine indstillinger.",
- "empty_column.notifications": "Du har endnu ingen notifikationer. Når andre interagerer med dig, vil det fremgå hér.",
- "empty_column.public": "Der er intet hér! Skriv noget offentligt eller følg manuelt brugere fra andre servere for at se indhold",
- "error.unexpected_crash.explanation": "Grundet en fejl i vores kode, eller en browser-kompatibilitetsfejl, kunne siden ikke vises korrekt.",
+ "empty_column.favourited_statuses": "Du har endnu ingen favoritindlæg. Når du føjer et opslag til favoritter, vil det dukke op her.",
+ "empty_column.favourites": "Ingen har endnu føjet dette indlæg til favoritter. Når nogen gør det, vil det dukke op her.",
+ "empty_column.follow_requests": "Du har endnu ingen følgeanmodninger. Når du modtager én, vil den dukke op her.",
+ "empty_column.followed_tags": "Ingen etiketter følges endnu. Når det sker, vil de fremgå her.",
+ "empty_column.hashtag": "Der er intet med denne etiket endnu.",
+ "empty_column.home": "Din hjemmetidslinje er tom! Følg nogle personer, for at fylde den op.",
+ "empty_column.list": "Der er ikke noget på denne liste endnu. Når medlemmer af listen udgiver nye indlæg vil de fremgå her.",
+ "empty_column.mutes": "Du har endnu ikke skjult nogle brugere.",
+ "empty_column.notification_requests": "Alt er klar! Der er intet her. Når der modtages nye notifikationer, fremgår de her jævnfør dine indstillinger.",
+ "empty_column.notifications": "Du har endnu ingen notifikationer. Når andre interagerer med dig, vil det fremgå her.",
+ "empty_column.public": "Der er intet her! Skriv noget offentligt eller følg manuelt brugere fra andre servere for at se indhold",
+ "error.unexpected_crash.explanation": "Grundet en fejl i vores kode, eller en netlæser-kompatibilitetsfejl, kunne siden ikke vises korrekt.",
"error.unexpected_crash.explanation_addons": "Denne side kunne ikke vises korrekt. Fejlen skyldes sandsynligvis en browsertilføjelse eller automatiske oversættelsesværktøjer.",
- "error.unexpected_crash.next_steps": "Prøv at opfriske siden. Hjælper dette ikke, kan Mastodon muligvis stadig bruges via en anden browser eller app.",
- "error.unexpected_crash.next_steps_addons": "Prøv at deaktivere dem og genindlæse siden. Hvis det ikke hjælper, kan Mastodon muligvis stadig bruges via en anden browser eller app.",
+ "error.unexpected_crash.next_steps": "Prøv at opfriske siden. Hjælper dette ikke, kan Mastodon muligvis stadig bruges via en anden netlæser eller app.",
+ "error.unexpected_crash.next_steps_addons": "Prøv at deaktivere dem og genindlæse siden. Hvis det ikke hjælper, kan Mastodon muligvis stadig bruges via en anden netlæser eller app.",
"errors.unexpected_crash.copy_stacktrace": "Kopiér stacktrace til udklipsholderen",
"errors.unexpected_crash.report_issue": "Anmeld problem",
"explore.suggested_follows": "Personer",
"explore.title": "Udforsk",
"explore.trending_links": "Nyheder",
"explore.trending_statuses": "Indlæg",
- "explore.trending_tags": "Hashtags",
+ "explore.trending_tags": "Etiketter",
"filter_modal.added.context_mismatch_explanation": "Denne filterkategori omfatter ikke konteksten, hvorunder dette indlæg er tilgået. Redigér filteret, hvis indlægget også ønskes filtreret i denne kontekst.",
"filter_modal.added.context_mismatch_title": "Kontekstmisforhold!",
"filter_modal.added.expired_explanation": "Denne filterkategori er udløbet. Ændr dens udløbsdato, for at anvende den.",
@@ -332,7 +332,7 @@
"filter_modal.added.review_and_configure": "Gå til {settings_link} for at gennemse og yderligere opsætte denne filterkategori.",
"filter_modal.added.review_and_configure_title": "Filterindstillinger",
"filter_modal.added.settings_link": "indstillingsside",
- "filter_modal.added.short_explanation": "Dette indlæg er nu føjet til flg. filterkategori: {title}.",
+ "filter_modal.added.short_explanation": "Dette indlæg er nu føjet til følgende filterkategori: {title}.",
"filter_modal.added.title": "Filter tilføjet!",
"filter_modal.select_filter.context_mismatch": "gælder ikke for denne kontekst",
"filter_modal.select_filter.expired": "udløbet",
@@ -365,7 +365,7 @@
"follow_suggestions.similar_to_recently_followed_longer": "Svarende til profiler, som for nylig er fulgt",
"follow_suggestions.view_all": "Vis alle",
"follow_suggestions.who_to_follow": "Hvem, som skal følges",
- "followed_tags": "Hashtag, som følges",
+ "followed_tags": "Etiketter, som følges",
"footer.about": "Om",
"footer.directory": "Profiloversigt",
"footer.get_app": "Hent appen",
@@ -381,7 +381,7 @@
"hashtag.column_header.tag_mode.any": "eller {additional}",
"hashtag.column_header.tag_mode.none": "uden {additional}",
"hashtag.column_settings.select.no_options_message": "Ingen forslag fundet",
- "hashtag.column_settings.select.placeholder": "Angiv hashtags…",
+ "hashtag.column_settings.select.placeholder": "Angiv etiketter…",
"hashtag.column_settings.tag_mode.all": "Alle disse",
"hashtag.column_settings.tag_mode.any": "Nogle af disse",
"hashtag.column_settings.tag_mode.none": "Ingen af disse",
@@ -389,8 +389,8 @@
"hashtag.counter_by_accounts": "{count, plural, one {{counter} deltager} other {{counter} deltagere}}",
"hashtag.counter_by_uses": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}}",
"hashtag.counter_by_uses_today": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}} i dag",
- "hashtag.follow": "Følg hashtag",
- "hashtag.unfollow": "Stop med at følge hashtag",
+ "hashtag.follow": "Følg etiket",
+ "hashtag.unfollow": "Stop med at følge etiket",
"hashtags.and_other": "…og {count, plural, one {}other {# flere}}",
"hints.profiles.followers_may_be_missing": "Der kan mangle følgere for denne profil.",
"hints.profiles.follows_may_be_missing": "Fulgte kan mangle for denne profil.",
@@ -400,15 +400,15 @@
"hints.profiles.see_more_posts": "Se flere indlæg på {domain}",
"hints.threads.replies_may_be_missing": "Der kan mangle svar fra andre servere.",
"hints.threads.see_more": "Se flere svar på {domain}",
- "home.column_settings.show_reblogs": "Vis boosts",
+ "home.column_settings.show_reblogs": "Vis fremhævelser",
"home.column_settings.show_replies": "Vis svar",
"home.hide_announcements": "Skjul bekendtgørelser",
- "home.pending_critical_update.body": "Opdater din Mastodon-server snarest muligt!",
+ "home.pending_critical_update.body": "Opdatér venligst din Mastodon-server snarest muligt!",
"home.pending_critical_update.link": "Se opdateringer",
"home.pending_critical_update.title": "Kritisk sikkerhedsopdatering tilgængelig!",
"home.show_announcements": "Vis bekendtgørelser",
"ignore_notifications_modal.disclaimer": "Mastodon kan ikke informere brugere om, at man har ignoreret deres notifikationer. Ignorerer man notifikationer, forhindrer det ikke selve beskedafsendelsen.",
- "ignore_notifications_modal.filter_instead": "Filtrer i stedet",
+ "ignore_notifications_modal.filter_instead": "Filtrér i stedet",
"ignore_notifications_modal.filter_to_act_users": "Man vil stadig kunne acceptere, afvise eller anmelde brugere",
"ignore_notifications_modal.filter_to_avoid_confusion": "Filtrering medvirker til at undgå potentiel forvirring",
"ignore_notifications_modal.filter_to_review_separately": "Man kan gennemgå filtrerede notifikationer separat",
@@ -420,43 +420,43 @@
"ignore_notifications_modal.private_mentions_title": "Ignorér notifikationer fra uopfordrede Private omtaler?",
"info_button.label": "Hjælp",
"info_button.what_is_alt_text": "
Hvad er alt-tekst?
Alt-tekst leverer billedbeskrivelser til folk med synsnedsættelser, lav båndbredde-forbindelser eller med ønske om ekstra kontekst.
Tilgængelighed og forståelse kan forbedres for alle ved at skrive klar, kortfattet og objektiv alt-tekst.
Fang vigtige elementer
Opsummér tekst i billeder
Brug almindelig sætningsstruktur
Undgå overflødig information
Fokusér på tendenser og centrale resultater i kompleks grafik (såsom diagrammer eller kort)
",
- "interaction_modal.action.favourite": "For at fortsætte, skal man vælge Gør til favorit fra sin konto.",
+ "interaction_modal.action.favourite": "For at fortsætte, skal du føje til favoritter fra din konto.",
"interaction_modal.action.follow": "For at fortsætte, skal man vælge Følg fra sin konto.",
- "interaction_modal.action.reblog": "For at fortsætte, skal man vælge Genblog fra sin konto.",
+ "interaction_modal.action.reblog": "For at fortsætte, skal man vælge Fremhæv fra sin konto.",
"interaction_modal.action.reply": "For at fortsætte, skal man besvar fra sin konto.",
"interaction_modal.action.vote": "For at fortsætte, skal man stemme fra sin konto.",
"interaction_modal.go": "Gå",
"interaction_modal.no_account_yet": "Har endnu ingen konto?",
"interaction_modal.on_another_server": "På en anden server",
"interaction_modal.on_this_server": "På denne server",
- "interaction_modal.title.favourite": "Gør {name}s indlæg til favorit",
+ "interaction_modal.title.favourite": "Føj {name}s indlæg til favoritter",
"interaction_modal.title.follow": "Følg {name}",
- "interaction_modal.title.reblog": "Boost {name}s indlæg",
+ "interaction_modal.title.reblog": "Fremhæv {name}s indlæg",
"interaction_modal.title.reply": "Besvar {name}s indlæg",
- "interaction_modal.title.vote": "Deltag i {name}s afstemning",
+ "interaction_modal.title.vote": "Stem i {name}s afstemning",
"interaction_modal.username_prompt": "F.eks. {example}",
"intervals.full.days": "{number, plural, one {# dag} other {# dage}}",
"intervals.full.hours": "{number, plural, one {# time} other {# timer}}",
"intervals.full.minutes": "{number, plural, one {# minut} other {# minutter}}",
"keyboard_shortcuts.back": "Gå tilbage",
"keyboard_shortcuts.blocked": "Åbn listen over blokerede brugere",
- "keyboard_shortcuts.boost": "Boost indlæg",
+ "keyboard_shortcuts.boost": "Fremhæv indlæg",
"keyboard_shortcuts.column": "Fokusér kolonne",
"keyboard_shortcuts.compose": "Fokusér skriveområdet",
"keyboard_shortcuts.description": "Beskrivelse",
"keyboard_shortcuts.direct": "for at åbne kolonnen private omtaler",
"keyboard_shortcuts.down": "Flyt nedad på listen",
"keyboard_shortcuts.enter": "Åbn indlæg",
- "keyboard_shortcuts.favourite": "Favoritmarkér indlæg",
+ "keyboard_shortcuts.favourite": "Føj indlæg til favoritter",
"keyboard_shortcuts.favourites": "Åbn favoritlisten",
- "keyboard_shortcuts.federated": "Åbn fælles tidslinje",
+ "keyboard_shortcuts.federated": "Åbn fødereret tidslinje",
"keyboard_shortcuts.heading": "Tastaturgenveje",
"keyboard_shortcuts.home": "Åbn hjemmetidslinje",
"keyboard_shortcuts.hotkey": "Hurtigtast",
"keyboard_shortcuts.legend": "Vis dette symbol",
"keyboard_shortcuts.local": "Åbn lokal tidslinje",
"keyboard_shortcuts.mention": "Omtal forfatter",
- "keyboard_shortcuts.muted": "Åbn listen over skjulte (mutede) brugere",
+ "keyboard_shortcuts.muted": "Åbn listen over skjulte brugere",
"keyboard_shortcuts.my_profile": "Åbn din profil",
"keyboard_shortcuts.notifications": "for at åbne notifikationskolonnen",
"keyboard_shortcuts.open_media": "Åbn medier",
@@ -465,9 +465,9 @@
"keyboard_shortcuts.reply": "Besvar indlægget",
"keyboard_shortcuts.requests": "Åbn liste over følgeanmodninger",
"keyboard_shortcuts.search": "Fokusér søgebjælke",
- "keyboard_shortcuts.spoilers": "Vis/skjul CW-felt",
+ "keyboard_shortcuts.spoilers": "Vis/skjul emnefelt",
"keyboard_shortcuts.start": "Åbn \"komme i gang\"-kolonne",
- "keyboard_shortcuts.toggle_hidden": "Vis/skjul tekst bag CW",
+ "keyboard_shortcuts.toggle_hidden": "Vis/skjul tekst bag emnefelt",
"keyboard_shortcuts.toggle_sensitivity": "Vis/skjul medier",
"keyboard_shortcuts.toot": "Påbegynd nyt indlæg",
"keyboard_shortcuts.translate": "for at oversætte et indlæg",
@@ -515,16 +515,16 @@
"moved_to_account_banner.text": "Din konto {disabledAccount} er pt. deaktiveret, da du flyttede til {movedToAccount}.",
"mute_modal.hide_from_notifications": "Skjul fra notifikationer",
"mute_modal.hide_options": "Skjul valgmuligheder",
- "mute_modal.indefinite": "Indtil jeg fjerner tavsgørelsen",
+ "mute_modal.indefinite": "Indtil jeg vælger at se dem igen",
"mute_modal.show_options": "Vis valgmuligheder",
- "mute_modal.they_can_mention_and_follow": "Vedkommende kan nævne og følge dig, men vil ikke blive vist.",
- "mute_modal.they_wont_know": "Vedkommende ser ikke den aktive tavsgørelse.",
- "mute_modal.title": "Tavsgør bruger?",
- "mute_modal.you_wont_see_mentions": "Indlæg, som nævner vedkommende, vises ikke.",
- "mute_modal.you_wont_see_posts": "Vedkommende kan stadig se dine indlæg, med vedkommendes vise ikke.",
+ "mute_modal.they_can_mention_and_follow": "De kan omtale og følge dig, men du vil ikke se dem.",
+ "mute_modal.they_wont_know": "De vil ikke vide, at de er blevet skjult.",
+ "mute_modal.title": "Skjul bruger?",
+ "mute_modal.you_wont_see_mentions": "Du vil ikke se indlæg som omtaler dem.",
+ "mute_modal.you_wont_see_posts": "De kan stadig se dine indlæg, men du vil ikke se deres.",
"navigation_bar.about": "Om",
- "navigation_bar.administration": "Håndtering",
- "navigation_bar.advanced_interface": "Åbn i avanceret webgrænseflade",
+ "navigation_bar.administration": "Administration",
+ "navigation_bar.advanced_interface": "Åbn i avanceret netgrænseflade",
"navigation_bar.blocks": "Blokerede brugere",
"navigation_bar.bookmarks": "Bogmærker",
"navigation_bar.community_timeline": "Lokal tidslinje",
@@ -534,14 +534,14 @@
"navigation_bar.domain_blocks": "Blokerede domæner",
"navigation_bar.explore": "Udforsk",
"navigation_bar.favourites": "Favoritter",
- "navigation_bar.filters": "Skjulte ord (mutede)",
+ "navigation_bar.filters": "Skjulte ord",
"navigation_bar.follow_requests": "Følgeanmodninger",
- "navigation_bar.followed_tags": "Hashtag, som følges",
+ "navigation_bar.followed_tags": "Etiketter, som følges",
"navigation_bar.follows_and_followers": "Følges og følgere",
"navigation_bar.lists": "Lister",
"navigation_bar.logout": "Log af",
"navigation_bar.moderation": "Moderering",
- "navigation_bar.mutes": "Skjulte brugere (mutede)",
+ "navigation_bar.mutes": "Skjulte brugere",
"navigation_bar.opened_in_classic_interface": "Indlæg, konti og visse andre sider åbnes som standard i den klassiske webgrænseflade.",
"navigation_bar.personal": "Personlig",
"navigation_bar.pins": "Fastgjorte indlæg",
@@ -559,10 +559,10 @@
"notification.admin.sign_up.name_and_others": "{name} og {count, plural, one {# anden} other {# andre}} tilmeldte sig",
"notification.annual_report.message": "{year} #Wrapstodon venter! Afslør årets højdepunkter og mindeværdige øjeblikke på Mastodon!",
"notification.annual_report.view": "Vis #Wrapstodon",
- "notification.favourite": "{name} favoritmarkerede dit indlæg",
- "notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# anden} other {# andre}} gjorde dit indlæg til favorit",
- "notification.favourite_pm": "{name} favoritmarkerede din private omtale",
- "notification.favourite_pm.name_and_others_with_link": "{name} og {count, plural, one {# anden} other {# andre}} favoritmarkerede dit indlæg",
+ "notification.favourite": "{name} føjede dit indlæg til favoritter",
+ "notification.favourite.name_and_others_with_link": "{name} og {count, plural, one {# anden} other {# andre}} føjede dit indlæg til favoritter",
+ "notification.favourite_pm": "{name} føjede din private omtale til favoritter",
+ "notification.favourite_pm.name_and_others_with_link": "{name} og {count, plural, one {# anden} other {# andre}} føjede dit indlæg til favoritter",
"notification.follow": "{name} begyndte at følge dig",
"notification.follow.name_and_others": "{name} og {count, plural, one {# andre} other {# andre}} begyndte at følge dig",
"notification.follow_request": "{name} har anmodet om at følge dig",
@@ -570,36 +570,36 @@
"notification.label.mention": "Omtale",
"notification.label.private_mention": "Privat omtale",
"notification.label.private_reply": "Privat svar",
- "notification.label.reply": "Besvar",
+ "notification.label.reply": "Svar",
"notification.mention": "Omtale",
- "notification.mentioned_you": "{name} nævnte dig",
+ "notification.mentioned_you": "{name} omtalte dig",
"notification.moderation-warning.learn_more": "Læs mere",
- "notification.moderation_warning": "Du er tildelt en moderationsadvarsel",
+ "notification.moderation_warning": "Du har fået en moderationsadvarsel",
"notification.moderation_warning.action_delete_statuses": "Nogle af dine indlæg er blevet fjernet.",
"notification.moderation_warning.action_disable": "Din konto er blevet deaktiveret.",
- "notification.moderation_warning.action_mark_statuses_as_sensitive": "Nogle af dine indlæg er blevet markeret som sensitive.",
- "notification.moderation_warning.action_none": "Din konto er tildelt en moderationsadvarsel.",
- "notification.moderation_warning.action_sensitive": "Dine indlæg markeres fra nu af som sensitive.",
+ "notification.moderation_warning.action_mark_statuses_as_sensitive": "Nogle af dine indlæg er blevet markeret som følsomme.",
+ "notification.moderation_warning.action_none": "Din konto har fået en moderationsadvarsel.",
+ "notification.moderation_warning.action_sensitive": "Dine indlæg markeres fra nu af som følsomme.",
"notification.moderation_warning.action_silence": "Din konto er blevet begrænset.",
"notification.moderation_warning.action_suspend": "Din konto er suspenderet.",
"notification.own_poll": "Din afstemning er afsluttet",
"notification.poll": "En afstemning, hvori du har stemt, er slut",
- "notification.reblog": "{name} boostede dit indlæg",
- "notification.reblog.name_and_others_with_link": "{name} og {count, plural, one {# anden} other {# andre}} boostede dit indlæg",
+ "notification.reblog": "{name} fremhævede dit indlæg",
+ "notification.reblog.name_and_others_with_link": "{name} og {count, plural, one {# anden} other {# andre}} fremhævede dit indlæg",
"notification.relationships_severance_event": "Mistede forbindelser med {name}",
- "notification.relationships_severance_event.account_suspension": "En admin fra {from} har suspenderet {target}, hvofor opdateringer herfra eller interaktion hermed ikke længer er mulig.",
- "notification.relationships_severance_event.domain_block": "En admin fra {from} har blokeret {target}, herunder {followersCount} tilhængere og {followingCount, plural, one {# konto, der} other {# konti, som}} følges.",
+ "notification.relationships_severance_event.account_suspension": "En admin fra {from} har suspenderet {target}, så du kan ikke længere få opdateringer fra eller interagere med dem.",
+ "notification.relationships_severance_event.domain_block": "En admin fra {from} har blokeret {target}, herunder {followersCount} følgere og {followingCount, plural, one {# konto, der} other {# konti, som}} som du følger.",
"notification.relationships_severance_event.learn_more": "Læs mere",
- "notification.relationships_severance_event.user_domain_block": "{target} er blevet blokeret, og {followersCount} tilhængere samt {followingCount, plural, one {# konto, der} other {# konti, som}} følges, er hermed fjernet.",
- "notification.status": "{name} har netop postet",
+ "notification.relationships_severance_event.user_domain_block": "Du har blokeret {target}. {followersCount} af dine følgere samt {followingCount, plural, one {# konto, der} other {# konti, som}} du følger, er hermed fjernet.",
+ "notification.status": "{name} har netop slået noget op",
"notification.update": "{name} redigerede et indlæg",
"notification_requests.accept": "Acceptér",
"notification_requests.accept_multiple": "{count, plural, one {Acceptér # anmodning…} other {Acceptér # anmodninger…}}",
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Acceptér anmodning} other {Acceptér anmodninger}}",
- "notification_requests.confirm_accept_multiple.message": "{count, plural, one {En notifikationsanmodning} other {# notifikationsanmodninger}} er ved at blive accepteret. Fortsæt, sikker?",
+ "notification_requests.confirm_accept_multiple.message": "{count, plural, one {En notifikationsanmodning} other {# notifikationsanmodninger}} er ved at blive accepteret. Er du sikker på, at du vil fortsætte?",
"notification_requests.confirm_accept_multiple.title": "Acceptér notifikationsanmodninger?",
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Afvis anmodning} other {Afvis anmodninger}}",
- "notification_requests.confirm_dismiss_multiple.message": "{count, plural, one {En notifikationsanmodning} other {# notifikationsanmodninger}} er ved at blive afvist, hvorfor man ikke nemt vil kunne tilgå {count, plural, one {den} other {dem}} igen. Fortsæt, sikker?",
+ "notification_requests.confirm_dismiss_multiple.message": "{count, plural, one {En notifikationsanmodning} other {# notifikationsanmodninger}} er ved at blive afvist, hvorfor man ikke nemt vil kunne tilgå {count, plural, one {den} other {dem}} igen. Er du sikker på, at du vil fortsætte?",
"notification_requests.confirm_dismiss_multiple.title": "Afvis notifikationsanmodninger?",
"notification_requests.dismiss": "Afvis",
"notification_requests.dismiss_multiple": "{count, plural, one {Afvis # anmodning…} other {Afvis # anmodninger…}}",
@@ -615,7 +615,7 @@
"notifications.clear": "Ryd notifikationer",
"notifications.clear_confirmation": "Er du sikker på, at du vil rydde alle dine notifikationer permanent?",
"notifications.clear_title": "Ryd notifikationer?",
- "notifications.column_settings.admin.report": "Nye anmeldelser:",
+ "notifications.column_settings.admin.report": "Nye rapporteringer:",
"notifications.column_settings.admin.sign_up": "Nye tilmeldinger:",
"notifications.column_settings.alert": "Computernotifikationer",
"notifications.column_settings.favourite": "Favoritter:",
@@ -627,7 +627,7 @@
"notifications.column_settings.mention": "Omtaler:",
"notifications.column_settings.poll": "Afstemningsresultater:",
"notifications.column_settings.push": "Push-notifikationer",
- "notifications.column_settings.reblog": "Boosts:",
+ "notifications.column_settings.reblog": "Fremhævelser:",
"notifications.column_settings.show": "Vis i kolonne",
"notifications.column_settings.sound": "Afspil lyd",
"notifications.column_settings.status": "Nye indlæg:",
@@ -635,7 +635,7 @@
"notifications.column_settings.unread_notifications.highlight": "Fremhæv ulæste notifikationer",
"notifications.column_settings.update": "Redigeringer:",
"notifications.filter.all": "Alle",
- "notifications.filter.boosts": "Boosts",
+ "notifications.filter.boosts": "Fremhævelser",
"notifications.filter.favourites": "Favoritter",
"notifications.filter.follows": "Følger",
"notifications.filter.mentions": "Omtaler",
@@ -644,8 +644,8 @@
"notifications.grant_permission": "Tildel tilladelse.",
"notifications.group": "{count} notifikationer",
"notifications.mark_as_read": "Markér alle notifikationer som læst",
- "notifications.permission_denied": "Computernotifikationer er utilgængelige grundet tidligere afvist browsertilladelsesanmodning",
- "notifications.permission_denied_alert": "Computernotifikationer kan ikke aktiveres, da browsertilladelse tidligere blev nægtet",
+ "notifications.permission_denied": "Computernotifikationer er utilgængelige grundet tidligere afvist netlæser-tilladelsesanmodning",
+ "notifications.permission_denied_alert": "Computernotifikationer kan ikke aktiveres, da netlæser-tilladelse tidligere blev nægtet",
"notifications.permission_required": "Computernotifikationer er utilgængelige, da den krævede tilladelse ikke er tildelt.",
"notifications.policy.accept": "Acceptér",
"notifications.policy.accept_hint": "Vis notifikationer",
@@ -674,14 +674,14 @@
"onboarding.follows.title": "Følg folk for at komme i gang",
"onboarding.profile.discoverable": "Gør min profil synlig",
"onboarding.profile.discoverable_hint": "Når man vælger at være synlig på Mastodon, kan ens indlæg fremgå i søgeresultater og tendenser, og profilen kan blive foreslået til andre med tilsvarende interesse.",
- "onboarding.profile.display_name": "Visningsnavn",
- "onboarding.profile.display_name_hint": "Fulde navn eller dit sjove navn…",
+ "onboarding.profile.display_name": "Vist navn",
+ "onboarding.profile.display_name_hint": "Dit fulde navn eller dit sjove navn…",
"onboarding.profile.note": "Bio",
- "onboarding.profile.note_hint": "Man kan @omtale andre personer eller #hashtags…",
+ "onboarding.profile.note_hint": "Man kan @omtale andre personer eller #etiketter…",
"onboarding.profile.save_and_continue": "Gem og fortsæt",
"onboarding.profile.title": "Profilopsætning",
"onboarding.profile.upload_avatar": "Upload profilbillede",
- "onboarding.profile.upload_header": "Upload profiloverskrift",
+ "onboarding.profile.upload_header": "Upload profilbanner",
"password_confirmation.exceeds_maxlength": "Adgangskodebekræftelse overstiger maks. adgangskodelængde",
"password_confirmation.mismatching": "Adgangskodebekræftelse matcher ikke",
"picture_in_picture.restore": "Indsæt det igen",
@@ -696,21 +696,21 @@
"poll_button.add_poll": "Tilføj en afstemning",
"poll_button.remove_poll": "Fjern afstemning",
"privacy.change": "Tilpas indlægsfortrolighed",
- "privacy.direct.long": "Alle nævnt i indlægget",
+ "privacy.direct.long": "Alle omtalt i indlægget",
"privacy.direct.short": "Bestemte personer",
"privacy.private.long": "Kun dine følgere",
"privacy.private.short": "Følgere",
"privacy.public.long": "Alle på og udenfor Mastodon",
"privacy.public.short": "Offentlig",
- "privacy.unlisted.additional": "Dette er præcis som offentlig adfærd, dog vises indlægget ikke i live feeds/hashtags, udforsk eller Mastodon-søgning, selv hvis valget gælder hele kontoen.",
+ "privacy.unlisted.additional": "Dette er præcis som offentlig adfærd, dog vises indlægget ikke i realtids-strømme/etiketter, udforsk eller Mastodon-søgning, selv hvis valget gælder hele kontoen.",
"privacy.unlisted.long": "Færre algoritmiske fanfarer",
- "privacy.unlisted.short": "Tavsgøre offentligt",
+ "privacy.unlisted.short": "Stille offentligt",
"privacy_policy.last_updated": "Senest opdateret {date}",
"privacy_policy.title": "Privatlivspolitik",
"recommended": "Anbefalet",
"refresh": "Genindlæs",
"regeneration_indicator.please_stand_by": "Vent venligst.",
- "regeneration_indicator.preparing_your_home_feed": "Forbereder hjemme-feed'et…",
+ "regeneration_indicator.preparing_your_home_feed": "Forbereder hjemmestrømmen…",
"relative_time.days": "{number}d",
"relative_time.full.days": "{number, plural, one {# dag} other {# dage}} siden",
"relative_time.full.hours": "{number, plural, one {# time} other {# timer}} siden",
@@ -739,12 +739,12 @@
"report.comment.title": "Er der andet, som vi bør vide?",
"report.forward": "Videresend til {target}",
"report.forward_hint": "Kontoen er fra en anden server. Send også en anonymiseret kopi af anmeldelsen dertil?",
- "report.mute": "Skjul (mute)",
- "report.mute_explanation": "Du vil ikke se vedkommendes indlæg. Vedkommende kan stadig se dine indlæg og følge dig. Vedkommende vil ikke kunne se, at de er blevet skjult.",
+ "report.mute": "Skjul",
+ "report.mute_explanation": "Du vil ikke se deres indlæg. De kan stadig se dine indlæg og følge dig. De vil ikke kunne se, at de er blevet skjult.",
"report.next": "Næste",
"report.placeholder": "Yderligere kommentarer",
"report.reasons.dislike": "Jeg bryder mig ikke om det",
- "report.reasons.dislike_description": "Det er ikke noget, man ønsker at se",
+ "report.reasons.dislike_description": "Det er ikke noget, du ønsker at se",
"report.reasons.legal": "Det er ulovligt",
"report.reasons.legal_description": "Du mener, at det er i strid med lovgivningen i dit eller serverens land",
"report.reasons.other": "Det er noget andet",
@@ -764,7 +764,7 @@
"report.thanks.title": "Ønsker ikke at se dette?",
"report.thanks.title_actionable": "Tak for anmeldelsen, der vil blive set nærmere på dette.",
"report.unfollow": "Følg ikke længere @{name}",
- "report.unfollow_explanation": "Du følger denne konto. For ikke længere at se vedkommendes indlæg i dit hjemmefeed, kan du stoppe med at følge dem.",
+ "report.unfollow_explanation": "Du følger denne konto. For ikke længere at se vedkommendes indlæg i din hjemmestrøm, kan du stoppe med at følge dem.",
"report_notification.attached_statuses": "{count, plural, one {{count} post} other {{count} poster}} vedhæftet",
"report_notification.categories.legal": "Juridisk",
"report_notification.categories.legal_sentence": "ikke-tilladt indhold",
@@ -779,7 +779,7 @@
"search.placeholder": "Søg",
"search.quick_action.account_search": "Profiler matchende {x}",
"search.quick_action.go_to_account": "Gå til profilen {x}",
- "search.quick_action.go_to_hashtag": "Gå til hashtagget {x}",
+ "search.quick_action.go_to_hashtag": "Gå til etiketten {x}",
"search.quick_action.open_url": "Åbn URL i Mastodon",
"search.quick_action.status_search": "Indlæg matchende {x}",
"search.search_or_paste": "Søg efter eller angiv URL",
@@ -793,19 +793,19 @@
"search_popout.user": "bruger",
"search_results.accounts": "Profiler",
"search_results.all": "Alle",
- "search_results.hashtags": "Hashtags",
+ "search_results.hashtags": "Etiketter",
"search_results.no_results": "Ingen resultater.",
- "search_results.no_search_yet": "Prøv at søge efter indlæg, profiler eller hashtags.",
+ "search_results.no_search_yet": "Prøv at søge efter indlæg, profiler eller etiketter.",
"search_results.see_all": "Vis alle",
"search_results.statuses": "Indlæg",
"search_results.title": "Søg efter \"{q}\"",
"server_banner.about_active_users": "Folk, som brugte denne server de seneste 30 dage (månedlige aktive brugere)",
"server_banner.active_users": "aktive brugere",
"server_banner.administered_by": "Håndteres af:",
- "server_banner.is_one_of_many": "{domain} er en af de mange uafhængige Mastodon-servere, man kan bruge for at deltage i fediverset.",
+ "server_banner.is_one_of_many": "{domain} er en af de mange uafhængige Mastodon-servere, man kan bruge for at deltage i fødiverset.",
"server_banner.server_stats": "Serverstatstik:",
"sign_in_banner.create_account": "Opret konto",
- "sign_in_banner.follow_anyone": "Følg alle på tværs af fediverset og se alt i kronologisk rækkefølge. Ingen algoritmer, annoncer eller clickbait i syne.",
+ "sign_in_banner.follow_anyone": "Følg alle på tværs af fødiverset og se alt i kronologisk rækkefølge. Ingen algoritmer, annoncer eller clickbait i syne.",
"sign_in_banner.mastodon_is": "Mastodon er den bedste måde at holde sig ajour med, hvad der sker.",
"sign_in_banner.sign_in": "Log ind",
"sign_in_banner.sso_redirect": "Log ind eller Tilmeld",
@@ -814,7 +814,7 @@
"status.admin_status": "Åbn dette indlæg i modereringsbrugerfladen",
"status.block": "Blokér @{name}",
"status.bookmark": "Bogmærk",
- "status.cancel_reblog_private": "Fjern boost",
+ "status.cancel_reblog_private": "Fjern fremhævelse",
"status.cannot_reblog": "Dette indlæg kan ikke fremhæves",
"status.continued_thread": "Fortsat tråd",
"status.copy": "Kopiér link til indlæg",
@@ -837,24 +837,24 @@
"status.media_hidden": "Medie skjult",
"status.mention": "Nævn @{name}",
"status.more": "Mere",
- "status.mute": "Skjul @{name} (mute)",
- "status.mute_conversation": "Skjul samtale (mute)",
+ "status.mute": "Skjul @{name}",
+ "status.mute_conversation": "Skjul samtale",
"status.open": "Udvid dette indlæg",
"status.pin": "Fastgør til profil",
"status.pinned": "Fastgjort indlæg",
"status.read_more": "Læs mere",
"status.reblog": "Fremhæv",
- "status.reblog_private": "Boost med oprindelig synlighed",
+ "status.reblog_private": "Fremhæv med oprindelig synlighed",
"status.reblogged_by": "{name} fremhævede",
- "status.reblogs": "{count, plural, one {# boost} other {# boosts}}",
+ "status.reblogs": "{count, plural, one {# fremhævelse} other {# fremhævelser}}",
"status.reblogs.empty": "Ingen har endnu fremhævet dette indlæg. Når nogen gør, vil det fremgå hér.",
"status.redraft": "Slet og omformulér",
"status.remove_bookmark": "Fjern bogmærke",
"status.remove_favourite": "Fjern fra favoritter",
"status.replied_in_thread": "Svaret i tråd",
- "status.replied_to": "Besvarede {name}",
+ "status.replied_to": "Svarede {name}",
"status.reply": "Besvar",
- "status.replyAll": "Besvar alle",
+ "status.replyAll": "Svar alle",
"status.report": "Anmeld @{name}",
"status.sensitive_warning": "Følsomt indhold",
"status.share": "Del",
@@ -903,8 +903,8 @@
"video.expand": "Udvid video",
"video.fullscreen": "Fuldskærm",
"video.hide": "Skjul video",
- "video.mute": "Sluk lyden",
- "video.pause": "Pausér",
+ "video.mute": "Sluk for lyden",
+ "video.pause": "Sæt på pause",
"video.play": "Afspil",
"video.unmute": "Tænd for lyden"
}
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index e45f973614..45f23dbe84 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -218,6 +218,10 @@
"confirmations.logout.confirm": "Αποσύνδεση",
"confirmations.logout.message": "Σίγουρα θέλεις να αποσυνδεθείς;",
"confirmations.logout.title": "Αποσύνδεση;",
+ "confirmations.missing_alt_text.confirm": "Προσθήκη εναλ κειμένου",
+ "confirmations.missing_alt_text.message": "Η ανάρτησή σου περιέχει πολυμέσα χωρίς εναλλακτικό κείμενο. Η προσθήκη περιγραφών βοηθά να γίνει το περιεχόμενό σου προσβάσιμο σε περισσότερους ανθρώπους.",
+ "confirmations.missing_alt_text.secondary": "Δημοσίευση όπως και να ΄χει",
+ "confirmations.missing_alt_text.title": "Προσθήκη alt κειμένου;",
"confirmations.mute.confirm": "Αποσιώπηση",
"confirmations.redraft.confirm": "Διαγραφή & ξαναγράψιμο",
"confirmations.redraft.message": "Σίγουρα θέλεις να σβήσεις αυτή την ανάρτηση και να την ξαναγράψεις; Οι προτιμήσεις και προωθήσεις θα χαθούν και οι απαντήσεις στην αρχική ανάρτηση θα μείνουν ορφανές.",
diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json
index 70a194e1fb..1974d1e62b 100644
--- a/app/javascript/mastodon/locales/en-GB.json
+++ b/app/javascript/mastodon/locales/en-GB.json
@@ -218,6 +218,10 @@
"confirmations.logout.confirm": "Log out",
"confirmations.logout.message": "Are you sure you want to log out?",
"confirmations.logout.title": "Log out?",
+ "confirmations.missing_alt_text.confirm": "Add alt text",
+ "confirmations.missing_alt_text.message": "Your post contains media without alt text. Adding descriptions helps make your content accessible to more people.",
+ "confirmations.missing_alt_text.secondary": "Post anyway",
+ "confirmations.missing_alt_text.title": "Add alt text?",
"confirmations.mute.confirm": "Mute",
"confirmations.redraft.confirm": "Delete & redraft",
"confirmations.redraft.message": "Are you sure you want to delete this post and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json
index 7da4102920..9ec4c4e8a6 100644
--- a/app/javascript/mastodon/locales/eo.json
+++ b/app/javascript/mastodon/locales/eo.json
@@ -45,7 +45,7 @@
"account.languages": "Ŝanĝi la abonitajn lingvojn",
"account.link_verified_on": "Propreco de tiu ligilo estis konfirmita je {date}",
"account.locked_info": "Tiu konto estas privatigita. La posedanto mane akceptas tiun, kiu povas sekvi rin.",
- "account.media": "Plurmedio",
+ "account.media": "Aŭdovidaĵoj",
"account.mention": "Mencii @{name}",
"account.moved_to": "{name} indikis, ke ria nova konto estas nun:",
"account.mute": "Silentigi @{name}",
@@ -172,7 +172,7 @@
"column_search.cancel": "Nuligi",
"column_subheading.settings": "Agordoj",
"community.column_settings.local_only": "Nur loka",
- "community.column_settings.media_only": "Nur plurmedio",
+ "community.column_settings.media_only": "Nur vidaŭdaĵoj",
"community.column_settings.remote_only": "Nur fora",
"compose.language.change": "Ŝanĝi lingvon",
"compose.language.search": "Serĉi lingvojn...",
@@ -208,7 +208,7 @@
"confirmations.delete_list.message": "Ĉu vi certas, ke vi volas porĉiame forigi ĉi tiun liston?",
"confirmations.delete_list.title": "Ĉu forigi liston?",
"confirmations.discard_edit_media.confirm": "Forĵeti",
- "confirmations.discard_edit_media.message": "Vi havas nekonservitajn ŝanĝojn de la priskribo aŭ la antaŭmontro de la plurmedio, ĉu vi forĵetu ilin malgraŭe?",
+ "confirmations.discard_edit_media.message": "Vi havas nekonservitajn ŝanĝojn de la priskribo aŭ la antaŭvidigo de la vidaŭdaĵo, ĉu vi forĵetu ilin malgraŭe?",
"confirmations.edit.confirm": "Redakti",
"confirmations.edit.message": "Redakti nun anstataŭigos la skribatan afiŝon. Ĉu vi certas, ke vi volas daŭrigi?",
"confirmations.edit.title": "Ĉu superskribi afiŝon?",
@@ -459,7 +459,7 @@
"keyboard_shortcuts.muted": "Malfermu la liston de silentigitaj uzantoj",
"keyboard_shortcuts.my_profile": "Malfermu vian profilon",
"keyboard_shortcuts.notifications": "Malfermu la sciigajn kolumnon",
- "keyboard_shortcuts.open_media": "Malfermu plurmedion",
+ "keyboard_shortcuts.open_media": "Malfermi vidaŭdaĵon",
"keyboard_shortcuts.pinned": "Malfermu alpinglitajn afiŝojn-liston",
"keyboard_shortcuts.profile": "Malfermu la profilon de aŭtoroprofilo",
"keyboard_shortcuts.reply": "Respondu al afiŝo",
@@ -468,7 +468,7 @@
"keyboard_shortcuts.spoilers": "Montri/kaŝi CW-kampon",
"keyboard_shortcuts.start": "Malfermu \"por komenci\" kolumnon",
"keyboard_shortcuts.toggle_hidden": "Montri/kaŝi tekston malantaŭ CW",
- "keyboard_shortcuts.toggle_sensitivity": "Montri/kaŝi plurmedion",
+ "keyboard_shortcuts.toggle_sensitivity": "Montri/kaŝi vidaŭdaĵojn",
"keyboard_shortcuts.toot": "Komencu novan afiŝon",
"keyboard_shortcuts.translate": "Traduki afiŝon",
"keyboard_shortcuts.unfocus": "Senfokusigi verki tekstareon/serĉon",
@@ -540,7 +540,7 @@
"navigation_bar.follows_and_followers": "Sekvatoj kaj sekvantoj",
"navigation_bar.lists": "Listoj",
"navigation_bar.logout": "Elsaluti",
- "navigation_bar.moderation": "Modereco",
+ "navigation_bar.moderation": "Reguligo",
"navigation_bar.mutes": "Silentigitaj uzantoj",
"navigation_bar.opened_in_classic_interface": "Afiŝoj, kontoj, kaj aliaj specifaj paĝoj kiuj estas malfermititaj defaulta en la klasika reta interfaco.",
"navigation_bar.personal": "Persone",
@@ -574,11 +574,11 @@
"notification.mention": "Mencii",
"notification.mentioned_you": "{name} menciis vin",
"notification.moderation-warning.learn_more": "Lerni pli",
- "notification.moderation_warning": "Vi ricevis moderigan averton",
+ "notification.moderation_warning": "Vi ricevis reguligan averton",
"notification.moderation_warning.action_delete_statuses": "Kelkaj el viaj afiŝoj estis forigitaj.",
"notification.moderation_warning.action_disable": "Via konto estas malŝaltita.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Kelkaj el viaj afiŝoj estis markitaj kiel sentemaj.",
- "notification.moderation_warning.action_none": "Via konto ricevis moderigan averton.",
+ "notification.moderation_warning.action_none": "Via konto ricevis reguligan averton.",
"notification.moderation_warning.action_sensitive": "Viaj afiŝoj estos markitaj kiel sentemaj ekde nun.",
"notification.moderation_warning.action_silence": "Via konto estis limigita.",
"notification.moderation_warning.action_suspend": "Via konto estas malakceptita.",
@@ -605,8 +605,8 @@
"notification_requests.dismiss_multiple": "{count, plural, one {Malakcepti # peton…} other {# Malakcepti # petojn…}}",
"notification_requests.edit_selection": "Redakti",
"notification_requests.exit_selection": "Farita",
- "notification_requests.explainer_for_limited_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto estis limigita de moderanto.",
- "notification_requests.explainer_for_limited_remote_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto aŭ ĝia servilo estis limigitaj de moderanto.",
+ "notification_requests.explainer_for_limited_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto estis limigita de reguligisto.",
+ "notification_requests.explainer_for_limited_remote_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto aŭ ĝia servilo estis limigitaj de reguligisto.",
"notification_requests.maximize": "Maksimumigi",
"notification_requests.minimize_banner": "Minimumigi filtritajn sciigojn-rubandon",
"notification_requests.notifications_from": "Sciigoj de {name}",
@@ -653,8 +653,8 @@
"notifications.policy.drop_hint": "Sendi al la malpleno, por neniam esti vidita denove",
"notifications.policy.filter": "Filtri",
"notifications.policy.filter_hint": "Sendi al filtritaj sciigoj-enirkesto",
- "notifications.policy.filter_limited_accounts_hint": "Limigita de servilaj moderigantoj",
- "notifications.policy.filter_limited_accounts_title": "Moderigitaj kontoj",
+ "notifications.policy.filter_limited_accounts_hint": "Limigita de servilaj reguligistoj",
+ "notifications.policy.filter_limited_accounts_title": "Reguligitaj kontoj",
"notifications.policy.filter_new_accounts.hint": "Kreite en la {days, plural, one {lasta tago} other {# lastaj tagoj}}",
"notifications.policy.filter_new_accounts_title": "Novaj kontoj",
"notifications.policy.filter_not_followers_hint": "Inkluzive de homoj, kiuj sekvis vin malpli ol {days, plural, one {unu tago} other {# tagoj}}",
@@ -781,7 +781,7 @@
"search.quick_action.go_to_account": "Iri al profilo {x}",
"search.quick_action.go_to_hashtag": "Iri al kradvorto {x}",
"search.quick_action.open_url": "Malfermi URL en Mastodono",
- "search.quick_action.status_search": "Afiŝoj kiuj kongruas kun {x}",
+ "search.quick_action.status_search": "Afiŝoj kiuj konformas kun {x}",
"search.search_or_paste": "Serĉu aŭ algluu URL-on",
"search_popout.full_text_search_disabled_message": "Ne havebla sur {domain}.",
"search_popout.full_text_search_logged_out_message": "Disponebla nur kiam ensalutinte.",
@@ -796,7 +796,7 @@
"search_results.hashtags": "Kradvortoj",
"search_results.no_results": "Ne estas rezultoj.",
"search_results.no_search_yet": "Provu serĉi afiŝojn, profilojn aŭ kradvortojn.",
- "search_results.see_all": "Vidu ĉiujn",
+ "search_results.see_all": "Vidi ĉiujn",
"search_results.statuses": "Afiŝoj",
"search_results.title": "Serĉu \"{q}\"",
"server_banner.about_active_users": "Personoj uzantaj ĉi tiun servilon dum la lastaj 30 tagoj (Aktivaj Uzantoj Monate)",
@@ -809,9 +809,9 @@
"sign_in_banner.mastodon_is": "Mastodon estas la plej bona maniero resti ĝisdata pri aktualaĵoj.",
"sign_in_banner.sign_in": "Ensaluti",
"sign_in_banner.sso_redirect": "Ensalutu aŭ Registriĝi",
- "status.admin_account": "Malfermi fasadon de moderigado por @{name}",
- "status.admin_domain": "Malfermu moderigan interfacon por {domain}",
- "status.admin_status": "Malfermi ĉi tiun afiŝon en la kontrola interfaco",
+ "status.admin_account": "Malfermi fasadon de la reguligado por @{name}",
+ "status.admin_domain": "Malfermi fasadon de la reguligado por {domain}",
+ "status.admin_status": "Malfermi ĉi tiun afiŝon en la fasado de la reguligado",
"status.block": "Bloki @{name}",
"status.bookmark": "Aldoni al la legosignoj",
"status.cancel_reblog_private": "Ne plu diskonigi",
@@ -834,7 +834,7 @@
"status.load_more": "Ŝargi pli",
"status.media.open": "Alklaki por malfermi",
"status.media.show": "Alklaki por montri",
- "status.media_hidden": "Plurmedio kaŝita",
+ "status.media_hidden": "Vidaŭdaĵo kaŝita",
"status.mention": "Mencii @{name}",
"status.more": "Pli",
"status.mute": "Silentigi @{name}",
diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json
index 7cdf1f2d6b..d39b778f27 100644
--- a/app/javascript/mastodon/locales/es-AR.json
+++ b/app/javascript/mastodon/locales/es-AR.json
@@ -218,10 +218,10 @@
"confirmations.logout.confirm": "Cerrar sesión",
"confirmations.logout.message": "¿Estás seguro que querés cerrar la sesión?",
"confirmations.logout.title": "¿Cerrar sesión?",
- "confirmations.missing_alt_text.confirm": "Añadir texto alternativo",
- "confirmations.missing_alt_text.message": "Tu publicación contiene medios sin texto alternativo. Añadir descripciones ayuda a que tu contenido sea accesible para más personas.",
- "confirmations.missing_alt_text.secondary": "Publicar de todos modos",
- "confirmations.missing_alt_text.title": "¿Deseas añadir texto alternativo?",
+ "confirmations.missing_alt_text.confirm": "Agregar texto alternativo",
+ "confirmations.missing_alt_text.message": "Tu mensaje contiene medios sin texto alternativo. Agregar descripciones ayuda a que tu contenido sea accesible para más personas.",
+ "confirmations.missing_alt_text.secondary": "Enviar de todos modos",
+ "confirmations.missing_alt_text.title": "¿Agregar texto alternativo?",
"confirmations.mute.confirm": "Silenciar",
"confirmations.redraft.confirm": "Eliminar mensaje original y editarlo",
"confirmations.redraft.message": "¿Estás seguro que querés eliminar este mensaje y volver a editarlo? Se perderán las veces marcadas como favorito y sus adhesiones, y las respuestas al mensaje original quedarán huérfanas.",
diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json
index 1341bb17f3..b26815f2a4 100644
--- a/app/javascript/mastodon/locales/eu.json
+++ b/app/javascript/mastodon/locales/eu.json
@@ -208,6 +208,9 @@
"confirmations.logout.confirm": "Amaitu saioa",
"confirmations.logout.message": "Ziur saioa amaitu nahi duzula?",
"confirmations.logout.title": "Itxi saioa?",
+ "confirmations.missing_alt_text.confirm": "Gehitu testu alternatiboa",
+ "confirmations.missing_alt_text.secondary": "Bidali edonola ere",
+ "confirmations.missing_alt_text.title": "Testu alternatiboa gehitu?",
"confirmations.mute.confirm": "Mututu",
"confirmations.redraft.confirm": "Ezabatu eta berridatzi",
"confirmations.redraft.message": "Ziur argitalpen hau ezabatu eta zirriborroa berriro egitea nahi duzula? Gogokoak eta bultzadak galduko dira, eta jatorrizko argitalpenaren erantzunak zurtz geratuko dira.",
diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json
index 2fddca9f16..5f6445985c 100644
--- a/app/javascript/mastodon/locales/fr-CA.json
+++ b/app/javascript/mastodon/locales/fr-CA.json
@@ -218,6 +218,10 @@
"confirmations.logout.confirm": "Se déconnecter",
"confirmations.logout.message": "Voulez-vous vraiment vous déconnecter?",
"confirmations.logout.title": "Se déconnecter ?",
+ "confirmations.missing_alt_text.confirm": "Ajouter un texte alternatif",
+ "confirmations.missing_alt_text.message": "Votre post contient des médias sans texte alternatif. Ajouter des descriptions rend votre contenu accessible à un plus grand nombre de personnes.",
+ "confirmations.missing_alt_text.secondary": "Publier quand-même",
+ "confirmations.missing_alt_text.title": "Ajouter un texte alternatif?",
"confirmations.mute.confirm": "Masquer",
"confirmations.redraft.confirm": "Supprimer et réécrire",
"confirmations.redraft.message": "Êtes-vous sûr·e de vouloir effacer cette publication pour la réécrire? Ses ses mises en favori et boosts seront perdus et ses réponses seront orphelines.",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index 1660132fed..aeca0aaeab 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -218,6 +218,10 @@
"confirmations.logout.confirm": "Se déconnecter",
"confirmations.logout.message": "Voulez-vous vraiment vous déconnecter ?",
"confirmations.logout.title": "Se déconnecter ?",
+ "confirmations.missing_alt_text.confirm": "Ajouter un texte alternatif",
+ "confirmations.missing_alt_text.message": "Votre post contient des médias sans texte alternatif. Ajouter des descriptions rend votre contenu accessible à un plus grand nombre de personnes.",
+ "confirmations.missing_alt_text.secondary": "Publier quand-même",
+ "confirmations.missing_alt_text.title": "Ajouter un texte alternatif?",
"confirmations.mute.confirm": "Masquer",
"confirmations.redraft.confirm": "Supprimer et ré-écrire",
"confirmations.redraft.message": "Voulez-vous vraiment supprimer le message pour le réécrire ? Ses partages ainsi que ses mises en favori seront perdues, et ses réponses seront orphelines.",
diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json
index 2e899b2804..54bc7fd380 100644
--- a/app/javascript/mastodon/locales/ga.json
+++ b/app/javascript/mastodon/locales/ga.json
@@ -86,6 +86,13 @@
"alert.unexpected.message": "Tharla earráid gan choinne.",
"alert.unexpected.title": "Hiúps!",
"alt_text_badge.title": "Téacs alt",
+ "alt_text_modal.add_alt_text": "Cuir téacs alt leis",
+ "alt_text_modal.add_text_from_image": "Cuir téacs ón íomhá leis",
+ "alt_text_modal.cancel": "Cealaigh",
+ "alt_text_modal.change_thumbnail": "Athraigh mionsamhail",
+ "alt_text_modal.describe_for_people_with_hearing_impairments": "Déan cur síos air seo do dhaoine le lagú éisteachta…",
+ "alt_text_modal.describe_for_people_with_visual_impairments": "Déan cur síos air seo do dhaoine a bhfuil lagú amhairc orthu…",
+ "alt_text_modal.done": "Déanta",
"announcement.announcement": "Fógra",
"annual_report.summary.archetype.booster": "An sealgair fionnuar",
"annual_report.summary.archetype.lurker": "An lurker",
@@ -211,6 +218,10 @@
"confirmations.logout.confirm": "Logáil amach",
"confirmations.logout.message": "An bhfuil tú cinnte gur mhaith leat logáil amach?",
"confirmations.logout.title": "Logáil Amach?",
+ "confirmations.missing_alt_text.confirm": "Cuir téacs alt leis",
+ "confirmations.missing_alt_text.message": "Tá meáin gan alt téacs i do phostáil. Má chuirtear tuairiscí leis, cabhraíonn sé seo leat d’inneachar a rochtain do níos mó daoine.",
+ "confirmations.missing_alt_text.secondary": "Post ar aon nós",
+ "confirmations.missing_alt_text.title": "Cuir téacs alt leis?",
"confirmations.mute.confirm": "Balbhaigh",
"confirmations.redraft.confirm": "Scrios ⁊ athdhréachtaigh",
"confirmations.redraft.message": "An bhfuil tú cinnte gur mhaith leat an postáil seo a scriosadh agus é a athdhréachtú? Caillfear ceanáin agus treisithe, agus dílleachtaí freagraí ar an mbunphostála.",
@@ -407,6 +418,8 @@
"ignore_notifications_modal.not_followers_title": "An dtugann tú aird ar fhógraí ó dhaoine nach leanann tú?",
"ignore_notifications_modal.not_following_title": "An ndéanann tú neamhaird de fhógraí ó dhaoine nach leanann tú?",
"ignore_notifications_modal.private_mentions_title": "An dtugann tú aird ar fhógraí ó Luaintí Príobháideacha gan iarraidh?",
+ "info_button.label": "Cabhrú",
+ "info_button.what_is_alt_text": "
Cad is téacs altach ann?
Soláthraíonn téacs Alt cur síos ar íomhánna do dhaoine le lagú radhairc, naisc íseal-bandaleithead, nó daoine atá ag lorg comhthéacs breise.
Is féidir leat inrochtaineacht agus tuiscint a fheabhsú do chách trí théacs alt soiléir, gonta, oibiachtúil a scríobh.
Glac gnéithe tábhachtacha
Déan achoimre ar théacs in íomhánna
Úsáid struchtúr abairtí rialta
li>
Seachain faisnéis iomarcach
Fócas ar threochtaí agus ar phríomhthorthaí i bhfíseanna casta (amhail léaráidí nó léarscáileanna)
",
"interaction_modal.action.favourite": "Chun leanúint ar aghaidh, ní mór duit an ceann is fearr leat ó do chuntas.",
"interaction_modal.action.follow": "Chun leanúint ar aghaidh, ní mór duit leanúint ó do chuntas.",
"interaction_modal.action.reblog": "Chun leanúint ar aghaidh, ní mór duit athbhlagáil ó do chuntas.",
diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json
index fc3194e4dd..90032b46ad 100644
--- a/app/javascript/mastodon/locales/ia.json
+++ b/app/javascript/mastodon/locales/ia.json
@@ -86,9 +86,12 @@
"alert.unexpected.message": "Un error inexpectate ha occurrite.",
"alert.unexpected.title": "Ups!",
"alt_text_badge.title": "Texto alternative",
+ "alt_text_modal.add_alt_text": "Adder texto alternative",
"alt_text_modal.add_text_from_image": "Adder texto ab imagine",
"alt_text_modal.cancel": "Cancellar",
"alt_text_modal.change_thumbnail": "Cambiar le miniatura",
+ "alt_text_modal.describe_for_people_with_hearing_impairments": "Describe isto pro personas con impedimentos auditive…",
+ "alt_text_modal.describe_for_people_with_visual_impairments": "Describe isto pro personas con impedimentos visual…",
"alt_text_modal.done": "Preste",
"announcement.announcement": "Annuncio",
"annual_report.summary.archetype.booster": "Le impulsator",
@@ -215,6 +218,10 @@
"confirmations.logout.confirm": "Clauder session",
"confirmations.logout.message": "Es tu secur que tu vole clauder le session?",
"confirmations.logout.title": "Clauder session?",
+ "confirmations.missing_alt_text.confirm": "Adder texto alternative",
+ "confirmations.missing_alt_text.message": "Tu message contine multimedia sin texto alternative. Adder descriptiones adjuta a render tu contento accessibile a plus personas.",
+ "confirmations.missing_alt_text.secondary": "Publicar totevia",
+ "confirmations.missing_alt_text.title": "Adder texto alternative?",
"confirmations.mute.confirm": "Silentiar",
"confirmations.redraft.confirm": "Deler e rescriber",
"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.",
@@ -411,6 +418,8 @@
"ignore_notifications_modal.not_followers_title": "Ignorar notificationes de personas qui non te seque?",
"ignore_notifications_modal.not_following_title": "Ignorar notificationes de personas que tu non seque?",
"ignore_notifications_modal.private_mentions_title": "Ignorar notificationes de mentiones private non requestate?",
+ "info_button.label": "Adjuta",
+ "info_button.what_is_alt_text": "
Que es texto alternative?
Le texto alternative forni descriptiones de imagines a personas con impedimentos visual, con connexiones lente, o qui cerca contexto additional.
Tu pote meliorar le accessibilitate e le comprension pro totes scribente un texto alternative clar, concise e objective.
Captura le elementos importante
Summarisa texto in imagines
Usa le structura de phrase normal
Evita information redundante
In figuras complexe (como diagrammas o mappas), concentra te sur le tendentias e punctos clave
",
"interaction_modal.action.favourite": "Per favor reveni a tu conto pro marcar isto como favorite.",
"interaction_modal.action.follow": "Per favor reveni a tu conto pro sequer.",
"interaction_modal.action.reblog": "Per favor reveni a tu conto pro impulsar.",
@@ -825,7 +834,7 @@
"status.load_more": "Cargar plus",
"status.media.open": "Clicca pro aperir",
"status.media.show": "Clicca pro monstrar",
- "status.media_hidden": "Medios celate",
+ "status.media_hidden": "Contento multimedial celate",
"status.mention": "Mentionar @{name}",
"status.more": "Plus",
"status.mute": "Silentiar @{name}",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index fc52700692..67acddb446 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -218,6 +218,10 @@
"confirmations.logout.confirm": "Disconnettiti",
"confirmations.logout.message": "Sei sicuro di volerti disconnettere?",
"confirmations.logout.title": "Uscire?",
+ "confirmations.missing_alt_text.confirm": "Aggiungi testo alternativo",
+ "confirmations.missing_alt_text.message": "Il tuo post contiene media senza testo alternativo. L'aggiunta di descrizioni aiuta a rendere i tuoi contenuti accessibili a più persone.",
+ "confirmations.missing_alt_text.secondary": "Pubblica comunque",
+ "confirmations.missing_alt_text.title": "Aggiungere testo alternativo?",
"confirmations.mute.confirm": "Silenzia",
"confirmations.redraft.confirm": "Elimina e riscrivi",
"confirmations.redraft.message": "Sei sicuro di voler eliminare questo post e riscriverlo? I preferiti e i boost andranno persi e le risposte al post originale non saranno più collegate.",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index 9ac11c145a..52a02db44d 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -99,8 +99,11 @@
"alert.unexpected.title": "エラー!",
"alt_text_badge.title": "代替テキスト",
"alt_text_modal.add_alt_text": "代替テキストを追加",
+ "alt_text_modal.add_text_from_image": "画像からテキストを追加",
"alt_text_modal.cancel": "キャンセル",
"alt_text_modal.change_thumbnail": "サムネイルを変更",
+ "alt_text_modal.describe_for_people_with_hearing_impairments": "耳の不自由な方のために説明してください…",
+ "alt_text_modal.describe_for_people_with_visual_impairments": "目が不自由な方のために説明してください…",
"alt_text_modal.done": "完了",
"announcement.announcement": "お知らせ",
"annual_report.summary.archetype.booster": "トレンドハンター",
@@ -334,6 +337,10 @@
"confirmations.logout.confirm": "ログアウト",
"confirmations.logout.message": "本当にログアウトしますか?",
"confirmations.logout.title": "ログアウトしようとしています",
+ "confirmations.missing_alt_text.confirm": "代替テキストを追加",
+ "confirmations.missing_alt_text.message": "あなたの投稿には大体テキストのないメディアが含まれています。説明文を追加することで、より多くの人がコンテンツにアクセスできるようになります。",
+ "confirmations.missing_alt_text.secondary": "そのまま投稿する",
+ "confirmations.missing_alt_text.title": "代替テキストを追加しますか?",
"confirmations.mute.confirm": "ミュート",
"confirmations.redraft.confirm": "削除して下書きに戻す",
"confirmations.redraft.message": "投稿を削除して下書きに戻します。この投稿へのお気に入り登録やブーストは失われ、返信は孤立することになります。よろしいですか?",
@@ -590,6 +597,7 @@
"keyboard_shortcuts.toggle_hidden": "CWで隠れた文を見る/隠す",
"keyboard_shortcuts.toggle_sensitivity": "非表示のメディアを見る/隠す",
"keyboard_shortcuts.toot": "新規投稿",
+ "keyboard_shortcuts.translate": "投稿を翻訳する",
"keyboard_shortcuts.unfocus": "投稿の入力欄・検索欄から離れる",
"keyboard_shortcuts.up": "カラム内一つ上に移動",
"lightbox.close": "閉じる",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index 88f35cfc30..df61294e33 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -218,6 +218,10 @@
"confirmations.logout.confirm": "로그아웃",
"confirmations.logout.message": "정말로 로그아웃 하시겠습니까?",
"confirmations.logout.title": "로그아웃 할까요?",
+ "confirmations.missing_alt_text.confirm": "대체 텍스트 추가",
+ "confirmations.missing_alt_text.message": "대체 텍스트가 없는 미디어를 포함하고 있습니다. 설명을 추가하면 더 많은 사람들이 내 콘텐츠에 접근할 수 있습니다.",
+ "confirmations.missing_alt_text.secondary": "그냥 게시하기",
+ "confirmations.missing_alt_text.title": "대체 텍스트를 추가할까요?",
"confirmations.mute.confirm": "뮤트",
"confirmations.redraft.confirm": "삭제하고 다시 쓰기",
"confirmations.redraft.message": "정말로 이 게시물을 삭제하고 다시 쓰시겠습니까? 해당 게시물에 대한 부스트와 좋아요를 잃게 되고 원본에 대한 답장은 연결 되지 않습니다.",
@@ -415,6 +419,7 @@
"ignore_notifications_modal.not_following_title": "내가 팔로우하지 않는 사람들의 알림을 무시할까요?",
"ignore_notifications_modal.private_mentions_title": "요청하지 않은 개인 멘션 알림을 무시할까요?",
"info_button.label": "도움말",
+ "info_button.what_is_alt_text": "
대체 텍스트가 무었인가요?
대체 텍스트는 저시력자, 낮은 인터넷 대역폭 사용자, 더 자세한 문맥을 위해 이미지에 대한 설명을 제공하는 것입니다.
깔끔하고 간결하고 객관적인 대체 텍스트를 작성해 모두가 이해하기 쉽게 만들고 접근성이 높아질 수 있습니다.
Tekst pomocniczy zapewnia osobom z zaburzeniem widzenia, słabym łączem internetowym oraz tym, którzy szukają dodatkowego kontekstu opis grafik i zdjęć.
\n
Możesz zwiększyć jego dostępność i zrozumienie poprzez jasne, zwięzłe i obiektywne sformułowanie tekstu pomocniczego.
\n
\n
Uchwyć ważne elementy
\n
Streść tekst na obrazkach
\n
Używaj standardowej składni zdań
\n
Unikaj wprowadzania zbędnych informacji
\n
Skup się na głównych trendach i kluczowych informacjach w skomplikowanych materiałach (tkaich jak wykresy czy mapy)
\n
",
"interaction_modal.action.favourite": "Aby kontynuować, musisz dodać do ulubionych na swoim koncie.",
"interaction_modal.action.follow": "Aby kontynuować, musisz obserwować ze swojego konta.",
"interaction_modal.action.reblog": "Aby kontynuować, musisz podać dalej ze swojego konta.",
diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json
index 801c84f23c..aaa36704d7 100644
--- a/app/javascript/mastodon/locales/pt-PT.json
+++ b/app/javascript/mastodon/locales/pt-PT.json
@@ -42,7 +42,7 @@
"account.hide_reblogs": "Esconder partilhas impulsionadas de @{name}",
"account.in_memoriam": "Em Memória.",
"account.joined_short": "Juntou-se a",
- "account.languages": "Alterar línguas subscritas",
+ "account.languages": "Alterar idiomas subscritos",
"account.link_verified_on": "O proprietário desta hiperligação foi verificado em {date}",
"account.locked_info": "Esta conta é privada. O proprietário revê manualmente quem o pode seguir.",
"account.media": "Multimédia",
@@ -219,7 +219,7 @@
"confirmations.logout.message": "Tens a certeza de que queres terminar a sessão?",
"confirmations.logout.title": "Terminar sessão?",
"confirmations.missing_alt_text.confirm": "Adicionar texto alternativo",
- "confirmations.missing_alt_text.message": "A sua publicação contém elementos gráficos sem texto alternativo. Adicionar descrições ajuda a tornar o seu conteúdo acessível a mais pessoas.",
+ "confirmations.missing_alt_text.message": "A tua publicação contém multimédia sem texto alternativo. A adição de descrições ajuda a tornar o conteúdo acessível a mais pessoas.",
"confirmations.missing_alt_text.secondary": "Publicar mesmo assim",
"confirmations.missing_alt_text.title": "Adicionar texto alternativo?",
"confirmations.mute.confirm": "Ocultar",
@@ -817,7 +817,7 @@
"status.cancel_reblog_private": "Retirar impulso",
"status.cannot_reblog": "Esta publicação não pode ser impulsionada",
"status.continued_thread": "Continuação da conversa",
- "status.copy": "Copiar hiperligação para a publicação",
+ "status.copy": "Copiar hiperligação da publicação",
"status.delete": "Eliminar",
"status.detailed_status": "Vista pormenorizada da conversa",
"status.direct": "Mencionar @{name} em privado",
diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json
index 116b28e4d4..b6f3a8a95d 100644
--- a/app/javascript/mastodon/locales/ru.json
+++ b/app/javascript/mastodon/locales/ru.json
@@ -86,6 +86,13 @@
"alert.unexpected.message": "Произошла непредвиденная ошибка.",
"alert.unexpected.title": "Ой!",
"alt_text_badge.title": "Альтернативный текст",
+ "alt_text_modal.add_alt_text": "Альтернативный текст",
+ "alt_text_modal.add_text_from_image": "Добавить текст из изображения",
+ "alt_text_modal.cancel": "Отмена",
+ "alt_text_modal.change_thumbnail": "Изменить обложку",
+ "alt_text_modal.describe_for_people_with_hearing_impairments": "Опишите то, что слышите, для людей с нарушениями слуха…",
+ "alt_text_modal.describe_for_people_with_visual_impairments": "Опишите то, что видите, для людей с нарушениями зрения…",
+ "alt_text_modal.done": "Готово",
"announcement.announcement": "Объявление",
"annual_report.summary.archetype.booster": "Репостер",
"annual_report.summary.archetype.lurker": "Молчун",
@@ -211,6 +218,10 @@
"confirmations.logout.confirm": "Выйти",
"confirmations.logout.message": "Вы уверены, что хотите выйти?",
"confirmations.logout.title": "Выйти?",
+ "confirmations.missing_alt_text.confirm": "Добавить",
+ "confirmations.missing_alt_text.message": "Ваш пост содержит медиафайлы без альтернативного текста. Добавляя описания, вы делаете ваш контент доступным для более широкого круга людей.",
+ "confirmations.missing_alt_text.secondary": "Опубликовать",
+ "confirmations.missing_alt_text.title": "Добавить альтернативный текст?",
"confirmations.mute.confirm": "Игнорировать",
"confirmations.redraft.confirm": "Удалить и исправить",
"confirmations.redraft.message": "Вы уверены, что хотите удалить и переписать этот пост? Отметки «избранного», продвижения и ответы к оригинальному посту будут потеряны.",
@@ -407,6 +418,8 @@
"ignore_notifications_modal.not_followers_title": "Игнорировать уведомления от людей, которые не следят за вами?",
"ignore_notifications_modal.not_following_title": "Игнорировать уведомления от людей, за которыми вы не следите?",
"ignore_notifications_modal.private_mentions_title": "Игнорировать уведомления о нежелательных личных сообщениях?",
+ "info_button.label": "Помощь",
+ "info_button.what_is_alt_text": "
Что это такое?
Альтернативный текст содержит описание изображения для людей с ограничениями зрения, медленным интернетом и для тех, кому нужен дополнительный контекст.
Вы можете улучшить доступность и понимание для всех, написав четкий, краткий и объективный альтернативный текст.
Уловите важные элементы
Перескажите текстовую информацию на изображении
Используйте правильную структуру предложений
Избегайте избыточной информации
Сосредоточьтесь на тенденциях и ключевых выводах при описании сложных визуализаций (таких как диаграммы или карты)
",
"interaction_modal.action.favourite": "Вы можете добавить этот пост в избранное со своей учётной записью.",
"interaction_modal.action.follow": "Вы можете подписаться со своей учётной записью.",
"interaction_modal.action.reblog": "Вы можете продвинуть этот пост со своей учётной записью.",
@@ -457,6 +470,7 @@
"keyboard_shortcuts.toggle_hidden": "показать/скрыть текст за предупреждением",
"keyboard_shortcuts.toggle_sensitivity": "показать/скрыть медиафайлы",
"keyboard_shortcuts.toot": "начать писать новый пост",
+ "keyboard_shortcuts.translate": "перевести пост",
"keyboard_shortcuts.unfocus": "убрать фокус с поля ввода/поиска",
"keyboard_shortcuts.up": "вверх по списку",
"lightbox.close": "Закрыть",
@@ -836,6 +850,7 @@
"status.reblogs.empty": "Никто ещё не продвинул этот пост. Как только кто-то это сделает, они появятся здесь.",
"status.redraft": "Создать заново",
"status.remove_bookmark": "Убрать из закладок",
+ "status.remove_favourite": "Убрать из избранного",
"status.replied_in_thread": "Ответил в теме",
"status.replied_to": "Ответил(а) {name}",
"status.reply": "Ответить",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index 5e7385bdc4..b9f0fd1b33 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -205,6 +205,7 @@
"confirmations.logout.confirm": "Odhlásiť sa",
"confirmations.logout.message": "Určite sa chcete odhlásiť?",
"confirmations.logout.title": "Odhlásiť sa?",
+ "confirmations.missing_alt_text.secondary": "Odošli aj tak",
"confirmations.mute.confirm": "Stíšiť",
"confirmations.redraft.confirm": "Vymazať a prepísať",
"confirmations.redraft.message": "Určite chcete tento príspevok vymazať a prepísať? Prídete o jeho zdieľania a ohviezdičkovania a odpovede na pôvodný príspevok budú odlúčené.",
@@ -319,6 +320,7 @@
"follow_requests.unlocked_explanation": "Aj keď váš účet nie je uzamknutý, tím domény {domain} si myslel, že môžete chcieť skontrolovať žiadosti o sledovanie z týchto účtov manuálne.",
"follow_suggestions.curated_suggestion": "Výber redakcie",
"follow_suggestions.dismiss": "Znova nezobrazovať",
+ "follow_suggestions.featured_longer": "Ručne vybrané tímom {domain}",
"follow_suggestions.friends_of_friends_longer": "Populárne medzi ľudmi ktorých nasleduješ",
"follow_suggestions.hints.featured": "Tento profil bol ručne zvolený tímom domény {domain}.",
"follow_suggestions.hints.friends_of_friends": "Tento profil je obľúbený medzi účtami, ktoré sledujete.",
@@ -452,6 +454,8 @@
"lists.delete": "Vymazať zoznam",
"lists.done": "Hotovo",
"lists.edit": "Upraviť zoznam",
+ "lists.exclusive": "Skryť členov na Domovskej osi",
+ "lists.exclusive_hint": "Ak je niekto na tomto zozname, skry ich na tvojej Domácej osi, aby si ich príspevky nevidel/a dvakrát.",
"lists.find_users_to_add": "Nájdi užívateľov na pridanie",
"lists.list_members": "Členovia zoznamu",
"lists.list_name": "Názov zoznamu",
@@ -465,6 +469,7 @@
"lists.replies_policy.none": "Nikomu",
"lists.save": "Ulož",
"lists.search": "Hľadaj",
+ "lists.show_replies_to": "Zahrnúť odpovede od členov zoznamu na",
"load_pending": "{count, plural, one {# nová položka} few {# nové položky} many {# nových položiek} other {# nových položiek}}",
"loading_indicator.label": "Načítavanie…",
"media_gallery.hide": "Skryť",
@@ -598,6 +603,7 @@
"onboarding.follows.done": "Hotovo",
"onboarding.follows.empty": "Žiaľ, momentálne sa nedajú zobraziť žiadne výsledky. Môžete skúsiť použiť vyhľadávanie alebo navštíviť stránku objavovania a nájsť ľudí, ktorých chcete sledovať, alebo to skúste znova neskôr.",
"onboarding.follows.search": "Hľadať",
+ "onboarding.follows.title": "Pre začiatok nasleduj ľudí",
"onboarding.profile.discoverable": "Nastavte svoj profil ako objaviteľný",
"onboarding.profile.discoverable_hint": "Keď si na Mastodone zapnete objaviteľnosť, vaše príspevky sa môžu zobrazovať vo výsledkoch vyhľadávania a v populárnych. Váš profil môže byť navyše navrhovaný ľuďom, s ktorými máte podobné záujmy.",
"onboarding.profile.display_name": "Používateľské meno",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index da6a49b75a..21a620b3ec 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -86,6 +86,13 @@
"alert.unexpected.message": "Ett oväntat fel uppstod.",
"alert.unexpected.title": "Hoppsan!",
"alt_text_badge.title": "Alt-Text",
+ "alt_text_modal.add_alt_text": "Lägg till alt-text",
+ "alt_text_modal.add_text_from_image": "Lägg till text från bild",
+ "alt_text_modal.cancel": "Avbryt",
+ "alt_text_modal.change_thumbnail": "Ändra miniatyr",
+ "alt_text_modal.describe_for_people_with_hearing_impairments": "Beskriv detta för personer med hörselnedsättning…",
+ "alt_text_modal.describe_for_people_with_visual_impairments": "Beskriv detta för personer med synnedsättning…",
+ "alt_text_modal.done": "Klar",
"announcement.announcement": "Meddelande",
"annual_report.summary.archetype.booster": "Häftighetsjägaren",
"annual_report.summary.archetype.lurker": "Smygaren",
@@ -211,6 +218,7 @@
"confirmations.logout.confirm": "Logga ut",
"confirmations.logout.message": "Är du säker på att du vill logga ut?",
"confirmations.logout.title": "Logga ut?",
+ "confirmations.missing_alt_text.confirm": "Lägg till alt-text",
"confirmations.mute.confirm": "Tysta",
"confirmations.redraft.confirm": "Radera & gör om",
"confirmations.redraft.message": "Är du säker på att du vill radera detta inlägg och göra om det? Favoritmarkeringar, boostar och svar till det ursprungliga inlägget kommer förlora sitt sammanhang.",
@@ -220,7 +228,7 @@
"confirmations.reply.title": "Skriva över inlägget?",
"confirmations.unfollow.confirm": "Avfölj",
"confirmations.unfollow.message": "Är du säker på att du vill avfölja {name}?",
- "confirmations.unfollow.title": "Avfölj %s?",
+ "confirmations.unfollow.title": "Avfölj användare?",
"content_warning.hide": "Dölj inlägg",
"content_warning.show": "Visa ändå",
"content_warning.show_more": "Visa mer",
@@ -407,6 +415,7 @@
"ignore_notifications_modal.not_followers_title": "Vill du ignorera aviseringar från personer som inte följer dig?",
"ignore_notifications_modal.not_following_title": "Vill du blockera aviseringar från personer som du inte följer dig?",
"ignore_notifications_modal.private_mentions_title": "Vill du ignorera aviseringar från oombedda privata omnämnanden?",
+ "info_button.label": "Hjälp",
"interaction_modal.action.favourite": "För att fortsätta, måste du favoritmarkera från ditt konto.",
"interaction_modal.action.follow": "För att fortsätta, måste du följa från ditt konto.",
"interaction_modal.action.reblog": "För att fortsätta, måste du boosta från ditt konto.",
diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json
index ce44f902f9..7274f425ea 100644
--- a/app/javascript/mastodon/locales/uk.json
+++ b/app/javascript/mastodon/locales/uk.json
@@ -219,6 +219,7 @@
"confirmations.logout.message": "Ви впевнені, що хочете вийти?",
"confirmations.logout.title": "Вийти?",
"confirmations.missing_alt_text.confirm": "Додати альтернативний текст",
+ "confirmations.missing_alt_text.message": "У вашому дописі є медіа без альтернативного тексту. Додавання опису допоможе зробити ваші матеріали доступними для більшої кількості людей.",
"confirmations.missing_alt_text.secondary": "Все одно опублікувати",
"confirmations.missing_alt_text.title": "Додати альтернативний текст?",
"confirmations.mute.confirm": "Приховати",
diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json
index 2fe4f70950..88e926ffb1 100644
--- a/app/javascript/mastodon/locales/vi.json
+++ b/app/javascript/mastodon/locales/vi.json
@@ -218,6 +218,10 @@
"confirmations.logout.confirm": "Đăng xuất",
"confirmations.logout.message": "Bạn có chắc muốn thoát?",
"confirmations.logout.title": "Đăng xuất",
+ "confirmations.missing_alt_text.confirm": "Thêm văn bản thay thế",
+ "confirmations.missing_alt_text.message": "Tút của bạn chứa media không có văn bản thay thế. Thêm mô tả giúp nội dung của bạn dễ tiếp cận với nhiều người hơn.",
+ "confirmations.missing_alt_text.secondary": "Đăng luôn",
+ "confirmations.missing_alt_text.title": "Thêm văn bản thay thế?",
"confirmations.mute.confirm": "Ẩn",
"confirmations.redraft.confirm": "Xóa & viết lại",
"confirmations.redraft.message": "Điều này sẽ khiến những lượt thích và đăng lại của tút bị mất, cũng như những trả lời sẽ không còn nội dung gốc.",
@@ -414,6 +418,8 @@
"ignore_notifications_modal.not_followers_title": "Bỏ qua thông báo từ những người chưa theo dõi bạn?",
"ignore_notifications_modal.not_following_title": "Bỏ qua thông báo từ những người bạn không theo dõi?",
"ignore_notifications_modal.private_mentions_title": "Bỏ qua thông báo từ những lượt Nhắn Riêng không mong muốn?",
+ "info_button.label": "Trợ giúp",
+ "info_button.what_is_alt_text": "
Văn bản thay thế là gì?
Văn bản thay thế giúp mô tả hình ảnh cho những người khiếm thị, kết nối mạng chậm hoặc những người muốn biết ngữ cảnh bổ sung.
Bạn có thể cải thiện khả năng tiếp cận và giải thích kỹ hơn cho mọi người bằng cách viết văn bản thay thế rõ ràng, ngắn gọn và khách quan.
Nắm bắt thành phần quan trọng
Tóm tắt văn bản trong hình
Dùng cấu trúc câu đơn
Tránh giải thích rối rắmn
Tập trung vào các xu hướng và phát hiện chính trong hình ảnh phức tạp (như biểu đồ hoặc bản đồ)
",
"interaction_modal.action.favourite": "Để thích, bạn cần dùng tài khoản của bạn.",
"interaction_modal.action.follow": "Để theo dõi, bạn cần dùng tài khoản của bạn.",
"interaction_modal.action.reblog": "Để đăng lại, bạn cần dùng tài khoản của bạn.",
diff --git a/app/lib/admin/system_check/media_privacy_check.rb b/app/lib/admin/system_check/media_privacy_check.rb
index 2ddc8e8b07..378a8ce294 100644
--- a/app/lib/admin/system_check/media_privacy_check.rb
+++ b/app/lib/admin/system_check/media_privacy_check.rb
@@ -76,7 +76,7 @@ class Admin::SystemCheck::MediaPrivacyCheck < Admin::SystemCheck::BaseCheck
def media_attachment
@media_attachment ||= begin
- attachment = Account.representative.media_attachments.first
+ attachment = Account.representative.media_attachments.take
if attachment.present?
attachment.touch
attachment
diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb
index df4fc17908..98ae651dff 100644
--- a/app/lib/feed_manager.rb
+++ b/app/lib/feed_manager.rb
@@ -32,6 +32,15 @@ class FeedManager
"feed:#{type}:#{id}:#{subtype}"
end
+ # The number of items in the given timeline
+ # @param [Symbol] type
+ # @param [Integer] id
+ # @param [Symbol] subtype
+ # @return [Integer]
+ def timeline_size(type, id, subtype = nil)
+ redis.zcard(key(type, id, subtype))
+ end
+
# The filter result of the status to a particular feed
# @param [Symbol] timeline_type
# @param [Status] status
@@ -42,7 +51,7 @@ class FeedManager
when :home
filter_from_home(status, receiver.id, build_crutches(receiver.id, [status]), :home)
when :list
- (filter_from_list?(status, receiver) ? :filter : nil) || filter_from_home(status, receiver.account_id, build_crutches(receiver.account_id, [status]), :list, stl_home: stl_home)
+ (filter_from_list?(status, receiver) ? :filter : nil) || filter_from_home(status, receiver.account_id, build_crutches(receiver.account_id, [status], list: receiver), :list, stl_home: stl_home)
when :mentions
filter_from_mentions?(status, receiver.id) ? :filter : nil
when :tags
@@ -136,7 +145,7 @@ class FeedManager
timeline_key = key(:home, into_account.id)
aggregate = into_account.user&.aggregates_reblogs?
- query = from_account.statuses.list_eligible_visibility.includes(:preloadable_poll, :media_attachments, reblog: :account).limit(FeedManager::MAX_ITEMS / 4)
+ query = from_account.statuses.list_eligible_visibility.includes(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
@@ -164,7 +173,7 @@ class FeedManager
timeline_key = key(:list, list.id)
aggregate = list.account.user&.aggregates_reblogs?
- query = from_account.statuses.list_eligible_visibility.includes(:preloadable_poll, :media_attachments, reblog: :account).limit(FeedManager::MAX_ITEMS / 4)
+ query = from_account.statuses.list_eligible_visibility.includes(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
@@ -172,10 +181,10 @@ class FeedManager
end
statuses = query.to_a
- crutches = build_crutches(list.account_id, statuses)
+ crutches = build_crutches(list.account_id, statuses, list: list)
statuses.each do |status|
- next if filter_from_home(status, list.account_id, crutches) || filter_from_list?(status, list)
+ next if filter_from_home(status, list.account_id, crutches, :list)
add_to_feed(:list, list.id, status, aggregate_reblogs: aggregate)
end
@@ -309,23 +318,32 @@ class FeedManager
limit = FeedManager::MAX_ITEMS / 2
aggregate = account.user&.aggregates_reblogs?
timeline_key = key(:home, account.id)
+ over_limit = false
account.statuses.limit(limit).each do |status|
add_to_feed(:home, account.id, status, aggregate_reblogs: aggregate)
end
account.following.includes(:account_stat).reorder(nil).find_each do |target_account|
- if redis.zcard(timeline_key) >= limit
+ query = target_account.statuses.list_eligible_visibility.includes(reblog: :account).limit(limit)
+
+ over_limit ||= redis.zcard(timeline_key) >= limit
+ if over_limit
oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i
- last_status_score = Mastodon::Snowflake.id_at(target_account.last_status_at)
+ last_status_score = Mastodon::Snowflake.id_at(target_account.last_status_at, with_random: false)
# If the feed is full and this account has not posted more recently
# than the last item on the feed, then we can skip the whole account
# because none of its statuses would stay on the feed anyway
next if last_status_score < oldest_home_score
+
+ # No need to get older statuses
+ query = query.where(id: oldest_home_score...)
end
- statuses = target_account.statuses.list_eligible_visibility.includes(:preloadable_poll, :media_attachments, :account, reblog: :account).limit(limit)
+ statuses = query.to_a
+ next if statuses.empty?
+
crutches = build_crutches(account.id, statuses)
statuses.each do |status|
@@ -345,23 +363,32 @@ class FeedManager
limit = FeedManager::MAX_ITEMS / 2
aggregate = list.account.user&.aggregates_reblogs?
timeline_key = key(:list, list.id)
+ over_limit = false
list.active_accounts.includes(:account_stat).reorder(nil).find_each do |target_account|
- if redis.zcard(timeline_key) >= limit
+ query = target_account.statuses.list_eligible_visibility.includes(reblog: :account).limit(limit)
+
+ over_limit ||= redis.zcard(timeline_key) >= limit
+ if over_limit
oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true).first.last.to_i
- last_status_score = Mastodon::Snowflake.id_at(target_account.last_status_at)
+ last_status_score = Mastodon::Snowflake.id_at(target_account.last_status_at, with_random: false)
# If the feed is full and this account has not posted more recently
# than the last item on the feed, then we can skip the whole account
# because none of its statuses would stay on the feed anyway
next if last_status_score < oldest_home_score
+
+ # No need to get older statuses
+ query = query.where(id: oldest_home_score...)
end
- statuses = target_account.statuses.list_eligible_visibility.includes(:preloadable_poll, :media_attachments, :account, reblog: :account).limit(limit)
- crutches = build_crutches(list.account_id, statuses)
+ statuses = query.to_a
+ next if statuses.empty?
+
+ crutches = build_crutches(list.account_id, statuses, list: list)
statuses.each do |status|
- next if filter_from_home(status, list.account_id, crutches) || filter_from_list?(status, list)
+ next if filter_from_home(status, list.account_id, crutches, :list)
add_to_feed(:list, list.id, status, aggregate_reblogs: aggregate)
end
@@ -632,8 +659,9 @@ class FeedManager
# are going to be checked by the filtering methods
# @param [Integer] receiver_id
# @param [Array] statuses
+ # @param [List] list
# @return [Hash]
- def build_crutches(receiver_id, statuses) # rubocop:disable Metrics/AbcSize
+ def build_crutches(receiver_id, statuses, list: nil)
crutches = {}
crutches[:active_mentions] = crutches_active_mentions(statuses)
@@ -650,25 +678,43 @@ class FeedManager
arr
end
- lists = List.where(account_id: receiver_id, exclusive: true)
- antennas = Antenna.where(list: lists, insert_feeds: true)
-
- replied_accounts = statuses.filter_map(&:in_reply_to_account_id)
- replied_accounts += statuses.filter { |status| status.limited_visibility? && status.thread.present? }.map { |status| status.thread.account_id }
-
- crutches[:following] = Follow.where(account_id: receiver_id, target_account_id: replied_accounts).pluck(:target_account_id).index_with(true)
+ crutches[:following] = crutches_following(receiver_id, statuses, list)
crutches[:languages] = Follow.where(account_id: receiver_id, target_account_id: statuses.map(&:account_id)).pluck(:target_account_id, :languages).to_h
crutches[:hiding_reblogs] = Follow.where(account_id: receiver_id, target_account_id: statuses.filter_map { |s| s.account_id if s.reblog? }, show_reblogs: false).pluck(:target_account_id).index_with(true)
crutches[:blocking] = Block.where(account_id: receiver_id, target_account_id: check_for_blocks).pluck(:target_account_id).index_with(true)
crutches[:muting] = Mute.where(account_id: receiver_id, target_account_id: check_for_blocks).pluck(:target_account_id).index_with(true)
crutches[:domain_blocking] = AccountDomainBlock.where(account_id: receiver_id, domain: statuses.flat_map { |s| [s.account.domain, s.reblog&.account&.domain] }.compact).pluck(:domain).index_with(true)
crutches[:blocked_by] = Block.where(target_account_id: receiver_id, account_id: statuses.map { |s| [s.account_id, s.reblog&.account_id] }.flatten.compact).pluck(:account_id).index_with(true)
- crutches[:exclusive_list_users] = ListAccount.where(list: lists, account_id: statuses.map(&:account_id)).pluck(:account_id).index_with(true)
- crutches[:exclusive_antenna_users] = AntennaAccount.where(antenna: antennas, account_id: statuses.map(&:account_id)).pluck(:account_id).index_with(true)
+ crutches[:exclusive_list_users] = crutches_exclusive_list_users(receiver_id, statuses) if list.blank?
+ crutches[:exclusive_antenna_users] = crutches_exclusive_antenna_users(receiver_id, statuses)
crutches
end
+ def crutches_exclusive_list_users(recipient_id, statuses)
+ lists = List.where(account_id: recipient_id, exclusive: true)
+ ListAccount.where(list: lists, account_id: statuses.map(&:account_id)).pluck(:account_id).index_with(true)
+ end
+
+ def crutches_exclusive_antenna_users(recipient_id, statuses)
+ lists = List.where(account_id: recipient_id, exclusive: true)
+ antennas = Antenna.where(list: lists, insert_feeds: true)
+ AntennaAccount.where(antenna: antennas, account_id: statuses.map(&:account_id)).pluck(:account_id).index_with(true)
+ end
+
+ def crutches_following(recipient_id, statuses, list)
+ if list.blank? || list.show_followed?
+ replied_accounts = statuses.filter_map(&:in_reply_to_account_id)
+ replied_accounts += statuses.filter { |status| status.limited_visibility? && status.thread.present? }.map { |status| status.thread.account_id }
+
+ Follow.where(account_id: recipient_id, target_account_id: replied_accounts).pluck(:target_account_id).index_with(true)
+ elsif list.show_list?
+ ListAccount.where(list_id: list.id, account_id: statuses.filter_map(&:in_reply_to_account_id)).pluck(:account_id).index_with(true)
+ else
+ {}
+ end
+ end
+
def crutches_active_mentions(statuses)
Mention
.active
diff --git a/app/services/precompute_feed_service.rb b/app/services/precompute_feed_service.rb
index 86aad50983..a591c90913 100644
--- a/app/services/precompute_feed_service.rb
+++ b/app/services/precompute_feed_service.rb
@@ -3,13 +3,21 @@
class PrecomputeFeedService < BaseService
include Redisable
- def call(account)
- FeedManager.instance.populate_home(account)
+ def call(account, skip_filled_timelines: false)
+ @skip_filled_timelines = skip_filled_timelines
+
+ FeedManager.instance.populate_home(account) unless skip_timeline?(:home, account.id)
account.owned_lists.each do |list|
- FeedManager.instance.populate_list(list)
+ FeedManager.instance.populate_list(list) unless skip_timeline?(:list, list.id)
end
ensure
redis.del("account:#{account.id}:regeneration")
end
+
+ private
+
+ def skip_timeline?(type, id)
+ @skip_filled_timelines && FeedManager.instance.timeline_size(type, id) * 2 > FeedManager::MAX_ITEMS
+ end
end
diff --git a/config/initializers/prometheus_exporter.rb b/config/initializers/prometheus_exporter.rb
index 197777e3b6..fab095658f 100644
--- a/config/initializers/prometheus_exporter.rb
+++ b/config/initializers/prometheus_exporter.rb
@@ -2,6 +2,7 @@
if ENV['MASTODON_PROMETHEUS_EXPORTER_ENABLED'] == 'true'
if ENV['MASTODON_PROMETHEUS_EXPORTER_LOCAL'] == 'true'
+ require 'prometheus_exporter'
require 'prometheus_exporter/server'
require 'prometheus_exporter/client'
diff --git a/config/locales/activerecord.ru.yml b/config/locales/activerecord.ru.yml
index 8769212d52..79d39a5cdc 100644
--- a/config/locales/activerecord.ru.yml
+++ b/config/locales/activerecord.ru.yml
@@ -23,6 +23,8 @@ ru:
models:
account:
attributes:
+ fields:
+ fields_with_values_missing_labels: содержит значения с отсутствующими ключами
username:
invalid: только буквы, цифры и символ подчёркивания
reserved: зарезервировано
diff --git a/config/locales/bg.yml b/config/locales/bg.yml
index 432737f8c3..65f6696ee6 100644
--- a/config/locales/bg.yml
+++ b/config/locales/bg.yml
@@ -1200,6 +1200,7 @@ bg:
too_fast: Образецът подаден пребързо, опитайте пак.
use_security_key: Употреба на ключ за сигурност
user_agreement_html: Прочетох и се съгласявам с условията на услугата и политиката за поверителност
+ user_privacy_agreement_html: Прочетох и има съгласието ми за политиката за поверителност
author_attribution:
example_title: Примерен текст
hint_html: Пишете ли новинарски статии или блогове извън Mastodon? Управлявайте как ви приписват авторството, когато са споделени в Mastodon.
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index c602b36c8c..53f1dc6815 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -948,6 +948,9 @@ ca:
preview:
explanation_html: 'Aquest correu-e s''enviarà a %{display_count} usuaris que han signat abans de %{date}. S''hi inclourà aquest text:'
send_preview: Envia una vista prèvia a %{email}
+ send_to_all:
+ one: Envia %{display_count} correu-e
+ other: Envia %{display_count} correus-e
title: Vista prèvia de la notificació de les condicions de servei
publish: Publica
published_on_html: Publicada el %{date}
@@ -1411,6 +1414,22 @@ ca:
merge_long: Mantenir els registres existents i afegir-ne de nous
overwrite: Sobreescriu
overwrite_long: Reemplaça els registres actuals amb els nous
+ overwrite_preambles:
+ blocking_html:
+ one: Esteu a punt de reemplaçar la vostra llista de blocats amb fins a %{count} compte des de %{filename}.
+ other: Esteu a punt de reemplaçar la vostra llista de blocats amb fins a %{count} comptes des de %{filename}.
+ bookmarks_html:
+ one: Esteu a punt de reemplaçar els vostres marcadors amb fins a %{count} publicació des de %{filename}.
+ other: Esteu a punt de reemplaçar els vostres marcadors amb fins a %{count} publicacions des de %{filename}.
+ domain_blocking_html:
+ one: Esteu a punt de reemplaçar la vostra llista de dominis blocats amb fins a %{count} domini des de %{filename}.
+ other: Esteu a punt de reemplaçar la vostra llista de dominis blocats amb fins a %{count} dominis des de %{filename}.
+ following_html:
+ one: Esteu a punt de seguir fins a %{count} compte des de %{filename} i deixar de seguir la resta.
+ other: Esteu a punt de seguir fins a %{count} comptes des de %{filename} i deixar de seguir la resta.
+ lists_html:
+ one: Esteu a punt de reemplaçar les vostres llistes amb contactes de %{filename}. S'afegirà %{count} compte a les noves llistes.
+ other: Esteu a punt de reemplaçar les vostres llistes amb contactes de %{filename}. S'afegiran fins a %{count} comptes a les noves llistes.
preface: Pots importar algunes les dades que has exportat des d'un altre servidor, com ara el llistat de les persones que estàs seguint o bloquejant.
recent_imports: Importacions recents
states:
diff --git a/config/locales/cy.yml b/config/locales/cy.yml
index c2cf685503..f64040a267 100644
--- a/config/locales/cy.yml
+++ b/config/locales/cy.yml
@@ -1285,6 +1285,7 @@ cy:
too_fast: Cafodd y ffurflen ei chyflwyno'n rhy gyflym, ceisiwch eto.
use_security_key: Defnyddiwch allwedd diogelwch
user_agreement_html: Rwyf wedi darllen ac yn cytuno i delerau gwasanaeth a'r polisi preifatrwydd
+ user_privacy_agreement_html: Rwyf wedi darllen ac yn cytuno i'r polisi preifatrwydd
author_attribution:
example_title: Testun enghreifftiol
hint_html: Ydych chi'n ysgrifennu erthyglau newyddion neu flog y tu allan i Mastodon? Rheolwch sut y byddwch yn cael eich cydnabod pan fyddan nhw'n cael eu rhannu ar Mastodon.
diff --git a/config/locales/da.yml b/config/locales/da.yml
index b567fa016c..3ed9d40db9 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -9,12 +9,12 @@ da:
accounts:
followers:
one: Følger
- other: tilhængere
+ other: Følgere
following: Følger
instance_actor_flash: Denne konto er en virtuel aktør repræsenterende selve serveren og ikke en individuel bruger. Den anvendes til fællesformål og bør ikke suspenderes.
last_active: senest aktiv
link_verified_on: Ejerskab af dette link blev tjekket %{date}
- nothing_here: Der er intet hér!
+ nothing_here: Der er intet her!
pin_errors:
following: Man skal allerede følge den person, man ønsker at støtte
posts:
@@ -108,11 +108,11 @@ da:
not_subscribed: Abonnerer ikke
pending: Afventende vurdering
perform_full_suspension: Suspendér
- previous_strikes: Tidligere anmeldelser (strikes)
+ previous_strikes: Tidligere anmeldelser
previous_strikes_description_html:
one: Denne konto har en anmeldelse.
other: Denne konto har %{count} anmeldelser.
- promote: Fremhæv
+ promote: Forfrem
protocol: Protokol
public: Offentlig
push_subscription_expires: PuSH-abonnement udløber
@@ -123,9 +123,9 @@ da:
remote_suspension_irreversible: Denne kontos data er slettet permanent.
remote_suspension_reversible_hint_html: Kontoen er suspenderet på den pågældende server, og kontodata fjernes fuldstændig pr. %{date}. Indtil da vil fjernserveren kunne foretage en komplet reetablering af kontoen. Ønskes alle kontodata fjernet straks, kan dette gøres nedenfor.
remove_avatar: Fjern profilbillede
- remove_header: Fjern overskrift
+ remove_header: Fjern banner
removed_avatar_msg: "%{username}s profilbillede fjernet"
- removed_header_msg: "%{username}s overskriftsbillede fjernet"
+ removed_header_msg: "%{username}s banner fjernet"
resend_confirmation:
already_confirmed: Denne bruger er allerede bekræftet
send: Gensend bekræftelseslink
@@ -141,8 +141,8 @@ da:
security_measures:
only_password: Kun adgangskode
password_and_2fa: Adgangskode og 2FA
- sensitive: Gennemtving sensitiv
- sensitized: Markeret som sensitiv
+ sensitive: Gennemtving følsom
+ sensitized: Markeret som følsom
shared_inbox_url: Delt indbakke-URL
show:
created_reports: Indsendte anmeldelser
@@ -160,7 +160,7 @@ da:
unblock_email: Afblokér e-mailadresse
unblocked_email_msg: "%{username}s e-mail-adresse afblokeret"
unconfirmed_email: Ubekræftet e-mail
- undo_sensitized: Fortryd gennemtving sensitiv
+ undo_sensitized: Fortryd gennemtving-følsom
undo_silenced: Fortryd begrænsning
undo_suspension: Fortryd suspendering
unsilenced_msg: "%{username}s kontobegrænsning er fjernet"
@@ -169,8 +169,8 @@ da:
username: Brugernavn
view_domain: Vis domæneoversigt
warn: Advar
- web: Web
- whitelisted: Tilladt for federering
+ web: Net
+ whitelisted: Tilladt for føderation
action_logs:
action_types:
approve_appeal: Godkend appel
@@ -225,8 +225,8 @@ da:
sensitive_account: Gennemtving sensitiv konto
silence_account: Begræns konto
suspend_account: Suspendér konto
- unassigned_report: Fjer anmeldelsestildeling
- unblock_email_account: Afblokér e-mailadresse
+ unassigned_report: Fjern anmeldelsestildeling
+ unblock_email_account: Fjern blokering af e-mailadresse
unsensitive_account: Fjern Gennemtving sensitiv konto
unsilence_account: Fjern kontobegrænselse
unsuspend_account: Afsuspendér konto
@@ -374,7 +374,7 @@ da:
other: "%{count} verserende anmeldelser"
pending_tags_html:
one: "%{count} afventende hashtag"
- other: "%{count} afventende hashtags"
+ other: "%{count} afventende etiketter"
pending_users_html:
one: "%{count} afventende bruger"
other: "%{count} afventende brugere"
@@ -735,7 +735,7 @@ da:
manage_settings: Håndtere indstillinger
manage_settings_description: Tillader brugere at ændre webstedsindstillinger
manage_taxonomies: Håndtere taksonomier
- manage_taxonomies_description: Tillader brugere at gennemse tenderende indhold og opdatere hashtag-indstillinger
+ manage_taxonomies_description: Tillader brugere at gennemse tenderende indhold og opdatere etiket-indstillinger
manage_user_access: Håndtere brugeradgang
manage_user_access_description: Tillader brugere at deaktivere andre brugeres tofaktorgodkendelse, skifte deres e-mailadresse og nulstille deres adgangskode
manage_users: Håndtere brugere
@@ -925,7 +925,7 @@ da:
reset: Nulstil
review: Gennmgangsstatus
search: Søg
- title: Hashtags
+ title: Etiketter
updated_msg: Hashtag-indstillinger opdateret
terms_of_service:
back: Tilbage til Tjenestevilkår
@@ -1014,14 +1014,14 @@ da:
tag_servers_dimension: Topservere
tag_servers_measure: forskellige servere
tag_uses_measure: anvendelser i alt
- description_html: Disse er hashtags, som pt. vises i en masse indlæg, som serveren ser. Det kan hjælpe brugerne til at finde ud af, hvad folk taler mest om pt. Ingen hashtags vises offentligt, før man godkender dem.
+ description_html: Disse er etiketter, som pt. vises i en masse indlæg, som serveren ser. Det kan hjælpe brugerne til at finde ud af, hvad folk taler mest om pt. Ingen etiketter vises offentligt, før man godkender dem.
listable: Kan foreslås
no_tag_selected: Intet tag ændret (da intet var valgt)
not_listable: Foreslås ikke
not_trendable: Vises ikke under tendenser
not_usable: Kan ikke anvendes
peaked_on_and_decaying: Toppede pr. %{date}, nu for nedadgående
- title: Populære hashtags
+ title: Populære etiketter
trendable: Kan vises under tendenser
trending_rank: 'Populær #%{rank}'
usable: Kan anvendes
@@ -1093,7 +1093,7 @@ da:
new_trending_statuses:
title: Populære opslag
new_trending_tags:
- title: Populære hashtags
+ title: Populære etiketter
subject: Nye tendenser klar til gennemgang på %{instance}
aliases:
add_new: Opret alias
@@ -1104,7 +1104,7 @@ da:
remove: Fjern aliaslinkning
appearance:
advanced_web_interface: Avanceret webgrænseflade
- advanced_web_interface_hint: 'Ønsker du udnytte hele skærmbredden, lader den avancerede webgrænseflade dig opsætte mange forskellige kolonner for at se så meget information på samme tid som ønsket: Hjem, notifikationer, federeret tidslinje, et hvilket som helst antal lister og hashtags.'
+ advanced_web_interface_hint: 'Ønsker du udnytte hele skærmbredden, lader den avancerede netgrænseflade dig opsætte mange forskellige kolonner for at se så meget information på samme tid som ønsket: Hjem, notifikationer, fødereret tidslinje, et hvilket som helst antal lister og etiketter.'
animations_and_accessibility: Animationer og tilgængelighed
confirmation_dialogs: Bekræftelsesdialoger
discovery: Opdagelse
@@ -1326,13 +1326,13 @@ da:
csv: CSV
domain_blocks: Domæneblokeringer
lists: Lister
- mutes: Du tavsgør
+ mutes: Du skjuler
storage: Medielagerplads
featured_tags:
add_new: Tilføj nyt
errors:
- limit: Det maksimale antal hashtags er allerede fremhævet
- hint_html: "Hvad er fremhævede hashtags? De vises i en fremtrædende position på din offentlige profil og giver folk mulighed for at gennemse dine offentlige indlæg specifikt under disse hashtags. De er et fantastisk værktøj til at holde styr på kreative værker eller langsigtede projekter."
+ limit: Det maksimale antal etiketter er allerede fremhævet
+ hint_html: "Hvad er fremhævede etiketter? De vises i en fremtrædende position på din offentlige profil og giver folk mulighed for at gennemse dine offentlige indlæg specifikt under disse etiketter. De er et fantastisk værktøj til at holde styr på kreative værker eller langsigtede projekter."
filters:
contexts:
account: Profiler
@@ -1432,7 +1432,7 @@ da:
other: Man er ved at erstatte sine lister med indhold fra %{filename}. Op til %{count} konti føjes til nye lister.
muting_html:
one: Man er ved at sin liste over en tavsgjort konto med %{count} konto fra %{filename}.
- other: Man er ved at sin liste over tavsgjorte konti med op til %{count} konti fra %{filename}.
+ other: Du er ved at erstatte din liste over skjulte kontoer med op til %{count} kontoer fra %{filename}.
preambles:
blocking_html:
one: Man er ved at blokere%{count} konto fra %{filename}.
@@ -1451,7 +1451,7 @@ da:
other: Man er ved at tilføje %{count} konti fra %{filename} til sine lister. Nye lister oprettes, hvis der ikke findes nogen liste at tilføje til.
muting_html:
one: Man er ved at tavsgøre%{count} konto fra %{filename}.
- other: Man er ved at tavsgøre op til %{count} konto fra %{filename}.
+ other: Du er ved at skjule op til %{count} kontoer fra %{filename}.
preface: Du kan importere data, du har eksporteret fra en anden server, såsom en liste over folk du følger eller blokerer.
recent_imports: Seneste importer
states:
@@ -1468,11 +1468,11 @@ da:
domain_blocking: Importerer blokerede konti
following: Importerer fulgte konti
lists: Import af lister
- muting: Importerer tavsgjorte konti
+ muting: Importerer skjulte kontoer
type: Importtype
type_groups:
constructive: Følger og Bogmærker
- destructive: Blokeringer og tavsgjorte
+ destructive: Blokerede og skjulte kontoer
types:
blocking: Blokeringsliste
bookmarks: Bogmærker
@@ -1529,7 +1529,7 @@ da:
follow: e-mailnotifikationer om nye følgere
follow_request: e-mailnotifikationer om følgeanmodninger
mention: e-mailnotifikationer om omtaler
- reblog: e-mailnotifikationer om boosts
+ reblog: e-mailnotifikationer om fremhævelser
resubscribe_html: Har man afmeldt sig ved en fejl, kan man gentilmelde sig via indstillingerne E-mailnotifikationer.
success_html: Man vil ikke længere modtage %{type} for Mastodon på %{domain} til e-mailen %{email}.
title: Opsig abonnement
@@ -1574,7 +1574,7 @@ da:
title: Moderation
move_handler:
carry_blocks_over_text: Denne bruger er flyttet fra %{acct}, som du har haft blokeret.
- carry_mutes_over_text: Denne bruger er flyttet fra %{acct}, som du har haft tavsgjort.
+ carry_mutes_over_text: Denne bruger er flyttet fra %{acct}, som du har haft skjult.
copy_account_note_text: 'Denne bruger er flyttet fra %{acct}, hvor dine tidligere noter om dem var:'
navigation:
toggle_menu: Åbn/luk menu
@@ -1605,9 +1605,9 @@ da:
poll:
subject: En afstemning fra %{name} er afsluttet
reblog:
- body: 'Dit indlæg blev boostet af %{name}:'
- subject: "%{name} boostede dit indlæg"
- title: Nyt boost
+ body: 'Dit indlæg blev fremhævet af %{name}:'
+ subject: "%{name} fremhævede dit indlæg"
+ title: Ny fremhævelse
status:
subject: "%{name} har netop postet"
update:
@@ -1704,7 +1704,7 @@ da:
content_warning: 'Indholdsadvarsel:'
descriptions:
account: Offentlige indlæg fra @%{acct}
- tag: 'Offentlige indlæg tagget #%{hashtag}'
+ tag: 'Offentlige indlæg etiketteret #%{hashtag}'
scheduled_statuses:
over_daily_limit: Den daglige grænse på %{limit} planlagte indlæg er nået
over_total_limit: Grænsen på %{limit} planlagte indlæg er nået
@@ -1769,7 +1769,7 @@ da:
development: Udvikling
edit_profile: Redigér profil
export: Eksport
- featured_tags: Udvalgte hashtags
+ featured_tags: Udvalgte etiketter
import: Import
import_and_export: Import og eksport
migrate: Kontomigrering
@@ -1805,12 +1805,12 @@ da:
video:
one: "%{count} video"
other: "%{count} videoer"
- boosted_from_html: Boostet fra %{acct_link}
+ boosted_from_html: Fremhævet fra %{acct_link}
content_warning: 'Indholdsadvarsel: %{warning}'
default_language: Samme som UI-sproget
disallowed_hashtags:
- one: 'indeholdte et ikke tilladt hashtag: %{tags}'
- other: 'indeholdte de ikke tilladte hashtags: %{tags}'
+ one: 'indeholdte en ikke tilladt etiket: %{tags}'
+ other: 'indeholdte de ikke tilladte etiketter: %{tags}'
edited_at_html: Redigeret %{date}
errors:
in_reply_not_found: Indlægget, der forsøges besvaret, ser ikke ud til at eksistere.
@@ -1819,7 +1819,7 @@ da:
direct: Indlæg, som kun kan ses af omtalte brugere, kan ikke fastgøres
limit: Maksimalt antal indlæg allerede fastgjort
ownership: Andres indlæg kan ikke fastgøres
- reblog: Et boost kan ikke fastgøres
+ reblog: En fremhævelse kan ikke fastgøres
title: '%{name}: "%{quote}"'
visibilities:
direct: Direkte
@@ -1835,9 +1835,9 @@ da:
exceptions: Undtagelser
explanation: Sletning af indlæg er en ressourcekrævende operation, hvorfor dette sker gradvist over tid, når serveren ellers ikke er optaget. Indlæg kan derfor blive slettet efter, at de reelt har passeret aldersgrænsen.
ignore_favs: Ignorér favoritter
- ignore_reblogs: Ignorér boosts
+ ignore_reblogs: Ignorér fremhævelser
interaction_exceptions: Undtagelser baseret på interaktioner
- interaction_exceptions_explanation: Bemærk, at det ikke garanteres, at indlæg slettes, hvis de når under favorit- eller boost-tærsklerne efter én gang at været nået over dem.
+ interaction_exceptions_explanation: Bemærk, at det ikke garanteres, at indlæg slettes, hvis de når under favorit- eller fremhævelses-tærsklerne efter én gang at været nået over dem.
keep_direct: Behold direkte besked
keep_direct_hint: Sletter ingen af dine direkte beskeder
keep_media: Behold indlæg med medievedhæftninger
@@ -1862,8 +1862,8 @@ da:
min_age_label: Alderstærskel
min_favs: Behold indlæg favoritmarkeret mindst
min_favs_hint: Sletter ingen egne indlæg, som har modtaget minimum dette antal favoritmarkeringer. Lad stå tomt for at slette indlæg uanset favoritmarkeringer
- min_reblogs: Behold indlæg boostet mindst
- min_reblogs_hint: Sletter ingen egne indlæg, som er boostet flere end dette antal gange. Lad stå tomt for at ignorere denne tærskel under sletning
+ min_reblogs: Behold indlæg fremhævet mindst
+ min_reblogs_hint: Sletter ingen af egne indlæg, som er fremhævet flere end dette antal gange. Lad stå tomt for at ignorere denne tærskel under sletning
stream_entries:
sensitive_content: Sensitivt indhold
strikes:
@@ -2003,8 +2003,8 @@ da:
one: "%{people} person de seneste 2 dage"
other: "%{people} personer de seneste 2 dage"
hashtags_subtitle: Udforsk de seneste 2 dages tendenser
- hashtags_title: Populære hashtags
- hashtags_view_more: Se flere populære hashtags
+ hashtags_title: Populære etiketter
+ hashtags_view_more: Se flere populære etiketter
post_action: Skriv
post_step: Sig hej til verden med tekst, fotos, videoer eller afstemninger.
post_title: Opret det første indlæg
diff --git a/config/locales/doorkeeper.da.yml b/config/locales/doorkeeper.da.yml
index 7ac16e0012..a10bee34df 100644
--- a/config/locales/doorkeeper.da.yml
+++ b/config/locales/doorkeeper.da.yml
@@ -130,11 +130,11 @@ da:
crypto: Ende-til-ende kryptering
favourites: Favoritter
filters: Filtre
- follow: Følger, Tavsgør og Blokerer
+ follow: Fulgte, skjjulte og blokerede kontoer
follows: Følger
lists: Lister
media: Medievedhæftninger
- mutes: Tavsgørelser
+ mutes: Skjulte kontoer
notifications: Notifikationer
profile: Din Mastodon-profil
push: Push-notifikationer
@@ -177,7 +177,7 @@ da:
read:filters: se dine filtre
read:follows: se dine følger
read:lists: se dine lister
- read:mutes: se dine tavsgørelser
+ read:mutes: se dine skjulte kontoer
read:notifications: se dine notifikationer
read:reports: se dine anmeldelser
read:search: søg på dine vegne
@@ -186,13 +186,13 @@ da:
write:accounts: ændre din profil
write:blocks: blokere konti og domæner
write:bookmarks: bogmærke indlæg
- write:conversations: tavsgøre og slette konversationer
+ write:conversations: skjul og slet samtaler
write:favourites: favoritmarkere indlæg
write:filters: oprette filtre
write:follows: følge personer
write:lists: oprette lister
write:media: uploade mediefiler
- write:mutes: tavsgøre personer og konversationer
+ write:mutes: skjul personer og samtaler
write:notifications: rydde dine notifikationer
write:reports: anmelde personer
write:statuses: udgive indlæg
diff --git a/config/locales/doorkeeper.eo.yml b/config/locales/doorkeeper.eo.yml
index 36a5ed1974..ede1ef815e 100644
--- a/config/locales/doorkeeper.eo.yml
+++ b/config/locales/doorkeeper.eo.yml
@@ -191,7 +191,7 @@ eo:
write:filters: krei filtrilojn
write:follows: sekvi homojn
write:lists: krei listojn
- write:media: alŝuti plurmediojn
+ write:media: alŝuti aŭdovidaĵojn
write:mutes: silentigi homojn kaj konversaciojn
write:notifications: forigi viajn sciigojn
write:reports: signali aliajn homojn
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index d56d67e28e..085081b15a 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -363,7 +363,7 @@ eo:
dashboard:
active_users: aktivaj uzantoj
interactions: interago
- media_storage: Konservo de plurmedioj
+ media_storage: Konservo de aŭdovidaĵoj
new_users: novaj uzantoj
opened_reports: raportoj malfermitaj
pending_appeals_html:
@@ -508,7 +508,7 @@ eo:
description_html: Vi povas difini enhavopolitikojn al la ĉiuj kontoj.
limited_federation_mode_description_html: Vi povas elekti, ĉu permesi federacion kun tiu domajno.
policies:
- reject_media: Malakcepti plurmediojn
+ reject_media: Malakcepti la vidaŭdaĵojn
reject_reports: Malakcepti raportojn
silence: Kaŝu
suspend: Suspendi
diff --git a/config/locales/ga.yml b/config/locales/ga.yml
index 56f66609c3..9945e44c07 100644
--- a/config/locales/ga.yml
+++ b/config/locales/ga.yml
@@ -1266,6 +1266,7 @@ ga:
too_fast: Cuireadh an fhoirm isteach róthapa, triail arís.
use_security_key: Úsáid eochair shlándála
user_agreement_html: Léigh mé agus aontaím leis na téarmaí seirbhíse agus polasaí príobháideachais
+ user_privacy_agreement_html: Léigh mé agus aontaím leis an polasaí príobháideachais
author_attribution:
example_title: Téacs samplach
hint_html: An bhfuil tú ag scríobh altanna nuachta nó blag lasmuigh de Mastodon? Rialú conas a gheobhaidh tú creidmheas nuair a roinntear iad ar Mastodon.
diff --git a/config/locales/ia.yml b/config/locales/ia.yml
index f42271d16c..838acfd4d6 100644
--- a/config/locales/ia.yml
+++ b/config/locales/ia.yml
@@ -1209,6 +1209,7 @@ ia:
too_fast: Formulario inviate troppo rapidemente. Tenta lo de novo.
use_security_key: Usar clave de securitate
user_agreement_html: Io ha legite e accepta le conditiones de servicio e le politica de confidentialitate
+ user_privacy_agreement_html: Io ha legite e io accepta le politica de confidentialitate
author_attribution:
example_title: Texto de exemplo
hint_html: Scribe tu articulos de novas o de blog foras de Mastodon? Controla le maniera in que tu recipe attribution quando on los condivide sur Mastodon.
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 5405cabd9b..9937375640 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -1673,7 +1673,7 @@ ko:
over_total_limit: 예약 게시물 제한 %{limit}을 초과합니다
too_soon: 미래의 날짜여야 합니다
self_destruct:
- lead_html: 안타깝게도, %{domain} 도메인을 영구히 폐쇄합니다. 이곳의 계정을 가졌다면, 이제 이용할 수 없으며, 당분간 백업 데이터를 요청할 수 있습니다.
+ lead_html: 안타깝게도, %{domain}은 영구적으로 폐쇄됩니다. 이곳의 계정을 가지고 있었다면, 이제 이용할 수 없지만 백업 데이터는 요청할 수 있습니다.
title: 이 서버는 폐쇄중입니다
sessions:
activity: 최근 활동
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index e2e2860059..5770b4ce0c 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -1247,6 +1247,7 @@ pl:
too_fast: Zbyt szybko przesłano formularz, spróbuj ponownie.
use_security_key: Użyj klucza bezpieczeństwa
user_agreement_html: Przeczytałem i akceptuję warunki korzystania z usługi oraz politykę prywatności
+ user_privacy_agreement_html: Przeczytałem/am/o i akceptuję politykę prywatności
author_attribution:
example_title: Przykładowy tekst
hint_html: Piszesz wiadomości albo bloga poza Mastodonem? Kontroluj jak będą ci przypisywane podczas dizielenia się nimi na Mastodonie.
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 2db629cafc..fe0d797ff8 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -1247,6 +1247,7 @@ ru:
too_fast: Форма отправлена слишком быстро, попробуйте еще раз.
use_security_key: Использовать ключ безопасности
user_agreement_html: Мной прочитаны и принятыпользовательское соглашение и политика конфиденциальности
+ user_privacy_agreement_html: Мной прочитана и принята политика конфиденциальности
author_attribution:
example_title: Образец текста
hint_html: Публикуете ли вы свои статьи где-либо ещё кроме Mastodon? Если да, то ваше авторство может быть упомянуто, когда ими делятся в Mastodon.
diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml
index 37ad72a7e4..ee0a3ae561 100644
--- a/config/locales/simple_form.cs.yml
+++ b/config/locales/simple_form.cs.yml
@@ -233,6 +233,7 @@ cs:
setting_display_media_show_all: Zobrazit vše
setting_expand_spoilers: Vždy rozbalit příspěvky označené varováními o obsahu
setting_hide_network: Skrýt mou síť
+ setting_missing_alt_text_modal: Zobrazit potvrzovací dialog před odesláním médií bez alt textu
setting_reduce_motion: Omezit pohyb v animacích
setting_system_font_ui: Použít výchozí písmo systému
setting_system_scrollbars_ui: Použít výchozí posuvník systému
diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml
index 1220ceabf3..805f8f93af 100644
--- a/config/locales/simple_form.cy.yml
+++ b/config/locales/simple_form.cy.yml
@@ -3,6 +3,7 @@ cy:
simple_form:
hints:
account:
+ attribution_domains: Un i bob llinell. Yn amddiffyn rhag priodoli ffug.
discoverable: Mae'n bosibl y bydd eich postiadau cyhoeddus a'ch proffil yn cael sylw neu'n cael eu hargymell mewn gwahanol feysydd o Mastodon ac efallai y bydd eich proffil yn cael ei awgrymu i ddefnyddwyr eraill.
display_name: Eich enw llawn neu'ch enw hwyl.
fields: Eich tudalen cartref, rhagenwau, oed, neu unrhyw beth.
@@ -155,6 +156,7 @@ cy:
url: I ble bydd digwyddiadau'n cael eu hanfon
labels:
account:
+ attribution_domains: Gwefannau sy'n cael caniatâd i'ch cydnabod chi
discoverable: Proffil nodwedd a phostiadau mewn algorithmau darganfod
fields:
name: Label
@@ -231,6 +233,7 @@ cy:
setting_display_media_show_all: Dangos popeth
setting_expand_spoilers: Dangos postiadau wedi'u marcio â rhybudd cynnwys bob tro
setting_hide_network: Cuddio eich graff cymdeithasol
+ setting_missing_alt_text_modal: Dangos deialog cadarnhau cyn postio cyfrwng heb destun amgen
setting_reduce_motion: Lleihau mudiant mewn animeiddiadau
setting_system_font_ui: Defnyddio ffont rhagosodedig y system
setting_system_scrollbars_ui: Defnyddiwch far sgrolio rhagosodedig y system
diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml
index 96bd1b3e70..1548e3e24e 100644
--- a/config/locales/simple_form.da.yml
+++ b/config/locales/simple_form.da.yml
@@ -8,7 +8,7 @@ da:
display_name: Dit fulde navn eller dit sjove navn.
fields: Din hjemmeside, dine pronominer, din alder, eller hvad du har lyst til.
indexable: Dine offentlige indlæg vil kunne vises i Mastodon-søgeresultater. Folk, som har interageret med dem, vil kunne finde dem uanset.
- note: 'Du kan @omtale andre personer eller #hashtags.'
+ note: 'Du kan @omtale andre personer eller #etiketter.'
show_collections: Folk vil ikke kunne tjekke dine Følger og Følgere. Folk, du selv følger, vil stadig kunne se dette.
unlocked: Man vil kunne følges af folk uden først at godkende dem. Ønsker man at gennemgå Følg-anmodninger og individuelt acceptere/afvise nye følgere, så fjern markeringen.
account_alias:
@@ -16,7 +16,7 @@ da:
account_migration:
acct: Angiv brugernavn@domain for den konto, hvortil du vil flytte
account_warning_preset:
- text: Du kan bruge indlægssyntaks, såsom URL'er, hashtags og omtaler
+ text: Du kan bruge indlægssyntaks, såsom URL'er, etiketter og omtaler
title: Valgfri. Ikke synlig for modtageren
admin_account_action:
include_statuses: Brugeren vil se, hvilke indlæg, som har forårsaget modereringen/advarslen
@@ -54,7 +54,7 @@ da:
password: Brug mindst 8 tegn
phrase: Matches uanset uanset brug af store/små bogstaver i teksten eller indholdsadvarsel for et indlæg
scopes: De API'er, som applikationen vil kunne tilgå. Vælges en topniveaudstrækning, vil detailvalg være unødvendige.
- setting_aggregate_reblogs: Vis ikke nye boosts for nyligt boostede indlæg (påvirker kun nyligt modtagne boosts)
+ setting_aggregate_reblogs: Vis ikke nye fremhævelser for nyligt fremhævede indlæg (påvirker kun nyligt modtagne fremhævelser)
setting_always_send_emails: Normalt sendes ingen e-mailnotifikationer under aktivt brug af Mastodon
setting_default_sensitive: Sensitive medier er som standard skjult og kan vises med et klik
setting_display_media_default: Skjul medier med sensitiv-markering
@@ -71,7 +71,7 @@ da:
domain: Dette kan være domænenavnet vist i den benyttede i e-mailadresse eller MX-post. Begge tjekkes under tilmelding.
with_dns_records: Et forsøg på at opløse det givne domænes DNS-poster foretages, og resultaterne blokeres ligeledes
featured_tag:
- name: 'Her er nogle af dine hyppigst brugte hashtags:'
+ name: 'Her er nogle af dine hyppigst brugte etiketter:'
filters:
action: Vælg handlingen til eksekvering, når et indlæg matcher filteret
actions:
@@ -83,7 +83,7 @@ da:
backups_retention_period: Brugere har mulighed for at generere arkiver af deres indlæg til senere downloade. Når sat til positiv værdi, vil disse arkiver automatisk blive slettet fra lagerpladsen efter det angivne antal dage.
bootstrap_timeline_accounts: Disse konti fastgøres øverst på nye brugeres følg-anbefalinger.
closed_registrations_message: Vises, når tilmeldinger er lukket
- content_cache_retention_period: Alle indlæg fra andre servere (herunder boosts og besvarelser) slettes efter det angivne antal dage uden hensyn til lokal brugerinteraktion med disse indlæg. Dette omfatter indlæg, hvor en lokal bruger har markeret dem som bogmærker eller favoritter. Private omtaler mellem brugere fra forskellige instanser vil også være tabt og umulige at gendanne. Brugen af denne indstilling er beregnet til særlige formål instanser og bryder mange brugerforventninger ved implementering til almindelig brug.
+ content_cache_retention_period: Alle indlæg fra andre servere (herunder fremhævelser og besvarelser) slettes efter det angivne antal dage uden hensyn til lokal brugerinteraktion med disse indlæg. Dette omfatter indlæg, hvor en lokal bruger har markeret dem som bogmærker eller favoritter. Private omtaler mellem brugere fra forskellige instanser vil også være tabt og umulige at gendanne. Brugen af denne indstilling er beregnet til særlige formål instanser og bryder mange brugerforventninger ved implementering til almindelig brug.
custom_css: Man kan anvende tilpassede stilarter på Mastodon-webversionen.
favicon: WEBP, PNG, GIF eller JPG. Tilsidesætter standard Mastodon favikonet på mobilenheder med et tilpasset ikon.
mascot: Tilsidesætter illustrationen i den avancerede webgrænseflade.
@@ -102,7 +102,7 @@ da:
thumbnail: Et ca. 2:1 billede vist sammen med serveroplysningerne.
timeline_preview: Udloggede besøgende kan gennemse serverens seneste offentlige indlæg.
trendable_by_default: Spring manuel gennemgang af trendindhold over. Individuelle elementer kan stadig fjernes fra trends efter kendsgerningen.
- trends: Tendenser viser, hvilke indlæg, hashtags og nyheder opnår momentum på serveren.
+ trends: Tendenser viser, hvilke indlæg, etiketter og nyheder opnår momentum på serveren.
trends_as_landing_page: Vis tendensindhold til udloggede brugere og besøgende i stedet for en beskrivelse af denne server. Kræver, at tendenser er aktiveret.
form_challenge:
current_password: Du bevæger dig ind på et sikkert område
@@ -217,10 +217,10 @@ da:
password: Adgangskode
phrase: Nøgleord/-sætning
setting_advanced_layout: Aktivér avanceret webgrænseflade
- setting_aggregate_reblogs: Gruppér boosts på tidslinjer
+ setting_aggregate_reblogs: Gruppér fremhævelser på tidslinjer
setting_always_send_emails: Send altid e-mailnotifikationer
setting_auto_play_gif: Autoafspil animerede GIF'er
- setting_boost_modal: Vis bekræftelsesdialog inden boosting
+ setting_boost_modal: Vis bekræftelsesdialog inden fremhævelse
setting_default_language: Sprog for indlæg
setting_default_privacy: Fortrolighed for indlæg
setting_default_sensitive: Markér altid medier som sensitive
@@ -311,7 +311,7 @@ da:
follow_request: Nogen anmodede om at følge dig
mention: Nogen omtalte dig
pending_account: Ny konto kræver gennemgang
- reblog: Nogen boostede dit indlæg
+ reblog: Nogen fremhævede dit indlæg
report: Ny anmeldelse indsendt
software_updates:
all: Notificér ved alle opdateringer
@@ -327,10 +327,10 @@ da:
indexable: Inkludér profilside i søgemaskiner
show_application: Vis, fra hvilken app et indlæg er sendt
tag:
- listable: Tillad visning af dette hashtag i søgninger og forslag
+ listable: Tillad visning af denne etiket i søgninger og forslag
name: Hashtag
- trendable: Tillad visning af dette hashtag under trends
- usable: Tillad indlæg at benytte dette hashtag lokalt
+ trendable: Tillad visning af denne etiket under tendenser
+ usable: Tillad indlæg at benytte denne etiket lokalt
terms_of_service:
changelog: Hvad der er ændret?
text: Tjenestevilkår
diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml
index fa7868cc76..8a4cb247c7 100644
--- a/config/locales/simple_form.en-GB.yml
+++ b/config/locales/simple_form.en-GB.yml
@@ -233,6 +233,7 @@ en-GB:
setting_display_media_show_all: Show all
setting_expand_spoilers: Always expand posts marked with content warnings
setting_hide_network: Hide your social graph
+ setting_missing_alt_text_modal: Show confirmation dialogue before posting media without alt text
setting_reduce_motion: Reduce motion in animations
setting_system_font_ui: Use system's default font
setting_system_scrollbars_ui: Use system's default scrollbar
diff --git a/config/locales/simple_form.eo.yml b/config/locales/simple_form.eo.yml
index 7aafd666a5..499b692a28 100644
--- a/config/locales/simple_form.eo.yml
+++ b/config/locales/simple_form.eo.yml
@@ -56,10 +56,10 @@ eo:
scopes: Kiujn API-ojn la aplikaĵo permesiĝos atingi. Se vi elektas supran amplekson, vi ne bezonas elekti la individuajn.
setting_aggregate_reblogs: Ne montri novajn plusendojn de mesaĝoj lastatempe plusenditaj (nur efikas al nove ricevitaj plusendoj)
setting_always_send_emails: Normale, la sciigoj per retpoŝto ne estos senditaj kiam vi uzas Mastodon aktive
- setting_default_sensitive: Tiklaj plurmedioj estas kaŝitaj implicite, kaj povas esti montritaj per klako
+ setting_default_sensitive: Tiklaj vidaŭdaĵoj estas kaŝitaj implicite, kaj povas esti montritaj per klako
setting_display_media_default: Kaŝi plurmediojn markitajn kiel tiklaj
- setting_display_media_hide_all: Ĉiam kaŝi la plurmediojn
- setting_display_media_show_all: Ĉiam montri la plurmediojn
+ setting_display_media_hide_all: Ĉiam kaŝi la vidaŭdaĵojn
+ setting_display_media_show_all: Ĉiam montri la vidaŭdaĵojn
setting_system_scrollbars_ui: Aplikas nur por surtablaj retumiloj baziĝas de Safari kaj Chrome
setting_use_blurhash: Transirojn estas bazita sur la koloroj de la kaŝitaj aŭdovidaĵoj sed ne montri iun ajn detalon
setting_use_pending_items: Kaŝi tempoliniajn ĝisdatigojn malantaŭ klako anstataŭ aŭtomate rulumi la fluon
@@ -223,11 +223,11 @@ eo:
setting_boost_modal: Montri konfirman fenestron antaŭ ol diskonigi mesaĝon
setting_default_language: Publikada lingvo
setting_default_privacy: Privateco de afiŝado
- setting_default_sensitive: Ĉiam marki plurmediojn kiel tiklaj
+ setting_default_sensitive: Ĉiam marki la vidaŭdaĵojn kiel tiklaj
setting_delete_modal: Montri konfirman fenestron antaŭ ol forigi mesaĝon
setting_disable_hover_cards: Malebligi profilan antaŭmontron kiam oni musumas
setting_disable_swiping: Malebligi svingajn movojn
- setting_display_media: Montrado de plurmedioj
+ setting_display_media: Vidigo de vidaŭdaĵoj
setting_display_media_default: Implicita
setting_display_media_hide_all: Kaŝi ĉiujn
setting_display_media_show_all: Montri ĉiujn
diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml
index d9b8e7b6a5..8c582b1f26 100644
--- a/config/locales/simple_form.es-AR.yml
+++ b/config/locales/simple_form.es-AR.yml
@@ -233,7 +233,7 @@ es-AR:
setting_display_media_show_all: Mostrar todo
setting_expand_spoilers: Siempre expandir los mensajes marcados con advertencias de contenido
setting_hide_network: Ocultá tu gráfica social
- setting_missing_alt_text_modal: Mostrar diálogo de confirmación antes de publicar medios sin texto alternativo
+ setting_missing_alt_text_modal: Mostrar diálogo de confirmación antes de enviar medios sin texto alternativo
setting_reduce_motion: Reducir el movimiento de las animaciones
setting_system_font_ui: Utilizar la tipografía predeterminada del sistema
setting_system_scrollbars_ui: Usar la barra de desplazamiento predeterminada del sistema operativo
diff --git a/config/locales/simple_form.fr-CA.yml b/config/locales/simple_form.fr-CA.yml
index d229808eae..5cd87c1235 100644
--- a/config/locales/simple_form.fr-CA.yml
+++ b/config/locales/simple_form.fr-CA.yml
@@ -233,6 +233,7 @@ fr-CA:
setting_display_media_show_all: Montrer tout
setting_expand_spoilers: Toujours déplier les messages marqués d’un avertissement de contenu
setting_hide_network: Cacher votre réseau
+ setting_missing_alt_text_modal: Afficher une fenêtre de confirmation avant de poster un média sans texte alternatif
setting_reduce_motion: Réduire la vitesse des animations
setting_system_font_ui: Utiliser la police par défaut du système
setting_system_scrollbars_ui: Utiliser la barre de défilement par défaut du système
diff --git a/config/locales/simple_form.fr.yml b/config/locales/simple_form.fr.yml
index 4fa202847b..9572bbf440 100644
--- a/config/locales/simple_form.fr.yml
+++ b/config/locales/simple_form.fr.yml
@@ -233,6 +233,7 @@ fr:
setting_display_media_show_all: Montrer tout
setting_expand_spoilers: Toujours déplier les messages marqués d’un avertissement de contenu
setting_hide_network: Cacher votre réseau
+ setting_missing_alt_text_modal: Afficher une fenêtre de confirmation avant de poster un média sans texte alternatif
setting_reduce_motion: Réduire la vitesse des animations
setting_system_font_ui: Utiliser la police par défaut du système
setting_system_scrollbars_ui: Utiliser la barre de défilement par défaut du système
diff --git a/config/locales/simple_form.ga.yml b/config/locales/simple_form.ga.yml
index 93eff4a89d..93a1090cf8 100644
--- a/config/locales/simple_form.ga.yml
+++ b/config/locales/simple_form.ga.yml
@@ -3,6 +3,7 @@ ga:
simple_form:
hints:
account:
+ attribution_domains: Ceann in aghaidh an líne. Cosnaíonn sé ó sannadh bréagach.
discoverable: Seans go mbeidh do phostálacha poiblí agus do phróifíl le feiceáil nó molta i réimsí éagsúla de Mastodon agus is féidir do phróifíl a mholadh d’úsáideoirí eile.
display_name: D'ainm iomlán nó d'ainm spraoi.
fields: Do leathanach baile, forainmneacha, aois, rud ar bith is mian leat.
@@ -155,6 +156,7 @@ ga:
url: An áit a seolfar imeachtaí chuig
labels:
account:
+ attribution_domains: Tá cead ag suíomhanna Gréasáin creidmheas a thabhairt duit
discoverable: Próifíl gné agus postálacha in halgartaim fionnachtana
fields:
name: Lipéad
@@ -231,6 +233,7 @@ ga:
setting_display_media_show_all: Taispeáin uile
setting_expand_spoilers: Méadaigh postálacha atá marcáilte le rabhaidh inneachair i gcónaí
setting_hide_network: Folaigh do ghraf sóisialta
+ setting_missing_alt_text_modal: Taispeáin dialóg deimhnithe sula bpostálann tú meán gan alt téacs
setting_reduce_motion: Laghdú ar an tairiscint i beochan
setting_system_font_ui: Úsáid cló réamhshocraithe an chórais
setting_system_scrollbars_ui: Bain úsáid as scrollbharra réamhshocraithe an chórais
diff --git a/config/locales/simple_form.ia.yml b/config/locales/simple_form.ia.yml
index 5ede26f9ad..2f9ed5eacc 100644
--- a/config/locales/simple_form.ia.yml
+++ b/config/locales/simple_form.ia.yml
@@ -58,8 +58,8 @@ ia:
setting_always_send_emails: Normalmente, le notificationes de e-mail non es inviate quando tu activemente usa Mastodon
setting_default_sensitive: Le medios sensibile es celate de ordinario e pote esser revelate con un clic
setting_display_media_default: Celar le medios marcate como sensibile
- setting_display_media_hide_all: Sempre celar le medios
- setting_display_media_show_all: Sempre monstrar le medios
+ setting_display_media_hide_all: Sempre celar contento multimedial
+ setting_display_media_show_all: Sempre monstrar contento multimedial
setting_system_scrollbars_ui: Se applica solmente al navigatores de scriptorio basate sur Safari e Chrome
setting_use_blurhash: Le imagines degradate se basa sur le colores del visuales celate, ma illos offusca tote le detalios
setting_use_pending_items: Requirer un clic pro monstrar nove messages in vice de rolar automaticamente le fluxo
@@ -233,6 +233,7 @@ ia:
setting_display_media_show_all: Monstrar toto
setting_expand_spoilers: Sempre expander messages marcate con avisos de contento
setting_hide_network: Cela tu rete social
+ setting_missing_alt_text_modal: Monstrar un dialogo de confirmation ante de publicar multimedia sin texto alternative
setting_reduce_motion: Reducer movimento in animationes
setting_system_font_ui: Usar typo de litteras predefinite del systema
setting_system_scrollbars_ui: Usar le barra de rolamento predefinite del systema
diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml
index 62fe75e838..96f7881012 100644
--- a/config/locales/simple_form.it.yml
+++ b/config/locales/simple_form.it.yml
@@ -233,6 +233,7 @@ it:
setting_display_media_show_all: Mostra tutti
setting_expand_spoilers: Espandi sempre post con content warning
setting_hide_network: Nascondi la tua rete
+ setting_missing_alt_text_modal: Chiedi di confermare prima di pubblicare media senza testo alternativo
setting_reduce_motion: Riduci movimento nelle animazioni
setting_system_font_ui: Usa il carattere predefinito del sistema
setting_system_scrollbars_ui: Utilizza la barra di scorrimento predefinita del sistema
diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml
index 92d306224a..9d0b55c9bc 100644
--- a/config/locales/simple_form.ko.yml
+++ b/config/locales/simple_form.ko.yml
@@ -219,11 +219,11 @@ ko:
setting_aggregate_reblogs: 타임라인의 부스트를 그룹화
setting_always_send_emails: 항상 이메일 알림 보내기
setting_auto_play_gif: 애니메이션 GIF를 자동 재생
- setting_boost_modal: 부스트 전 확인 창을 표시
+ setting_boost_modal: 부스트 전 확인창을 띄웁니다
setting_default_language: 게시물 언어
setting_default_privacy: 게시물 프라이버시
setting_default_sensitive: 미디어를 언제나 민감한 콘텐츠로 설정
- setting_delete_modal: 게시물 삭제 전 확인 창을 표시
+ setting_delete_modal: 게시물 삭제 전 확인창을 띄웁니다
setting_disable_hover_cards: 호버시 프로필 미리보기를 비활성화
setting_disable_swiping: 스와이프 모션 비활성화
setting_display_media: 미디어 표시
@@ -232,6 +232,7 @@ ko:
setting_display_media_show_all: 모두 보이기
setting_expand_spoilers: 내용 경고로 표시된 게시물을 항상 펼치기
setting_hide_network: 내 인맥 숨기기
+ setting_missing_alt_text_modal: 대체 텍스트 없이 미디어를 게시하려고 할 때 확인창을 띄웁니다
setting_reduce_motion: 애니메이션 줄이기
setting_system_font_ui: 시스템의 기본 글꼴을 사용
setting_system_scrollbars_ui: 시스템 기본 스크롤바 사용
diff --git a/config/locales/simple_form.lt.yml b/config/locales/simple_form.lt.yml
index 73460d2667..454179d0bd 100644
--- a/config/locales/simple_form.lt.yml
+++ b/config/locales/simple_form.lt.yml
@@ -160,6 +160,7 @@ lt:
setting_display_media_show_all: Rodyti viską
setting_expand_spoilers: Visada išplėsti įrašus, pažymėtus turinio įspėjimais
setting_hide_network: Slėpti savo socialinę diagramą
+ setting_missing_alt_text_modal: Rodyti patvirtinimo dialogo langą prieš skelbiant mediją be alternatyvaus teksto.
setting_reduce_motion: Sumažinti judėjimą animacijose
setting_system_font_ui: Naudoti numatytąjį sistemos šriftą
setting_system_scrollbars_ui: Naudoti numatytąją sistemos slankjuostę
diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml
index efa17c1a9b..74dc8218a9 100644
--- a/config/locales/simple_form.pl.yml
+++ b/config/locales/simple_form.pl.yml
@@ -137,6 +137,10 @@ pl:
admin_email: Zawiadomienia prawne obejmują środki zapobiegawcze, nakazy sądowe, wnioski o popełnienie sprawy oraz wnioski organów ścigania.
arbitration_address: Może być taki sam jak adres fizyczny powyżej lub „N/A” jeśli używasz adresu e-mail
arbitration_website: Może być formularzem internetowym lub „N/A”, jeśli używasz adresu e-mail
+ dmca_address: W przypadku operatorów z USA należy użyć adresu zarejestrowanego w DMCA Designated Agent Directory. Lista skrytek pocztowych dostępna jest na bezpośrednią prośbę użytkownika. Użyj DMCA Agent Post Office Box Waiver Request, aby wysłać email do Copyright Office z informacją, że jesteś domowym administratorm treści i z powodu obawy o zemstę lub odwetu za swoje działania, musisz użyć skrytki pocztowej, żeby usunąć swój adres domowy z dostępu publicznego.
+ dmca_email: Adres email może być taki sam jak wcześniejszy "adres e-mail przeznaczony do celów prawnych"
+ domain: Unikalny numer identyfikacji świadczonej przez Ciebie usługi online.
+ jurisdiction: Wymień państwo, w którym mieszkają osoby płacące rachunki. Jeżeli jest to spółka lub inny zarejestrowany podmiot, w zależności od przypadku podaj państwo, w którym jest zarejestrowany, a także miasto, region czy województwo.
user:
chosen_languages: Jeżeli zaznaczone, tylko wpisy w wybranych językach będą wyświetlane na publicznych osiach czasu
role: Rola kontroluje uprawnienia użytkownika.
@@ -152,6 +156,7 @@ pl:
url: Dokąd będą wysłane zdarzenia
labels:
account:
+ attribution_domains: Strony które mogą ci przypisywać autorstwo
discoverable: Udostępniaj profil i wpisy funkcjom odkrywania
fields:
name: Nazwa
@@ -228,6 +233,7 @@ pl:
setting_display_media_show_all: Pokaż wszystko
setting_expand_spoilers: Zawsze rozwijaj wpisy oznaczone ostrzeżeniem o zawartości
setting_hide_network: Ukryj swoją sieć
+ setting_missing_alt_text_modal: Pokaż okno potwierdzenia przed opublikowaniem materiałów bez pomocniczego opisu obrazów
setting_reduce_motion: Ogranicz ruch w animacjach
setting_system_font_ui: Używaj domyślnej czcionki systemu
setting_system_scrollbars_ui: Używaj domyślnego paska przewijania systemu
@@ -329,6 +335,7 @@ pl:
changelog: Co się zmieniło?
text: Warunki korzystania z usługi
terms_of_service_generator:
+ admin_email: Adres e-mail przeznaczony do celów prawnych
arbitration_address: Adres fizyczny powiadomień arbitrażowych
arbitration_website: Strona internetowa do składania zgłoszeń arbitrażowych
dmca_address: Adres fizyczny dla zgłoszeń naruszenia DMCA/praw autorskich
diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml
index 8880b3d892..74edba7cda 100644
--- a/config/locales/simple_form.pt-PT.yml
+++ b/config/locales/simple_form.pt-PT.yml
@@ -233,7 +233,7 @@ pt-PT:
setting_display_media_show_all: Mostrar todos
setting_expand_spoilers: Expandir sempre as publicações marcadas com avisos de conteúdo
setting_hide_network: Esconder a tua rede
- setting_missing_alt_text_modal: Mostrar janela de confirmação antes de publicar elementos gráficos sem texto alternativo
+ setting_missing_alt_text_modal: Mostrar janela de confirmação antes de publicar multimédia sem texto alternativo
setting_reduce_motion: Reduzir movimento em animações
setting_system_font_ui: Usar o tipo de letra padrão do sistema
setting_system_scrollbars_ui: Utilizar a barra de deslocação predefinida do sistema
diff --git a/config/locales/simple_form.ru.yml b/config/locales/simple_form.ru.yml
index 64db162ea6..e8a83f06d7 100644
--- a/config/locales/simple_form.ru.yml
+++ b/config/locales/simple_form.ru.yml
@@ -3,6 +3,7 @@ ru:
simple_form:
hints:
account:
+ attribution_domains: По одному на строку. Защищает от ложных атрибуций.
discoverable: Ваши публичные сообщения и профиль могут быть показаны или рекомендованы в различных разделах Mastodon, и ваш профиль может быть предложен другим пользователям.
display_name: Ваше полное имя или псевдоним.
fields: Ваша домашняя страница, местоимения, возраст - все, что угодно.
@@ -155,6 +156,7 @@ ru:
url: Куда события будут отправляться
labels:
account:
+ attribution_domains: Веб-сайты, которым разрешено ссылаться на вас
discoverable: Профиль и сообщения в алгоритмах обнаружения
fields:
name: Пункт
@@ -231,6 +233,7 @@ ru:
setting_display_media_show_all: Показывать все
setting_expand_spoilers: Всегда раскрывать посты, имеющие предупреждение о содержании
setting_hide_network: Скрыть свои связи
+ setting_missing_alt_text_modal: Всегда спрашивать перед публикацией медиафайлов без альтернативного текста
setting_reduce_motion: Уменьшить движение в анимации
setting_system_font_ui: Использовать шрифт системы по умолчанию
setting_system_scrollbars_ui: Использовать системные полосы прокрутки
diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml
index 21a3ccce8e..83881a8dfa 100644
--- a/config/locales/simple_form.uk.yml
+++ b/config/locales/simple_form.uk.yml
@@ -232,6 +232,7 @@ uk:
setting_display_media_show_all: Показати всі
setting_expand_spoilers: Завжди розгортати дописи з попередженнями про вміст
setting_hide_network: Сховати вашу мережу
+ setting_missing_alt_text_modal: Запитувати перед розміщенням медіа без альтернативного тексту
setting_reduce_motion: Менше руху в анімаціях
setting_system_font_ui: Використовувати типовий системний шрифт
setting_system_scrollbars_ui: Використовувати системну панель гортання
diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml
index f0015e25a6..e0cafd160a 100644
--- a/config/locales/simple_form.vi.yml
+++ b/config/locales/simple_form.vi.yml
@@ -233,6 +233,7 @@ vi:
setting_display_media_show_all: Hiện toàn bộ
setting_expand_spoilers: Luôn mở rộng tút chứa nội dung ẩn
setting_hide_network: Ẩn quan hệ của bạn
+ setting_missing_alt_text_modal: Hiện xác nhận trước khi đăng media không có văn bản thay thế
setting_reduce_motion: Giảm chuyển động ảnh GIF
setting_system_font_ui: Dùng phông chữ mặc định hệ thống
setting_system_scrollbars_ui: Dùng scrollbar mặc định hệ thống
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index e7fb218e2d..afc77db563 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -391,6 +391,7 @@ sk:
email_domain_blocks:
add_new: Pridaj nový
allow_registrations_with_approval: Povoľ registrovanie so schválením
+ created_msg: Úspešne zablokovaná emailová doména
delete: Vymaž
dns:
types:
@@ -399,6 +400,7 @@ sk:
new:
create: Pridaj doménu
resolve: Preveď doménu
+ title: Blokovať novú emailovú doménu
not_permitted: Nepovolená
resolved_through_html: Prevedená cez %{domain}
title: Blokované e-mailové domény
@@ -1365,6 +1367,7 @@ sk:
explanation: Tu nájdeš nejaké tipy do začiatku
feature_action: Zisti viac
follow_action: Nasleduj
+ follow_title: Prispôsob svoj domáci kanál
follows_title: Koho nasledovať
post_title: Vytvor svoj prvý príspevok
share_action: Zdieľaj
diff --git a/config/locales/vi.yml b/config/locales/vi.yml
index 33c743188d..2f7ae6752c 100644
--- a/config/locales/vi.yml
+++ b/config/locales/vi.yml
@@ -1190,6 +1190,7 @@ vi:
too_fast: Nghi vấn đăng ký spam, xin thử lại.
use_security_key: Dùng khóa bảo mật
user_agreement_html: Tôi đã đọc và đồng ý với điều khoản dịch vụ và chính sách bảo mật
+ user_privacy_agreement_html: Tôi đã đọc và đồng ý chính sách bảo mật
author_attribution:
example_title: Văn bản mẫu
hint_html: Bạn là nhà báo hoặc blogger bên ngoài Mastodon? Kiểm soát cách bài viết của bạn được ghi nhận khi chia sẻ trên Mastodon.
diff --git a/config/webpacker.yml b/config/webpacker.yml
index e07f577c5e..ac4bca2916 100644
--- a/config/webpacker.yml
+++ b/config/webpacker.yml
@@ -13,8 +13,8 @@ default: &default
# ['app/assets', 'engine/foo/app/assets']
resolved_paths: []
- # Reload manifest.json on all requests so we reload latest compiled packs
- cache_manifest: false
+ # Cache manifest.json for performance
+ cache_manifest: true
# Extract and emit a css file
extract_css: true
@@ -55,6 +55,9 @@ development:
compile: true
+ # Reload manifest in development environment so we pick up changes
+ cache_manifest: false
+
# Reference: https://webpack.js.org/configuration/dev-server/
dev_server:
https: false
@@ -89,6 +92,3 @@ production:
# Production depends on precompilation of packs prior to booting for performance.
compile: false
-
- # Cache manifest.json for performance
- cache_manifest: true
diff --git a/db/post_migrate/20250129144440_add_new_public_index_to_statuses.rb b/db/post_migrate/20250129144440_add_new_public_index_to_statuses.rb
new file mode 100644
index 0000000000..18acb6831a
--- /dev/null
+++ b/db/post_migrate/20250129144440_add_new_public_index_to_statuses.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class AddNewPublicIndexToStatuses < ActiveRecord::Migration[8.0]
+ disable_ddl_transaction!
+
+ def change
+ add_index :statuses, [:id, :language, :account_id], name: :index_statuses_public_20250210, algorithm: :concurrently, order: { id: :desc }, where: 'deleted_at IS NULL AND visibility IN (0, 10, 11) AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))' # rubocop:disable Naming/VariableNumber
+ end
+end
diff --git a/db/post_migrate/20250129144813_remove_old_public_index_to_statuses.rb b/db/post_migrate/20250129144813_remove_old_public_index_to_statuses.rb
new file mode 100644
index 0000000000..53b711c204
--- /dev/null
+++ b/db/post_migrate/20250129144813_remove_old_public_index_to_statuses.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+class RemoveOldPublicIndexToStatuses < ActiveRecord::Migration[8.0]
+ disable_ddl_transaction!
+
+ def change
+ remove_index :statuses, [:id, :account_id], name: :index_statuses_public_20231213, algorithm: :concurrently, order: { id: :desc }, where: 'deleted_at IS NULL AND visibility IN (0, 10, 11) AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))' # rubocop:disable Naming/VariableNumber
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index e353c6a8fb..236e847d6d 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -1425,7 +1425,7 @@ ActiveRecord::Schema[8.0].define(version: 2025_01_30_232529) do
t.index ["conversation_id"], name: "index_statuses_on_conversation_id"
t.index ["deleted_at"], name: "index_statuses_on_deleted_at", where: "(deleted_at IS NOT NULL)"
t.index ["id", "account_id"], name: "index_statuses_local_20231213", order: { id: :desc }, where: "((local OR (uri IS NULL)) AND (deleted_at IS NULL) AND (visibility = ANY (ARRAY[0, 10, 11])) AND (reblog_of_id IS NULL) AND ((NOT reply) OR (in_reply_to_account_id = account_id)))"
- t.index ["id", "account_id"], name: "index_statuses_public_20231213", order: { id: :desc }, where: "((deleted_at IS NULL) AND (visibility = ANY (ARRAY[0, 10, 11])) AND (reblog_of_id IS NULL) AND ((NOT reply) OR (in_reply_to_account_id = account_id)))"
+ t.index ["id", "language", "account_id"], name: "index_statuses_public_20250210", order: { id: :desc }, where: "((deleted_at IS NULL) AND (visibility = ANY (ARRAY[0, 10, 11])) AND (reblog_of_id IS NULL) AND ((NOT reply) OR (in_reply_to_account_id = account_id)))"
t.index ["in_reply_to_account_id"], name: "index_statuses_on_in_reply_to_account_id", where: "(in_reply_to_account_id IS NOT NULL)"
t.index ["in_reply_to_id"], name: "index_statuses_on_in_reply_to_id", where: "(in_reply_to_id IS NOT NULL)"
t.index ["quote_of_id", "account_id"], name: "index_statuses_on_quote_of_id_and_account_id"
diff --git a/lib/mastodon/cli/feeds.rb b/lib/mastodon/cli/feeds.rb
index c0635bbcde..f594a750ed 100644
--- a/lib/mastodon/cli/feeds.rb
+++ b/lib/mastodon/cli/feeds.rb
@@ -11,17 +11,21 @@ module Mastodon::CLI
option :concurrency, type: :numeric, default: 5, aliases: [:c]
option :verbose, type: :boolean, aliases: [:v]
option :dry_run, type: :boolean, default: false
+ option :skip_filled_timelines
desc 'build [USERNAME]', 'Build home and list feeds for one or all users'
long_desc <<-LONG_DESC
Build home and list feeds that are stored in Redis from the database.
+ With the --skip-filled-timelines, timelines which contain more than half
+ the maximum number of posts will be skipped.
+
With the --all option, all active users will be processed.
Otherwise, a single user specified by USERNAME.
LONG_DESC
def build(username = nil)
if options[:all] || username.nil?
processed, = parallelize_with_progress(active_user_accounts) do |account|
- PrecomputeFeedService.new.call(account) unless dry_run?
+ PrecomputeFeedService.new.call(account, skip_filled_timelines: options[:skip_filled_timelines]) unless dry_run?
end
say("Regenerated feeds for #{processed} accounts #{dry_run_mode_suffix}", :green, true)
@@ -30,7 +34,7 @@ module Mastodon::CLI
fail_with_message 'No such account' if account.nil?
- PrecomputeFeedService.new.call(account) unless dry_run?
+ PrecomputeFeedService.new.call(account, skip_filled_timelines: options[:skip_filled_timelines]) unless dry_run?
say("OK #{dry_run_mode_suffix}", :green, true)
else
diff --git a/lib/tasks/dangerous.rake b/lib/tasks/dangerous.rake
index 62d000166b..21e5aee110 100644
--- a/lib/tasks/dangerous.rake
+++ b/lib/tasks/dangerous.rake
@@ -200,9 +200,9 @@ namespace :dangerous do
ActiveRecord::Base.connection.execute('UPDATE custom_filters SET action = 0 WHERE action = 2')
ActiveRecord::Base.connection.execute('UPDATE account_warnings SET action = 1250 WHERE action = 1200')
ActiveRecord::Base.connection.execute('CREATE INDEX IF NOT EXISTS index_statuses_local_20190824 ON statuses USING btree (id DESC, account_id) WHERE (local OR (uri IS NULL)) AND deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))')
- ActiveRecord::Base.connection.execute('CREATE INDEX IF NOT EXISTS index_statuses_public_20200119 ON statuses USING btree (id DESC, account_id) WHERE deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))')
+ ActiveRecord::Base.connection.execute('CREATE INDEX IF NOT EXISTS index_statuses_public_20250129 ON statuses USING btree (id DESC, language, account_id) WHERE deleted_at IS NULL AND visibility = 0 AND reblog_of_id IS NULL AND ((NOT reply) OR (in_reply_to_account_id = account_id))')
ActiveRecord::Base.connection.execute('DROP INDEX IF EXISTS index_statuses_local_20231213')
- ActiveRecord::Base.connection.execute('DROP INDEX IF EXISTS index_statuses_public_20231213')
+ ActiveRecord::Base.connection.execute('DROP INDEX IF EXISTS index_statuses_public_20250210')
ActiveRecord::Base.connection.execute('ALTER TABLE ONLY custom_filter_keywords ALTER COLUMN whole_word SET DEFAULT true')
prompt.ok 'Proceed'
diff --git a/spec/controllers/admin/reports_controller_spec.rb b/spec/controllers/admin/reports_controller_spec.rb
deleted file mode 100644
index 4012204de1..0000000000
--- a/spec/controllers/admin/reports_controller_spec.rb
+++ /dev/null
@@ -1,125 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Admin::ReportsController do
- render_views
-
- let(:user) { Fabricate(:admin_user) }
-
- before do
- sign_in user, scope: :user
- end
-
- describe 'GET #index' do
- it 'returns http success with no filters' do
- specified = Fabricate(:report, action_taken_at: nil, comment: 'First report')
- other = Fabricate(:report, action_taken_at: Time.now.utc, comment: 'Second report')
-
- get :index
-
- expect(response).to have_http_status(200)
- expect(response.body)
- .to include(specified.comment)
- .and not_include(other.comment)
- end
-
- it 'returns http success with resolved filter' do
- specified = Fabricate(:report, action_taken_at: Time.now.utc, comment: 'First report')
- other = Fabricate(:report, action_taken_at: nil, comment: 'Second report')
-
- get :index, params: { resolved: '1' }
-
- expect(response).to have_http_status(200)
- expect(response.body)
- .to include(specified.comment)
- .and not_include(other.comment)
- end
- end
-
- describe 'GET #show' do
- it 'renders report' do
- report = Fabricate(:report, comment: 'A big problem')
-
- get :show, params: { id: report }
-
- expect(response).to have_http_status(200)
- expect(response.body)
- .to include(report.comment)
- end
-
- describe 'account moderation notes' do
- let(:report) { Fabricate(:report) }
-
- it 'includes moderation notes' do
- note1 = Fabricate(:report_note, report: report)
- note2 = Fabricate(:report_note, report: report)
-
- get :show, params: { id: report }
-
- expect(response).to have_http_status(200)
-
- report_notes = assigns(:report_notes).to_a
-
- expect(report_notes.size).to be 2
- expect(report_notes).to eq [note1, note2]
- end
- end
- end
-
- describe 'POST #resolve' do
- it 'resolves the report' do
- report = Fabricate(:report)
-
- put :resolve, params: { id: report }
- expect(response).to redirect_to(admin_reports_path)
- report.reload
- expect(report.action_taken_by_account).to eq user.account
- expect(report.action_taken?).to be true
- expect(last_action_log.target).to eq(report)
- end
- end
-
- describe 'POST #reopen' do
- it 'reopens the report' do
- report = Fabricate(:report, action_taken_at: 3.days.ago)
-
- put :reopen, params: { id: report }
- expect(response).to redirect_to(admin_report_path(report))
- report.reload
- expect(report.action_taken_by_account).to be_nil
- expect(report.action_taken?).to be false
- expect(last_action_log.target).to eq(report)
- end
- end
-
- describe 'POST #assign_to_self' do
- it 'reopens the report' do
- report = Fabricate(:report)
-
- put :assign_to_self, params: { id: report }
- expect(response).to redirect_to(admin_report_path(report))
- report.reload
- expect(report.assigned_account).to eq user.account
- expect(last_action_log.target).to eq(report)
- end
- end
-
- describe 'POST #unassign' do
- it 'reopens the report' do
- report = Fabricate(:report, assigned_account_id: Account.last.id)
-
- put :unassign, params: { id: report }
- expect(response).to redirect_to(admin_report_path(report))
- report.reload
- expect(report.assigned_account).to be_nil
- expect(last_action_log.target).to eq(report)
- end
- end
-
- private
-
- def last_action_log
- Admin::ActionLog.last
- end
-end
diff --git a/spec/controllers/auth/passwords_controller_spec.rb b/spec/controllers/auth/passwords_controller_spec.rb
deleted file mode 100644
index 90095ac4b8..0000000000
--- a/spec/controllers/auth/passwords_controller_spec.rb
+++ /dev/null
@@ -1,102 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-RSpec.describe Auth::PasswordsController do
- include Devise::Test::ControllerHelpers
-
- describe 'GET #new' do
- it 'returns http success' do
- request.env['devise.mapping'] = Devise.mappings[:user]
- get :new
- expect(response).to have_http_status(200)
- end
- end
-
- describe 'GET #edit' do
- let(:user) { Fabricate(:user) }
-
- before do
- request.env['devise.mapping'] = Devise.mappings[:user]
- end
-
- context 'with valid reset_password_token' do
- it 'returns http success' do
- token = user.send_reset_password_instructions
-
- get :edit, params: { reset_password_token: token }
-
- expect(response).to have_http_status(200)
- end
- end
-
- context 'with invalid reset_password_token' do
- it 'redirects to #new' do
- get :edit, params: { reset_password_token: 'some_invalid_value' }
- expect(response).to redirect_to subject.new_password_path(subject.send(:resource_name))
- end
- end
- end
-
- describe 'POST #update' do
- let(:user) { Fabricate(:user) }
- let(:password) { 'reset0password' }
-
- before do
- request.env['devise.mapping'] = Devise.mappings[:user]
- end
-
- context 'with valid reset_password_token' do
- let!(:session_activation) { Fabricate(:session_activation, user: user) }
- let!(:access_token) { Fabricate(:access_token, resource_owner_id: user.id) }
- let!(:web_push_subscription) { Fabricate(:web_push_subscription, access_token: access_token) }
-
- before do
- token = user.send_reset_password_instructions
-
- post :update, params: { user: { password: password, password_confirmation: password, reset_password_token: token } }
- end
-
- it 'resets the password' do
- expect(response)
- .to redirect_to '/auth/sign_in'
-
- # Change password
- expect(User.find(user.id))
- .to be_present
- .and be_valid_password(password)
-
- # Deactivate session
- expect(user.session_activations.count)
- .to eq 0
- expect { session_activation.reload }
- .to raise_error(ActiveRecord::RecordNotFound)
-
- # Revoke tokens
- expect(Doorkeeper::AccessToken.active_for(user).count)
- .to eq 0
-
- # Remove push subs
- expect(Web::PushSubscription.where(user: user).or(Web::PushSubscription.where(access_token: access_token)).count)
- .to eq 0
- expect { web_push_subscription.reload }
- .to raise_error(ActiveRecord::RecordNotFound)
- end
- end
-
- context 'with invalid reset_password_token' do
- before do
- post :update, params: { user: { password: password, password_confirmation: password, reset_password_token: 'some_invalid_value' } }
- end
-
- it 'renders reset password and retains password' do
- expect(response)
- .to render_template(:new)
-
- expect(User.find(user.id))
- .to be_present
- .and be_external_or_valid_password(user.password)
- end
- end
- end
-end
diff --git a/spec/controllers/concerns/api/rate_limit_headers_spec.rb b/spec/controllers/concerns/api/rate_limit_headers_spec.rb
index 74ed81f5da..dd16531350 100644
--- a/spec/controllers/concerns/api/rate_limit_headers_spec.rb
+++ b/spec/controllers/concerns/api/rate_limit_headers_spec.rb
@@ -40,15 +40,11 @@ RSpec.describe Api::RateLimitHeaders do
end
end
- it 'applies rate limiting limit header' do
+ it 'provides rate limit information in headers' do
expect(response.headers['X-RateLimit-Limit']).to eq '100'
- end
- it 'applies rate limiting remaining header' do
expect(response.headers['X-RateLimit-Remaining']).to eq '80'
- end
- it 'applies rate limiting reset header' do
expect(response.headers['X-RateLimit-Reset']).to eq (start_time + 10.seconds).iso8601(6)
end
end
diff --git a/spec/controllers/filters/statuses_controller_spec.rb b/spec/controllers/filters/statuses_controller_spec.rb
index f1fed76fca..7bad403571 100644
--- a/spec/controllers/filters/statuses_controller_spec.rb
+++ b/spec/controllers/filters/statuses_controller_spec.rb
@@ -23,11 +23,9 @@ RSpec.describe Filters::StatusesController do
get :index, params: { filter_id: filter }
end
- it 'returns http success' do
+ it 'returns http success and private cache control headers' do
expect(response).to have_http_status(200)
- end
- it 'returns private cache control headers' do
expect(response.headers['Cache-Control']).to include('private, no-store')
end
end
diff --git a/spec/controllers/relationships_controller_spec.rb b/spec/controllers/relationships_controller_spec.rb
index 323fcc995d..75b5e71f35 100644
--- a/spec/controllers/relationships_controller_spec.rb
+++ b/spec/controllers/relationships_controller_spec.rb
@@ -14,11 +14,9 @@ RSpec.describe RelationshipsController do
get :show, params: { page: 2, relationship: 'followed_by' }
end
- it 'returns http success' do
+ it 'returns http success and private cache control headers' do
expect(response).to have_http_status(200)
- end
- it 'returns private cache control headers' do
expect(response.headers['Cache-Control']).to include('private, no-store')
end
end
diff --git a/spec/flatware_helper.rb b/spec/flatware_helper.rb
index 57a7c1f56a..a1bcb62340 100644
--- a/spec/flatware_helper.rb
+++ b/spec/flatware_helper.rb
@@ -3,7 +3,7 @@
if defined?(Flatware)
Flatware.configure do |config|
config.after_fork do |test_env_number|
- unless ENV.fetch('DISABLE_SIMPLECOV', nil) == 'true'
+ if ENV.fetch('COVERAGE', false)
require 'simplecov'
SimpleCov.at_fork.call(test_env_number) # Combines parallel coverage results
end
diff --git a/spec/lib/feed_manager_spec.rb b/spec/lib/feed_manager_spec.rb
index ad7913c758..48defa1f83 100644
--- a/spec/lib/feed_manager_spec.rb
+++ b/spec/lib/feed_manager_spec.rb
@@ -233,6 +233,28 @@ RSpec.describe FeedManager do
end
end
+ context 'with list feed' do
+ let(:list) { Fabricate(:list, account: bob) }
+
+ before do
+ bob.follow!(alice)
+ list.list_accounts.create!(account: alice)
+ end
+
+ it "returns false for followee's status" do
+ status = Fabricate(:status, text: 'Hello world', account: alice)
+
+ expect(subject.filter?(:list, status, list)).to be false
+ end
+
+ it 'returns false for reblog by followee' do
+ status = Fabricate(:status, text: 'Hello world', account: jeff)
+ reblog = Fabricate(:status, reblog: status, account: alice)
+
+ expect(subject.filter?(:list, reblog, list)).to be false
+ end
+ end
+
context 'with mentions feed' do
it 'returns true for status that mentions blocked account' do
bob.block!(jeff)
diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb
index 6564f17372..7d63ea6300 100644
--- a/spec/rails_helper.rb
+++ b/spec/rails_helper.rb
@@ -2,7 +2,7 @@
ENV['RAILS_ENV'] ||= 'test'
-unless ENV['DISABLE_SIMPLECOV'] == 'true'
+if ENV.fetch('COVERAGE', false)
require 'simplecov'
SimpleCov.start 'rails' do
diff --git a/spec/requests/auth/passwords_spec.rb b/spec/requests/auth/passwords_spec.rb
new file mode 100644
index 0000000000..feefd94587
--- /dev/null
+++ b/spec/requests/auth/passwords_spec.rb
@@ -0,0 +1,34 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Auth Passwords' do
+ describe 'GET /auth/password/edit' do
+ context 'with invalid reset_password_token' do
+ it 'redirects to #new' do
+ get edit_user_password_path, params: { reset_password_token: 'some_invalid_value' }
+
+ expect(response)
+ .to redirect_to new_user_password_path
+ end
+ end
+ end
+
+ describe 'PUT /auth/password' do
+ let(:user) { Fabricate(:user) }
+ let(:password) { 'reset0password' }
+
+ context 'with invalid reset_password_token' do
+ it 'renders reset password and retains password' do
+ put user_password_path, params: { user: { password: password, password_confirmation: password, reset_password_token: 'some_invalid_value' } }
+
+ expect(response.body)
+ .to include(I18n.t('auth.set_new_password'))
+
+ expect(User.find(user.id))
+ .to be_present
+ .and be_external_or_valid_password(user.password)
+ end
+ end
+ end
+end
diff --git a/spec/requests/well_known/webfinger_spec.rb b/spec/requests/well_known/webfinger_spec.rb
index aeff56aebf..b4aeb65320 100644
--- a/spec/requests/well_known/webfinger_spec.rb
+++ b/spec/requests/well_known/webfinger_spec.rb
@@ -116,19 +116,13 @@ RSpec.describe 'The /.well-known/webfinger endpoint' do
perform_request!
end
- it 'returns http success' do
+ it 'returns http success with expect headers and media type' do
expect(response).to have_http_status(200)
- end
- it 'sets only a Vary Origin header' do
expect(response.headers['Vary']).to eq('Origin')
- end
- it 'returns application/jrd+json' do
expect(response.media_type).to eq 'application/jrd+json'
- end
- it 'returns links for the internal account' do
expect(response.parsed_body)
.to include(
subject: 'acct:mastodon.internal@cb6e6126.ngrok.io',
diff --git a/spec/system/admin/reports_spec.rb b/spec/system/admin/reports_spec.rb
new file mode 100644
index 0000000000..90845a02f7
--- /dev/null
+++ b/spec/system/admin/reports_spec.rb
@@ -0,0 +1,112 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Admin Reports' do
+ let(:user) { Fabricate(:admin_user) }
+
+ before { sign_in(user) }
+
+ describe 'Viewing existing reports' do
+ let!(:unresolved_report) { Fabricate(:report, action_taken_at: nil, comment: 'First report') }
+ let!(:resolved_report) { Fabricate(:report, action_taken_at: Time.now.utc, comment: 'Second report') }
+ let!(:report_note) { Fabricate :report_note, report: resolved_report, content: 'Note about resolved report' }
+
+ it 'Shows basic report details' do
+ visit admin_reports_path
+
+ expect(page)
+ .to have_content(unresolved_report.comment)
+ .and have_no_content(resolved_report.comment)
+
+ click_on I18n.t('admin.reports.resolved')
+ expect(page)
+ .to have_content(resolved_report.comment)
+ .and have_no_content(unresolved_report.comment)
+
+ click_on resolved_report.comment
+ expect(page)
+ .to have_title(I18n.t('admin.reports.report', id: resolved_report.id))
+ .and have_content(resolved_report.comment)
+ .and have_content(report_note.content)
+ end
+ end
+
+ describe 'Resolving reports' do
+ let!(:report) { Fabricate :report }
+
+ it 'resolves an open report' do
+ visit admin_report_path(report)
+ within '.content__heading__actions' do
+ click_on I18n.t('admin.reports.mark_as_resolved')
+ end
+
+ expect(page)
+ .to have_title(I18n.t('admin.reports.title'))
+ .and have_content(I18n.t('admin.reports.resolved_msg'))
+
+ report.reload
+ expect(report.action_taken_by_account)
+ .to eq user.account
+ expect(report)
+ .to be_action_taken
+ expect(last_action_log.target)
+ .to eq(report)
+ end
+ end
+
+ describe 'Reopening reports' do
+ let!(:report) { Fabricate :report, action_taken_at: 3.days.ago }
+
+ it 'reopens a resolved report' do
+ visit admin_report_path(report)
+ within '.content__heading__actions' do
+ click_on I18n.t('admin.reports.mark_as_unresolved')
+ end
+
+ expect(page)
+ .to have_title(I18n.t('admin.reports.report', id: report.id))
+
+ report.reload
+ expect(report.action_taken_by_account)
+ .to be_nil
+ expect(report)
+ .to_not be_action_taken
+ expect(last_action_log.target)
+ .to eq(report)
+ end
+ end
+
+ describe 'Assigning reports' do
+ let!(:report) { Fabricate :report }
+
+ it 'assigns report to user and then unassigns' do
+ visit admin_report_path(report)
+
+ click_on I18n.t('admin.reports.assign_to_self')
+
+ expect(page)
+ .to have_title(I18n.t('admin.reports.report', id: report.id))
+ report.reload
+ expect(report.assigned_account)
+ .to eq user.account
+ expect(last_action_log.target)
+ .to eq(report)
+
+ click_on I18n.t('admin.reports.unassign')
+ expect(page)
+ .to have_title(I18n.t('admin.reports.report', id: report.id))
+ report.reload
+ expect(report.assigned_account)
+ .to be_nil
+ expect(last_action_log.target)
+ .to eq(report)
+ end
+ end
+
+ private
+
+ def last_action_log
+ Admin::ActionLog.last
+ end
+end
diff --git a/spec/system/auth/passwords_spec.rb b/spec/system/auth/passwords_spec.rb
new file mode 100644
index 0000000000..42733b2521
--- /dev/null
+++ b/spec/system/auth/passwords_spec.rb
@@ -0,0 +1,83 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Auth Passwords' do
+ let(:user) { Fabricate :user }
+ let!(:session_activation) { Fabricate(:session_activation, user: user) }
+ let!(:access_token) { Fabricate(:access_token, resource_owner_id: user.id) }
+ let!(:web_push_subscription) { Fabricate(:web_push_subscription, access_token: access_token) }
+
+ describe 'Resetting a password', :inline_jobs do
+ let(:new_password) { 'New.Pass.123' }
+
+ before { allow(Devise).to receive(:pam_authentication).and_return(false) } # Avoid the "seamless external" path
+
+ it 'initiates reset, sends link, resets password from form, clears data' do
+ visit new_user_password_path
+ expect(page)
+ .to have_title(I18n.t('auth.reset_password'))
+
+ submit_email_reset
+ expect(page)
+ .to have_title(I18n.t('auth.set_new_password'))
+
+ set_new_password
+ expect(page)
+ .to have_title(I18n.t('auth.login'))
+
+ # Change password
+ expect(User.find(user.id))
+ .to be_present
+ .and be_valid_password(new_password)
+
+ # Deactivate session
+ expect(user_session_count)
+ .to eq(0)
+ expect { session_activation.reload }
+ .to raise_error(ActiveRecord::RecordNotFound)
+
+ # Revoke tokens
+ expect(user_token_count)
+ .to eq(0)
+
+ # Remove push subs
+ expect(push_subs_count)
+ .to eq(0)
+ expect { web_push_subscription.reload }
+ .to raise_error(ActiveRecord::RecordNotFound)
+ end
+
+ def submit_email_reset
+ fill_in 'user_email', with: user.email
+ click_on I18n.t('auth.reset_password')
+ open_last_email
+ visit_in_email(I18n.t('devise.mailer.reset_password_instructions.action'))
+ end
+
+ def set_new_password
+ fill_in 'user_password', with: new_password
+ fill_in 'user_password_confirmation', with: new_password
+ click_on I18n.t('auth.set_new_password')
+ end
+
+ def user_session_count
+ user
+ .session_activations
+ .count
+ end
+
+ def user_token_count
+ Doorkeeper::AccessToken
+ .active_for(user)
+ .count
+ end
+
+ def push_subs_count
+ Web::PushSubscription
+ .where(user: user)
+ .or(Web::PushSubscription.where(access_token: access_token))
+ .count
+ end
+ end
+end
diff --git a/spec/system/settings/applications_spec.rb b/spec/system/settings/applications_spec.rb
index ee43da3d5d..737014f42e 100644
--- a/spec/system/settings/applications_spec.rb
+++ b/spec/system/settings/applications_spec.rb
@@ -38,6 +38,9 @@ RSpec.describe 'Settings applications page' do
expect(page)
.to have_content(I18n.t('doorkeeper.applications.index.title'))
.and have_content('My new app')
+ .and have_content('read')
+ .and have_content('write')
+ .and have_content('follow')
end
it 'does not save with invalid form values' do
@@ -73,10 +76,12 @@ RSpec.describe 'Settings applications page' do
fill_in form_app_name_label,
with: 'My new app name with a new value'
+ check 'push', id: :doorkeeper_application_scopes_push
submit_form
expect(page)
.to have_content('My new app name with a new value')
+ .and have_checked_field('push', id: :doorkeeper_application_scopes_push)
end
it 'does not update with wrong values' do
diff --git a/spec/workers/poll_expiration_notify_worker_spec.rb b/spec/workers/poll_expiration_notify_worker_spec.rb
index b3ccdd3d77..190630608c 100644
--- a/spec/workers/poll_expiration_notify_worker_spec.rb
+++ b/spec/workers/poll_expiration_notify_worker_spec.rb
@@ -33,15 +33,11 @@ RSpec.describe PollExpirationNotifyWorker do
end
context 'when poll is local' do
- it 'notifies voters' do
+ it 'notifies voters, owner, and local voters' do
expect(ActivityPub::DistributePollUpdateWorker).to have_enqueued_sidekiq_job(poll.status.id)
- end
- it 'notifies owner' do
expect(LocalNotificationWorker).to have_enqueued_sidekiq_job(poll.account.id, poll.id, 'Poll', 'poll')
- end
- it 'notifies local voters' do
expect(LocalNotificationWorker).to have_enqueued_sidekiq_job(poll_vote.account.id, poll.id, 'Poll', 'poll')
end
end
@@ -49,15 +45,11 @@ RSpec.describe PollExpirationNotifyWorker do
context 'when poll is remote' do
let(:remote?) { true }
- it 'does not notify remote voters' do
+ it 'does not notify remote voters or owner, does notify local voters' do
expect(ActivityPub::DistributePollUpdateWorker).to_not have_enqueued_sidekiq_job(poll.status.id)
- end
- it 'does not notify owner' do
expect(LocalNotificationWorker).to_not have_enqueued_sidekiq_job(poll.account.id, poll.id, 'Poll', 'poll')
- end
- it 'notifies local voters' do
expect(LocalNotificationWorker).to have_enqueued_sidekiq_job(poll_vote.account.id, poll.id, 'Poll', 'poll')
end
end
diff --git a/spec/workers/publish_scheduled_status_worker_spec.rb b/spec/workers/publish_scheduled_status_worker_spec.rb
index 9365e8a4bc..a91e665965 100644
--- a/spec/workers/publish_scheduled_status_worker_spec.rb
+++ b/spec/workers/publish_scheduled_status_worker_spec.rb
@@ -13,11 +13,9 @@ RSpec.describe PublishScheduledStatusWorker do
end
context 'when the account is not disabled' do
- it 'creates a status' do
+ it 'creates a status and removes scheduled record' do
expect(scheduled_status.account.statuses.first.text).to eq 'Hello world, future!'
- end
- it 'removes the scheduled status' do
expect(ScheduledStatus.find_by(id: scheduled_status.id)).to be_nil
end
end
@@ -25,11 +23,9 @@ RSpec.describe PublishScheduledStatusWorker do
context 'when the account is disabled' do
let(:scheduled_status) { Fabricate(:scheduled_status, account: Fabricate(:account, user: Fabricate(:user, disabled: true))) }
- it 'does not create a status' do
+ it 'does not create a status and removes scheduled record' do
expect(Status.count).to eq 0
- end
- it 'removes the scheduled status' do
expect(ScheduledStatus.find_by(id: scheduled_status.id)).to be_nil
end
end
diff --git a/spec/workers/unfollow_follow_worker_spec.rb b/spec/workers/unfollow_follow_worker_spec.rb
index 7b9d49b902..2e05d1ca78 100644
--- a/spec/workers/unfollow_follow_worker_spec.rb
+++ b/spec/workers/unfollow_follow_worker_spec.rb
@@ -18,14 +18,11 @@ RSpec.describe UnfollowFollowWorker do
let(:show_reblogs) { true }
describe 'perform' do
- it 'unfollows source account and follows target account' do
+ it 'unfollows source account and follows target account and preserves show_reblogs' do
subject.perform(local_follower.id, source_account.id, target_account.id)
expect(local_follower.following?(source_account)).to be false
expect(local_follower.following?(target_account)).to be true
- end
- it 'preserves show_reblogs' do
- subject.perform(local_follower.id, source_account.id, target_account.id)
expect(Follow.find_by(account: local_follower, target_account: target_account).show_reblogs?).to be show_reblogs
end
end
@@ -35,14 +32,11 @@ RSpec.describe UnfollowFollowWorker do
let(:show_reblogs) { false }
describe 'perform' do
- it 'unfollows source account and follows target account' do
+ it 'unfollows source account and follows target account and preserves show_reblogs' do
subject.perform(local_follower.id, source_account.id, target_account.id)
expect(local_follower.following?(source_account)).to be false
expect(local_follower.following?(target_account)).to be true
- end
- it 'preserves show_reblogs' do
- subject.perform(local_follower.id, source_account.id, target_account.id)
expect(Follow.find_by(account: local_follower, target_account: target_account).show_reblogs?).to be show_reblogs
end
end
diff --git a/yarn.lock b/yarn.lock
index d11e676432..de67e53a46 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3926,9 +3926,9 @@ __metadata:
linkType: hard
"@types/lodash@npm:^4.14.195":
- version: 4.17.13
- resolution: "@types/lodash@npm:4.17.13"
- checksum: 10c0/c3d0b7efe7933ac0369b99f2f7bff9240d960680fdb74b41ed4bd1b3ca60cca1e31fe4046d9abbde778f941a41bc2a75eb629abf8659fa6c27b66efbbb0802a9
+ version: 4.17.15
+ resolution: "@types/lodash@npm:4.17.15"
+ checksum: 10c0/2eb2dc6d231f5fb4603d176c08c8d7af688f574d09af47466a179cd7812d9f64144ba74bb32ca014570ffdc544eedc51b7a5657212bad083b6eecbd72223f9bb
languageName: node
linkType: hard
@@ -3986,13 +3986,13 @@ __metadata:
linkType: hard
"@types/pg@npm:^8.6.6":
- version: 8.11.10
- resolution: "@types/pg@npm:8.11.10"
+ version: 8.11.11
+ resolution: "@types/pg@npm:8.11.11"
dependencies:
"@types/node": "npm:*"
pg-protocol: "npm:*"
pg-types: "npm:^4.0.1"
- checksum: 10c0/c8800d0ab2c6424308e6c6b40c73f19583ee1aed758462bd07694844b0a551b5841442205a4ee05207b80109ba502f33f20241b1bd9b4902e713611fb9e08f6c
+ checksum: 10c0/18c2585e1ba7a5dd5f849d49410d53fdfe9a6c3cbc4ae46c51fd728264d6ecf9a84a5cd82d89cb1f870a74383bad88effce1eed888f16accbcbde56a53d23a69
languageName: node
linkType: hard
@@ -4269,9 +4269,9 @@ __metadata:
linkType: hard
"@types/webpack-env@npm:^1.18.4":
- version: 1.18.5
- resolution: "@types/webpack-env@npm:1.18.5"
- checksum: 10c0/b9e4876e8c7cae419896249f9ed795db283c008fe1d38efa679cbbf05194fc2eea2a5bfb4ff4393d109e3a9895416dadf5f3ddd5c22931b678062230f860454e
+ version: 1.18.8
+ resolution: "@types/webpack-env@npm:1.18.8"
+ checksum: 10c0/527a5d1eb75c5243e4f3665d956c7c340f899955dd25d16c9fd9750406f32e95a3a17d207640295038e8235c0c2a2daf084f420e088e58b965d82fc74f6012d7
languageName: node
linkType: hard
@@ -4301,11 +4301,11 @@ __metadata:
linkType: hard
"@types/ws@npm:^8.5.9":
- version: 8.5.13
- resolution: "@types/ws@npm:8.5.13"
+ version: 8.5.14
+ resolution: "@types/ws@npm:8.5.14"
dependencies:
"@types/node": "npm:*"
- checksum: 10c0/a5430aa479bde588e69cb9175518d72f9338b6999e3b2ae16fc03d3bdcff8347e486dc031e4ed14601260463c07e1f9a0d7511dfc653712b047c439c680b0b34
+ checksum: 10c0/be88a0b6252f939cb83340bd1b4d450287f752c19271195cd97564fd94047259a9bb8c31c585a61b69d8a1b069a99df9dd804db0132d3359c54d3890c501416a
languageName: node
linkType: hard
@@ -15549,8 +15549,8 @@ __metadata:
linkType: hard
"sass@npm:^1.62.1":
- version: 1.83.4
- resolution: "sass@npm:1.83.4"
+ version: 1.84.0
+ resolution: "sass@npm:1.84.0"
dependencies:
"@parcel/watcher": "npm:^2.4.1"
chokidar: "npm:^4.0.0"
@@ -15561,7 +15561,7 @@ __metadata:
optional: true
bin:
sass: sass.js
- checksum: 10c0/6f27f0eebfeb50222b14baaeef548ef58a05daf8abd9797e6c499334ed7ad40541767056c8693780d06ca83d8836348ea7396a923d3be439b133507993ca78be
+ checksum: 10c0/4af28c12416b6f1fec2423677cfa8c48af7fb7652a50bd076e0cdd1ea260f0330948ddd6075368a734b8d6cfa16c9af5518292181334f47a9471cb542599bc7b
languageName: node
linkType: hard
@@ -17420,22 +17420,22 @@ __metadata:
linkType: hard
"typescript@npm:5, typescript@npm:^5.0.4":
- version: 5.7.2
- resolution: "typescript@npm:5.7.2"
+ version: 5.7.3
+ resolution: "typescript@npm:5.7.3"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
- checksum: 10c0/a873118b5201b2ef332127ef5c63fb9d9c155e6fdbe211cbd9d8e65877283797cca76546bad742eea36ed7efbe3424a30376818f79c7318512064e8625d61622
+ checksum: 10c0/b7580d716cf1824736cc6e628ab4cd8b51877408ba2be0869d2866da35ef8366dd6ae9eb9d0851470a39be17cbd61df1126f9e211d8799d764ea7431d5435afa
languageName: node
linkType: hard
"typescript@patch:typescript@npm%3A5#optional!builtin, typescript@patch:typescript@npm%3A^5.0.4#optional!builtin":
- version: 5.7.2
- resolution: "typescript@patch:typescript@npm%3A5.7.2#optional!builtin::version=5.7.2&hash=5786d5"
+ version: 5.7.3
+ resolution: "typescript@patch:typescript@npm%3A5.7.3#optional!builtin::version=5.7.3&hash=5786d5"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
- checksum: 10c0/f3b8082c9d1d1629a215245c9087df56cb784f9fb6f27b5d55577a20e68afe2a889c040aacff6d27e35be165ecf9dca66e694c42eb9a50b3b2c451b36b5675cb
+ checksum: 10c0/6fd7e0ed3bf23a81246878c613423730c40e8bdbfec4c6e4d7bf1b847cbb39076e56ad5f50aa9d7ebd89877999abaee216002d3f2818885e41c907caaa192cc4
languageName: node
linkType: hard