diff --git a/components/email/__tests__/mail-folder-menu.test.tsx b/components/email/__tests__/mail-folder-menu.test.tsx index 2eae04733..ce41761ff 100644 --- a/components/email/__tests__/mail-folder-menu.test.tsx +++ b/components/email/__tests__/mail-folder-menu.test.tsx @@ -29,6 +29,15 @@ describe('list header ⋮', () => { fireEvent.click(screen.getByText('mark_folder_read')); expect(onMarkFolderRead).toHaveBeenCalledTimes(1); }); + // p2-14: "Empty folder" read the same in Trash and Spam. + it('names Empty after Trash or Spam', () => { + const onEmptyFolder = vi.fn(); + render(); + fireEvent.click(screen.getByTestId('mail-folder-menu')); + expect(screen.getByTestId('mail-empty-folder').textContent).toContain('empty_spam'); + fireEvent.click(screen.getByTestId('mail-empty-folder')); + expect(onEmptyFolder).toHaveBeenCalledTimes(1); + }); it('carries Refresh and Sort, which have no buttons of their own', () => { const onRefresh = vi.fn(); render(); diff --git a/components/email/__tests__/mv-list-toolbar.test.tsx b/components/email/__tests__/mv-list-toolbar.test.tsx index 96862dbfc..270ec716e 100644 --- a/components/email/__tests__/mv-list-toolbar.test.tsx +++ b/components/email/__tests__/mv-list-toolbar.test.tsx @@ -160,10 +160,10 @@ describe('MvListToolbar overflow menu', () => { render( {}} onEmptyFolder={() => {}} />); open(); - expect(screen.queryByText('empty_folder')).toBeNull(); + for (const label of ['empty_folder', 'empty_trash', 'empty_spam']) expect(screen.queryByText(label)).toBeNull(); }); - it('offers it in the bin', () => { + it('offers it in the bin, as Empty Trash', () => { useEmailStore.setState({ mailboxes: [mailbox('trash', 'Trash', 'trash')], selectedMailbox: 'trash', @@ -172,7 +172,7 @@ describe('MvListToolbar overflow menu', () => { render( {}} onEmptyFolder={onEmptyFolder} />); open(); - fireEvent.click(screen.getByText('empty_folder')); + fireEvent.click(screen.getByText('empty_trash')); expect(onEmptyFolder).toHaveBeenCalledOnce(); }); }); diff --git a/components/email/mail-list-menus.tsx b/components/email/mail-list-menus.tsx index 673171369..c69264028 100644 --- a/components/email/mail-list-menus.tsx +++ b/components/email/mail-list-menus.tsx @@ -11,6 +11,7 @@ import { usePolicyStore } from "@/stores/policy-store"; import { useAuthStore } from "@/stores/auth-store"; import { useEmailStore } from "@/stores/email-store"; import { isDefaultOrder, sanitizeSortLevels, type SortLevel } from "@/lib/message-list-order"; +import { emptyFolderLabelKey } from "@/lib/empty-folder-text"; /** The orders the list header offers; Settings has the full editor. */ export const SORT_CHOICES = [ @@ -185,6 +186,7 @@ export const MailFolderMenu = memo(function MailFolderMenu({ onMarkFolderRead={onMarkFolderRead} onMarkAllFoldersRead={onMarkAllFoldersRead} onEmptyFolder={onEmptyFolder} + folderRole={folderRole} onPicked={menu.closeContextMenu} /> @@ -197,14 +199,18 @@ export function MailFolderMenuItems({ onMarkFolderRead, onMarkAllFoldersRead, onEmptyFolder, + folderRole, onPicked, }: { onMarkFolderRead?: () => void; onMarkAllFoldersRead?: () => void; onEmptyFolder?: () => void; + /** Names the entry "Empty Trash" or "Empty Spam". */ + folderRole?: string | null; onPicked: () => void; }) { const tFolder = useTranslations("mailbox_context_menu"); + const tRoot = useTranslations(); return ( <> { onPicked(); onEmptyFolder(); }} /> diff --git a/components/email/mv-list-toolbar.tsx b/components/email/mv-list-toolbar.tsx index 00692388b..6bb5d9516 100644 --- a/components/email/mv-list-toolbar.tsx +++ b/components/email/mv-list-toolbar.tsx @@ -116,6 +116,7 @@ export function MvListToolbar({ const tBatch = useTranslations("email_list.batch_actions"); const archiveActionEnabled = useArchiveActionEnabled(); const tFolder = useTranslations("mailbox_context_menu"); + const tP2 = useTranslations("mail_p2_folders"); const tMenu = useTranslations("context_menu"); const tSidebar = useTranslations("sidebar"); const tCommon = useTranslations("common"); @@ -430,7 +431,7 @@ export function MvListToolbar({ { closeMenu(); diff --git a/components/layout/__tests__/mailbox-context-menu-order.test.tsx b/components/layout/__tests__/mailbox-context-menu-order.test.tsx index 947fb0062..54daf6a4b 100644 --- a/components/layout/__tests__/mailbox-context-menu-order.test.tsx +++ b/components/layout/__tests__/mailbox-context-menu-order.test.tsx @@ -12,7 +12,7 @@ const { MailboxContextMenu } = await import('../mailbox-context-menu'); const folder = { id: 'p', name: 'Projects', sortOrder: 1, totalEmails: 2, unreadEmails: 0, myRights: {} } as unknown as Mailbox; describe('MailboxContextMenu', () => { - it('ends with Empty folder and Delete folder', () => { + it('ends with Delete folder', () => { render( { />, ); const labels = screen.getAllByRole('menuitem').map((item) => item.textContent); - expect(labels.slice(-2)).toEqual(['empty_folder_generic', 'delete_folder']); + // A folder of your own has no Empty: it is offered on Trash and Spam only. + expect(labels.slice(-1)).toEqual(['delete_folder']); expect(labels).toContain('refresh'); }); }); diff --git a/components/layout/__tests__/mailbox-context-menu-states.test.tsx b/components/layout/__tests__/mailbox-context-menu-states.test.tsx index 5f6447986..63c89f3b9 100644 --- a/components/layout/__tests__/mailbox-context-menu-states.test.tsx +++ b/components/layout/__tests__/mailbox-context-menu-states.test.tsx @@ -63,7 +63,7 @@ describe('folder menu states', () => { const folder = box('f', 2); renderMenu(folder, [folder]); expect(screen.getByText('offline_header')).toBeInTheDocument(); - for (const name of ['new_subfolder', 'rename', 'menu_import', 'refresh', 'empty_folder_generic', 'delete_folder']) { + for (const name of ['new_subfolder', 'rename', 'menu_import', 'refresh', 'delete_folder']) { expect(item(name).disabled).toBe(true); } // No mail kept on this device: marking read would fail too. diff --git a/components/layout/__tests__/mailbox-context-menu-system-folders.test.tsx b/components/layout/__tests__/mailbox-context-menu-system-folders.test.tsx new file mode 100644 index 000000000..617e43223 --- /dev/null +++ b/components/layout/__tests__/mailbox-context-menu-system-folders.test.tsx @@ -0,0 +1,76 @@ +import { render, screen } from '@testing-library/react'; +import { describe, expect, it, vi } from 'vitest'; +import type { Mailbox } from '@/lib/jmap/types'; + +// Usability test 2026-11-04, mail-20 and pass 2 p2-14: Trash and Spam +// showed Rename and Delete folder greyed out, "Empty folder" instead of +// "Empty Trash", and Rules and Mute notifications; every folder, the Inbox +// included, offered "Empty folder". + +vi.mock('@/components/email/rules-menu', () => ({ FolderRulesSubMenu: () =>
rules
})); + +const { MailboxContextMenu } = await import('../mailbox-context-menu'); + +const box = (id: string, role: string | null) => + ({ id, name: id, role, parentId: null, sortOrder: 1, totalEmails: 5, unreadEmails: 0, myRights: {} }) as unknown as Mailbox; + +function labels(mailbox: Mailbox) { + render( + false, + isAccountMuted: () => false, + hasFolderSettings: () => false, + setMailboxMuted: vi.fn(), + setAccountMuted: vi.fn(), + resetFolderSettings: vi.fn(), + }} + />, + ); + return screen.getAllByRole('menuitem').map((item) => item.textContent); +} + +describe('folder menu of Trash and Spam', () => { + it('Trash: Empty Trash last, no rename, delete, rules or mute', () => { + const items = labels(box('trash', 'trash')); + expect(items[items.length - 1]).toBe('empty_trash'); + for (const gone of ['rename', 'delete_folder', 'rules', 'mute_notifications', 'empty_folder', 'empty_folder_generic']) { + expect(items).not.toContain(gone); + } + }); + + it('Spam: Empty Spam last, no rename, delete, rules or mute', () => { + const items = labels(box('junk', 'junk')); + expect(items[items.length - 1]).toBe('empty_spam'); + for (const gone of ['rename', 'delete_folder', 'rules', 'mute_notifications']) expect(items).not.toContain(gone); + }); + + it('Inbox: no Empty, no rename or delete, but rules and mute', () => { + const items = labels(box('inbox', 'inbox')); + for (const gone of ['empty_folder', 'empty_folder_generic', 'empty_trash', 'empty_spam', 'rename', 'delete_folder']) { + expect(items).not.toContain(gone); + } + expect(items).toContain('rules'); + expect(items).toContain('mute_notifications'); + }); + + it('a folder of your own: rename and delete, no Empty', () => { + const items = labels(box('family', null)); + expect(items).toContain('rename'); + expect(items[items.length - 1]).toBe('delete_folder'); + for (const gone of ['empty_folder', 'empty_folder_generic', 'empty_trash', 'empty_spam']) expect(items).not.toContain(gone); + }); +}); diff --git a/components/layout/mailbox-context-menu.tsx b/components/layout/mailbox-context-menu.tsx index 8aee8b210..da1ff59da 100644 --- a/components/layout/mailbox-context-menu.tsx +++ b/components/layout/mailbox-context-menu.tsx @@ -159,6 +159,7 @@ export function MailboxContextMenu({ notifications, }: MailboxContextMenuProps) { const t = useTranslations("mailbox_context_menu"); + const tP2 = useTranslations("mail_p2_folders"); const tSidebar = useTranslations("sidebar"); const tImport = useTranslations("mail_import"); const tExport = useTranslations("mail_export"); @@ -251,6 +252,8 @@ export function MailboxContextMenu({ } const mailbox = target.mailbox; + // Emptying is offered where people expect it, as "Empty Trash" and "Empty + // Spam"; rules and notifications mean nothing there (mail-20, pass 2 p2-14). const isTrashOrJunk = mailbox.role === "trash" || mailbox.role === "junk"; const isSystem = !!mailbox.role && @@ -305,13 +308,16 @@ export function MailboxContextMenu({ disabled={!onCreateSubfolder || !canCreateChild || offline} testId="mailbox-new-subfolder" /> - handleAction(() => onRenameFolder?.(mailbox.id))} - disabled={!onRenameFolder || !canRename || offline} - testId="mailbox-rename" - /> + {/* The server's own folders can't be renamed or deleted: not shown greyed out. */} + {!isSystem && ( + handleAction(() => onRenameFolder?.(mailbox.id))} + disabled={!onRenameFolder || !canRename || offline} + testId="mailbox-rename" + /> + )} {onShareFolder && ( )} - - {notifications && (() => { + {!isTrashOrJunk && } + {notifications && !isTrashOrJunk && (() => { const muted = notifications.isMailboxMuted(mailbox); return ( {/* Destructive entries last (R6). */} - + {(isTrashOrJunk || !isSystem) && } - handleAction(() => onEmptyFolder?.(mailbox.id))} - disabled={!onEmptyFolder || mailbox.totalEmails === 0 || !canRemoveItems || offline} - destructive - /> - handleAction(() => onDeleteFolder?.(mailbox.id))} - disabled={!onDeleteFolder || !canDelete || offline} - destructive - testId="mailbox-delete" - /> + {isTrashOrJunk && ( + handleAction(() => onEmptyFolder?.(mailbox.id))} + disabled={!onEmptyFolder || mailbox.totalEmails === 0 || !canRemoveItems || offline} + destructive + testId="mailbox-empty" + /> + )} + {!isSystem && ( + handleAction(() => onDeleteFolder?.(mailbox.id))} + disabled={!onDeleteFolder || !canDelete || offline} + destructive + testId="mailbox-delete" + /> + )} ); } diff --git a/components/mail/mail-app.tsx b/components/mail/mail-app.tsx index bdc888cfc..560bf805f 100644 --- a/components/mail/mail-app.tsx +++ b/components/mail/mail-app.tsx @@ -96,6 +96,7 @@ import { import { ConfirmDialog } from "@/components/ui/confirm-dialog"; import { ScheduleSendDialog } from "@/components/email/schedule-send-dialog"; import { MailFolderMenu, MailFolderMenuItems } from "@/components/email/mail-list-menus"; +import { emptyFolderPrompt } from "@/lib/empty-folder-text"; import { ContextMenuItem } from "@/components/ui/context-menu"; import { PromptDialog } from "@/components/ui/prompt-dialog"; import { DragDropProvider } from "@/contexts/drag-drop-context"; @@ -4072,12 +4073,12 @@ export function MailApp({ linkSegments: routeSegments }: MailAppProps = {}) { const mailbox = mailboxes.find(mb => mb.id === mailboxId); if (!mailbox) return; + // "Empty Trash", with how many messages go (p2-14). + const prompt = emptyFolderPrompt(mailbox, emptyFolderMovesToTrash(mailbox)); const confirmed = await confirmDialog({ - title: tCtxMenu('email_list.empty_folder.confirm_title'), - message: emptyFolderMovesToTrash(mailbox) - ? tCtxMenu('email_list.empty_folder.confirm_message_trash') - : tCtxMenu('email_list.empty_folder.confirm_message'), - confirmText: tCtxMenu('email_list.empty_folder.confirm_button'), + title: tCtxMenu(prompt.title), + message: tCtxMenu(prompt.message, prompt.values), + confirmText: tCtxMenu(prompt.confirm), variant: "destructive", }); if (!confirmed) return; @@ -5605,6 +5606,7 @@ export function MailApp({ linkSegments: routeSegments }: MailAppProps = {}) { onMarkFolderRead={selectedMailbox && selectedFolderHasUnread ? () => handleMarkFolderRead(selectedMailbox) : undefined} onMarkAllFoldersRead={handleMarkAllFoldersRead} onEmptyFolder={folderIsEmptyable && selectedMailbox ? () => void handleEmptyFolderFromContextMenu(selectedMailbox) : undefined} + folderRole={conversationRole} onPicked={close} /> diff --git a/lib/__tests__/empty-folder-text.test.ts b/lib/__tests__/empty-folder-text.test.ts new file mode 100644 index 000000000..4de4a6db3 --- /dev/null +++ b/lib/__tests__/empty-folder-text.test.ts @@ -0,0 +1,28 @@ +import { describe, expect, it } from 'vitest'; +import { emptyFolderLabelKey, emptyFolderPrompt } from '../empty-folder-text'; + +// p2-14: the confirm said "All emails in this folder will be permanently +// deleted" with no number; it now says how many, and names Trash or Spam. + +describe('emptyFolderPrompt', () => { + it('names Trash and counts its messages', () => { + expect(emptyFolderPrompt({ role: 'trash', totalEmails: 146 }, false)).toEqual({ + title: 'mail_p2_folders.empty_trash', + message: 'mail_p2_folders.empty_trash_confirm', + values: { count: 146 }, + confirm: 'mail_p2_folders.empty_trash', + }); + }); + + it('names Spam and counts its messages', () => { + const prompt = emptyFolderPrompt({ role: 'junk', totalEmails: 3 }, false); + expect(prompt.title).toBe('mail_p2_folders.empty_spam'); + expect(prompt.message).toBe('mail_p2_folders.empty_spam_confirm'); + expect(prompt.values).toEqual({ count: 3 }); + }); + + it('keeps the old wording for other folders', () => { + expect(emptyFolderPrompt({ role: null, totalEmails: 3 }, true).message).toBe('email_list.empty_folder.confirm_message_trash'); + expect(emptyFolderLabelKey('inbox')).toBeNull(); + }); +}); diff --git a/lib/empty-folder-text.ts b/lib/empty-folder-text.ts new file mode 100644 index 000000000..929bc32a7 --- /dev/null +++ b/lib/empty-folder-text.ts @@ -0,0 +1,38 @@ +/** + * What "Empty Trash" / "Empty Spam" is called and what its confirm says, as + * keys of the root catalogue. The confirm counts the messages that go + * (usability test 2026-11-04, p2-14). Other folders keep the old wording: + * nothing in the app offers to empty them, but a plugin can still ask. + */ +export function emptyFolderLabelKey(role: string | null | undefined): string | null { + if (role === "trash") return "mail_p2_folders.empty_trash"; + if (role === "junk") return "mail_p2_folders.empty_spam"; + return null; +} + +export interface EmptyFolderPrompt { + title: string; + message: string; + values?: Record; + confirm: string; +} + +export function emptyFolderPrompt( + mailbox: { role?: string | null; totalEmails?: number }, + movesToTrash: boolean, +): EmptyFolderPrompt { + const label = emptyFolderLabelKey(mailbox.role); + if (label) { + return { + title: label, + message: mailbox.role === "trash" ? "mail_p2_folders.empty_trash_confirm" : "mail_p2_folders.empty_spam_confirm", + values: { count: mailbox.totalEmails ?? 0 }, + confirm: label, + }; + } + return { + title: "email_list.empty_folder.confirm_title", + message: movesToTrash ? "email_list.empty_folder.confirm_message_trash" : "email_list.empty_folder.confirm_message", + confirm: "email_list.empty_folder.confirm_button", + }; +} diff --git a/locales/ar/common.json b/locales/ar/common.json index 999cafaf0..b3bc36ab5 100644 --- a/locales/ar/common.json +++ b/locales/ar/common.json @@ -3833,6 +3833,13 @@ "delete_with_contents_message": "لا يزال المجلد \"{name}\" يحتوي على {count, plural, one {رسالة واحدة} other {# رسائل}}. هل تريد حذف المجلد وكل رسائله؟ لا يمكن التراجع عن هذا.", "delete_with_contents_confirm": "حذف المجلد والرسائل" }, + "mail_p2_folders": { + "all_folders": "كل المجلدات", + "empty_trash": "إفراغ المهملات", + "empty_spam": "إفراغ البريد العشوائي", + "empty_trash_confirm": "حذف {count, plural, zero {الرسائل} one {الرسالة} two {الرسالتين} few {كل الرسائل الـ#} many {كل الرسائل الـ#} other {كل الرسائل الـ#}} في المهملات نهائيًا؟ لا يمكن التراجع عن ذلك.", + "empty_spam_confirm": "حذف {count, plural, zero {الرسائل} one {الرسالة} two {الرسالتين} few {كل الرسائل الـ#} many {كل الرسائل الـ#} other {كل الرسائل الـ#}} في البريد العشوائي نهائيًا؟ لا يمكن التراجع عن ذلك." + }, "uxs_folders": { "manage_accounts": "إدارة الحسابات…", "apply_to_existing": "{count, plural, one {تطبيق على رسالة موجودة واحدة في {folder}} other {تطبيق على # رسائل موجودة في {folder}}}" diff --git a/locales/ca/common.json b/locales/ca/common.json index 091cd601c..370ca65ba 100644 --- a/locales/ca/common.json +++ b/locales/ca/common.json @@ -3833,6 +3833,13 @@ "delete_with_contents_message": "La carpeta \"{name}\" encara conté {count, plural, one {1 missatge} other {# missatges}}. Vols suprimir la carpeta i tots els seus missatges? No es pot desfer.", "delete_with_contents_confirm": "Suprimeix la carpeta i els missatges" }, + "mail_p2_folders": { + "all_folders": "Totes les carpetes", + "empty_trash": "Buida la paperera", + "empty_spam": "Buida el correu brossa", + "empty_trash_confirm": "Vols suprimir per sempre {count, plural, one {el missatge} other {els # missatges}} de la paperera? No es pot desfer.", + "empty_spam_confirm": "Vols suprimir per sempre {count, plural, one {el missatge} other {els # missatges}} del correu brossa? No es pot desfer." + }, "uxs_folders": { "manage_accounts": "Gestiona els comptes…", "apply_to_existing": "{count, plural, one {Aplica a # missatge existent de {folder}} other {Aplica a # missatges existents de {folder}}}" diff --git a/locales/cs/common.json b/locales/cs/common.json index b2ae541cf..143e0cdcf 100644 --- a/locales/cs/common.json +++ b/locales/cs/common.json @@ -3833,6 +3833,13 @@ "delete_with_contents_message": "Složka „{name}“ stále obsahuje {count, plural, one {1 zprávu} few {# zprávy} other {# zpráv}}. Smazat složku i všechny její zprávy? Tuto akci nelze vrátit.", "delete_with_contents_confirm": "Smazat složku i zprávy" }, + "mail_p2_folders": { + "all_folders": "Všechny složky", + "empty_trash": "Vysypat koš", + "empty_spam": "Vyprázdnit spam", + "empty_trash_confirm": "Trvale smazat {count, plural, one {zprávu} few {všechny # zprávy} many {všech # zprávy} other {všech # zpráv}} v koši? Nelze to vrátit zpět.", + "empty_spam_confirm": "Trvale smazat {count, plural, one {zprávu} few {všechny # zprávy} many {všech # zprávy} other {všech # zpráv}} ve spamu? Nelze to vrátit zpět." + }, "uxs_folders": { "manage_accounts": "Spravovat účty…", "apply_to_existing": "{count, plural, one {Použít na # existující zprávu ve složce {folder}} few {Použít na # existující zprávy ve složce {folder}} many {Použít na # existující zprávy ve složce {folder}} other {Použít na # existujících zpráv ve složce {folder}}}" diff --git a/locales/da/common.json b/locales/da/common.json index 7d48f4b15..d03c97b2d 100644 --- a/locales/da/common.json +++ b/locales/da/common.json @@ -3833,6 +3833,13 @@ "delete_with_contents_message": "Mappen \"{name}\" indeholder stadig {count, plural, one {1 besked} other {# beskeder}}. Slet mappen og alle dens beskeder? Dette kan ikke fortrydes.", "delete_with_contents_confirm": "Slet mappe og beskeder" }, + "mail_p2_folders": { + "all_folders": "Alle mapper", + "empty_trash": "Tøm papirkurven", + "empty_spam": "Tøm spam", + "empty_trash_confirm": "Slet {count, plural, one {beskeden} other {alle # beskeder}} i papirkurven for altid? Det kan ikke fortrydes.", + "empty_spam_confirm": "Slet {count, plural, one {beskeden} other {alle # beskeder}} i spam for altid? Det kan ikke fortrydes." + }, "uxs_folders": { "manage_accounts": "Administrer konti…", "apply_to_existing": "{count, plural, one {Anvend på # eksisterende besked i {folder}} other {Anvend på # eksisterende beskeder i {folder}}}" diff --git a/locales/de/common.json b/locales/de/common.json index e1e33c934..c3535957e 100644 --- a/locales/de/common.json +++ b/locales/de/common.json @@ -3833,6 +3833,13 @@ "delete_with_contents_message": "Der Ordner „{name}“ enthält noch {count, plural, one {1 Nachricht} other {# Nachrichten}}. Ordner samt allen Nachrichten löschen? Das kann nicht rückgängig gemacht werden.", "delete_with_contents_confirm": "Ordner und Nachrichten löschen" }, + "mail_p2_folders": { + "all_folders": "Alle Ordner", + "empty_trash": "Papierkorb leeren", + "empty_spam": "Spam leeren", + "empty_trash_confirm": "{count, plural, one {Die Nachricht} other {Alle # Nachrichten}} im Papierkorb endgültig löschen? Das lässt sich nicht rückgängig machen.", + "empty_spam_confirm": "{count, plural, one {Die Nachricht} other {Alle # Nachrichten}} im Spam endgültig löschen? Das lässt sich nicht rückgängig machen." + }, "uxs_folders": { "manage_accounts": "Konten verwalten…", "apply_to_existing": "{count, plural, one {Auf # vorhandene Nachricht in {folder} anwenden} other {Auf # vorhandene Nachrichten in {folder} anwenden}}" diff --git a/locales/en/common.json b/locales/en/common.json index ae08611b3..045019132 100644 --- a/locales/en/common.json +++ b/locales/en/common.json @@ -3833,6 +3833,13 @@ "delete_with_contents_message": "The folder \"{name}\" still contains {count, plural, one {1 message} other {# messages}}. Delete the folder and all of its messages? This cannot be undone.", "delete_with_contents_confirm": "Delete folder and messages" }, + "mail_p2_folders": { + "all_folders": "All folders", + "empty_trash": "Empty Trash", + "empty_spam": "Empty Spam", + "empty_trash_confirm": "Delete {count, plural, one {the message} other {all # messages}} in Trash forever? You can't undo this.", + "empty_spam_confirm": "Delete {count, plural, one {the message} other {all # messages}} in Spam forever? You can't undo this." + }, "uxs_folders": { "manage_accounts": "Manage accounts…", "apply_to_existing": "{count, plural, one {Apply to # existing message in {folder}} other {Apply to # existing messages in {folder}}}" diff --git a/locales/es/common.json b/locales/es/common.json index e4c6f39e9..813d5b46c 100644 --- a/locales/es/common.json +++ b/locales/es/common.json @@ -3833,6 +3833,13 @@ "create": "Crear", "rename_confirm": "Renombrar" }, + "mail_p2_folders": { + "all_folders": "Todas las carpetas", + "empty_trash": "Vaciar papelera", + "empty_spam": "Vaciar spam", + "empty_trash_confirm": "¿Eliminar para siempre {count, plural, one {el mensaje} other {los # mensajes}} de la papelera? No se puede deshacer.", + "empty_spam_confirm": "¿Eliminar para siempre {count, plural, one {el mensaje} other {los # mensajes}} de spam? No se puede deshacer." + }, "uxs_folders": { "manage_accounts": "Gestionar cuentas…", "apply_to_existing": "{count, plural, one {Aplicar a # mensaje existente en {folder}} other {Aplicar a # mensajes existentes en {folder}}}" diff --git a/locales/et/common.json b/locales/et/common.json index 30ac1ee96..bb07164c9 100644 --- a/locales/et/common.json +++ b/locales/et/common.json @@ -3833,6 +3833,13 @@ "delete_with_contents_message": "Kaust \"{name}\" sisaldab veel {count, plural, one {1 sõnum} other {# sõnumit}}. Kas kustutada kaust ja kõik selle sõnumid? Seda ei saa tagasi võtta.", "delete_with_contents_confirm": "Kustuta kaust ja sõnumid" }, + "mail_p2_folders": { + "all_folders": "Kõik kaustad", + "empty_trash": "Tühjenda prügikast", + "empty_spam": "Tühjenda rämpspost", + "empty_trash_confirm": "Kas kustutada prügikastist {count, plural, one {kiri} other {kõik # kirja}} jäädavalt? Seda ei saa tagasi võtta.", + "empty_spam_confirm": "Kas kustutada rämpspostist {count, plural, one {kiri} other {kõik # kirja}} jäädavalt? Seda ei saa tagasi võtta." + }, "uxs_folders": { "manage_accounts": "Halda kontosid…", "apply_to_existing": "{count, plural, one {Rakenda # olemasolevale kirjale kaustas {folder}} other {Rakenda # olemasolevale kirjale kaustas {folder}}}" diff --git a/locales/fa/common.json b/locales/fa/common.json index 117abe12f..33a32e3dc 100644 --- a/locales/fa/common.json +++ b/locales/fa/common.json @@ -3833,6 +3833,13 @@ "delete_with_contents_message": "پوشه «{name}» هنوز شامل {count, plural, one {۱ پیام} other {# پیام}} است. پوشه و همه پیام‌های آن حذف شود؟ این عمل قابل بازگشت نیست.", "delete_with_contents_confirm": "حذف پوشه و پیام‌ها" }, + "mail_p2_folders": { + "all_folders": "همه پوشه‌ها", + "empty_trash": "خالی کردن زباله‌دان", + "empty_spam": "خالی کردن هرزنامه", + "empty_trash_confirm": "{count, plural, one {پیام} other {همه # پیام}} زباله‌دان برای همیشه حذف شود؟ این کار برگشت‌پذیر نیست.", + "empty_spam_confirm": "{count, plural, one {پیام} other {همه # پیام}} هرزنامه برای همیشه حذف شود؟ این کار برگشت‌پذیر نیست." + }, "uxs_folders": { "manage_accounts": "مدیریت حساب‌ها…", "apply_to_existing": "{count, plural, one {اعمال روی # پیام موجود در {folder}} other {اعمال روی # پیام موجود در {folder}}}" diff --git a/locales/fr/common.json b/locales/fr/common.json index 920bc103e..916bc5ca5 100644 --- a/locales/fr/common.json +++ b/locales/fr/common.json @@ -3833,6 +3833,13 @@ "create": "Créer", "rename_confirm": "Renommer" }, + "mail_p2_folders": { + "all_folders": "Tous les dossiers", + "empty_trash": "Vider la corbeille", + "empty_spam": "Vider le spam", + "empty_trash_confirm": "Supprimer définitivement {count, plural, one {le message} other {les # messages}} de la corbeille ? Impossible de revenir en arrière.", + "empty_spam_confirm": "Supprimer définitivement {count, plural, one {le message} other {les # messages}} du spam ? Impossible de revenir en arrière." + }, "uxs_folders": { "manage_accounts": "Gérer les comptes…", "apply_to_existing": "{count, plural, one {Appliquer à # message existant dans {folder}} other {Appliquer à # messages existants dans {folder}}}" diff --git a/locales/he/common.json b/locales/he/common.json index 2ddbebc18..fa675fa12 100644 --- a/locales/he/common.json +++ b/locales/he/common.json @@ -5539,6 +5539,13 @@ "delete_with_contents_message": "התיקייה \"{name}\" עדיין מכילה {count, plural, one {הודעה אחת} other {# הודעות}}. למחוק את התיקייה ואת כל ההודעות שבה? לא ניתן לבטל פעולה זו.", "delete_with_contents_confirm": "מחיקת התיקייה וההודעות" }, + "mail_p2_folders": { + "all_folders": "כל התיקיות", + "empty_trash": "ריקון האשפה", + "empty_spam": "ריקון הספאם", + "empty_trash_confirm": "למחוק לצמיתות {count, plural, one {את ההודעה} two {את שתי ההודעות} other {את כל # ההודעות}} באשפה? אי אפשר לבטל את זה.", + "empty_spam_confirm": "למחוק לצמיתות {count, plural, one {את ההודעה} two {את שתי ההודעות} other {את כל # ההודעות}} בספאם? אי אפשר לבטל את זה." + }, "uxs_folders": { "manage_accounts": "ניהול חשבונות…", "apply_to_existing": "{count, plural, one {החלה על הודעה קיימת אחת בתיקייה {folder}} other {החלה על # הודעות קיימות בתיקייה {folder}}}" diff --git a/locales/hu/common.json b/locales/hu/common.json index 40440385b..f8e6273cd 100644 --- a/locales/hu/common.json +++ b/locales/hu/common.json @@ -3833,6 +3833,13 @@ "delete_with_contents_message": "A(z) „{name}” mappa még {count, plural, one {1 üzenetet} other {# üzenetet}} tartalmaz. Törlöd a mappát az összes üzenetével együtt? Ez nem vonható vissza.", "delete_with_contents_confirm": "Mappa és üzenetek törlése" }, + "mail_p2_folders": { + "all_folders": "Összes mappa", + "empty_trash": "Kuka ürítése", + "empty_spam": "Spam ürítése", + "empty_trash_confirm": "Véglegesen törli {count, plural, one {az üzenetet} other {mind a # üzenetet}} a kukából? Ez nem vonható vissza.", + "empty_spam_confirm": "Véglegesen törli {count, plural, one {az üzenetet} other {mind a # üzenetet}} a spamből? Ez nem vonható vissza." + }, "uxs_folders": { "manage_accounts": "Fiókok kezelése…", "apply_to_existing": "{count, plural, one {Alkalmazás # meglévő üzenetre itt: {folder}} other {Alkalmazás # meglévő üzenetre itt: {folder}}}" diff --git a/locales/it/common.json b/locales/it/common.json index 4c928e274..148745ae2 100644 --- a/locales/it/common.json +++ b/locales/it/common.json @@ -3833,6 +3833,13 @@ "create": "Crea", "rename_confirm": "Rinomina" }, + "mail_p2_folders": { + "all_folders": "Tutte le cartelle", + "empty_trash": "Svuota cestino", + "empty_spam": "Svuota spam", + "empty_trash_confirm": "Eliminare per sempre {count, plural, one {il messaggio} other {tutti i # messaggi}} nel cestino? Non si può annullare.", + "empty_spam_confirm": "Eliminare per sempre {count, plural, one {il messaggio} other {tutti i # messaggi}} nello spam? Non si può annullare." + }, "uxs_folders": { "manage_accounts": "Gestisci account…", "apply_to_existing": "{count, plural, one {Applica a # messaggio esistente in {folder}} other {Applica a # messaggi esistenti in {folder}}}" diff --git a/locales/ja/common.json b/locales/ja/common.json index a4788a73e..db0613b81 100644 --- a/locales/ja/common.json +++ b/locales/ja/common.json @@ -3833,6 +3833,13 @@ "create": "作成", "rename_confirm": "名前を変更" }, + "mail_p2_folders": { + "all_folders": "すべてのフォルダー", + "empty_trash": "ゴミ箱を空にする", + "empty_spam": "迷惑メールを空にする", + "empty_trash_confirm": "ゴミ箱の{count, plural, other {# 件のメッセージ}}をすべて完全に削除しますか?元に戻せません。", + "empty_spam_confirm": "迷惑メールの{count, plural, other {# 件のメッセージ}}をすべて完全に削除しますか?元に戻せません。" + }, "uxs_folders": { "manage_accounts": "アカウントを管理…", "apply_to_existing": "{count, plural, other {{folder} の既存の # 件に適用}}" diff --git a/locales/ko/common.json b/locales/ko/common.json index 8692e53c6..ee9794db8 100644 --- a/locales/ko/common.json +++ b/locales/ko/common.json @@ -3833,6 +3833,13 @@ "create": "만들기", "rename_confirm": "이름 바꾸기" }, + "mail_p2_folders": { + "all_folders": "모든 폴더", + "empty_trash": "휴지통 비우기", + "empty_spam": "스팸 비우기", + "empty_trash_confirm": "휴지통의 {count, plural, other {메시지 #개}}를 모두 영구 삭제할까요? 되돌릴 수 없어요.", + "empty_spam_confirm": "스팸의 {count, plural, other {메시지 #개}}를 모두 영구 삭제할까요? 되돌릴 수 없어요." + }, "uxs_folders": { "manage_accounts": "계정 관리…", "apply_to_existing": "{count, plural, other {{folder}의 기존 메일 #개에 적용}}" diff --git a/locales/lv/common.json b/locales/lv/common.json index 30ae51e41..5550d87a6 100644 --- a/locales/lv/common.json +++ b/locales/lv/common.json @@ -3833,6 +3833,13 @@ "create": "Izveidot", "rename_confirm": "Pārsaukt" }, + "mail_p2_folders": { + "all_folders": "Visas mapes", + "empty_trash": "Iztukšot miskasti", + "empty_spam": "Iztukšot mēstules", + "empty_trash_confirm": "Neatgriezeniski dzēst {count, plural, =1 {vēstuli} zero {visas # vēstules} one {visas # vēstuli} other {visas # vēstules}} miskastē? To nevar atsaukt.", + "empty_spam_confirm": "Neatgriezeniski dzēst {count, plural, =1 {vēstuli} zero {visas # vēstules} one {visas # vēstuli} other {visas # vēstules}} mēstulēs? To nevar atsaukt." + }, "uxs_folders": { "manage_accounts": "Pārvaldīt kontus…", "apply_to_existing": "{count, plural, zero {Piemērot # esošajām vēstulēm mapē {folder}} one {Piemērot # esošajai vēstulei mapē {folder}} other {Piemērot # esošajām vēstulēm mapē {folder}}}" diff --git a/locales/mn/common.json b/locales/mn/common.json index 677689faa..9c3ff1cb0 100644 --- a/locales/mn/common.json +++ b/locales/mn/common.json @@ -3833,6 +3833,13 @@ "delete_with_contents_message": "\"{name}\" хавтсанд одоо ч {count} зурвас байна. Хавтас болон бүх зурвасыг устгах уу? Үүнийг буцаах боломжгүй.", "delete_with_contents_confirm": "Хавтас болон зурвасыг устгах" }, + "mail_p2_folders": { + "all_folders": "Бүх хавтас", + "empty_trash": "Хогийн савыг хоослох", + "empty_spam": "Спамыг хоослох", + "empty_trash_confirm": "Хогийн саван дахь {count, plural, one {захидлыг} other {бүх # захидлыг}} бүрмөсөн устгах уу? Буцаах боломжгүй.", + "empty_spam_confirm": "Спам дахь {count, plural, one {захидлыг} other {бүх # захидлыг}} бүрмөсөн устгах уу? Буцаах боломжгүй." + }, "uxs_folders": { "manage_accounts": "Данснуудыг удирдах…", "apply_to_existing": "{count, plural, one {{folder} доторх байгаа # захианд хэрэглэх} other {{folder} доторх байгаа # захианд хэрэглэх}}" diff --git a/locales/nb/common.json b/locales/nb/common.json index bc849a939..dea326255 100644 --- a/locales/nb/common.json +++ b/locales/nb/common.json @@ -3833,6 +3833,13 @@ "delete_with_contents_message": "Mappen «{name}» inneholder fortsatt {count, plural, one {1 melding} other {# meldinger}}. Slette mappen og alle meldingene i den? Dette kan ikke angres.", "delete_with_contents_confirm": "Slett mappe og meldinger" }, + "mail_p2_folders": { + "all_folders": "Alle mapper", + "empty_trash": "Tøm papirkurven", + "empty_spam": "Tøm søppelpost", + "empty_trash_confirm": "Slette {count, plural, one {meldingen} other {alle # meldingene}} i papirkurven for godt? Dette kan ikke angres.", + "empty_spam_confirm": "Slette {count, plural, one {meldingen} other {alle # meldingene}} i søppelpost for godt? Dette kan ikke angres." + }, "uxs_folders": { "manage_accounts": "Administrer kontoer…", "apply_to_existing": "{count, plural, one {Bruk på # eksisterende melding i {folder}} other {Bruk på # eksisterende meldinger i {folder}}}" diff --git a/locales/nl/common.json b/locales/nl/common.json index 40c5b7aba..38065b464 100644 --- a/locales/nl/common.json +++ b/locales/nl/common.json @@ -3833,6 +3833,13 @@ "create": "Aanmaken", "rename_confirm": "Hernoemen" }, + "mail_p2_folders": { + "all_folders": "Alle mappen", + "empty_trash": "Prullenbak legen", + "empty_spam": "Spam legen", + "empty_trash_confirm": "{count, plural, one {Het bericht} other {Alle # berichten}} in de prullenbak definitief verwijderen? Dit kan niet ongedaan worden.", + "empty_spam_confirm": "{count, plural, one {Het bericht} other {Alle # berichten}} in spam definitief verwijderen? Dit kan niet ongedaan worden." + }, "uxs_folders": { "manage_accounts": "Accounts beheren…", "apply_to_existing": "{count, plural, one {Toepassen op # bestaand bericht in {folder}} other {Toepassen op # bestaande berichten in {folder}}}" diff --git a/locales/pl/common.json b/locales/pl/common.json index 977c2f348..7c5252bcd 100644 --- a/locales/pl/common.json +++ b/locales/pl/common.json @@ -3833,6 +3833,13 @@ "create": "Utwórz", "rename_confirm": "Zmień nazwę" }, + "mail_p2_folders": { + "all_folders": "Wszystkie foldery", + "empty_trash": "Opróżnij kosz", + "empty_spam": "Opróżnij spam", + "empty_trash_confirm": "Trwale usunąć {count, plural, one {wiadomość} few {wszystkie # wiadomości} many {wszystkie # wiadomości} other {wszystkie # wiadomości}} z kosza? Nie można tego cofnąć.", + "empty_spam_confirm": "Trwale usunąć {count, plural, one {wiadomość} few {wszystkie # wiadomości} many {wszystkie # wiadomości} other {wszystkie # wiadomości}} ze spamu? Nie można tego cofnąć." + }, "uxs_folders": { "manage_accounts": "Zarządzaj kontami…", "apply_to_existing": "{count, plural, one {Zastosuj do # istniejącej wiadomości w folderze {folder}} few {Zastosuj do # istniejących wiadomości w folderze {folder}} many {Zastosuj do # istniejących wiadomości w folderze {folder}} other {Zastosuj do # istniejącej wiadomości w folderze {folder}}}" diff --git a/locales/pt/common.json b/locales/pt/common.json index 4b3b27d99..8703862ee 100644 --- a/locales/pt/common.json +++ b/locales/pt/common.json @@ -3833,6 +3833,13 @@ "create": "Criar", "rename_confirm": "Renomear" }, + "mail_p2_folders": { + "all_folders": "Todas as pastas", + "empty_trash": "Esvaziar lixeira", + "empty_spam": "Esvaziar spam", + "empty_trash_confirm": "Excluir para sempre {count, plural, one {a mensagem} other {as # mensagens}} da lixeira? Não é possível desfazer.", + "empty_spam_confirm": "Excluir para sempre {count, plural, one {a mensagem} other {as # mensagens}} do spam? Não é possível desfazer." + }, "uxs_folders": { "manage_accounts": "Gerir contas…", "apply_to_existing": "{count, plural, one {Aplicar a # mensagem existente em {folder}} other {Aplicar a # mensagens existentes em {folder}}}" diff --git a/locales/ro/common.json b/locales/ro/common.json index 60c77c966..c7cd5c559 100644 --- a/locales/ro/common.json +++ b/locales/ro/common.json @@ -3833,6 +3833,13 @@ "delete_with_contents_message": "Dosarul „{name}” încă mai conține {count, plural, one {1 mesaj} other {# mesaje}}. Ștergi dosarul și toate mesajele sale? Acțiunea nu poate fi anulată.", "delete_with_contents_confirm": "Șterge dosarul și mesajele" }, + "mail_p2_folders": { + "all_folders": "Toate dosarele", + "empty_trash": "Golește coșul de gunoi", + "empty_spam": "Golește spamul", + "empty_trash_confirm": "Ștergeți definitiv {count, plural, one {mesajul} few {toate cele # mesaje} other {toate cele # de mesaje}} din coșul de gunoi? Nu se poate anula.", + "empty_spam_confirm": "Ștergeți definitiv {count, plural, one {mesajul} few {toate cele # mesaje} other {toate cele # de mesaje}} din spam? Nu se poate anula." + }, "uxs_folders": { "manage_accounts": "Gestionați conturile…", "apply_to_existing": "{count, plural, one {Aplicați la # mesaj existent din {folder}} few {Aplicați la # mesaje existente din {folder}} other {Aplicați la # de mesaje existente din {folder}}}" diff --git a/locales/ru/common.json b/locales/ru/common.json index 3a0c9fcec..bf469044a 100644 --- a/locales/ru/common.json +++ b/locales/ru/common.json @@ -3833,6 +3833,13 @@ "create": "Создать", "rename_confirm": "Переименовать" }, + "mail_p2_folders": { + "all_folders": "Все папки", + "empty_trash": "Очистить корзину", + "empty_spam": "Очистить спам", + "empty_trash_confirm": "Удалить {count, plural, =1 {письмо} one {все # письмо} few {все # письма} many {все # писем} other {все # письма}} в корзине навсегда? Это нельзя отменить.", + "empty_spam_confirm": "Удалить {count, plural, =1 {письмо} one {все # письмо} few {все # письма} many {все # писем} other {все # письма}} в спаме навсегда? Это нельзя отменить." + }, "uxs_folders": { "manage_accounts": "Управление аккаунтами…", "apply_to_existing": "{count, plural, one {Применить к # имеющемуся письму в папке {folder}} few {Применить к # имеющимся письмам в папке {folder}} many {Применить к # имеющимся письмам в папке {folder}} other {Применить к # имеющегося письма в папке {folder}}}" diff --git a/locales/sk/common.json b/locales/sk/common.json index 502164d6d..006f1981f 100644 --- a/locales/sk/common.json +++ b/locales/sk/common.json @@ -3833,6 +3833,13 @@ "delete_with_contents_message": "Priečinok „{name}“ stále obsahuje {count, plural, one {1 správu} few {# správy} other {# správ}}. Odstrániť priečinok aj všetky jeho správy? Túto akciu nie je možné vrátiť späť.", "delete_with_contents_confirm": "Odstrániť priečinok a správy" }, + "mail_p2_folders": { + "all_folders": "Všetky priečinky", + "empty_trash": "Vyprázdniť kôš", + "empty_spam": "Vyprázdniť spam", + "empty_trash_confirm": "Natrvalo odstrániť {count, plural, one {správu} few {všetky # správy} many {všetkých # správy} other {všetkých # správ}} v koši? Nedá sa to vrátiť späť.", + "empty_spam_confirm": "Natrvalo odstrániť {count, plural, one {správu} few {všetky # správy} many {všetkých # správy} other {všetkých # správ}} v spame? Nedá sa to vrátiť späť." + }, "uxs_folders": { "manage_accounts": "Spravovať účty…", "apply_to_existing": "{count, plural, one {Použiť na # existujúcu správu v priečinku {folder}} few {Použiť na # existujúce správy v priečinku {folder}} many {Použiť na # existujúcej správy v priečinku {folder}} other {Použiť na # existujúcich správ v priečinku {folder}}}" diff --git a/locales/th/common.json b/locales/th/common.json index 852be7f21..ff2221ad5 100644 --- a/locales/th/common.json +++ b/locales/th/common.json @@ -1029,6 +1029,13 @@ "delete_with_contents_message": "โฟลเดอร์ “{name}” ยังมีข้อความอยู่ {count, plural, other {# ข้อความ}} ต้องการลบโฟลเดอร์และข้อความทั้งหมดภายในหรือไม่? การดำเนินการนี้ไม่สามารถยกเลิกได้", "delete_with_contents_confirm": "ลบโฟลเดอร์และข้อความทั้งหมด" }, + "mail_p2_folders": { + "all_folders": "โฟลเดอร์ทั้งหมด", + "empty_trash": "ล้างถังขยะ", + "empty_spam": "ล้างสแปม", + "empty_trash_confirm": "ลบข้อความ {count, plural, other {ทั้ง # ฉบับ}} ในถังขยะอย่างถาวรไหม ย้อนกลับไม่ได้", + "empty_spam_confirm": "ลบข้อความ {count, plural, other {ทั้ง # ฉบับ}} ในสแปมอย่างถาวรไหม ย้อนกลับไม่ได้" + }, "uxs_folders": { "manage_accounts": "จัดการบัญชี…", "apply_to_existing": "{count, plural, other {นำไปใช้กับข้อความเดิม # ฉบับใน {folder}}}" diff --git a/locales/tr/common.json b/locales/tr/common.json index 8e246b38f..473a1eb40 100644 --- a/locales/tr/common.json +++ b/locales/tr/common.json @@ -3833,6 +3833,13 @@ "delete_with_contents_message": "\"{name}\" klasöründe hâlâ {count} ileti var. Klasör ve tüm iletileri silinsin mi? Bu işlem geri alınamaz.", "delete_with_contents_confirm": "Klasörü ve iletileri sil" }, + "mail_p2_folders": { + "all_folders": "Tüm klasörler", + "empty_trash": "Çöp Kutusunu boşalt", + "empty_spam": "Spam klasörünü boşalt", + "empty_trash_confirm": "Çöp Kutusundaki {count, plural, one {ileti} other {# iletinin tümü}} kalıcı olarak silinsin mi? Bu geri alınamaz.", + "empty_spam_confirm": "Spam klasöründeki {count, plural, one {ileti} other {# iletinin tümü}} kalıcı olarak silinsin mi? Bu geri alınamaz." + }, "uxs_folders": { "manage_accounts": "Hesapları yönet…", "apply_to_existing": "{count, plural, one {{folder} içindeki # mevcut iletiye uygula} other {{folder} içindeki # mevcut iletiye uygula}}" diff --git a/locales/uk/common.json b/locales/uk/common.json index 52bf3725a..3922dca1a 100644 --- a/locales/uk/common.json +++ b/locales/uk/common.json @@ -3833,6 +3833,13 @@ "create": "Створити", "rename_confirm": "Перейменувати" }, + "mail_p2_folders": { + "all_folders": "Усі папки", + "empty_trash": "Очистити кошик", + "empty_spam": "Очистити спам", + "empty_trash_confirm": "Видалити {count, plural, =1 {лист} one {усі # лист} few {усі # листи} many {усі # листів} other {усі # листа}} в кошику назавжди? Це не можна скасувати.", + "empty_spam_confirm": "Видалити {count, plural, =1 {лист} one {усі # лист} few {усі # листи} many {усі # листів} other {усі # листа}} у спамі назавжди? Це не можна скасувати." + }, "uxs_folders": { "manage_accounts": "Керувати обліковими записами…", "apply_to_existing": "{count, plural, one {Застосувати до # наявного листа в теці {folder}} few {Застосувати до # наявних листів у теці {folder}} many {Застосувати до # наявних листів у теці {folder}} other {Застосувати до # наявного листа в теці {folder}}}" diff --git a/locales/vi/common.json b/locales/vi/common.json index a02cf42d1..26e76d071 100644 --- a/locales/vi/common.json +++ b/locales/vi/common.json @@ -3845,6 +3845,13 @@ "delete_with_contents_message": "Thư mục \"{name}\" vẫn chứa {count, plural, one {1 thư} other {# thư}}. Xóa thư mục và tất cả thư của nó? Điều này không thể hoàn tác được.", "delete_with_contents_confirm": "Xóa thư mục và thư" }, + "mail_p2_folders": { + "all_folders": "Tất cả thư mục", + "empty_trash": "Dọn sạch Thùng rác", + "empty_spam": "Dọn sạch Thư rác", + "empty_trash_confirm": "Xóa vĩnh viễn {count, plural, other {tất cả # thư}} trong Thùng rác? Không thể hoàn tác.", + "empty_spam_confirm": "Xóa vĩnh viễn {count, plural, other {tất cả # thư}} trong Thư rác? Không thể hoàn tác." + }, "uxs_folders": { "manage_accounts": "Quản lý tài khoản…", "apply_to_existing": "{count, plural, one {Áp dụng cho # thư hiện có trong {folder}} other {Áp dụng cho # thư hiện có trong {folder}}}" diff --git a/locales/zh-TW/common.json b/locales/zh-TW/common.json index afe32e3ed..5dcbc14dc 100644 --- a/locales/zh-TW/common.json +++ b/locales/zh-TW/common.json @@ -3833,6 +3833,13 @@ "delete_with_contents_message": "資料夾「{name}」中仍有 {count} 封郵件。要刪除該資料夾及其所有郵件嗎?此操作無法復原。", "delete_with_contents_confirm": "刪除資料夾和郵件" }, + "mail_p2_folders": { + "all_folders": "所有信件匣", + "empty_trash": "清空垃圾桶", + "empty_spam": "清空垃圾郵件", + "empty_trash_confirm": "要永久刪除垃圾桶中的{count, plural, other {全部 # 封郵件}}嗎?此動作無法復原。", + "empty_spam_confirm": "要永久刪除垃圾郵件中的{count, plural, other {全部 # 封郵件}}嗎?此動作無法復原。" + }, "uxs_folders": { "manage_accounts": "管理帳號…", "apply_to_existing": "{count, plural, other {套用到{folder}中的 # 封既有郵件}}" diff --git a/locales/zh/common.json b/locales/zh/common.json index a5fd459b2..0354ee479 100644 --- a/locales/zh/common.json +++ b/locales/zh/common.json @@ -3833,6 +3833,13 @@ "create": "创建", "rename_confirm": "重命名" }, + "mail_p2_folders": { + "all_folders": "所有文件夹", + "empty_trash": "清空已删除", + "empty_spam": "清空垃圾邮件", + "empty_trash_confirm": "要永久删除已删除中的{count, plural, other {全部 # 封邮件}}吗?此操作无法撤销。", + "empty_spam_confirm": "要永久删除垃圾邮件中的{count, plural, other {全部 # 封邮件}}吗?此操作无法撤销。" + }, "uxs_folders": { "manage_accounts": "管理账户…", "apply_to_existing": "{count, plural, other {应用于{folder}中的 # 封已有邮件}}"