-
{title}
+
{title}
{message &&
{message}
}
- {extraContent}
+ {extraContent ?? children}
diff --git a/app/javascript/mastodon/features/ui/components/confirmation_modals/index.ts b/app/javascript/mastodon/features/ui/components/confirmation_modals/index.ts
index 389ad7ea83..c27597fb52 100644
--- a/app/javascript/mastodon/features/ui/components/confirmation_modals/index.ts
+++ b/app/javascript/mastodon/features/ui/components/confirmation_modals/index.ts
@@ -1,3 +1,4 @@
+export type { BaseConfirmationModalProps } from './confirmation_modal';
export { ConfirmationModal } from './confirmation_modal';
export { ConfirmDeleteStatusModal } from './delete_status';
export { ConfirmDeleteListModal } from './delete_list';
diff --git a/app/javascript/mastodon/features/ui/components/confirmation_modals/quiet_post_quote_info.tsx b/app/javascript/mastodon/features/ui/components/confirmation_modals/quiet_post_quote_info.tsx
index 534d72e6ce..eecffb1d25 100644
--- a/app/javascript/mastodon/features/ui/components/confirmation_modals/quiet_post_quote_info.tsx
+++ b/app/javascript/mastodon/features/ui/components/confirmation_modals/quiet_post_quote_info.tsx
@@ -33,7 +33,7 @@ const messages = defineMessages({
/**
* [1] Since we only want this modal to have two buttons – "Don't ask again" and
* "Got it" – , we have to use the `onClose` handler to handle the "Don't ask again"
- * functionality. Because of this, we need to set `closeWhenConfirm` to false and
+ * functionality. Because of this, we need to set `noCloseOnConfirm` to true and
* close the modal manually.
* This prevents the modal from being dismissed permanently when just confirming.
*/
@@ -65,13 +65,13 @@ export const QuietPostQuoteInfoModal: React.FC<{ status: Status }> = ({
return (
);
};
diff --git a/app/javascript/mastodon/features/ui/components/modal_root.jsx b/app/javascript/mastodon/features/ui/components/modal_root.jsx
index 4aae94574b..2e3efd4372 100644
--- a/app/javascript/mastodon/features/ui/components/modal_root.jsx
+++ b/app/javascript/mastodon/features/ui/components/modal_root.jsx
@@ -88,6 +88,8 @@ export const MODAL_COMPONENTS = {
'ANNUAL_REPORT': AnnualReportModal,
'COMPOSE_PRIVACY': () => Promise.resolve({ default: VisibilityModal }),
'ACCOUNT_NOTE': () => import('@/mastodon/features/account_timeline/modals/note_modal').then(module => ({ default: module.AccountNoteModal })),
+ 'ACCOUNT_EDIT_NAME': () => import('@/mastodon/features/account_edit/components/name_modal').then(module => ({ default: module.NameModal })),
+ 'ACCOUNT_EDIT_BIO': () => import('@/mastodon/features/account_edit/components/bio_modal').then(module => ({ default: module.BioModal })),
};
export default class ModalRoot extends PureComponent {
diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json
index 45acd59217..dbdf43ab60 100644
--- a/app/javascript/mastodon/locales/be.json
+++ b/app/javascript/mastodon/locales/be.json
@@ -263,6 +263,11 @@
"collections.create_collection": "Стварыць калекцыю",
"collections.delete_collection": "Выдаліць калекцыю",
"collections.description_length_hint": "Максімум 100 сімвалаў",
+ "collections.detail.accounts_heading": "Уліковыя запісы",
+ "collections.detail.curated_by_author": "Курыруе {author}",
+ "collections.detail.curated_by_you": "Курыруеце Вы",
+ "collections.detail.loading": "Загружаецца калекцыя…",
+ "collections.detail.share": "Падзяліцца гэтай калекцыяй",
"collections.edit_details": "Змяніць асноўныя звесткі",
"collections.edit_settings": "Змяніць налады",
"collections.error_loading_collections": "Адбылася памылка падчас загрузкі Вашых калекцый.",
diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json
index b9021bc575..b04fc5c046 100644
--- a/app/javascript/mastodon/locales/cs.json
+++ b/app/javascript/mastodon/locales/cs.json
@@ -13,11 +13,18 @@
"about.not_available": "Tato informace nebyla zpřístupněna na tomto serveru.",
"about.powered_by": "Decentralizovaná sociální média poháněná {mastodon}",
"about.rules": "Pravidla serveru",
+ "account.about": "O účtu",
"account.account_note_header": "Osobní poznámka",
"account.activity": "Aktivita",
+ "account.add_note": "Přidat vlastní poznámku",
"account.add_or_remove_from_list": "Přidat nebo odstranit ze seznamů",
+ "account.badges.admin": "Admin",
+ "account.badges.blocked": "Zablokovaný",
"account.badges.bot": "Bot",
+ "account.badges.domain_blocked": "Zablokovaná doména",
"account.badges.group": "Skupina",
+ "account.badges.muted": "Ztišeno",
+ "account.badges.muted_until": "Ztišen do {until}",
"account.block": "Blokovat @{name}",
"account.block_domain": "Blokovat doménu {domain}",
"account.block_short": "Zablokovat",
@@ -28,6 +35,7 @@
"account.direct": "Soukromě zmínit @{name}",
"account.disable_notifications": "Přestat mě upozorňovat, když @{name} zveřejní příspěvek",
"account.domain_blocking": "Blokované domény",
+ "account.edit_note": "Upravit vlastní poznámku",
"account.edit_profile": "Upravit profil",
"account.edit_profile_short": "Upravit",
"account.enable_notifications": "Oznamovat mi příspěvky @{name}",
@@ -40,6 +48,12 @@
"account.featured.hashtags": "Hashtagy",
"account.featured_tags.last_status_at": "Poslední příspěvek {date}",
"account.featured_tags.last_status_never": "Žádné příspěvky",
+ "account.filters.all": "Veškerá aktivita",
+ "account.filters.boosts_toggle": "Zobrazit boosty",
+ "account.filters.posts_boosts": "Příspěvky a boosty",
+ "account.filters.posts_only": "Příspěvky",
+ "account.filters.posts_replies": "Příspěvky a odpovědi",
+ "account.filters.replies_toggle": "Zobrazit odpovědi",
"account.follow": "Sledovat",
"account.follow_back": "Také sledovat",
"account.follow_back_short": "Také sledovat",
@@ -65,6 +79,24 @@
"account.locked_info": "Stav soukromí tohoto účtu je nastaven na zamčeno. Jeho vlastník ručně posuzuje, kdo ho může sledovat.",
"account.media": "Média",
"account.mention": "Zmínit @{name}",
+ "account.menu.add_to_list": "Přidat do seznamu…",
+ "account.menu.block": "Blokovat účet",
+ "account.menu.block_domain": "Blokovat {domain}",
+ "account.menu.copied": "Odkaz účtu byl zkopírován do schránky",
+ "account.menu.copy": "Zkopírovat odkaz",
+ "account.menu.direct": "Soukromě zmínit",
+ "account.menu.hide_reblogs": "Skrýt boosty na časové ose",
+ "account.menu.mention": "Zmínit",
+ "account.menu.mute": "Ztlumit účet",
+ "account.menu.note.description": "Viditelné pouze pro vás",
+ "account.menu.open_original_page": "Zobrazit na {domain}",
+ "account.menu.remove_follower": "Odstranit sledujícího",
+ "account.menu.report": "Nahlásit účet",
+ "account.menu.share": "Sdílet…",
+ "account.menu.show_reblogs": "Zobrazit boosty na časové ose",
+ "account.menu.unblock": "Odblokovat účet",
+ "account.menu.unblock_domain": "Odblokovat {domain}",
+ "account.menu.unmute": "Zrušit ztlumení účtu",
"account.moved_to": "Uživatel {name} uvedl, že jeho nový účet je nyní:",
"account.mute": "Skrýt @{name}",
"account.mute_notifications_short": "Ztlumit upozornění",
@@ -72,7 +104,14 @@
"account.muted": "Skrytý",
"account.muting": "Ztlumení",
"account.mutual": "Sledujete se navzájem",
+ "account.name.help.domain": "{domain} je server, který hostuje profily a příspěvky uživatelů.",
+ "account.name.help.domain_self": "{domain} je váš server, který hostuje váš profil a příspěvky.",
"account.no_bio": "Nebyl poskytnut žádný popis.",
+ "account.node_modal.field_label": "Vlastní poznámka",
+ "account.node_modal.save": "Uložit",
+ "account.node_modal.title": "Přidat vlastní poznámku",
+ "account.note.edit_button": "Upravit",
+ "account.note.title": "Vlastní poznámka (viditelná pouze pro vás)",
"account.open_original_page": "Otevřít původní stránku",
"account.posts": "Příspěvky",
"account.posts_with_replies": "Příspěvky a odpovědi",
@@ -83,6 +122,8 @@
"account.share": "Sdílet profil @{name}",
"account.show_reblogs": "Zobrazit boosty od @{name}",
"account.statuses_counter": "{count, plural, one {{counter} příspěvek} few {{counter} příspěvky} many {{counter} příspěvků} other {{counter} příspěvků}}",
+ "account.timeline.pinned": "Připnuto",
+ "account.timeline.pinned.view_all": "Zobrazit všechny připnuté příspěvky",
"account.unblock": "Odblokovat @{name}",
"account.unblock_domain": "Odblokovat doménu {domain}",
"account.unblock_domain_short": "Odblokovat",
@@ -92,6 +133,8 @@
"account.unmute": "Zrušit skrytí @{name}",
"account.unmute_notifications_short": "Zrušit ztlumení oznámení",
"account.unmute_short": "Zrušit skrytí",
+ "account_edit.column_button": "Hotovo",
+ "account_edit.column_title": "Upravit profil",
"account_note.placeholder": "Klikněte pro přidání poznámky",
"admin.dashboard.daily_retention": "Míra udržení uživatelů podle dne po registraci",
"admin.dashboard.monthly_retention": "Míra udržení uživatelů podle měsíce po registraci",
@@ -186,6 +229,7 @@
"bundle_modal_error.close": "Zavřít",
"bundle_modal_error.message": "Něco se pokazilo při načítání této obrazovky.",
"bundle_modal_error.retry": "Zkusit znovu",
+ "callout.dismiss": "Zamítnout",
"carousel.current": "
Snímek {current, number}/{max, number}",
"carousel.slide": "Snímek {current, number} z {max, number}",
"closed_registrations.other_server_instructions": "Protože Mastodon je decentralizovaný, můžete si vytvořit účet na jiném serveru a přesto komunikovat s tímto serverem.",
@@ -193,12 +237,24 @@
"closed_registrations_modal.find_another_server": "Najít jiný server",
"closed_registrations_modal.preamble": "Mastodon je decentralizovaný, takže bez ohledu na to, kde vytvoříte svůj účet, budete moci sledovat a komunikovat s kýmkoli na tomto serveru. Můžete ho dokonce hostovat!",
"closed_registrations_modal.title": "Registrace na Mastodon",
+ "collections.continue": "Pokračovat",
"collections.mark_as_sensitive_hint": "Skryje popis kolekce a účty za varováním obsahu. Název kolekce bude stále viditelný.",
"collections.name_length_hint": "Max. 100 znaků",
+ "collections.new_collection": "Nová sbírka",
+ "collections.no_collections_yet": "Ještě nemáte žádné sbírky.",
+ "collections.remove_account": "Odstranit tento účet",
+ "collections.search_accounts_label": "Hledat účty pro přidání…",
+ "collections.search_accounts_max_reached": "Přidali jste maximální počet účtů",
"collections.topic_hint": "Přidat štítek, který pomůže ostatním pochopit hlavní téma této kolekce.",
+ "collections.view_collection": "Zobrazit sbírku",
+ "collections.visibility_public": "Veřejné",
+ "collections.visibility_public_hint": "Objevitelné ve výsledcích vyhledávání a dalších místech, kde se objevují doporučení.",
+ "collections.visibility_title": "Viditelnost",
+ "collections.visibility_unlisted": "Neveřejný",
"column.about": "O aplikaci",
"column.blocks": "Blokovaní uživatelé",
"column.bookmarks": "Záložky",
+ "column.collections": "Mé sbírky",
"column.community": "Místní časová osa",
"column.create_list": "Vytvořit seznam",
"column.direct": "Soukromé zmínky",
@@ -225,6 +281,10 @@
"column_header.show_settings": "Zobrazit nastavení",
"column_header.unpin": "Odepnout",
"column_search.cancel": "Zrušit",
+ "combobox.close_results": "Zavřít výsledky",
+ "combobox.loading": "Načítání",
+ "combobox.no_results_found": "Žádné výsledky pro toto vyhledávání",
+ "combobox.open_results": "Otevřít výsledky",
"community.column_settings.local_only": "Pouze místní",
"community.column_settings.media_only": "Pouze média",
"community.column_settings.remote_only": "Pouze vzdálené",
@@ -258,6 +318,7 @@
"confirmations.delete.confirm": "Smazat",
"confirmations.delete.message": "Opravdu chcete smazat tento příspěvek?",
"confirmations.delete.title": "Smazat příspěvek?",
+ "confirmations.delete_collection.title": "Smazat „{name}“?",
"confirmations.delete_list.confirm": "Smazat",
"confirmations.delete_list.message": "Opravdu chcete tento seznam navždy smazat?",
"confirmations.delete_list.title": "Smazat seznam?",
@@ -364,6 +425,8 @@
"emoji_button.search_results": "Výsledky hledání",
"emoji_button.symbols": "Symboly",
"emoji_button.travel": "Cestování a místa",
+ "empty_column.account_about.me": "Zatím jste o sobě nepřidali žádné informace.",
+ "empty_column.account_about.other": "{acct} zatím o sobě nepřidali žádné informace.",
"empty_column.account_featured.me": "Zatím jste nic nezvýraznili. Věděli jste, že na svém profilu můžete zvýraznit hashtagy, které používáte nejvíce, a dokonce účty vašich přátel?",
"empty_column.account_featured.other": "{acct} zatím nic nezvýraznili. Věděli jste, že na svém profilu můžete zvýraznit hashtagy, které používáte nejvíce, a dokonce účty vašich přátel?",
"empty_column.account_featured_other.unknown": "Tento účet zatím nemá nic zvýrazněného.",
@@ -389,6 +452,7 @@
"empty_column.notification_requests": "Vyčištěno! Nic tu není. Jakmile obdržíš nové notifikace, objeví se zde podle tvého nastavení.",
"empty_column.notifications": "Zatím nemáte žádná oznámení. Až s vámi někdo bude interagovat, uvidíte to zde.",
"empty_column.public": "Tady nic není! Napište něco veřejně, nebo začněte ručně sledovat uživatele z jiných serverů, aby tu něco přibylo",
+ "empty_state.no_results": "Žádné výsledky",
"error.no_hashtag_feed_access": "Zaregistrujte se nebo se přihlaste k zobrazení a sledování tohoto hashtagu.",
"error.unexpected_crash.explanation": "Kvůli chybě v našem kódu nebo problému s kompatibilitou prohlížeče nemohla být tato stránka správně zobrazena.",
"error.unexpected_crash.explanation_addons": "Tuto stránku nelze správně zobrazit. Takovou chybu obvykle způsobuje doplněk prohlížeče nebo nástroje pro automatický překlad.",
@@ -404,6 +468,7 @@
"featured_carousel.current": "
Příspěvek {current, number}/{max, number}",
"featured_carousel.header": "{count, plural, one {{counter} zvýrazněný příspěvek} few {{counter} zvýrazněné příspěvky} many {{counter} zvýrazněných příspěvků} other {{counter} zvýrazněných příspěvků}}",
"featured_carousel.slide": "Příspěvek {current, number} z {max, number}",
+ "featured_tags.more_items": "+{count}",
"filter_modal.added.context_mismatch_explanation": "Tato kategorie filtrů se nevztahuje na kontext, ve kterém jste tento příspěvek otevřeli. Pokud chcete, aby byl příspěvek filtrován i v tomto kontextu, budete muset filtr upravit.",
"filter_modal.added.context_mismatch_title": "Kontext se neshoduje!",
"filter_modal.added.expired_explanation": "Tato kategorie filtrů vypršela, budete muset změnit datum vypršení platnosti, aby mohla být použita.",
@@ -445,6 +510,7 @@
"follow_suggestions.view_all": "Zobrazit vše",
"follow_suggestions.who_to_follow": "Koho sledovat",
"followed_tags": "Sledované hashtagy",
+ "followers.hide_other_followers": "Tento uživatel se rozhodl nezveřejnit své další sledující",
"footer.about": "O aplikaci",
"footer.about_mastodon": "O Mastodonu",
"footer.about_server": "O {domain}",
@@ -456,6 +522,7 @@
"footer.source_code": "Zobrazit zdrojový kód",
"footer.status": "Stav",
"footer.terms_of_service": "Obchodní podmínky",
+ "form_field.optional": "(volitelné)",
"generic.saved": "Uloženo",
"getting_started.heading": "Začínáme",
"hashtag.admin_moderation": "Otevřít moderátorské rozhraní pro #{name}",
@@ -791,6 +858,7 @@
"privacy.private.short": "Sledující",
"privacy.public.long": "Kdokoliv na Mastodonu i mimo něj",
"privacy.public.short": "Veřejné",
+ "privacy.quote.anyone": "{visibility}, citování povoleno",
"privacy.quote.disabled": "{visibility}, citování je zakázáno",
"privacy.quote.limited": "{visibility}, citování je omezené",
"privacy.unlisted.additional": "Chová se stejně jako veřejný, až na to, že se příspěvek neobjeví v živých kanálech nebo hashtazích, v objevování nebo vyhledávání na Mastodonu, a to i když je účet nastaven tak, aby se zde všude tyto příspěvky zobrazovaly.",
diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json
index 56b5910a38..095b3f916a 100644
--- a/app/javascript/mastodon/locales/da.json
+++ b/app/javascript/mastodon/locales/da.json
@@ -20,7 +20,7 @@
"account.add_or_remove_from_list": "Tilføj eller fjern fra lister",
"account.badges.admin": "Admin",
"account.badges.blocked": "Blokeret",
- "account.badges.bot": "Automatisert",
+ "account.badges.bot": "Automatiseret",
"account.badges.domain_blocked": "Blokeret domæne",
"account.badges.group": "Gruppe",
"account.badges.muted": "Skjult",
@@ -263,6 +263,11 @@
"collections.create_collection": "Opret samling",
"collections.delete_collection": "Slet samling",
"collections.description_length_hint": "Begrænset til 100 tegn",
+ "collections.detail.accounts_heading": "Konti",
+ "collections.detail.curated_by_author": "Kurateret af {author}",
+ "collections.detail.curated_by_you": "Kurateret af dig",
+ "collections.detail.loading": "Indlæser samling…",
+ "collections.detail.share": "Del denne samling",
"collections.edit_details": "Rediger grundlæggende oplysninger",
"collections.edit_settings": "Rediger indstillinger",
"collections.error_loading_collections": "Der opstod en fejl under indlæsning af dine samlinger.",
diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json
index 8c19179ba0..0f5945775e 100644
--- a/app/javascript/mastodon/locales/de.json
+++ b/app/javascript/mastodon/locales/de.json
@@ -263,6 +263,11 @@
"collections.create_collection": "Sammlung erstellen",
"collections.delete_collection": "Sammlung löschen",
"collections.description_length_hint": "Maximal 100 Zeichen",
+ "collections.detail.accounts_heading": "Konten",
+ "collections.detail.curated_by_author": "Kuratiert von {author}",
+ "collections.detail.curated_by_you": "Kuratiert von dir",
+ "collections.detail.loading": "Sammlung wird geladen …",
+ "collections.detail.share": "Sammlung teilen",
"collections.edit_details": "Allgemeine Informationen bearbeiten",
"collections.edit_settings": "Einstellungen bearbeiten",
"collections.error_loading_collections": "Beim Laden deiner Sammlungen ist ein Fehler aufgetreten.",
diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json
index 102cf7e7d5..5178130cf0 100644
--- a/app/javascript/mastodon/locales/el.json
+++ b/app/javascript/mastodon/locales/el.json
@@ -263,6 +263,11 @@
"collections.create_collection": "Δημιουργία συλλογής",
"collections.delete_collection": "Διαγραφή συλλογής",
"collections.description_length_hint": "Όριο 100 χαρακτήρων",
+ "collections.detail.accounts_heading": "Λογαριασμοί",
+ "collections.detail.curated_by_author": "Επιμέλεια από {author}",
+ "collections.detail.curated_by_you": "Επιμέλεια από εσάς",
+ "collections.detail.loading": "Γίνεται φόρτωση της συλλογής…",
+ "collections.detail.share": "Κοινοποιήστε αυτήν τη συλλογή",
"collections.edit_details": "Επεξεργασία βασικών στοιχείων",
"collections.edit_settings": "Επεξεργασία ρυθμίσεων",
"collections.error_loading_collections": "Παρουσιάστηκε σφάλμα κατά την προσπάθεια φόρτωσης των συλλογών σας.",
diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json
index 1e2acb5559..576e56e9e3 100644
--- a/app/javascript/mastodon/locales/en-GB.json
+++ b/app/javascript/mastodon/locales/en-GB.json
@@ -263,8 +263,12 @@
"collections.create_collection": "Create collection",
"collections.delete_collection": "Delete collection",
"collections.description_length_hint": "100 characters limit",
- "collections.edit_details": "Edit basic details",
- "collections.edit_settings": "Edit settings",
+ "collections.detail.accounts_heading": "Accounts",
+ "collections.detail.curated_by_author": "Curated by {author}",
+ "collections.detail.curated_by_you": "Curated by you",
+ "collections.detail.loading": "Loading collection…",
+ "collections.detail.share": "Share this collection",
+ "collections.edit_details": "Edit details",
"collections.error_loading_collections": "There was an error when trying to load your collections.",
"collections.hints.accounts_counter": "{count} / {max} accounts",
"collections.hints.add_more_accounts": "Add at least {count, plural, one {# account} other {# accounts}} to continue",
@@ -274,7 +278,7 @@
"collections.manage_accounts_in_collection": "Manage accounts in this collection",
"collections.mark_as_sensitive": "Mark as sensitive",
"collections.mark_as_sensitive_hint": "Hides the collection's description and accounts behind a content warning. The collection name will still be visible.",
- "collections.name_length_hint": "100 characters limit",
+ "collections.name_length_hint": "40 characters limit",
"collections.new_collection": "New collection",
"collections.no_collections_yet": "No collections yet.",
"collections.remove_account": "Remove this account",
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json
index 9352ae5166..3e7bd4eacf 100644
--- a/app/javascript/mastodon/locales/en.json
+++ b/app/javascript/mastodon/locales/en.json
@@ -141,8 +141,25 @@
"account.unmute": "Unmute @{name}",
"account.unmute_notifications_short": "Unmute notifications",
"account.unmute_short": "Unmute",
+ "account_edit.bio.placeholder": "Add a short introduction to help others identify you.",
+ "account_edit.bio.title": "Bio",
+ "account_edit.bio_modal.add_title": "Add bio",
+ "account_edit.bio_modal.edit_title": "Edit bio",
+ "account_edit.char_counter": "{currentLength}/{maxLength} characters",
"account_edit.column_button": "Done",
"account_edit.column_title": "Edit Profile",
+ "account_edit.custom_fields.placeholder": "Add your pronouns, external links, or anything else you’d like to share.",
+ "account_edit.custom_fields.title": "Custom fields",
+ "account_edit.display_name.placeholder": "Your display name is how your name appears on your profile and in timelines.",
+ "account_edit.display_name.title": "Display name",
+ "account_edit.featured_hashtags.placeholder": "Help others identify, and have quick access to, your favorite topics.",
+ "account_edit.featured_hashtags.title": "Featured hashtags",
+ "account_edit.name_modal.add_title": "Add display name",
+ "account_edit.name_modal.edit_title": "Edit display name",
+ "account_edit.profile_tab.subtitle": "Customize the tabs on your profile and what they display.",
+ "account_edit.profile_tab.title": "Profile tab settings",
+ "account_edit.save": "Save",
+ "account_edit.section_edit_button": "Edit",
"account_note.placeholder": "Click to add note",
"admin.dashboard.daily_retention": "User retention rate by day after sign-up",
"admin.dashboard.monthly_retention": "User retention rate by month after sign-up",
@@ -257,7 +274,6 @@
"collections.create.accounts_subtitle": "Only accounts you follow who have opted into discovery can be added.",
"collections.create.accounts_title": "Who will you feature in this collection?",
"collections.create.basic_details_title": "Basic details",
- "collections.create.settings_title": "Settings",
"collections.create.steps": "Step {step}/{total}",
"collections.create_a_collection_hint": "Create a collection to recommend or share your favourite accounts with others.",
"collections.create_collection": "Create collection",
@@ -268,23 +284,22 @@
"collections.detail.curated_by_you": "Curated by you",
"collections.detail.loading": "Loading collection…",
"collections.detail.share": "Share this collection",
- "collections.edit_details": "Edit basic details",
- "collections.edit_settings": "Edit settings",
+ "collections.edit_details": "Edit details",
"collections.error_loading_collections": "There was an error when trying to load your collections.",
"collections.hints.accounts_counter": "{count} / {max} accounts",
"collections.hints.add_more_accounts": "Add at least {count, plural, one {# account} other {# accounts}} to continue",
"collections.hints.can_not_remove_more_accounts": "Collections must contain at least {count, plural, one {# account} other {# accounts}}. Removing more accounts is not possible.",
"collections.last_updated_at": "Last updated: {date}",
"collections.manage_accounts": "Manage accounts",
- "collections.manage_accounts_in_collection": "Manage accounts in this collection",
"collections.mark_as_sensitive": "Mark as sensitive",
"collections.mark_as_sensitive_hint": "Hides the collection's description and accounts behind a content warning. The collection name will still be visible.",
- "collections.name_length_hint": "100 characters limit",
+ "collections.name_length_hint": "40 characters limit",
"collections.new_collection": "New collection",
"collections.no_collections_yet": "No collections yet.",
"collections.remove_account": "Remove this account",
"collections.search_accounts_label": "Search for accounts to add…",
"collections.search_accounts_max_reached": "You have added the maximum number of accounts",
+ "collections.sensitive": "Sensitive",
"collections.topic_hint": "Add a hashtag that helps others understand the main topic of this collection.",
"collections.view_collection": "View collection",
"collections.visibility_public": "Public",
diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json
index d6856b63ac..e2c41f6259 100644
--- a/app/javascript/mastodon/locales/es-AR.json
+++ b/app/javascript/mastodon/locales/es-AR.json
@@ -263,6 +263,11 @@
"collections.create_collection": "Crear colección",
"collections.delete_collection": "Eliminar colección",
"collections.description_length_hint": "Límite de 100 caracteres",
+ "collections.detail.accounts_heading": "Cuentas",
+ "collections.detail.curated_by_author": "Curado por {author}",
+ "collections.detail.curated_by_you": "Curado por vos",
+ "collections.detail.loading": "Cargando colección…",
+ "collections.detail.share": "Compartir esta colección",
"collections.edit_details": "Editar detalles básicos",
"collections.edit_settings": "Editar configuración",
"collections.error_loading_collections": "Hubo un error al intentar cargar tus colecciones.",
diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json
index 4f2110f181..2c5afab168 100644
--- a/app/javascript/mastodon/locales/es-MX.json
+++ b/app/javascript/mastodon/locales/es-MX.json
@@ -263,6 +263,11 @@
"collections.create_collection": "Crear colección",
"collections.delete_collection": "Eliminar colección",
"collections.description_length_hint": "Limitado a 100 caracteres",
+ "collections.detail.accounts_heading": "Cuentas",
+ "collections.detail.curated_by_author": "Seleccionado por {author}",
+ "collections.detail.curated_by_you": "Seleccionado por ti",
+ "collections.detail.loading": "Cargando colección…",
+ "collections.detail.share": "Compartir esta colección",
"collections.edit_details": "Editar detalles básicos",
"collections.edit_settings": "Editar configuración",
"collections.error_loading_collections": "Se produjo un error al intentar cargar tus colecciones.",
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index e98c685ae5..bb0f07ea57 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -141,6 +141,8 @@
"account.unmute": "Dejar de silenciar a @{name}",
"account.unmute_notifications_short": "Dejar de silenciar notificaciones",
"account.unmute_short": "Dejar de silenciar",
+ "account_edit.column_button": "Hecho",
+ "account_edit.column_title": "Editar perfil",
"account_note.placeholder": "Haz clic para añadir nota",
"admin.dashboard.daily_retention": "Tasa de retención de usuarios por día después del registro",
"admin.dashboard.monthly_retention": "Tasa de retención de usuarios por mes después del registro",
@@ -261,6 +263,11 @@
"collections.create_collection": "Crear colección",
"collections.delete_collection": "Eliminar colección",
"collections.description_length_hint": "Limitado a 100 caracteres",
+ "collections.detail.accounts_heading": "Cuentas",
+ "collections.detail.curated_by_author": "Seleccionado por {author}",
+ "collections.detail.curated_by_you": "Seleccionado por ti",
+ "collections.detail.loading": "Cargando colección…",
+ "collections.detail.share": "Compartir esta colección",
"collections.edit_details": "Editar datos básicos",
"collections.edit_settings": "Cambiar ajustes",
"collections.error_loading_collections": "Se ha producido un error al intentar cargar tus colecciones.",
diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json
index 2ab912530a..ab8a2728ab 100644
--- a/app/javascript/mastodon/locales/fi.json
+++ b/app/javascript/mastodon/locales/fi.json
@@ -263,6 +263,11 @@
"collections.create_collection": "Luo kokoelma",
"collections.delete_collection": "Poista kokoelma",
"collections.description_length_hint": "100 merkin rajoitus",
+ "collections.detail.accounts_heading": "Tilit",
+ "collections.detail.curated_by_author": "Koonnut {author}",
+ "collections.detail.curated_by_you": "Itse kokoamasi",
+ "collections.detail.loading": "Ladataan kokoelmaa…",
+ "collections.detail.share": "Jaa tämä kokoelma",
"collections.edit_details": "Muokkaa perustietoja",
"collections.edit_settings": "Muokkaa asetuksia",
"collections.error_loading_collections": "Kokoelmien latauksessa tapahtui virhe.",
diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json
index 7b83533de2..521008913b 100644
--- a/app/javascript/mastodon/locales/fr-CA.json
+++ b/app/javascript/mastodon/locales/fr-CA.json
@@ -141,6 +141,8 @@
"account.unmute": "Ne plus masquer @{name}",
"account.unmute_notifications_short": "Ne plus masquer les notifications",
"account.unmute_short": "Ne plus masquer",
+ "account_edit.column_button": "Terminé",
+ "account_edit.column_title": "Modifier le profil",
"account_note.placeholder": "Cliquez pour ajouter une note",
"admin.dashboard.daily_retention": "Taux de rétention des comptes par jour après inscription",
"admin.dashboard.monthly_retention": "Taux de rétention des comptes par mois après inscription",
@@ -261,6 +263,11 @@
"collections.create_collection": "Créer une collection",
"collections.delete_collection": "Supprimer la collection",
"collections.description_length_hint": "Maximum 100 caractères",
+ "collections.detail.accounts_heading": "Comptes",
+ "collections.detail.curated_by_author": "Organisée par {author}",
+ "collections.detail.curated_by_you": "Organisée par vous",
+ "collections.detail.loading": "Chargement de la collection…",
+ "collections.detail.share": "Partager la collection",
"collections.edit_details": "Modifier les informations générales",
"collections.edit_settings": "Modifier les paramètres",
"collections.error_loading_collections": "Une erreur s'est produite durant le chargement de vos collections.",
diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json
index eee947ec48..1a581e9c9d 100644
--- a/app/javascript/mastodon/locales/fr.json
+++ b/app/javascript/mastodon/locales/fr.json
@@ -141,6 +141,8 @@
"account.unmute": "Ne plus masquer @{name}",
"account.unmute_notifications_short": "Réactiver les notifications",
"account.unmute_short": "Ne plus masquer",
+ "account_edit.column_button": "Terminé",
+ "account_edit.column_title": "Modifier le profil",
"account_note.placeholder": "Cliquez pour ajouter une note",
"admin.dashboard.daily_retention": "Taux de rétention des utilisateur·rice·s par jour après inscription",
"admin.dashboard.monthly_retention": "Taux de rétention des utilisateur·rice·s par mois après inscription",
@@ -261,6 +263,11 @@
"collections.create_collection": "Créer une collection",
"collections.delete_collection": "Supprimer la collection",
"collections.description_length_hint": "Maximum 100 caractères",
+ "collections.detail.accounts_heading": "Comptes",
+ "collections.detail.curated_by_author": "Organisée par {author}",
+ "collections.detail.curated_by_you": "Organisée par vous",
+ "collections.detail.loading": "Chargement de la collection…",
+ "collections.detail.share": "Partager la collection",
"collections.edit_details": "Modifier les informations générales",
"collections.edit_settings": "Modifier les paramètres",
"collections.error_loading_collections": "Une erreur s'est produite durant le chargement de vos collections.",
diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json
index 2165b5bf74..e05a85e0ae 100644
--- a/app/javascript/mastodon/locales/ga.json
+++ b/app/javascript/mastodon/locales/ga.json
@@ -141,6 +141,8 @@
"account.unmute": "Díbhalbhaigh @{name}",
"account.unmute_notifications_short": "Díbhalbhaigh fógraí",
"account.unmute_short": "Díbhalbhaigh",
+ "account_edit.column_button": "Déanta",
+ "account_edit.column_title": "Cuir Próifíl in Eagar",
"account_note.placeholder": "Cliceáil chun nóta a chuir leis",
"admin.dashboard.daily_retention": "Ráta coinneála an úsáideora de réir an lae tar éis clárú",
"admin.dashboard.monthly_retention": "Ráta coinneála na n-úsáideoirí de réir na míosa tar éis dóibh clárú",
@@ -261,6 +263,11 @@
"collections.create_collection": "Cruthaigh bailiúchán",
"collections.delete_collection": "Scrios bailiúchán",
"collections.description_length_hint": "Teorainn 100 carachtar",
+ "collections.detail.accounts_heading": "Cuntais",
+ "collections.detail.curated_by_author": "Curtha i dtoll a chéile ag {author}",
+ "collections.detail.curated_by_you": "Curtha i dtoll a chéile agatsa",
+ "collections.detail.loading": "Ag lódáil an bhailiúcháin…",
+ "collections.detail.share": "Comhroinn an bailiúchán seo",
"collections.edit_details": "Cuir sonraí bunúsacha in eagar",
"collections.edit_settings": "Socruithe a chur in eagar",
"collections.error_loading_collections": "Tharla earráid agus iarracht á déanamh do bhailiúcháin a luchtú.",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index e9a5392676..54263a5d8c 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -263,6 +263,11 @@
"collections.create_collection": "Crear colección",
"collections.delete_collection": "Eliminar colección",
"collections.description_length_hint": "Límite de 100 caracteres",
+ "collections.detail.accounts_heading": "Contas",
+ "collections.detail.curated_by_author": "Seleccionadas por {author}",
+ "collections.detail.curated_by_you": "Seleccionadas por ti",
+ "collections.detail.loading": "Cargando colección…",
+ "collections.detail.share": "Compartir esta colección",
"collections.edit_details": "Editar detalles básicos",
"collections.edit_settings": "Editar axustes",
"collections.error_loading_collections": "Houbo un erro ao intentar cargar as túas coleccións.",
diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json
index 5a9bf30389..a5808b3ba1 100644
--- a/app/javascript/mastodon/locales/he.json
+++ b/app/javascript/mastodon/locales/he.json
@@ -263,6 +263,11 @@
"collections.create_collection": "יצירת אוסף",
"collections.delete_collection": "מחיקת האוסף",
"collections.description_length_hint": "מגבלה של 100 תווים",
+ "collections.detail.accounts_heading": "חשבונות",
+ "collections.detail.curated_by_author": "נאצר על ידי {author}",
+ "collections.detail.curated_by_you": "נאצר על ידיך",
+ "collections.detail.loading": "טוען אוסף…",
+ "collections.detail.share": "שיתוף אוסף",
"collections.edit_details": "עריכת פרטים בסיסיים",
"collections.edit_settings": "עריכת הגדרות",
"collections.error_loading_collections": "חלה שגיאה בנסיון לטעון את אוספיך.",
diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json
index 649128d9c5..92cdb3088b 100644
--- a/app/javascript/mastodon/locales/is.json
+++ b/app/javascript/mastodon/locales/is.json
@@ -263,6 +263,11 @@
"collections.create_collection": "Búa til safn",
"collections.delete_collection": "Eyða safni",
"collections.description_length_hint": "100 stafa takmörk",
+ "collections.detail.accounts_heading": "Aðgangar",
+ "collections.detail.curated_by_author": "Safnað saman af {author}",
+ "collections.detail.curated_by_you": "Safnað saman af þér",
+ "collections.detail.loading": "Hleð inn safni…",
+ "collections.detail.share": "Deila þessu safni",
"collections.edit_details": "Breyta grunnupplýsingum",
"collections.edit_settings": "Breyta stillingum",
"collections.error_loading_collections": "Villa kom upp þegar reynt var að hlaða inn söfnunum þínum.",
diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json
index cf37f6b8e4..846a860fd5 100644
--- a/app/javascript/mastodon/locales/it.json
+++ b/app/javascript/mastodon/locales/it.json
@@ -263,6 +263,11 @@
"collections.create_collection": "Crea la collezione",
"collections.delete_collection": "Cancella la collezione",
"collections.description_length_hint": "Limite di 100 caratteri",
+ "collections.detail.accounts_heading": "Account",
+ "collections.detail.curated_by_author": "Curata da {author}",
+ "collections.detail.curated_by_you": "Curata da te",
+ "collections.detail.loading": "Caricamento della collezione…",
+ "collections.detail.share": "Condividi questa collezione",
"collections.edit_details": "Modifica i dettagli di base",
"collections.edit_settings": "Modifica impostazioni",
"collections.error_loading_collections": "Si è verificato un errore durante il tentativo di caricare le tue collezioni.",
diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json
index f5bda95ad2..9731c0756d 100644
--- a/app/javascript/mastodon/locales/ko.json
+++ b/app/javascript/mastodon/locales/ko.json
@@ -16,7 +16,9 @@
"account.about": "정보",
"account.account_note_header": "개인 메모",
"account.activity": "활동",
+ "account.add_note": "개인 메모 추가",
"account.add_or_remove_from_list": "리스트에 추가 혹은 삭제",
+ "account.badges.admin": "관리자",
"account.badges.blocked": "차단함",
"account.badges.bot": "자동화됨",
"account.badges.domain_blocked": "차단한 도메인",
@@ -33,6 +35,7 @@
"account.direct": "@{name} 님에게 개인 멘션",
"account.disable_notifications": "@{name} 의 게시물 알림 끄기",
"account.domain_blocking": "도메인 차단함",
+ "account.edit_note": "개인 메모 편집",
"account.edit_profile": "프로필 편집",
"account.edit_profile_short": "수정",
"account.enable_notifications": "@{name} 의 게시물 알림 켜기",
@@ -45,6 +48,7 @@
"account.featured.hashtags": "해시태그",
"account.featured_tags.last_status_at": "{date}에 마지막으로 게시",
"account.featured_tags.last_status_never": "게시물 없음",
+ "account.filters.all": "모든 활동",
"account.filters.boosts_toggle": "부스트 보기",
"account.filters.replies_toggle": "답글 보기",
"account.follow": "팔로우",
diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json
index ad10a2f1ca..a611068521 100644
--- a/app/javascript/mastodon/locales/nl.json
+++ b/app/javascript/mastodon/locales/nl.json
@@ -141,6 +141,8 @@
"account.unmute": "@{name} niet langer negeren",
"account.unmute_notifications_short": "Meldingen niet langer negeren",
"account.unmute_short": "Niet langer negeren",
+ "account_edit.column_button": "Klaar",
+ "account_edit.column_title": "Profiel bewerken",
"account_note.placeholder": "Klik om een opmerking toe te voegen",
"admin.dashboard.daily_retention": "Retentiegraad van gebruikers per dag, vanaf registratie",
"admin.dashboard.monthly_retention": "Retentiegraad van gebruikers per maand, vanaf registratie",
@@ -244,9 +246,12 @@
"closed_registrations_modal.preamble": "Mastodon is gedecentraliseerd. Op welke server je ook een account hebt, je kunt overal vandaan mensen op deze server volgen en er mee interactie hebben. Je kunt zelfs zelf een Mastodon-server hosten!",
"closed_registrations_modal.title": "Registreren op Mastodon",
"collections.account_count": "{count, plural, one {# account} other {# accounts}}",
+ "collections.accounts.empty_description": "Voeg tot {count} accounts toe die je volgt",
+ "collections.accounts.empty_title": "Deze verzameling is leeg",
"collections.collection_description": "Omschrijving",
"collections.collection_name": "Naam",
"collections.collection_topic": "Onderwerp",
+ "collections.confirm_account_removal": "Weet je zeker dat je dit account uit deze verzameling wilt verwijderen?",
"collections.content_warning": "Inhoudswaarschuwing",
"collections.continue": "Doorgaan",
"collections.create.accounts_subtitle": "Alleen accounts die je volgt en ontdekt willen worden, kunnen worden toegevoegd.",
@@ -258,9 +263,17 @@
"collections.create_collection": "Verzameling aanmaken",
"collections.delete_collection": "Verzameling verwijderen",
"collections.description_length_hint": "Maximaal 100 karakters",
+ "collections.detail.accounts_heading": "Accounts",
+ "collections.detail.curated_by_author": "Samengesteld door {author}",
+ "collections.detail.curated_by_you": "Samengesteld door jou",
+ "collections.detail.loading": "Verzameling laden…",
+ "collections.detail.share": "Deze verzameling delen",
"collections.edit_details": "Basisgegevens bewerken",
"collections.edit_settings": "Instellingen bewerken",
"collections.error_loading_collections": "Er is een fout opgetreden bij het laden van je verzamelingen.",
+ "collections.hints.accounts_counter": "{count} / {max} accounts",
+ "collections.hints.add_more_accounts": "Voeg ten minste {count, plural, one {# account} other {# accounts}} toe om door te gaan",
+ "collections.hints.can_not_remove_more_accounts": "Verzamelingen moeten ten minste {count, plural, one {# account} other {# accounts}} bevatten. Meer accounts verwijderen is niet mogelijk.",
"collections.last_updated_at": "Laatst bijgewerkt: {date}",
"collections.manage_accounts": "Accounts beheren",
"collections.manage_accounts_in_collection": "Accounts in deze verzameling beheren",
@@ -269,6 +282,9 @@
"collections.name_length_hint": "100 tekens limiet",
"collections.new_collection": "Nieuwe verzameling",
"collections.no_collections_yet": "Nog geen verzamelingen.",
+ "collections.remove_account": "Deze account verwijderen",
+ "collections.search_accounts_label": "Zoek naar accounts om toe te voegen…",
+ "collections.search_accounts_max_reached": "Je hebt het maximum aantal accounts toegevoegd",
"collections.topic_hint": "Voeg een hashtag toe die anderen helpt het hoofdonderwerp van deze collectie te begrijpen.",
"collections.view_collection": "Verzameling bekijken",
"collections.visibility_public": "Openbaar",
diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json
index e0ddb7fbaf..51a2f78547 100644
--- a/app/javascript/mastodon/locales/sq.json
+++ b/app/javascript/mastodon/locales/sq.json
@@ -260,6 +260,11 @@
"collections.create_collection": "Krijoni koleksion",
"collections.delete_collection": "Fshije koleksionin",
"collections.description_length_hint": "Kufi prej 100 shenjash",
+ "collections.detail.accounts_heading": "Llogari",
+ "collections.detail.curated_by_author": "Në kujdesin e {author}",
+ "collections.detail.curated_by_you": "Nën kujdesin tuaj",
+ "collections.detail.loading": "Po ngarkohet koleksion…",
+ "collections.detail.share": "Ndajeni këtë koleksion me të tjerë",
"collections.edit_details": "Përpunoni hollësi bazë",
"collections.edit_settings": "Përpunoni rregullime",
"collections.error_loading_collections": "Pati një gabim teksa provohej të ngarkoheshin koleksionet tuaj.",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index 80a1fe8bf3..7d9b2d2024 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -200,6 +200,7 @@
"collections.create_a_collection_hint": "Skapa en samling för att rekommendera eller dela dina favoritkonton med andra.",
"collections.create_collection": "Skapa samling",
"collections.delete_collection": "Radera samling",
+ "collections.detail.accounts_heading": "Konton",
"collections.error_loading_collections": "Det uppstod ett fel när dina samlingar skulle laddas.",
"collections.hints.accounts_counter": "{count} / {max} konton",
"collections.no_collections_yet": "Inga samlingar än.",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index 6efc24ac74..7dc80277ba 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -141,6 +141,8 @@
"account.unmute": "@{name} adlı kişinin sesini aç",
"account.unmute_notifications_short": "Bildirimlerin sesini aç",
"account.unmute_short": "Susturmayı kaldır",
+ "account_edit.column_button": "Tamamlandı",
+ "account_edit.column_title": "Profili Düzenle",
"account_note.placeholder": "Not eklemek için tıklayın",
"admin.dashboard.daily_retention": "Kayıttan sonra günlük kullanıcı saklama oranı",
"admin.dashboard.monthly_retention": "Kayıttan sonra aylık kullanıcı saklama oranı",
@@ -261,6 +263,11 @@
"collections.create_collection": "Koleksiyon oluştur",
"collections.delete_collection": "Koleksiyonu sil",
"collections.description_length_hint": "100 karakterle sınırlı",
+ "collections.detail.accounts_heading": "Hesaplar",
+ "collections.detail.curated_by_author": "{author} tarafından derlenen",
+ "collections.detail.curated_by_you": "Sizin derledikleriniz",
+ "collections.detail.loading": "Koleksiyon yükleniyor…",
+ "collections.detail.share": "Bu koleksiyonu paylaş",
"collections.edit_details": "Temel bilgileri düzenle",
"collections.edit_settings": "Ayarları düzenle",
"collections.error_loading_collections": "Koleksiyonlarınızı yüklemeye çalışırken bir hata oluştu.",
diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json
index 09deb8244f..a956d58b00 100644
--- a/app/javascript/mastodon/locales/vi.json
+++ b/app/javascript/mastodon/locales/vi.json
@@ -263,6 +263,11 @@
"collections.create_collection": "Tạo collection",
"collections.delete_collection": "Xóa collection",
"collections.description_length_hint": "Giới hạn 100 ký tự",
+ "collections.detail.accounts_heading": "Tài khoản",
+ "collections.detail.curated_by_author": "Tuyển chọn bởi {author}",
+ "collections.detail.curated_by_you": "Tuyển chọn bởi bạn",
+ "collections.detail.loading": "Đang tải collection…",
+ "collections.detail.share": "Chia sẻ collection này",
"collections.edit_details": "Sửa thông tin cơ bản",
"collections.edit_settings": "Sửa cài đặt",
"collections.error_loading_collections": "Đã xảy ra lỗi khi tải những collection của bạn.",
diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json
index 749f2ee916..9ecfba8a6a 100644
--- a/app/javascript/mastodon/locales/zh-CN.json
+++ b/app/javascript/mastodon/locales/zh-CN.json
@@ -141,6 +141,8 @@
"account.unmute": "不再隐藏 @{name}",
"account.unmute_notifications_short": "恢复通知",
"account.unmute_short": "取消隐藏",
+ "account_edit.column_button": "完成",
+ "account_edit.column_title": "修改个人资料",
"account_note.placeholder": "点击添加备注",
"admin.dashboard.daily_retention": "注册后用户留存率(按日计算)",
"admin.dashboard.monthly_retention": "注册后用户留存率(按月计算)",
@@ -261,6 +263,11 @@
"collections.create_collection": "创建收藏列表",
"collections.delete_collection": "删除收藏列表",
"collections.description_length_hint": "100字限制",
+ "collections.detail.accounts_heading": "账号",
+ "collections.detail.curated_by_author": "由 {author} 精心挑选",
+ "collections.detail.curated_by_you": "由你精心挑选",
+ "collections.detail.loading": "正在加载收藏列表…",
+ "collections.detail.share": "分享此收藏列表",
"collections.edit_details": "编辑基本信息",
"collections.edit_settings": "编辑设置",
"collections.error_loading_collections": "加载你的收藏列表时发生错误。",
diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json
index b5798703f1..cb9cb725d1 100644
--- a/app/javascript/mastodon/locales/zh-TW.json
+++ b/app/javascript/mastodon/locales/zh-TW.json
@@ -263,6 +263,11 @@
"collections.create_collection": "建立收藏名單",
"collections.delete_collection": "刪除收藏名單",
"collections.description_length_hint": "100 字限制",
+ "collections.detail.accounts_heading": "帳號",
+ "collections.detail.curated_by_author": "由 {author} 精選",
+ "collections.detail.curated_by_you": "由您精選",
+ "collections.detail.loading": "讀取收藏名單中...",
+ "collections.detail.share": "分享此收藏名單",
"collections.edit_details": "編輯基本資料",
"collections.edit_settings": "編輯設定",
"collections.error_loading_collections": "讀取您的收藏名單時發生錯誤。",
diff --git a/app/javascript/mastodon/models/account.ts b/app/javascript/mastodon/models/account.ts
index b834a022ad..c8109fffb5 100644
--- a/app/javascript/mastodon/models/account.ts
+++ b/app/javascript/mastodon/models/account.ts
@@ -69,6 +69,11 @@ export const accountDefaultValues: AccountShape = {
display_name: '',
display_name_html: '',
emojis: ImmutableList
(),
+ feature_approval: {
+ automatic: [],
+ manual: [],
+ current_user: 'missing',
+ },
fields: ImmutableList(),
group: false,
header: '',
diff --git a/app/javascript/mastodon/reducers/slices/collections.ts b/app/javascript/mastodon/reducers/slices/collections.ts
index 384b698d4a..77969ffcad 100644
--- a/app/javascript/mastodon/reducers/slices/collections.ts
+++ b/app/javascript/mastodon/reducers/slices/collections.ts
@@ -15,6 +15,7 @@ import type {
ApiCreateCollectionPayload,
ApiUpdateCollectionPayload,
} from '@/mastodon/api_types/collections';
+import { me } from '@/mastodon/initial_state';
import {
createAppSelector,
createDataLoadingThunk,
@@ -111,6 +112,14 @@ const collectionSlice = createSlice({
const { collectionId } = action.meta.arg;
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
delete state.collections[collectionId];
+ if (me) {
+ let accountCollectionIds = state.accountCollections[me]?.collectionIds;
+ if (accountCollectionIds) {
+ accountCollectionIds = accountCollectionIds.filter(
+ (id) => id !== collectionId,
+ );
+ }
+ }
});
/**
diff --git a/app/javascript/testing/factories.ts b/app/javascript/testing/factories.ts
index 7855157f6a..1efd22c3c9 100644
--- a/app/javascript/testing/factories.ts
+++ b/app/javascript/testing/factories.ts
@@ -31,6 +31,11 @@ export const accountFactory: FactoryFunction = ({
created_at: '2023-01-01T00:00:00.000Z',
discoverable: true,
emojis: [],
+ feature_approval: {
+ automatic: [],
+ manual: [],
+ current_user: 'missing',
+ },
fields: [],
followers_count: 0,
following_count: 0,
diff --git a/app/models/collection.rb b/app/models/collection.rb
index e11cb73188..d8386e43b4 100644
--- a/app/models/collection.rb
+++ b/app/models/collection.rb
@@ -26,6 +26,7 @@ class Collection < ApplicationRecord
belongs_to :tag, optional: true
has_many :collection_items, dependent: :delete_all
+ has_many :accepted_collection_items, -> { accepted }, class_name: 'CollectionItem', inverse_of: :collection # rubocop:disable Rails/HasManyOrHasOneDependent
has_many :collection_reports, dependent: :delete_all
validates :name, presence: true
diff --git a/app/views/admin/accounts/_account.html.haml b/app/views/admin/accounts/_account.html.haml
index 6b5b5efbdc..74f8494562 100644
--- a/app/views/admin/accounts/_account.html.haml
+++ b/app/views/admin/accounts/_account.html.haml
@@ -1,6 +1,7 @@
.batch-table__row{ class: [!account.unavailable? && account.user_pending? && 'batch-table__row--attention', (account.unavailable? || account.user_unconfirmed?) && 'batch-table__row--muted'] }
%label.batch-table__row__select.batch-table__row__select--aligned.batch-checkbox
- = f.check_box :account_ids, { multiple: true, include_hidden: false }, account.id
+ - if local_assigns[:f].present?
+ = f.check_box :account_ids, { multiple: true, include_hidden: false }, account.id
.batch-table__row__content.batch-table__row__content--unpadded
%table.accounts-table
%tbody
diff --git a/app/views/admin/collections/show.html.haml b/app/views/admin/collections/show.html.haml
new file mode 100644
index 0000000000..8f29b26309
--- /dev/null
+++ b/app/views/admin/collections/show.html.haml
@@ -0,0 +1,21 @@
+- content_for :page_title do
+ = t('admin.collections.collection_title', name: @account.pretty_acct)
+
+- content_for :heading_actions do
+ = link_to t('admin.collections.open'), account_collection_path(@account, @collection), class: 'button', target: '_blank', rel: 'noopener'
+
+%h3= t('admin.collections.contents')
+
+= render 'admin/shared/collection', collection: @collection
+
+%hr.spacer/
+
+%h3= t('admin.collections.accounts')
+
+.batch-table
+ .batch-table__toolbar
+ .batch-table__body
+ - if @collection.accepted_collection_items.none?
+ = nothing_here 'nothing-here--under-tabs'
+ - else
+ = render partial: 'admin/accounts/account', collection: @collection.accepted_collection_items.map(&:account)
diff --git a/app/views/admin/reports/index.html.haml b/app/views/admin/reports/index.html.haml
index b910e1aab5..1049cf733e 100644
--- a/app/views/admin/reports/index.html.haml
+++ b/app/views/admin/reports/index.html.haml
@@ -67,6 +67,11 @@
= material_symbol('photo_camera')
= report.media_attachments_count
+ - if Mastodon::Feature.collections_enabled?
+ %span.report-card__summary__item__content__icon{ title: t('admin.accounts.collections') }
+ = material_symbol('groups-fill')
+ = report.collections.size
+
- if report.forwarded?
·
= t('admin.reports.forwarded_to', domain: target_account.domain)
diff --git a/app/views/admin/reports/show.html.haml b/app/views/admin/reports/show.html.haml
index af92b05768..7ea690dc34 100644
--- a/app/views/admin/reports/show.html.haml
+++ b/app/views/admin/reports/show.html.haml
@@ -32,7 +32,7 @@
%hr.spacer/
%h3
- = t 'admin.reports.statuses'
+ = t 'admin.reports.reported_content'
%small.section-skip-link
= link_to '#actions' do
= material_symbol 'keyboard_double_arrow_down'
@@ -41,6 +41,9 @@
%p
= t 'admin.reports.statuses_description_html'
+%h4
+ = t 'admin.reports.statuses'
+
= form_with model: @form, url: batch_admin_account_statuses_path(@report.target_account_id, report_id: @report.id) do |f|
.batch-table
.batch-table__toolbar
@@ -58,6 +61,22 @@
- else
= render partial: 'admin/shared/status_batch_row', collection: @statuses, as: :status, locals: { f: f }
+- if Mastodon::Feature.collections_enabled?
+ %h4
+ = t 'admin.reports.collections'
+
+ %form
+ .batch-table
+ .batch-table__toolbar
+ %label.batch-table__toolbar__select.batch-checkbox-all
+ -# = check_box_tag :batch_checkbox_all, nil, false
+ .batch-table__toolbar__actions
+ .batch-table__body
+ - if @report.collections.empty?
+ = nothing_here 'nothing-here--under-tabs'
+ - else
+ = render partial: 'admin/shared/collection_batch_row', collection: @report.collections, as: :collection
+
- if @report.unresolved?
%hr.spacer/
diff --git a/app/views/admin/shared/_collection.html.haml b/app/views/admin/shared/_collection.html.haml
new file mode 100644
index 0000000000..e300a986ba
--- /dev/null
+++ b/app/views/admin/shared/_collection.html.haml
@@ -0,0 +1,22 @@
+.status__card
+ - if collection.tag.present?
+ .status__prepend
+ = link_to collection.tag.formatted_name, admin_tag_path(collection.tag_id)
+
+ .status__content
+ %h6= collection.name
+
+ %p= collection.description
+
+ .detailed-status__meta
+ = conditional_link_to can?(:show, collection), admin_account_collection_path(collection.account.id, collection), class: 'detailed-status__datetime' do
+ %time.formatted{ datetime: collection.created_at.iso8601, title: l(collection.created_at) }><= l(collection.created_at)
+ - if collection.sensitive?
+ ·
+ = material_symbol('visibility_off')
+ = t('stream_entries.sensitive_content')
+ ·
+ = t('admin.collections.number_of_accounts', count: collection.accepted_collection_items.size)
+ ·
+ = link_to account_collection_path(collection.account, collection), class: 'detailed-status__link', target: 'blank', rel: 'noopener' do
+ = t('admin.collections.view_publicly')
diff --git a/app/views/admin/shared/_collection_batch_row.html.haml b/app/views/admin/shared/_collection_batch_row.html.haml
new file mode 100644
index 0000000000..8bf7857e95
--- /dev/null
+++ b/app/views/admin/shared/_collection_batch_row.html.haml
@@ -0,0 +1,5 @@
+.batch-table__row
+ %label.batch-table__row__select.batch-checkbox
+ -# = f.check_box :collection_ids, { multiple: true, include_hidden: false }, collection.id
+ .batch-table__row__content
+ = render partial: 'admin/shared/collection', object: collection
diff --git a/config/locales/an.yml b/config/locales/an.yml
index a09175b777..febd52f7ec 100644
--- a/config/locales/an.yml
+++ b/config/locales/an.yml
@@ -585,7 +585,6 @@ an:
resolved_msg: La denuncia s'ha resuelto correctament!
skip_to_actions: Ir dreitament a las accions
status: Estau
- statuses: Conteniu denunciau
statuses_description_html: Lo conteniu ofensivo se citará en a comunicación con a cuenta denunciada
target_origin: Orichen d'a cuenta denunciada
title: Reportes
diff --git a/config/locales/ar.yml b/config/locales/ar.yml
index 6e5f4e8fce..f689f79007 100644
--- a/config/locales/ar.yml
+++ b/config/locales/ar.yml
@@ -752,7 +752,6 @@ ar:
resolved_msg: تمت معالجة الشكوى بنجاح!
skip_to_actions: تخطي إلى الإجراءات
status: الحالة
- statuses: المحتوى المبلغ عنه
statuses_description_html: سيشار إلى المحتوى المخالف في الاتصال بالحساب المبلغ عنه
summary:
action_preambles:
diff --git a/config/locales/ast.yml b/config/locales/ast.yml
index 836ecd161b..c8ca7a7657 100644
--- a/config/locales/ast.yml
+++ b/config/locales/ast.yml
@@ -261,7 +261,6 @@ ast:
resolved_msg: "¡L'informe resolvióse correutamente!"
skip_to_actions: Saltar a les aiciones
status: Estáu
- statuses: Conteníu del que s'informó
statuses_description_html: El conteníu ofensivu cítase na comunicación cola cuenta de la que s'informó
target_origin: Orixe de la cuenta de la que s'infomó
title: Informes
diff --git a/config/locales/be.yml b/config/locales/be.yml
index 0a0333ae2b..431219415f 100644
--- a/config/locales/be.yml
+++ b/config/locales/be.yml
@@ -739,7 +739,6 @@ be:
resolved_msg: Скарга была паспяхова вырашана!
skip_to_actions: Прапусціць дзеянні
status: Стан
- statuses: Змесціва, на якое паскардзіліся
statuses_description_html: Крыўднае змесціва будзе згадвацца ў зносінах з уліковым запісам, на які пададзена скарга
summary:
action_preambles:
diff --git a/config/locales/bg.yml b/config/locales/bg.yml
index 98179b316c..514cb2f6e9 100644
--- a/config/locales/bg.yml
+++ b/config/locales/bg.yml
@@ -696,7 +696,6 @@ bg:
resolved_msg: Успешно разрешен доклад!
skip_to_actions: Прескок към действия
status: Състояние
- statuses: Докладвано съдържание
statuses_description_html: Обидно съдържание ще се цитира в общуването с докладвания акаунт
summary:
action_preambles:
diff --git a/config/locales/ca.yml b/config/locales/ca.yml
index b271a7c4ae..32c8e723c2 100644
--- a/config/locales/ca.yml
+++ b/config/locales/ca.yml
@@ -707,7 +707,6 @@ ca:
resolved_msg: Informe resolt correctament!
skip_to_actions: Salta a les accions
status: Estat
- statuses: Contingut reportat
statuses_description_html: El contingut ofensiu se citarà en comunicació amb el compte denunciat
summary:
action_preambles:
diff --git a/config/locales/ckb.yml b/config/locales/ckb.yml
index f2798a64c8..2679c7840e 100644
--- a/config/locales/ckb.yml
+++ b/config/locales/ckb.yml
@@ -482,7 +482,6 @@ ckb:
resolved_msg: گوزارشتکردن بە سەرکەوتوویی چارەسەر کرا!
skip_to_actions: باز بدە بۆ کردارەکان
status: دۆخ
- statuses: ناوەڕۆکی ڕاپۆرتکراو
statuses_description_html: ناوەڕۆکی توڕەکەر لە پەیوەندی لەگەڵ ئەکاونتی ڕاپۆرتکراودا ئاماژەی پێدەکرێت
target_origin: سەرچاوەی ئەکاونتی ڕاپۆرتکراو
title: گوزارشتکرا
diff --git a/config/locales/cs.yml b/config/locales/cs.yml
index 8cf28f6c60..9b3c50c0cd 100644
--- a/config/locales/cs.yml
+++ b/config/locales/cs.yml
@@ -14,6 +14,11 @@ cs:
many: Sledujících
one: Sledující
other: Sledujících
+ following:
+ few: Sleduje
+ many: Sleduje
+ one: Sleduje
+ other: Sleduje
instance_actor_flash: Tento účet je virtuální aktér, který představuje server samotný, nikoliv jednotlivého uživatele. Používá se pro účely federace a neměl by být pozastaven.
last_active: naposledy aktivní
link_verified_on: Vlastnictví tohoto odkazu bylo zkontrolováno %{date}
@@ -734,7 +739,6 @@ cs:
resolved_msg: Hlášení úspěšně vyřešeno!
skip_to_actions: Přeskočit k akcím
status: Stav
- statuses: Nahlášený obsah
statuses_description_html: Obsah porušující pravidla bude uveden v komunikaci s nahlášeným účtem
summary:
action_preambles:
@@ -827,6 +831,7 @@ cs:
view_devops_description: Umožňuje uživatelům přístup k ovládacím panelům Sidekiq a pgHero
view_feeds: Zobrazit živé a tematické kanály
view_feeds_description: Umožňuje uživatelům přístup k živým a tematickým kanálům bez ohledu na nastavení serveru
+ requires_2fa: Vyžaduje dvoufázové ověření
title: Role
rules:
add_new: Přidat pravidlo
@@ -2103,6 +2108,8 @@ cs:
past_preamble_html: Od vaší poslední návštěvy jsme změnili podmínky služby. Doporučujeme vám zkontrolovat aktualizované podmínky.
review_link: Zkontrolovat podmínky užívání služby
title: Podmínky služby %{domain} se mění
+ themes:
+ default: Mastodon
time:
formats:
default: "%d. %b %Y, %H:%M"
@@ -2127,6 +2134,8 @@ cs:
recovery_codes: Záložní kódy pro obnovu
recovery_codes_regenerated: Záložní kódy byly úspěšně znovu vygenerovány
recovery_instructions_html: Ztratíte-li někdy přístup ke svému telefonu, můžete k získání přístupu k účtu použít jeden ze záložních kódů. Uchovejte tyto kódy v bezpečí. Můžete si je například vytisknout a uložit je mezi jiné důležité dokumenty.
+ resume_app_authorization: Pokračovat v autorizaci aplikace
+ role_requirement: "%{domain} vyžaduje nastavení dvoufázového ověření, než budete moci použít Mastodon."
webauthn: Bezpečnostní klíče
user_mailer:
announcement_published:
diff --git a/config/locales/cy.yml b/config/locales/cy.yml
index e3dc515e76..757e768cdf 100644
--- a/config/locales/cy.yml
+++ b/config/locales/cy.yml
@@ -765,7 +765,6 @@ cy:
resolved_msg: Llwyddwyd i ddatrys yr adroddiad!
skip_to_actions: Mynd i gamau gweithredu
status: Statws
- statuses: Cynnwys wedi'i adrodd
statuses_description_html: Bydd cynnwys tramgwyddus yn cael ei ddyfynnu wrth gyfathrebu â'r cyfrif a adroddwyd
summary:
action_preambles:
diff --git a/config/locales/da.yml b/config/locales/da.yml
index f917fdca53..4240bf8562 100644
--- a/config/locales/da.yml
+++ b/config/locales/da.yml
@@ -56,6 +56,7 @@ da:
label: Ændr rolle
no_role: Ingen rolle
title: Ændr rolle for %{username}
+ collections: Samlinger
confirm: Bekræft
confirmed: Bekræftet
confirming: Bekræfter
@@ -340,6 +341,15 @@ da:
unpublish: Afpublicér
unpublished_msg: Bekendtgørelsen er afpubliceret!
updated_msg: Bekendtgørelsen er opdateret!
+ collections:
+ accounts: Konti
+ collection_title: Indsamling af %{name}
+ contents: Indhold
+ number_of_accounts:
+ one: 1 konto
+ other: "%{count} konti"
+ open: Åben
+ view_publicly: Vis offentligt
critical_update_pending: Kritisk opdatering afventer
custom_emojis:
assign_category: Tildel kategori
@@ -679,6 +689,7 @@ da:
cancel: Afbryd
category: Kategori
category_description_html: Årsagen til anmeldelsen af denne konto og/eller indhold refereres i kommunikationen med den anmeldte konto
+ collections: Samlinger
comment:
none: Ingen
comment_description_html: 'For at give mere information, skrev %{name}:'
@@ -708,12 +719,13 @@ da:
report: 'Anmeldelse #%{id}'
reported_account: Anmeldt konto
reported_by: Anmeldt af
+ reported_content: Anmeldt indhold
reported_with_application: Rapporteret via applikation
resolved: Løst
resolved_msg: Anmeldelse løst!
skip_to_actions: Overspring til foranstaltninger
status: Status
- statuses: Anmeld indhold
+ statuses: Indlæg
statuses_description_html: Krænkende indhold citeres i kommunikationen med den anmeldte konto
summary:
action_preambles:
@@ -1499,7 +1511,7 @@ da:
copy: Kopier
delete: Slet
deselect: Afmarkér alle
- none: Intet
+ none: Ingen
order_by: Sortér efter
save_changes: Gem ændringer
select_all_matching_items:
@@ -1918,8 +1930,8 @@ da:
account_suspension: Kontosuspendering (%{target_name})
domain_block: Serversuspendering (%{target_name})
user_domain_block: "%{target_name} blev blokeret"
- lost_followers: Tabte følgere
- lost_follows: Mistet følger
+ lost_followers: Mistet følgere
+ lost_follows: Mistet fulgte
preamble: Du kan miste fulgte og følgere, når du blokerer et domæne, eller når dine moderatorer beslutter at suspendere en fjernserver. Når det sker, kan du downloade lister over afbrudte forhold til inspektion og eventuelt import til en anden server.
purged: Oplysninger om denne server er blevet renset af serveradministratoreren.
type: Begivenhed
diff --git a/config/locales/de.yml b/config/locales/de.yml
index dc33de57c1..3ec3663704 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -713,7 +713,6 @@ de:
resolved_msg: Meldung erfolgreich geklärt!
skip_to_actions: Zur Maßnahme springen
status: Status
- statuses: Gemeldeter Inhalt
statuses_description_html: Beanstandete Inhalte werden in der Kommunikation mit dem gemeldeten Konto erwähnt
summary:
action_preambles:
diff --git a/config/locales/doorkeeper.cs.yml b/config/locales/doorkeeper.cs.yml
index ff8d942120..79ef5174e5 100644
--- a/config/locales/doorkeeper.cs.yml
+++ b/config/locales/doorkeeper.cs.yml
@@ -83,6 +83,10 @@ cs:
access_denied: Vlastník zdroje či autorizační server žádost zamítl.
credential_flow_not_configured: Proud Resource Owner Password Credentials selhal, protože Doorkeeper.configure.resource_owner_from_credentials nebylo nakonfigurováno.
invalid_client: Ověření klienta selhalo kvůli neznámému klientovi, chybějící klientské autentizaci či nepodporované autentizační metodě.
+ invalid_code_challenge_method:
+ one: code_challenge_method musí být %{challenge_methods}.
+ other: code_challenge_method musí být jedna z %{challenge_methods}.
+ zero: Autorizační server nepodporuje PKCE, protože neexistují žádné akceptované hodnoty kode_challenge_method.
invalid_grant: Poskytnuté oprávnění je neplatné, vypršela jeho platnost, bylo odvoláno, neshoduje se s URI přesměrování použitým v požadavku o autorizaci, nebo bylo uděleno jinému klientu.
invalid_redirect_uri: Zahrnutá přesměrovací URI není platná.
invalid_request:
diff --git a/config/locales/doorkeeper.es-AR.yml b/config/locales/doorkeeper.es-AR.yml
index be075121b0..35f7c22f09 100644
--- a/config/locales/doorkeeper.es-AR.yml
+++ b/config/locales/doorkeeper.es-AR.yml
@@ -83,6 +83,10 @@ es-AR:
access_denied: El propietario del recurso o servidor de autorización denegó la petición.
credential_flow_not_configured: Las credenciales de contraseña del propietario del recurso fallaron debido a que "Doorkeeper.configure.resource_owner_from_credentials" está sin configurar.
invalid_client: La autenticación del cliente falló debido a que es un cliente desconocido, o no está incluída la autenticación del cliente, o el método de autenticación no está soportado.
+ invalid_code_challenge_method:
+ one: El code_challenge_method debe ser %{challenge_methods}.
+ other: El code_challenge_method debe ser uno de %{challenge_methods}.
+ zero: El servidor de autorización no soporta PKCE, ya que no hay valores aceptados de code_challenge_method.
invalid_grant: La concesión de autorización ofrecida no es válida, venció, se revocó, no coincide con la dirección web de redireccionamiento usada en la petición de autorización, o fue emitida para otro cliente.
invalid_redirect_uri: La dirección web de redireccionamiento incluida no es válida.
invalid_request:
diff --git a/config/locales/doorkeeper.es.yml b/config/locales/doorkeeper.es.yml
index 57b8078e44..2c0a726c29 100644
--- a/config/locales/doorkeeper.es.yml
+++ b/config/locales/doorkeeper.es.yml
@@ -83,6 +83,10 @@ es:
access_denied: El propietario del recurso o servidor de autorización denegó la petición.
credential_flow_not_configured: Las credenciales de contraseña del propietario del recurso falló debido a que Doorkeeper.configure.resource_owner_from_credentials está sin configurar.
invalid_client: La autentificación del cliente falló debido o a que es un cliente desconocido o no está incluída la autentificación del cliente o el método de autentificación no está confirmado.
+ invalid_code_challenge_method:
+ one: El code_challenge_method debe ser %{challenge_methods}.
+ other: El code_challenge_method debe ser uno de %{challenge_methods}.
+ zero: El servidor de autorización no soporta PKCE, ya que no hay valores aceptados de code_challenge_method.
invalid_grant: La concesión de autorización ofrecida es inválida, venció, se revocó, no coincide con la URI de redirección utilizada en la petición de autorización, o fue emitida para otro cliente.
invalid_redirect_uri: La URI de redirección incluida no es válida.
invalid_request:
diff --git a/config/locales/doorkeeper.fr-CA.yml b/config/locales/doorkeeper.fr-CA.yml
index a63e280a19..40575f9a9d 100644
--- a/config/locales/doorkeeper.fr-CA.yml
+++ b/config/locales/doorkeeper.fr-CA.yml
@@ -83,8 +83,6 @@ fr-CA:
access_denied: Le/la propriétaire de la ressource ou le serveur d’autorisation a refusé la requête.
credential_flow_not_configured: Le flux des identifiants du mot de passe du/de la propriétaire de la ressource a échoué car Doorkeeper.configure.resource_owner_from_credentials n’est pas configuré.
invalid_client: L’authentification du client a échoué à cause d’un client inconnu, d’aucune authentification de client incluse ou d’une méthode d’authentification non prise en charge.
- invalid_code_challenge_method:
- one: The code_challenge_method must be %{challenge_methods}.
invalid_grant: L’autorisation accordée est invalide, expirée, révoquée, ne concorde pas avec l’URI de redirection utilisée dans la requête d’autorisation, ou a été délivrée à un autre client.
invalid_redirect_uri: L’URI de redirection n’est pas valide.
invalid_request:
diff --git a/config/locales/doorkeeper.fr.yml b/config/locales/doorkeeper.fr.yml
index fdc642d9cd..4c7d067a0f 100644
--- a/config/locales/doorkeeper.fr.yml
+++ b/config/locales/doorkeeper.fr.yml
@@ -83,8 +83,6 @@ fr:
access_denied: Le propriétaire de la ressource ou le serveur d’autorisation a refusé la requête.
credential_flow_not_configured: Le flux des identifiants du mot de passe du propriétaire de la ressource a échoué car Doorkeeper.configure.resource_owner_from_credentials n’est pas configuré.
invalid_client: L’authentification du client a échoué à cause d’un client inconnu, d’aucune authentification de client incluse ou d’une méthode d’authentification non prise en charge.
- invalid_code_challenge_method:
- one: The code_challenge_method must be %{challenge_methods}.
invalid_grant: L’autorisation accordée est invalide, expirée, annulée, ne concorde pas avec l’URL de redirection utilisée dans la requête d’autorisation, ou a été délivrée à un autre client.
invalid_redirect_uri: L’URL de redirection n’est pas valide.
invalid_request:
diff --git a/config/locales/doorkeeper.nl.yml b/config/locales/doorkeeper.nl.yml
index 1d04e50f21..dab7746b4f 100644
--- a/config/locales/doorkeeper.nl.yml
+++ b/config/locales/doorkeeper.nl.yml
@@ -83,6 +83,10 @@ nl:
access_denied: De resource-eigenaar of autorisatie-server weigerde het verzoek.
credential_flow_not_configured: De wachtwoordgegevens-flow van de resource-eigenaar is mislukt omdat Doorkeeper.configure.resource_owner_from_credentials niet is ingesteld.
invalid_client: Clientverificatie is mislukt door een onbekende client, ontbrekende client-authenticatie of een niet ondersteunde authenticatie-methode.
+ invalid_code_challenge_method:
+ one: De code_challenge_method moet %{challenge_methods} zijn.
+ other: De code_challenge_method moet een van %{challenge_methods} zijn.
+ zero: De autorisatieserver ondersteunt PKCE niet, aangezien er geen geaccepteerde code_challenge_method waarden zijn.
invalid_grant: De verstrekte autorisatie is ongeldig, verlopen, ingetrokken, komt niet overeen met de redirect-URI die is opgegeven of werd uitgegeven aan een andere client.
invalid_redirect_uri: De opgegeven redirect-URI is ongeldig.
invalid_request:
diff --git a/config/locales/doorkeeper.tr.yml b/config/locales/doorkeeper.tr.yml
index d663f025ac..b51e49f32a 100644
--- a/config/locales/doorkeeper.tr.yml
+++ b/config/locales/doorkeeper.tr.yml
@@ -83,6 +83,10 @@ tr:
access_denied: Kaynak sahibi veya yetkilendirme sunucusu isteği reddetti.
credential_flow_not_configured: Kaynak Sahibi Parolası Kimlik Bilgileri akışı Doorkeeper.configure.resource_owner_from_credentials 'ın yapılandırılmamış olması nedeniyle başarısız oldu.
invalid_client: İstemcinin kimlik doğrulaması bilinmeyen istemci, istemci kimlik doğrulamasının dahil olmaması veya desteklenmeyen kimlik doğrulama yöntemi nedeniyle başarısız oldu.
+ invalid_code_challenge_method:
+ one: code_challenge_method %{challenge_methods} olmalıdır.
+ other: code_challenge_method %{challenge_methods} seçeneklerinden biri olmalıdır.
+ zero: Yetkilendirme sunucusu kabul edilen code_challenge_method değerleri olmadığı için PKCE'yi desteklemiyor.
invalid_grant: Sağlanan yetkilendirme izni geçersiz, süresi dolmuş, iptal edilmiş, yetkilendirme isteğinde kullanılan yönlendirme URL'siyle eşleşmiyor veya başka bir istemciye verilmiş.
invalid_redirect_uri: Dahil edilmiş yönlendirme uri'si geçersiz.
invalid_request:
diff --git a/config/locales/el.yml b/config/locales/el.yml
index 1829b7abf9..7aee9387d3 100644
--- a/config/locales/el.yml
+++ b/config/locales/el.yml
@@ -713,7 +713,6 @@ el:
resolved_msg: Η αναφορά επιλύθηκε επιτυχώς!
skip_to_actions: Μετάβαση στις ενέργειες
status: Κατάσταση
- statuses: Αναφερόμενο περιεχόμενο
statuses_description_html: Το προσβλητικό περιεχόμενο θα εσωκλείεται στην επικοινωνία με τον αναφερόμενο λογαριασμό
summary:
action_preambles:
diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml
index 7548e40d2a..bfe67c32c6 100644
--- a/config/locales/en-GB.yml
+++ b/config/locales/en-GB.yml
@@ -713,7 +713,6 @@ en-GB:
resolved_msg: Report successfully resolved!
skip_to_actions: Skip to actions
status: Status
- statuses: Reported content
statuses_description_html: Offending content will be cited in communication with the reported account
summary:
action_preambles:
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 2c777e72d3..71c559d738 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -56,6 +56,7 @@ en:
label: Change role
no_role: No role
title: Change role for %{username}
+ collections: Collections
confirm: Confirm
confirmed: Confirmed
confirming: Confirming
@@ -340,6 +341,15 @@ en:
unpublish: Unpublish
unpublished_msg: Announcement successfully unpublished!
updated_msg: Announcement successfully updated!
+ collections:
+ accounts: Accounts
+ collection_title: Collection by %{name}
+ contents: Contents
+ number_of_accounts:
+ one: 1 account
+ other: "%{count} accounts"
+ open: Open
+ view_publicly: View publicly
critical_update_pending: Critical update pending
custom_emojis:
assign_category: Assign category
@@ -679,6 +689,7 @@ en:
cancel: Cancel
category: Category
category_description_html: The reason this account and/or content was reported will be cited in communication with the reported account
+ collections: Collections
comment:
none: None
comment_description_html: 'To provide more information, %{name} wrote:'
@@ -708,12 +719,13 @@ en:
report: 'Report #%{id}'
reported_account: Reported account
reported_by: Reported by
+ reported_content: Reported content
reported_with_application: Reported with application
resolved: Resolved
resolved_msg: Report successfully resolved!
skip_to_actions: Skip to actions
status: Status
- statuses: Reported content
+ statuses: Posts
statuses_description_html: Offending content will be cited in communication with the reported account
summary:
action_preambles:
diff --git a/config/locales/eo.yml b/config/locales/eo.yml
index 46b7dfe330..d8700963c2 100644
--- a/config/locales/eo.yml
+++ b/config/locales/eo.yml
@@ -704,7 +704,6 @@ eo:
resolved_msg: Signalo sukcese solvita!
skip_to_actions: Salti al agoj
status: Afiŝo
- statuses: Raportita enhavo
statuses_description_html: Sentema enhavo referencitas kun la raportita konto
summary:
action_preambles:
diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml
index a4a50ce4da..903b8c4e15 100644
--- a/config/locales/es-AR.yml
+++ b/config/locales/es-AR.yml
@@ -713,7 +713,6 @@ es-AR:
resolved_msg: "¡Denuncia exitosamente resuelta!"
skip_to_actions: Ir directamente a las acciones
status: Estado
- statuses: Contenido denunciado
statuses_description_html: El contenido ofensivo se citará en la comunicación con la cuenta denunciada
summary:
action_preambles:
diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml
index 0608e86737..3489b6b6aa 100644
--- a/config/locales/es-MX.yml
+++ b/config/locales/es-MX.yml
@@ -713,7 +713,6 @@ es-MX:
resolved_msg: "¡La denuncia se ha resuelto correctamente!"
skip_to_actions: Ir directamente a las acciones
status: Estado
- statuses: Contenido reportado
statuses_description_html: El contenido ofensivo se citará en comunicación con la cuenta reportada
summary:
action_preambles:
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 07baa47b1a..e644c85228 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -713,7 +713,6 @@ es:
resolved_msg: "¡La denuncia se ha resuelto correctamente!"
skip_to_actions: Ir directamente a las acciones
status: Estado
- statuses: Contenido reportado
statuses_description_html: El contenido ofensivo se citará en la comunicación con la cuenta reportada
summary:
action_preambles:
diff --git a/config/locales/et.yml b/config/locales/et.yml
index 2867586d70..ddd0572cfc 100644
--- a/config/locales/et.yml
+++ b/config/locales/et.yml
@@ -713,7 +713,6 @@ et:
resolved_msg: Teavituse lahendamine õnnestus!
skip_to_actions: Otsuste juurde
status: Olek
- statuses: Raporteeritud sisu
statuses_description_html: Sobimatu sisu kaasatakse suhtlusse raporteeritud kontoga
summary:
action_preambles:
diff --git a/config/locales/eu.yml b/config/locales/eu.yml
index 05c3845b61..0102508797 100644
--- a/config/locales/eu.yml
+++ b/config/locales/eu.yml
@@ -701,7 +701,6 @@ eu:
resolved_msg: Salaketa ongi konpondu da!
skip_to_actions: Salto ekintzetara
status: Mezua
- statuses: Salatutako edukia
statuses_description_html: Salatutako edukia salatutako kontuarekiko komunikazioan aipatuko da
summary:
action_preambles:
diff --git a/config/locales/fa.yml b/config/locales/fa.yml
index b7f2f8a5d2..b166d1f304 100644
--- a/config/locales/fa.yml
+++ b/config/locales/fa.yml
@@ -710,7 +710,6 @@ fa:
resolved_msg: گزارش با موفقیت حل شد!
skip_to_actions: پرش به کنشها
status: نوشته
- statuses: محتوای گزارش شده
statuses_description_html: محتوای توهین آمیز در ارتباط با حساب گزارش شده ذکر می شود
summary:
action_preambles:
diff --git a/config/locales/fi.yml b/config/locales/fi.yml
index 247d00389b..4427726aac 100644
--- a/config/locales/fi.yml
+++ b/config/locales/fi.yml
@@ -713,7 +713,6 @@ fi:
resolved_msg: Raportin ratkaisu onnistui!
skip_to_actions: Siirry toimiin
status: Tila
- statuses: Raportoitu sisältö
statuses_description_html: Loukkaava sisältö mainitaan raportoidun tilin yhteydessä
summary:
action_preambles:
diff --git a/config/locales/fo.yml b/config/locales/fo.yml
index fe094997c6..0bc27a8fd3 100644
--- a/config/locales/fo.yml
+++ b/config/locales/fo.yml
@@ -710,7 +710,6 @@ fo:
resolved_msg: Melding avgreidd!
skip_to_actions: Leyp til atgerðir
status: Støða
- statuses: Meldað innihald
statuses_description_html: Tilfarið, sum brotið viðvíkur, fer at vera siterað í samskifti við meldaðu kontuni
summary:
action_preambles:
diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml
index 9230059d1e..de2f6e2154 100644
--- a/config/locales/fr-CA.yml
+++ b/config/locales/fr-CA.yml
@@ -716,7 +716,6 @@ fr-CA:
resolved_msg: Signalement résolu avec succès !
skip_to_actions: Passer aux actions
status: Statut
- statuses: Contenu signalé
statuses_description_html: Le contenu offensant sera cité dans la communication avec le compte signalé
summary:
action_preambles:
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index 4f81d7409e..bd98468242 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -716,7 +716,6 @@ fr:
resolved_msg: Signalement résolu avec succès !
skip_to_actions: Passer aux actions
status: Statut
- statuses: Contenu signalé
statuses_description_html: Le contenu offensant sera cité dans la communication avec le compte signalé
summary:
action_preambles:
diff --git a/config/locales/fy.yml b/config/locales/fy.yml
index 91fae58527..4959b1adaa 100644
--- a/config/locales/fy.yml
+++ b/config/locales/fy.yml
@@ -708,7 +708,6 @@ fy:
resolved_msg: Rapportaazje oplosse slagge!
skip_to_actions: Gean daliks nei de maatregels
status: Steat
- statuses: Rapportearre ynhâld
statuses_description_html: De problematyske ynhâld wurdt oan it rapportearre account meidield
summary:
action_preambles:
diff --git a/config/locales/ga.yml b/config/locales/ga.yml
index ff4de5fdcf..f0ad224f85 100644
--- a/config/locales/ga.yml
+++ b/config/locales/ga.yml
@@ -752,7 +752,6 @@ ga:
resolved_msg: D'éirigh le réiteach an tuairisc!
skip_to_actions: Léim ar ghníomhartha
status: Stádas
- statuses: Ábhar tuairiscithe
statuses_description_html: Luafar ábhar ciontach i gcumarsáid leis an gcuntas tuairiscithe
summary:
action_preambles:
diff --git a/config/locales/gd.yml b/config/locales/gd.yml
index 422dc5197c..c619e7818b 100644
--- a/config/locales/gd.yml
+++ b/config/locales/gd.yml
@@ -734,7 +734,6 @@ gd:
resolved_msg: Chaidh an gearan fhuasgladh!
skip_to_actions: Geàrr leum dha na gnìomhan
status: Staid
- statuses: Susbaint le gearan
statuses_description_html: Thèid iomradh a thoirt air an t-susbaint oilbheumach sa chonaltradh leis a’ chunntas mun a chaidh an gearan a thogail
summary:
action_preambles:
diff --git a/config/locales/gl.yml b/config/locales/gl.yml
index a0f8ef11e1..1be6c70f1f 100644
--- a/config/locales/gl.yml
+++ b/config/locales/gl.yml
@@ -713,7 +713,6 @@ gl:
resolved_msg: Resolveuse con éxito a denuncia!
skip_to_actions: Ir a accións
status: Estado
- statuses: Contido denunciado
statuses_description_html: O contido ofensivo será citado na comunicación coa conta denunciada
summary:
action_preambles:
diff --git a/config/locales/he.yml b/config/locales/he.yml
index 4ed0d5bc1c..6070455cca 100644
--- a/config/locales/he.yml
+++ b/config/locales/he.yml
@@ -739,7 +739,6 @@ he:
resolved_msg: הדו"ח נפתר בהצלחה!
skip_to_actions: דלג/י לפעולות
status: מצב
- statuses: התוכן עליו דווח
statuses_description_html: התוכן הפוגע יצוטט בתקשורת עם החשבון המדווח
summary:
action_preambles:
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index f12350f70f..61e3d34343 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -713,7 +713,6 @@ hu:
resolved_msg: A bejelentést sikeresen megoldottuk!
skip_to_actions: Tovább az intézkedésekhez
status: Állapot
- statuses: Jelentett tartalom
statuses_description_html: A sértő tartalmat idézni fogjuk a bejelentett fiókkal való kommunikáció során
summary:
action_preambles:
diff --git a/config/locales/ia.yml b/config/locales/ia.yml
index a3561c7c0c..3fea1ed91c 100644
--- a/config/locales/ia.yml
+++ b/config/locales/ia.yml
@@ -708,7 +708,6 @@ ia:
resolved_msg: Reporto resolvite con successo!
skip_to_actions: Saltar al actiones
status: Stato
- statuses: Contento reportate
statuses_description_html: Le contento offensive essera citate in communication con le conto reportate
summary:
action_preambles:
diff --git a/config/locales/id.yml b/config/locales/id.yml
index d7e76e40e2..d3027934b7 100644
--- a/config/locales/id.yml
+++ b/config/locales/id.yml
@@ -577,7 +577,6 @@ id:
resolved_msg: Laporan berhasil diselesaikan!
skip_to_actions: Langsung ke tindakan
status: Status
- statuses: Konten yang dilaporkan
statuses_description_html: Konten menyinggung akan disampaikan saat komunikasi dengan akun yang dilaporkan
target_origin: Akun asal yang dilaporkan
title: Laporan
diff --git a/config/locales/ie.yml b/config/locales/ie.yml
index 0f35b085ec..1576504444 100644
--- a/config/locales/ie.yml
+++ b/config/locales/ie.yml
@@ -612,7 +612,6 @@ ie:
resolved_msg: Raporte successosimen soluet!
skip_to_actions: Ear rect al actiones
status: Statu
- statuses: Contenete raportat
statuses_description_html: Ofensiv contenete va esser citat in comunication con li raportat conto
summary:
action_preambles:
diff --git a/config/locales/io.yml b/config/locales/io.yml
index 66c01f8d0e..58ae0f015d 100644
--- a/config/locales/io.yml
+++ b/config/locales/io.yml
@@ -660,7 +660,6 @@ io:
resolved_msg: Raporto sucesoze rezolvesis!
skip_to_actions: Saltez a agi
status: Stando
- statuses: Raportizita kontenajo
statuses_description_html: Ofensanta kontenajo citesos en komuniko kun raportizita konto
summary:
action_preambles:
diff --git a/config/locales/is.yml b/config/locales/is.yml
index caf057c2db..3391f19a2a 100644
--- a/config/locales/is.yml
+++ b/config/locales/is.yml
@@ -713,7 +713,6 @@ is:
resolved_msg: Það tókst að leysa kæruna!
skip_to_actions: Sleppa og fara í aðgerðir
status: Staða
- statuses: Kært efni
statuses_description_html: Óviðeigandi efni verður tiltekið í samskiptum við kærðan notandaaðgang
summary:
action_preambles:
diff --git a/config/locales/it.yml b/config/locales/it.yml
index f335ed8865..7ce71a36d6 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -713,7 +713,6 @@ it:
resolved_msg: Rapporto risolto!
skip_to_actions: Passa alle azioni
status: Stato
- statuses: Contenuto segnalato
statuses_description_html: Il contenuto offensivo sarà citato nella comunicazione con l'account segnalato
summary:
action_preambles:
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 914e217100..b1e2fdbef7 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -691,7 +691,6 @@ ja:
resolved_msg: 通報を解決済みにしました!
skip_to_actions: アクションに移動
status: ステータス
- statuses: 通報内容
statuses_description_html: 問題の投稿は通報されたアカウントへの連絡時に引用されます
summary:
action_preambles:
diff --git a/config/locales/ko.yml b/config/locales/ko.yml
index 2a51079520..cfd255dd5f 100644
--- a/config/locales/ko.yml
+++ b/config/locales/ko.yml
@@ -702,7 +702,6 @@ ko:
resolved_msg: 신고를 잘 해결했습니다!
skip_to_actions: 작업으로 건너뛰기
status: 상태
- statuses: 신고된 콘텐츠
statuses_description_html: 문제가 되는 콘텐츠는 신고된 계정에게 인용되어 전달됩니다
summary:
action_preambles:
@@ -1302,6 +1301,13 @@ ko:
hint_html: "팁: 한 시간 동안 다시 암호를 묻지 않을 것입니다."
invalid_password: 잘못된 암호
prompt: 계속하려면 암호를 확인하세요
+ color_scheme:
+ auto: 자동
+ dark: 어두움
+ light: 밝음
+ contrast:
+ auto: 자동
+ high: 높음
crypto:
errors:
invalid_key: 유효하지 않은 Ed25519 또는 Curve25519 키
diff --git a/config/locales/ku.yml b/config/locales/ku.yml
index 24d55dcc73..516f3a4270 100644
--- a/config/locales/ku.yml
+++ b/config/locales/ku.yml
@@ -584,7 +584,6 @@ ku:
resolved_msg: Ragihandin bi awayekî serkeftî hate çareserkirin!
skip_to_actions: Derbasî çalakiyan bibe
status: Rewş
- statuses: Naveroka ragihandî
statuses_description_html: Naveroka sûcdar wê di danûstendina bi xwediyê ajimêra ragihandî re wê werê diyarkirin
target_origin: Jêdera ajimêrê ragihandî
title: Ragihandinên
diff --git a/config/locales/lad.yml b/config/locales/lad.yml
index 61a6c290b1..aeffb477be 100644
--- a/config/locales/lad.yml
+++ b/config/locales/lad.yml
@@ -681,7 +681,6 @@ lad:
resolved_msg: Tienes rezolvido la denunsia djustamente!
skip_to_actions: Va direktamente a las aksyones
status: Estado
- statuses: Kontenido raportado
statuses_description_html: El kontenido ofensivo se sitara en la komunikasyon kon el kuento raportado
summary:
action_preambles:
diff --git a/config/locales/lv.yml b/config/locales/lv.yml
index 6d04df7035..71f32d5259 100644
--- a/config/locales/lv.yml
+++ b/config/locales/lv.yml
@@ -701,7 +701,6 @@ lv:
resolved_msg: Ziņojums sekmīgi atrisināts.
skip_to_actions: Pāriet uz darbībām
status: Statuss
- statuses: Ziņotais saturs
statuses_description_html: Pārkāpuma saturs tiks minēts saziņā ar paziņoto kontu
summary:
action_preambles:
diff --git a/config/locales/ms.yml b/config/locales/ms.yml
index ea4b49fa9e..6edddd4323 100644
--- a/config/locales/ms.yml
+++ b/config/locales/ms.yml
@@ -600,7 +600,6 @@ ms:
resolved_msg: Laporan berjaya diselesaikan!
skip_to_actions: Langkau ke tindakan
status: Status
- statuses: Kandungan yang dilaporkan
statuses_description_html: Kandungan yang menyinggung perasaan akan disebut dalam komunikasi dengan akaun yang dilaporkan
summary:
action_preambles:
diff --git a/config/locales/my.yml b/config/locales/my.yml
index 84fc8d1003..f8f69586a9 100644
--- a/config/locales/my.yml
+++ b/config/locales/my.yml
@@ -595,7 +595,6 @@ my:
resolved_msg: မှတ်တမ်းကို ဖြေရှင်းပြီးပါပြီ။
skip_to_actions: လုပ်ဆောင်ချက်များသို့ ကျော်သွားရန်
status: အခြေအနေ
- statuses: တိုင်ကြားထားသောအကြောင်းအရာ
statuses_description_html: စိတ်အနှောင့်အယှက်ဖြစ်စေသောအကြောင်းအရာများကို အစီရင်ခံထားသောအကောင့်နှင့် ဆက်သွယ်ပြီး အရေးယူဆောင်ရွက်ပါမည်
summary:
action_preambles:
diff --git a/config/locales/nan-TW.yml b/config/locales/nan-TW.yml
index 7a7f631b84..ae3eb8e1c4 100644
--- a/config/locales/nan-TW.yml
+++ b/config/locales/nan-TW.yml
@@ -700,7 +700,6 @@ nan-TW:
resolved_msg: 檢舉成功解決ah!
skip_to_actions: 跳kàu行動
status: 狀態
- statuses: 受檢舉ê內容
statuses_description_html: 冒犯ê內容ē引用tī kap受檢舉口座ê聯絡
summary:
action_preambles:
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index f9344b1920..db173adece 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -713,7 +713,6 @@ nl:
resolved_msg: Rapportage succesvol opgelost!
skip_to_actions: Ga direct naar de maatregelen
status: Rapportages
- statuses: Gerapporteerde inhoud
statuses_description_html: De problematische inhoud wordt aan het gerapporteerde account medegedeeld
summary:
action_preambles:
diff --git a/config/locales/nn.yml b/config/locales/nn.yml
index 5daacf6fdf..adbf513ada 100644
--- a/config/locales/nn.yml
+++ b/config/locales/nn.yml
@@ -713,7 +713,6 @@ nn:
resolved_msg: Rapporten er løyst!
skip_to_actions: Gå til handlingar
status: Status
- statuses: Rapportert innhold
statuses_description_html: Støytande innhald vil bli inkludert i kommunikasjonen med den rapporterte kontoen
summary:
action_preambles:
diff --git a/config/locales/no.yml b/config/locales/no.yml
index bf85efe77a..a7abdf8ab1 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -613,7 +613,6 @@
resolved_msg: Rapport løst!
skip_to_actions: Hopp over til handlinger
status: Status
- statuses: Rapportert innhold
statuses_description_html: Innholdet som tilbys, vil bli nevnt i forbindelse med den rapporterte kontoen
summary:
action_preambles:
diff --git a/config/locales/pl.yml b/config/locales/pl.yml
index bee3f5f168..e0ae1f7106 100644
--- a/config/locales/pl.yml
+++ b/config/locales/pl.yml
@@ -728,7 +728,6 @@ pl:
resolved_msg: Pomyślnie rozwiązano zgłoszenie.
skip_to_actions: Przejdź do akcji
status: Stan
- statuses: Zgłoszona treść
statuses_description_html: Obraźliwe treści będą cytowane w komunikacji ze zgłoszonym kontem
summary:
action_preambles:
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 6bdd0c4139..bfbd84d440 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -710,7 +710,6 @@ pt-BR:
resolved_msg: Denúncia resolvida!
skip_to_actions: Pular para ações
status: Estado
- statuses: Conteúdo denunciado
statuses_description_html: Conteúdo ofensivo será citado em comunicação com a conta denunciada
summary:
action_preambles:
diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml
index c83482af12..aba68aabd0 100644
--- a/config/locales/pt-PT.yml
+++ b/config/locales/pt-PT.yml
@@ -713,7 +713,6 @@ pt-PT:
resolved_msg: Denúncia resolvida com sucesso!
skip_to_actions: Passar para as ações
status: Estado
- statuses: Conteúdo denunciado
statuses_description_html: O conteúdo ofensivo será citado na comunicação com a conta denunciada
summary:
action_preambles:
diff --git a/config/locales/ro.yml b/config/locales/ro.yml
index 1af3dbbff3..fd0f7dd199 100644
--- a/config/locales/ro.yml
+++ b/config/locales/ro.yml
@@ -384,7 +384,6 @@ ro:
resolved_msg: Raportare rezolvată cu succes!
skip_to_actions: Treci la acțiuni
status: Stare
- statuses: Conținut raportat
statuses_description_html: Conținutul problematic va fi citat în comunicarea trimisă contului raportat
target_origin: Originea contului raportat
title: Raportări
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index 2519f8944a..626870709d 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -724,7 +724,6 @@ ru:
resolved_msg: Жалоба обработана, спасибо!
skip_to_actions: Перейти к действиям
status: Статус
- statuses: Содержимое относящееся к жалобе
statuses_description_html: Нарушающее правила содержимое будет процитировано при коммуникации с фигурирующим в жалобе аккаунтом
summary:
action_preambles:
diff --git a/config/locales/sco.yml b/config/locales/sco.yml
index 9c62915f28..b963a66e31 100644
--- a/config/locales/sco.yml
+++ b/config/locales/sco.yml
@@ -580,7 +580,6 @@ sco:
resolved_msg: Clype successfully resolvt!
skip_to_actions: Jouk tae actions
status: Status
- statuses: Clyped on content
statuses_description_html: Offendin content wull be citit in communication wi the clyped on accoont
target_origin: Origin o clyped on accoont
title: Clypes
diff --git a/config/locales/si.yml b/config/locales/si.yml
index 2091caad01..40061b262b 100644
--- a/config/locales/si.yml
+++ b/config/locales/si.yml
@@ -517,7 +517,6 @@ si:
resolved_msg: වාර්තාව සාර්ථකව විසඳා ඇත!
skip_to_actions: ක්රියාවන් වෙත යන්න
status: තත්වය
- statuses: වාර්තා කළ අන්තර්ගතය
statuses_description_html: වාර්තා කරන ලද ගිණුම සමඟ සන්නිවේදනය කිරීමේදී වැරදි අන්තර්ගතයන් උපුටා දක්වනු ඇත
target_origin: වාර්තා කළ ගිණුමේ ආරම්භය
title: වාර්තා
diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml
index 8dff2240bb..1f1eb1b32d 100644
--- a/config/locales/simple_form.cs.yml
+++ b/config/locales/simple_form.cs.yml
@@ -166,6 +166,7 @@ cs:
name: Veřejný název role, pokud má být role zobrazena jako odznak
permissions_as_keys: Uživatelé s touto rolí budou moci...
position: Vyšší role rozhoduje o řešení konfliktů v určitých situacích. Některé akce lze provádět pouze na rolích s nižší prioritou
+ require_2fa: Uživatelé s touto rolí budou muset nastavit dvoufázové ověření pro použití Mastodonu
username_block:
allow_with_approval: Namísto toho, aby se zabránilo registraci, bude vyžadováno vaše schválení
comparison: Mějte prosím na paměti 'Scunthorpe problém' při blokování částečných shod
@@ -225,6 +226,7 @@ cs:
email: E-mailová adresa
expires_in: Vypršet za
fields: Metadata profilu
+ filter_action: Chování filtru
header: Záhlaví
honeypot: "%{label} (nevyplňovat)"
inbox_url: URL příchozí schránky mostu
@@ -241,6 +243,7 @@ cs:
setting_always_send_emails: Vždy posílat e-mailová oznámení
setting_auto_play_gif: Automaticky přehrávat animace GIF
setting_boost_modal: Ovládání viditelnosti boostování
+ setting_color_scheme: Barevné schéma
setting_contrast: Kontrast
setting_default_language: Jazyk příspěvků
setting_default_privacy: Viditelnost příspěvků
@@ -388,6 +391,7 @@ cs:
name: Název
permissions_as_keys: Oprávnění
position: Priorita
+ require_2fa: Vyžadovat dvoufázové ověření
username_block:
allow_with_approval: Povolit registrace se schválením
comparison: Srovnávací metoda
diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml
index fb5228a153..76a7deae73 100644
--- a/config/locales/simple_form.ko.yml
+++ b/config/locales/simple_form.ko.yml
@@ -234,6 +234,8 @@ ko:
setting_always_send_emails: 항상 이메일 알림 보내기
setting_auto_play_gif: 애니메이션 GIF를 자동 재생
setting_boost_modal: 부스트 공개범위 제어
+ setting_color_scheme: 색상 구성
+ setting_contrast: 대비
setting_default_language: 게시물 언어
setting_default_privacy: 게시물 공개 범위
setting_default_quote_policy: 인용할 수 있는 사람
diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml
index 97b09c97a9..6d25b184c4 100644
--- a/config/locales/simple_form.nl.yml
+++ b/config/locales/simple_form.nl.yml
@@ -224,6 +224,7 @@ nl:
email: E-mailadres
expires_in: Vervalt na
fields: Extra velden
+ filter_action: Filter-actie
header: Omslagfoto
honeypot: "%{label} (niet invullen)"
inbox_url: Inbox-URL van de relayserver
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index dbe4b43c84..0a684eeb4c 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -574,7 +574,6 @@ sk:
resolved_msg: Hlásenie úspešne vyriešené!
skip_to_actions: Prejsť na akcie
status: Stav
- statuses: Nahlásený obsah
summary:
action_preambles:
suspend_html: 'Chystáš sa pozastaviť účet @%{acct}. To urobí:'
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index aeb9b8adb9..6061b6fc8e 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -726,7 +726,6 @@ sl:
resolved_msg: Prijava je uspešno razrešena!
skip_to_actions: Preskoči na dejanja
status: Stanje
- statuses: Prijavljena vsebina
statuses_description_html: Žaljiva vsebina bo citirana v komunikaciji z računom iz prijave
summary:
action_preambles:
diff --git a/config/locales/sq.yml b/config/locales/sq.yml
index ba7079a29f..e4ae2e4c11 100644
--- a/config/locales/sq.yml
+++ b/config/locales/sq.yml
@@ -709,7 +709,6 @@ sq:
resolved_msg: Raportimi u zgjidh me sukses!
skip_to_actions: Kaloni te veprimet
status: Gjendje
- statuses: Lëndë e raportuar
statuses_description_html: Lënda problematike do të citohet në komunikimin me llogarinë e raportuar
summary:
action_preambles:
diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml
index 83292c737c..3f9eee3cae 100644
--- a/config/locales/sr-Latn.yml
+++ b/config/locales/sr-Latn.yml
@@ -626,7 +626,6 @@ sr-Latn:
resolved_msg: Prijava uspešno razrešena!
skip_to_actions: Preskoči do radnji
status: Status
- statuses: Prijavljeni sadržaj
statuses_description_html: Sporni sadržaj će biti naveden u komunikaciji sa prijavljenim nalogom
summary:
action_preambles:
diff --git a/config/locales/sr.yml b/config/locales/sr.yml
index 3eb00aae8c..35d845bb1e 100644
--- a/config/locales/sr.yml
+++ b/config/locales/sr.yml
@@ -656,7 +656,6 @@ sr:
resolved_msg: Пријава успешно разрешена!
skip_to_actions: Прескочи до радњи
status: Статус
- statuses: Пријављени садржај
statuses_description_html: Спорни садржај ће бити наведен у комуникацији са пријављеним налогом
summary:
action_preambles:
diff --git a/config/locales/sv.yml b/config/locales/sv.yml
index 207499c9dc..704c1613b2 100644
--- a/config/locales/sv.yml
+++ b/config/locales/sv.yml
@@ -710,7 +710,6 @@ sv:
resolved_msg: Anmälan har lösts framgångsrikt!
skip_to_actions: Hoppa till åtgärder
status: Status
- statuses: Rapporterat innehåll
statuses_description_html: Stötande innehåll kommer att citeras i kommunikationen med det rapporterade kontot
summary:
action_preambles:
diff --git a/config/locales/th.yml b/config/locales/th.yml
index 949d642b56..e91c7c8fce 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -666,7 +666,6 @@ th:
resolved_msg: แก้ปัญหารายงานสำเร็จ!
skip_to_actions: ข้ามไปยังการกระทำ
status: สถานะ
- statuses: เนื้อหาที่รายงาน
statuses_description_html: จะอ้างถึงเนื้อหาที่ละเมิดในการสื่อสารกับบัญชีที่ได้รับการรายงาน
summary:
action_preambles:
diff --git a/config/locales/tr.yml b/config/locales/tr.yml
index 43adc7167b..1bc50e9192 100644
--- a/config/locales/tr.yml
+++ b/config/locales/tr.yml
@@ -713,7 +713,6 @@ tr:
resolved_msg: Şikayet başarıyla çözümlendi!
skip_to_actions: İşlemlere atla
status: Durum
- statuses: Bildirilen içerik
statuses_description_html: İncitici içerik, bildirilen hesapla iletişimde alıntılanacaktır
summary:
action_preambles:
diff --git a/config/locales/uk.yml b/config/locales/uk.yml
index f85f803de3..e6ff166392 100644
--- a/config/locales/uk.yml
+++ b/config/locales/uk.yml
@@ -701,7 +701,6 @@ uk:
resolved_msg: Скаргу успішно вирішено!
skip_to_actions: Перейти до дій
status: Стан
- statuses: Вміст, на який поскаржилися
statuses_description_html: Замінений вміст буде цитований у спілкуванні з обліковим записом, на який поскаржилися
summary:
action_preambles:
diff --git a/config/locales/vi.yml b/config/locales/vi.yml
index 9f980120f7..57c27c4465 100644
--- a/config/locales/vi.yml
+++ b/config/locales/vi.yml
@@ -700,7 +700,6 @@ vi:
resolved_msg: Đã xử lý báo cáo xong!
skip_to_actions: Kiểm duyệt
status: Trạng thái
- statuses: Nội dung bị báo cáo
statuses_description_html: Lý do tài khoản hoặc nội dung này bị báo cáo sẽ được trích dẫn khi giao tiếp với họ
summary:
action_preambles:
diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml
index aab4e0bf55..60f83e10f7 100644
--- a/config/locales/zh-CN.yml
+++ b/config/locales/zh-CN.yml
@@ -700,7 +700,6 @@ zh-CN:
resolved_msg: 举报处理成功!
skip_to_actions: 跳转到操作
status: 状态
- statuses: 被举报内容
statuses_description_html: 在与该账号的通信中将引用违规内容
summary:
action_preambles:
diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml
index a9a338168b..ac26ce9af4 100644
--- a/config/locales/zh-HK.yml
+++ b/config/locales/zh-HK.yml
@@ -617,7 +617,6 @@ zh-HK:
resolved_msg: 舉報個案已被處理!
skip_to_actions: 跳到行動
status: 狀態
- statuses: 被檢舉的內容
statuses_description_html: 違規內容將被引用在被檢舉帳號的通訊中
summary:
action_preambles:
diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml
index 426dab73a2..1861e56687 100644
--- a/config/locales/zh-TW.yml
+++ b/config/locales/zh-TW.yml
@@ -700,7 +700,6 @@ zh-TW:
resolved_msg: 檢舉報告已處理完成!
skip_to_actions: 跳過行動
status: 嘟文
- statuses: 被檢舉的內容
statuses_description_html: 侵犯性違規內容將被引用於檢舉帳號通知中
summary:
action_preambles:
diff --git a/config/routes/admin.rb b/config/routes/admin.rb
index 4ca6df8133..4da65af8dd 100644
--- a/config/routes/admin.rb
+++ b/config/routes/admin.rb
@@ -154,6 +154,8 @@ namespace :admin do
resource :reset, only: [:create]
resource :action, only: [:new, :create], controller: 'account_actions'
+ resources :collections, only: [:show]
+
resources :statuses, only: [:index, :show] do
collection do
post :batch
diff --git a/spec/requests/admin/collections_spec.rb b/spec/requests/admin/collections_spec.rb
new file mode 100644
index 0000000000..0e87e277ae
--- /dev/null
+++ b/spec/requests/admin/collections_spec.rb
@@ -0,0 +1,20 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Admin Collections' do
+ describe 'GET /admin/accounts/:account_id/collections/:id' do
+ let(:collection) { Fabricate(:collection) }
+
+ before do
+ sign_in Fabricate(:admin_user)
+ end
+
+ it 'returns success' do
+ get admin_account_collection_path(collection.account_id, collection)
+
+ expect(response)
+ .to have_http_status(200)
+ end
+ end
+end
diff --git a/spec/requests/admin/reports_spec.rb b/spec/requests/admin/reports_spec.rb
new file mode 100644
index 0000000000..d44db63795
--- /dev/null
+++ b/spec/requests/admin/reports_spec.rb
@@ -0,0 +1,68 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+RSpec.describe 'Admin Reports' do
+ describe 'GET /admin/reports' do
+ before do
+ sign_in Fabricate(:admin_user)
+
+ Fabricate.times(2, :report)
+ end
+
+ it 'returns success' do
+ get admin_reports_path
+
+ expect(response)
+ .to have_http_status(200)
+ end
+ end
+
+ describe 'GET /admin/reports/:id' do
+ let(:report) { Fabricate(:report) }
+
+ before do
+ sign_in Fabricate(:admin_user)
+ end
+
+ shared_examples 'successful return' do
+ it 'returns success' do
+ get admin_report_path(report)
+
+ expect(response)
+ .to have_http_status(200)
+ end
+ end
+
+ context 'with a simple report' do
+ it_behaves_like 'successful return'
+ end
+
+ context 'with a reported status' do
+ before do
+ status = Fabricate(:status, account: report.target_account)
+ report.update(status_ids: [status.id])
+ end
+
+ it_behaves_like 'successful return'
+ end
+
+ context 'with a reported collection', feature: :collections do
+ before do
+ report.collections << Fabricate(:collection, account: report.target_account)
+ end
+
+ it_behaves_like 'successful return'
+ end
+
+ context 'with both status and collection', feature: :collections do
+ before do
+ status = Fabricate(:status, account: report.target_account)
+ report.update(status_ids: [status.id])
+ report.collections << Fabricate(:collection, account: report.target_account)
+ end
+
+ it_behaves_like 'successful return'
+ end
+ end
+end
diff --git a/spec/validators/unique_username_validator_spec.rb b/spec/validators/unique_username_validator_spec.rb
index 037ddadb9f..12534714ea 100644
--- a/spec/validators/unique_username_validator_spec.rb
+++ b/spec/validators/unique_username_validator_spec.rb
@@ -3,72 +3,63 @@
require 'rails_helper'
RSpec.describe UniqueUsernameValidator do
- describe '#validate' do
- context 'when local account' do
- it 'does not add errors if username is nil' do
- account = instance_double(Account, username: nil, domain: nil, persisted?: false, errors: activemodel_errors)
- subject.validate(account)
- expect(account.errors).to_not have_received(:add)
- end
+ subject { Fabricate.build :account, username: 'abcdef', domain: }
- it 'does not add errors when existing one is subject itself' do
- account = Fabricate(:account, username: 'abcdef')
- expect(account).to be_valid
- end
+ context 'when local account' do
+ let(:domain) { nil }
- it 'adds an error when the username is already used with ignoring cases' do
- Fabricate(:account, username: 'ABCdef')
- account = instance_double(Account, username: 'abcDEF', domain: nil, persisted?: false, errors: activemodel_errors)
- subject.validate(account)
- expect(account.errors).to have_received(:add)
- end
+ context 'when record is persisted and checking own name' do
+ before { subject.save }
- it 'does not add errors when same username remote account exists' do
- Fabricate(:account, username: 'abcdef', domain: 'example.com')
- account = instance_double(Account, username: 'abcdef', domain: nil, persisted?: false, errors: activemodel_errors)
- subject.validate(account)
- expect(account.errors).to_not have_received(:add)
- end
+ it { is_expected.to allow_value(subject.username).for(:username) }
+ end
+
+ context 'when username case insensitive in use already' do
+ before { Fabricate :account, username: 'ABCdef' }
+
+ it { is_expected.to_not allow_value('abcDEF').for(:username).with_message(:taken) }
+ end
+
+ context 'when username on remote account is in use' do
+ before { Fabricate :account, username: 'ABCdef', domain: 'host.example' }
+
+ it { is_expected.to allow_value('abcDEF').for(:username) }
end
end
context 'when remote account' do
- it 'does not add errors if username is nil' do
- account = instance_double(Account, username: nil, domain: 'example.com', persisted?: false, errors: activemodel_errors)
- subject.validate(account)
- expect(account.errors).to_not have_received(:add)
+ let(:domain) { 'host.example' }
+
+ context 'when record is persisted and checking own name' do
+ before { subject.save }
+
+ it { is_expected.to allow_value('abcdef').for(:username) }
end
- it 'does not add errors when existing one is subject itself' do
- account = Fabricate(:account, username: 'abcdef', domain: 'example.com')
- expect(account).to be_valid
+ context 'when username case insensitive in use already' do
+ before { Fabricate :account, username: 'ABCdef', domain: 'host.example' }
+
+ it { is_expected.to_not allow_value('abcDEF').for(:username) }
end
- it 'adds an error when the username is already used with ignoring cases' do
- Fabricate(:account, username: 'ABCdef', domain: 'example.com')
- account = instance_double(Account, username: 'abcDEF', domain: 'example.com', persisted?: false, errors: activemodel_errors)
- subject.validate(account)
- expect(account.errors).to have_received(:add)
+ context 'when domain case insensitive in use already' do
+ before { Fabricate :account, username: 'ABCdef', domain: 'HOST.EXAMPLE' }
+
+ it { is_expected.to_not allow_value('abcDEF').for(:username) }
end
- it 'adds an error when the domain is already used with ignoring cases' do
- Fabricate(:account, username: 'ABCdef', domain: 'example.com')
- account = instance_double(Account, username: 'ABCdef', domain: 'EXAMPLE.COM', persisted?: false, errors: activemodel_errors)
- subject.validate(account)
- expect(account.errors).to have_received(:add)
- end
+ context 'when same username on other domain is in use already' do
+ before { Fabricate :account, username: 'abcdef', domain: 'other.example' }
- it 'does not add errors when account with the same username and another domain exists' do
- Fabricate(:account, username: 'abcdef', domain: 'example.com')
- account = instance_double(Account, username: 'abcdef', domain: 'example2.com', persisted?: false, errors: activemodel_errors)
- subject.validate(account)
- expect(account.errors).to_not have_received(:add)
+ it { is_expected.to allow_value('abcdef').for(:username) }
end
end
- private
+ context 'when account has blank username' do
+ subject { described_class.new.validate(account) }
- def activemodel_errors
- instance_double(ActiveModel::Errors, add: nil)
+ let(:account) { Fabricate.build :account, username: nil }
+
+ it { is_expected.to be_nil }
end
end
diff --git a/spec/validators/unreserved_username_validator_spec.rb b/spec/validators/unreserved_username_validator_spec.rb
index 55dca7db84..aa90ecb0f8 100644
--- a/spec/validators/unreserved_username_validator_spec.rb
+++ b/spec/validators/unreserved_username_validator_spec.rb
@@ -3,6 +3,8 @@
require 'rails_helper'
RSpec.describe UnreservedUsernameValidator do
+ subject { record_class.new }
+
let(:record_class) do
Class.new do
include ActiveModel::Validations
@@ -11,115 +13,67 @@ RSpec.describe UnreservedUsernameValidator do
validates_with UnreservedUsernameValidator
- def self.name
- 'Foo'
- end
+ def self.name = 'Record'
end
end
- let(:record) { record_class.new }
+ context 'when username is nil' do
+ it { is_expected.to allow_value(nil).for(:username) }
+ end
- describe '#validate' do
- context 'when username is nil' do
- it 'does not add errors' do
- record.username = nil
+ context 'when PAM is enabled' do
+ before do
+ allow(Devise).to receive(:pam_authentication).and_return(true)
+ end
- expect(record).to be_valid
- expect(record.errors).to be_empty
+ context 'with a pam service available' do
+ let(:service) { double }
+ let(:pam_class) do
+ Class.new do
+ def self.account(service, username); end
+ end
+ end
+
+ before do
+ stub_const('Rpam2', pam_class)
+ allow(Devise).to receive(:pam_controlled_service).and_return(service)
+ end
+
+ context 'when the account exists' do
+ before do
+ allow(Rpam2).to receive(:account).with(service, 'username').and_return(true)
+ end
+
+ it { is_expected.to_not allow_value('username').for(:username).with_message(:reserved) }
+ end
+
+ context 'when the account does not exist' do
+ before do
+ allow(Rpam2).to receive(:account).with(service, 'username').and_return(false)
+ end
+
+ it { is_expected.to allow_value('username').for(:username) }
end
end
- context 'when PAM is enabled' do
+ context 'without a pam service' do
before do
- allow(Devise).to receive(:pam_authentication).and_return(true)
+ allow(Devise).to receive(:pam_controlled_service).and_return(false)
end
- context 'with a pam service available' do
- let(:service) { double }
- let(:pam_class) do
- Class.new do
- def self.account(service, username); end
- end
- end
-
- before do
- stub_const('Rpam2', pam_class)
- allow(Devise).to receive(:pam_controlled_service).and_return(service)
- end
-
- context 'when the account exists' do
- before do
- allow(Rpam2).to receive(:account).with(service, 'username').and_return(true)
- end
-
- it 'adds errors to the record' do
- record.username = 'username'
-
- expect(record).to_not be_valid
- expect(record.errors.first.attribute).to eq(:username)
- expect(record.errors.first.type).to eq(:reserved)
- end
- end
-
- context 'when the account does not exist' do
- before do
- allow(Rpam2).to receive(:account).with(service, 'username').and_return(false)
- end
-
- it 'does not add errors to the record' do
- record.username = 'username'
-
- expect(record).to be_valid
- expect(record.errors).to be_empty
- end
- end
+ context 'when there are not any reserved usernames' do
+ it { is_expected.to allow_value('username').for(:username) }
end
- context 'without a pam service' do
- before do
- allow(Devise).to receive(:pam_controlled_service).and_return(false)
+ context 'when there are reserved usernames' do
+ before { %w(alice bob).each { |username| Fabricate(:username_block, exact: true, username:) } }
+
+ context 'when the username is reserved' do
+ it { is_expected.to_not allow_values('alice', 'bob').for(:username).with_message(:reserved) }
end
- context 'when there are not any reserved usernames' do
- before do
- stub_reserved_usernames(nil)
- end
-
- it 'does not add errors to the record' do
- record.username = 'username'
-
- expect(record).to be_valid
- expect(record.errors).to be_empty
- end
- end
-
- context 'when there are reserved usernames' do
- before do
- stub_reserved_usernames(%w(alice bob))
- end
-
- context 'when the username is reserved' do
- it 'adds errors to the record' do
- record.username = 'alice'
-
- expect(record).to_not be_valid
- expect(record.errors.first.attribute).to eq(:username)
- expect(record.errors.first.type).to eq(:reserved)
- end
- end
-
- context 'when the username is not reserved' do
- it 'does not add errors to the record' do
- record.username = 'chris'
-
- expect(record).to be_valid
- expect(record.errors).to be_empty
- end
- end
- end
-
- def stub_reserved_usernames(value)
- value&.each { |str| Fabricate(:username_block, username: str, exact: true) }
+ context 'when the username is not reserved' do
+ it { is_expected.to allow_value('chris').for(:username) }
end
end
end
diff --git a/spec/validators/url_validator_spec.rb b/spec/validators/url_validator_spec.rb
index 55c0347d18..56459b13fc 100644
--- a/spec/validators/url_validator_spec.rb
+++ b/spec/validators/url_validator_spec.rb
@@ -3,65 +3,45 @@
require 'rails_helper'
RSpec.describe URLValidator do
+ subject { record_class.new }
+
let(:record_class) do
Class.new do
include ActiveModel::Validations
+ def self.name = 'Record'
+
attr_accessor :profile
validates :profile, url: true
end
end
- let(:record) { record_class.new }
- describe '#validate_each' do
- context 'with a nil value' do
- it 'adds errors' do
- record.profile = nil
+ context 'with a nil value' do
+ it { is_expected.to_not allow_value(nil).for(:profile).with_message(:invalid) }
+ end
- expect(record).to_not be_valid
- expect(record.errors.first.attribute).to eq(:profile)
- expect(record.errors.first.type).to eq(:invalid)
- end
- end
+ context 'with an invalid url scheme' do
+ let(:invalid_scheme_url) { 'ftp://example.com/page' }
- context 'with an invalid url scheme' do
- it 'adds errors' do
- record.profile = 'ftp://example.com/page'
+ it { is_expected.to_not allow_value(invalid_scheme_url).for(:profile).with_message(:invalid) }
+ end
- expect(record).to_not be_valid
- expect(record.errors.first.attribute).to eq(:profile)
- expect(record.errors.first.type).to eq(:invalid)
- end
- end
+ context 'without a hostname' do
+ let(:no_hostname_url) { 'https:///page' }
- context 'without a hostname' do
- it 'adds errors' do
- record.profile = 'https:///page'
+ it { is_expected.to_not allow_value(no_hostname_url).for(:profile).with_message(:invalid) }
+ end
- expect(record).to_not be_valid
- expect(record.errors.first.attribute).to eq(:profile)
- expect(record.errors.first.type).to eq(:invalid)
- end
- end
+ context 'with an unparseable value' do
+ let(:non_numeric_port_url) { 'https://host:port/page' }
- context 'with an unparseable value' do
- it 'adds errors' do
- record.profile = 'https://host:port/page' # non-numeric port string causes invalid uri error
+ it { is_expected.to_not allow_value(non_numeric_port_url).for(:profile).with_message(:invalid) }
+ end
- expect(record).to_not be_valid
- expect(record.errors.first.attribute).to eq(:profile)
- expect(record.errors.first.type).to eq(:invalid)
- end
- end
+ context 'with a valid url' do
+ let(:valid_url) { 'https://example.com/page' }
- context 'with a valid url' do
- it 'does not add errors' do
- record.profile = 'https://example.com/page'
-
- expect(record).to be_valid
- expect(record.errors).to be_empty
- end
- end
+ it { is_expected.to allow_value(valid_url).for(:profile) }
end
end
diff --git a/spec/validators/user_email_validator_spec.rb b/spec/validators/user_email_validator_spec.rb
index 92da04ea39..500b75c749 100644
--- a/spec/validators/user_email_validator_spec.rb
+++ b/spec/validators/user_email_validator_spec.rb
@@ -3,49 +3,25 @@
require 'rails_helper'
RSpec.describe UserEmailValidator do
- describe '#validate' do
- subject { described_class.new.validate(user) }
+ subject { Fabricate.build :user, confirmed_at: nil }
- let(:user) { instance_double(User, email: 'info@mail.com', sign_up_ip: '1.2.3.4', errors: errors) }
- let(:errors) { instance_double(ActiveModel::Errors, add: nil) }
+ let(:email_address) { 'info@host.example' }
- before do
- allow(user).to receive(:valid_invitation?).and_return(false)
- allow(EmailDomainBlock).to receive(:block?) { blocked_email }
- end
+ context 'when email provider is blocked' do
+ before { Fabricate :email_domain_block, domain: 'host.example' }
- context 'when e-mail provider is blocked' do
- let(:blocked_email) { true }
+ it { is_expected.to_not allow_value(email_address).for(:email).with_message(:blocked) }
+ end
- it 'adds error' do
- subject
+ context 'when email provider is not blocked' do
+ it { is_expected.to allow_value(email_address).for(:email) }
+ end
- expect(errors).to have_received(:add).with(:email, :blocked).once
- end
- end
+ context 'when canonical email address is blocked' do
+ let(:other_user) { Fabricate(:user, email: 'i.n.f.o@host.example') }
- context 'when e-mail provider is not blocked' do
- let(:blocked_email) { false }
+ before { other_user.account.suspend! }
- it 'does not add errors' do
- subject
-
- expect(errors).to_not have_received(:add)
- end
-
- context 'when canonical e-mail is blocked' do
- let(:other_user) { Fabricate(:user, email: 'i.n.f.o@mail.com') }
-
- before do
- other_user.account.suspend!
- end
-
- it 'adds error' do
- subject
-
- expect(errors).to have_received(:add).with(:email, :taken).once
- end
- end
- end
+ it { is_expected.to_not allow_value(email_address).for(:email).with_message(:taken) }
end
end