From 75aa66e0d91e8e37caae149001c3df562a08c72b Mon Sep 17 00:00:00 2001 From: Linus Rath <139418639+rathlinus@users.noreply.github.com> Date: Sun, 1 Nov 2026 07:01:28 +0100 Subject: [PATCH] feat: say when an import or export running in the background ends, and keep the focus in its dialog --- .../__tests__/mail-import-dialog.test.tsx | 26 +++++++++++++++++++ .../mail-transfer/mail-export-dialog.tsx | 10 ++++--- .../mail-transfer/mail-import-dialog.tsx | 8 +++--- .../mail-transfer/mail-transfer-host.tsx | 26 ++++++++++++++++++- .../mail-transfer/transfer-progress.tsx | 16 ++++++++++++ locales/ar/common.json | 10 +++++-- locales/ca/common.json | 10 +++++-- locales/cs/common.json | 10 +++++-- locales/da/common.json | 10 +++++-- locales/de/common.json | 10 +++++-- locales/en/common.json | 10 +++++-- locales/es/common.json | 10 +++++-- locales/et/common.json | 10 +++++-- locales/fa/common.json | 10 +++++-- locales/fr/common.json | 10 +++++-- locales/he/common.json | 10 +++++-- locales/hu/common.json | 10 +++++-- locales/it/common.json | 10 +++++-- locales/ja/common.json | 10 +++++-- locales/ko/common.json | 10 +++++-- locales/lv/common.json | 10 +++++-- locales/mn/common.json | 10 +++++-- locales/nb/common.json | 10 +++++-- locales/nl/common.json | 10 +++++-- locales/pl/common.json | 10 +++++-- locales/pt/common.json | 10 +++++-- locales/ro/common.json | 10 +++++-- locales/ru/common.json | 10 +++++-- locales/sk/common.json | 10 +++++-- locales/th/common.json | 10 +++++-- locales/tr/common.json | 10 +++++-- locales/uk/common.json | 10 +++++-- locales/vi/common.json | 10 +++++-- locales/zh-TW/common.json | 10 +++++-- locales/zh/common.json | 10 +++++-- 35 files changed, 318 insertions(+), 68 deletions(-) diff --git a/components/mail-transfer/__tests__/mail-import-dialog.test.tsx b/components/mail-transfer/__tests__/mail-import-dialog.test.tsx index ceab01aec..7efef411c 100644 --- a/components/mail-transfer/__tests__/mail-import-dialog.test.tsx +++ b/components/mail-transfer/__tests__/mail-import-dialog.test.tsx @@ -127,6 +127,32 @@ describe('MailImportDialog', () => { expect(screen.getByRole('heading', { name: 'running_title' })).toBeTruthy(); }); + it('says when a hidden import ends, with a way back to its summary', async () => { + const { useToastStore } = await import('@/stores/toast-store'); + useToastStore.setState({ toasts: [] }); + render(); + act(() => { + openMailImport(); + useMailTransferStore.getState().startJob({ kind: 'import', controller: new AbortController(), progress: progress() }); + useMailTransferStore.getState().hide(); + }); + act(() => useMailTransferStore.getState().updateProgress(progress({ phase: 'done', imported: 12, failed: 1 }))); + const toastShown = useToastStore.getState().toasts.find((x) => x.title === 'toast_done'); + expect(toastShown?.action?.label).toBe('toast_show'); + act(() => toastShown!.action!.onClick()); + expect(screen.getByRole('heading', { name: 'done_title' })).toBeTruthy(); + }); + + it('keeps the focus in the dialog when Import turns into the progress view and then the summary', async () => { + render(); + act(() => openMailImport()); + (document.activeElement as HTMLElement | null)?.blur(); + act(() => useMailTransferStore.getState().startJob({ kind: 'import', controller: new AbortController(), progress: progress() })); + await waitFor(() => expect(document.activeElement?.textContent).toBe('background')); + act(() => useMailTransferStore.getState().updateProgress(progress({ phase: 'done' }))); + await waitFor(() => expect(document.activeElement?.textContent).toBe('close')); + }); + it('lists what was skipped and what failed when it ends', () => { render(); act(() => { diff --git a/components/mail-transfer/mail-export-dialog.tsx b/components/mail-transfer/mail-export-dialog.tsx index 0f7ecf6c3..c3e7b6b99 100644 --- a/components/mail-transfer/mail-export-dialog.tsx +++ b/components/mail-transfer/mail-export-dialog.tsx @@ -1,6 +1,6 @@ "use client"; -import { useId, useState } from "react"; +import { useId, useRef, useState } from "react"; import { useLocale, useTranslations } from "next-intl"; import { Dialog } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; @@ -11,7 +11,7 @@ import type { ExportFormat, ExportProgress } from "@/lib/mail-export/engine"; import { safeName } from "@/lib/mail-export/engine"; import { canPickSaveFile, canWritePrivateFile, memorySink, pickSaveFile, privateFileSink, sweepPrivateExports, type ExportSink } from "@/lib/mail-export/sinks"; import { formatFileSize } from "@/lib/utils"; -import { formatClock, TransferBar } from "./transfer-progress"; +import { formatClock, TransferBar, useFocusOnStage } from "./transfer-progress"; import { startExport } from "./start-export"; function today(): string { @@ -44,6 +44,8 @@ export function MailExportDialog({ request }: { request: ExportRequest }) { const folder = !!request.mailboxId; const progress = job?.kind === "export" ? job.progress : null; const active = isJobActive(job); + const stageButton = useRef(null); + useFocusOnStage(stageButton, progress ? (active ? "running" : "ended") : "setup"); if (!visible) return null; @@ -94,7 +96,7 @@ export function MailExportDialog({ request }: { request: ExportRequest }) { testId="mail-export-dialog" footer={active ? ( <> - + ) : ( @@ -102,7 +104,7 @@ export function MailExportDialog({ request }: { request: ExportRequest }) { {progress.phase === "done" && progress.file?.download && ( )} - + )} > diff --git a/components/mail-transfer/mail-import-dialog.tsx b/components/mail-transfer/mail-import-dialog.tsx index 099d29e6a..aba661d07 100644 --- a/components/mail-transfer/mail-import-dialog.tsx +++ b/components/mail-transfer/mail-import-dialog.tsx @@ -14,7 +14,7 @@ import { hasFolders, sniffFormat, type ImportFormat, type SkipReason } from "@/l import type { ImportProgress } from "@/lib/mail-import/engine"; import type { Mailbox } from "@/lib/jmap/types"; import { formatFileSize, getMailboxPath } from "@/lib/utils"; -import { formatClock, TransferBar } from "./transfer-progress"; +import { formatClock, TransferBar, useFocusOnStage } from "./transfer-progress"; import { startImport } from "./start-import"; const ACCEPT = ".eml,.zip,.mbox,.mbx,.pst,.ost,message/rfc822,application/zip,application/mbox"; @@ -112,6 +112,8 @@ export function MailImportDialog({ request }: { request: ImportRequest }) { const formatName = (format: ImportFormat) => t(`format_${format}`); const progress = job?.kind === "import" ? job.progress : null; const active = isJobActive(job); + const stageButton = useRef(null); + useFocusOnStage(stageButton, progress ? (active ? "running" : "ended") : "setup"); const onStart = () => { if (picked.length === 0 || !accountId) return; @@ -140,11 +142,11 @@ export function MailImportDialog({ request }: { request: ImportRequest }) { testId="mail-import-dialog" footer={active ? ( <> - + ) : ( - + )} > diff --git a/components/mail-transfer/mail-transfer-host.tsx b/components/mail-transfer/mail-transfer-host.tsx index 7819390a2..981fb2bdf 100644 --- a/components/mail-transfer/mail-transfer-host.tsx +++ b/components/mail-transfer/mail-transfer-host.tsx @@ -1,6 +1,6 @@ "use client"; -import { useEffect } from "react"; +import { useEffect, useRef } from "react"; import { useLocale, useTranslations } from "next-intl"; import { Loader2, Pause } from "@/components/icons"; import { isJobActive, useMailTransferStore } from "@/stores/mail-transfer-store"; @@ -8,6 +8,7 @@ import { onBeforeSignOut } from "@/lib/sign-out-cleanup"; import { clearCheckpointsFor } from "@/lib/mail-import/checkpoints"; import { sweepPrivateExports } from "@/lib/mail-export/sinks"; import { useAuthStore } from "@/stores/auth-store"; +import { toast } from "@/stores/toast-store"; import { MailImportDialog } from "./mail-import-dialog"; import { MailExportDialog } from "./mail-export-dialog"; import { formatClock } from "./transfer-progress"; @@ -49,6 +50,29 @@ export function MailTransferHost() { if (!isJobActive(useMailTransferStore.getState().job)) void sweepPrivateExports(); }, [activeAccountId]); + // A job that ends while its dialog is hidden says so, with a way back to its summary. + const tImport = useTranslations("mail_import"); + const tExport = useTranslations("mail_export"); + const lastPhase = useRef(undefined); + useEffect(() => { + const phase = job?.progress.phase; + const was = lastPhase.current; + lastPhase.current = phase; + if (!job || visible || (was !== "running" && was !== "paused")) return; + if (phase !== "done" && phase !== "failed") return; + const action = { label: (job.kind === "import" ? tImport : tExport)("toast_show"), onClick: () => useMailTransferStore.getState().show() }; + if (job.kind === "import") { + if (phase === "done") toast.success(tImport("toast_done", { imported: job.progress.imported, failed: job.progress.failed }), { action }); + else toast.warning(tImport("toast_stopped"), { action }); + } else if (phase === "done") { + toast.success(tExport("toast_done", { name: job.progress.file?.name ?? "" }), { action }); + } else { + toast.warning(tExport("toast_stopped"), { action }); + } + // The translators are new functions on every render in tests; the phase is what matters. + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [job, visible]); + return ( <> {request?.kind === "import" && } diff --git a/components/mail-transfer/transfer-progress.tsx b/components/mail-transfer/transfer-progress.tsx index a0c6aba3e..208810343 100644 --- a/components/mail-transfer/transfer-progress.tsx +++ b/components/mail-transfer/transfer-progress.tsx @@ -1,7 +1,23 @@ "use client"; +import { useEffect, type RefObject } from "react"; import { cn } from "@/lib/utils"; +/** + * Keeps the focus in the dialog when its buttons change under it: Import or + * Export turns into the progress view, then into the summary, and the button + * that had the focus is gone. `stage` names the view; `target` is the button + * to focus in it. + */ +export function useFocusOnStage(target: RefObject, stage: string): void { + useEffect(() => { + const el = target.current; + if (!el) return; + const dialog = el.closest('[role="dialog"], [role="alertdialog"]'); + if (!dialog || !dialog.contains(document.activeElement)) el.focus(); + }, [target, stage]); +} + /** The bar of an import or export, 0 to 1; indeterminate while nothing is known. */ export function TransferBar({ fraction, label, paused }: { fraction: number | null; label: string; paused?: boolean }) { const percent = fraction === null ? null : Math.round(Math.max(0, Math.min(1, fraction)) * 100); diff --git a/locales/ar/common.json b/locales/ar/common.json index c49b07ecf..279fdd81a 100644 --- a/locales/ar/common.json +++ b/locales/ar/common.json @@ -5441,7 +5441,10 @@ "error_busy": "يجري استيراد هذه الملفات في علامة تبويب أخرى بالفعل.", "retry_hint": "استورد الملفات نفسها إلى المجلد نفسه مرة أخرى لإعادة محاولة الرسائل التي فشلت.", "skip_unreadable": "غير مقروءة في ملف Outlook: {count}", - "keep_folders_top_hint": "في المستوى الأعلى تذهب علبة الوارد والعناصر المرسلة والعناصر المحذوفة وما شابهها إلى مجلداتك." + "keep_folders_top_hint": "في المستوى الأعلى تذهب علبة الوارد والعناصر المرسلة والعناصر المحذوفة وما شابهها إلى مجلداتك.", + "toast_done": "انتهى الاستيراد. المستورد: {imported}، الفاشل: {failed}.", + "toast_stopped": "توقف الاستيراد.", + "toast_show": "عرض" }, "mail_export": { "menu_export": "تصدير المجلد…", @@ -5481,7 +5484,10 @@ "download_again": "التنزيل مرة أخرى", "too_large": "التصدير أكبر مما يستطيع هذا المتصفح حفظه في الذاكرة. استخدم Chrome أو Edge، أو صدّر مجلدًا مجلدًا.", "close": "إغلاق", - "untitled": "(بلا موضوع)" + "untitled": "(بلا موضوع)", + "toast_done": "انتهى التصدير: {name}", + "toast_stopped": "توقف التصدير.", + "toast_show": "عرض" }, "recover_deleted": { "tab": "استعادة العناصر المحذوفة", diff --git a/locales/ca/common.json b/locales/ca/common.json index 5a834fd3c..fa6c36b15 100644 --- a/locales/ca/common.json +++ b/locales/ca/common.json @@ -5441,7 +5441,10 @@ "error_busy": "Aquests fitxers ja s'estan important en una altra pestanya.", "retry_hint": "Torneu a importar els mateixos fitxers a la mateixa carpeta per tornar a provar els que han fallat.", "skip_unreadable": "Il·legibles al fitxer d'Outlook: {count}", - "keep_folders_top_hint": "Al nivell superior, Safata d'entrada, Elements enviats, Elements suprimits i similars van a les vostres." + "keep_folders_top_hint": "Al nivell superior, Safata d'entrada, Elements enviats, Elements suprimits i similars van a les vostres.", + "toast_done": "Importació acabada. Importats: {imported}, fallats: {failed}.", + "toast_stopped": "La importació s'ha aturat.", + "toast_show": "Mostra" }, "mail_export": { "menu_export": "Exporta la carpeta…", @@ -5481,7 +5484,10 @@ "download_again": "Torna a baixar", "too_large": "L'exportació és més gran del que aquest navegador pot guardar a la memòria. Feu servir Chrome o Edge, o exporteu carpeta per carpeta.", "close": "Tanca", - "untitled": "(sense assumpte)" + "untitled": "(sense assumpte)", + "toast_done": "Exportació acabada: {name}", + "toast_stopped": "L'exportació s'ha aturat.", + "toast_show": "Mostra" }, "recover_deleted": { "tab": "Recupera elements suprimits", diff --git a/locales/cs/common.json b/locales/cs/common.json index c7296a926..23fca3431 100644 --- a/locales/cs/common.json +++ b/locales/cs/common.json @@ -5311,7 +5311,10 @@ "error_busy": "Tyto soubory se už importují v jiné kartě.", "retry_hint": "Importujte stejné soubory znovu do stejné složky, abyste zkusili neúspěšné ještě jednou.", "skip_unreadable": "V souboru Outlooku nečitelné: {count}", - "keep_folders_top_hint": "Na nejvyšší úrovni skončí Doručená pošta, Odeslaná pošta, Odstraněná pošta a podobné ve vašich vlastních." + "keep_folders_top_hint": "Na nejvyšší úrovni skončí Doručená pošta, Odeslaná pošta, Odstraněná pošta a podobné ve vašich vlastních.", + "toast_done": "Import dokončen. Importováno: {imported}, selhalo: {failed}.", + "toast_stopped": "Import se zastavil.", + "toast_show": "Zobrazit" }, "mail_export": { "menu_export": "Exportovat složku…", @@ -5351,7 +5354,10 @@ "download_again": "Stáhnout znovu", "too_large": "Export je větší, než tento prohlížeč udrží v paměti. Použijte Chrome nebo Edge, nebo exportujte složku po složce.", "close": "Zavřít", - "untitled": "(bez předmětu)" + "untitled": "(bez předmětu)", + "toast_done": "Export dokončen: {name}", + "toast_stopped": "Export se zastavil.", + "toast_show": "Zobrazit" }, "recover_deleted": { "tab": "Obnovit smazané položky", diff --git a/locales/da/common.json b/locales/da/common.json index 7aaa9a13e..490a5f8ec 100644 --- a/locales/da/common.json +++ b/locales/da/common.json @@ -5441,7 +5441,10 @@ "error_busy": "Disse filer importeres allerede i en anden fane.", "retry_hint": "Importér de samme filer til samme mappe igen for at prøve dem, der mislykkedes, en gang til.", "skip_unreadable": "Ulæselige i Outlook-filen: {count}", - "keep_folders_top_hint": "På øverste niveau havner Indbakke, Sendt post, Slettet post og lignende i dine egne." + "keep_folders_top_hint": "På øverste niveau havner Indbakke, Sendt post, Slettet post og lignende i dine egne.", + "toast_done": "Import færdig. Importeret: {imported}, mislykkedes: {failed}.", + "toast_stopped": "Importen stoppede.", + "toast_show": "Vis" }, "mail_export": { "menu_export": "Eksportér mappe…", @@ -5481,7 +5484,10 @@ "download_again": "Download igen", "too_large": "Eksporten er større, end denne browser kan holde i hukommelsen. Brug Chrome eller Edge, eller eksportér mappe for mappe.", "close": "Luk", - "untitled": "(intet emne)" + "untitled": "(intet emne)", + "toast_done": "Eksport færdig: {name}", + "toast_stopped": "Eksporten stoppede.", + "toast_show": "Vis" }, "recover_deleted": { "tab": "Gendan slettede elementer", diff --git a/locales/de/common.json b/locales/de/common.json index 848f58402..232674cdb 100644 --- a/locales/de/common.json +++ b/locales/de/common.json @@ -5311,7 +5311,10 @@ "error_busy": "Diese Dateien werden bereits in einem anderen Tab importiert.", "retry_hint": "Importieren Sie dieselben Dateien erneut in denselben Ordner, um die fehlgeschlagenen noch einmal zu versuchen.", "skip_unreadable": "In der Outlook-Datei nicht lesbar: {count}", - "keep_folders_top_hint": "Auf oberster Ebene landen Posteingang, Gesendete Elemente, Gelöschte Elemente und Ähnliche in Ihren eigenen Ordnern." + "keep_folders_top_hint": "Auf oberster Ebene landen Posteingang, Gesendete Elemente, Gelöschte Elemente und Ähnliche in Ihren eigenen Ordnern.", + "toast_done": "Import abgeschlossen. Importiert: {imported}, fehlgeschlagen: {failed}.", + "toast_stopped": "Der Import wurde angehalten.", + "toast_show": "Anzeigen" }, "mail_export": { "menu_export": "Ordner exportieren…", @@ -5351,7 +5354,10 @@ "download_again": "Erneut herunterladen", "too_large": "Der Export ist größer, als dieser Browser im Speicher halten kann. Nutzen Sie Chrome oder Edge, oder exportieren Sie Ordner für Ordner.", "close": "Schließen", - "untitled": "(kein Betreff)" + "untitled": "(kein Betreff)", + "toast_done": "Export abgeschlossen: {name}", + "toast_stopped": "Der Export wurde angehalten.", + "toast_show": "Anzeigen" }, "recover_deleted": { "tab": "Gelöschte E-Mails", diff --git a/locales/en/common.json b/locales/en/common.json index 547f3587e..662729721 100644 --- a/locales/en/common.json +++ b/locales/en/common.json @@ -5441,7 +5441,10 @@ "error_busy": "These files are being imported in another tab already.", "retry_hint": "Import the same files into the same folder again to try the ones that failed once more.", "skip_unreadable": "Unreadable in the Outlook file: {count}", - "keep_folders_top_hint": "At the top level, Inbox, Sent Items, Deleted Items and the like go into your own." + "keep_folders_top_hint": "At the top level, Inbox, Sent Items, Deleted Items and the like go into your own.", + "toast_done": "Import finished. Imported: {imported}, failed: {failed}.", + "toast_stopped": "The import stopped.", + "toast_show": "Show" }, "mail_export": { "menu_export": "Export folder…", @@ -5481,7 +5484,10 @@ "download_again": "Download again", "too_large": "The export is larger than this browser can keep in memory. Use Chrome or Edge, or export folder by folder.", "close": "Close", - "untitled": "(no subject)" + "untitled": "(no subject)", + "toast_done": "Export finished: {name}", + "toast_stopped": "The export stopped.", + "toast_show": "Show" }, "recover_deleted": { "tab": "Recover deleted items", diff --git a/locales/es/common.json b/locales/es/common.json index dca463886..d8b292157 100644 --- a/locales/es/common.json +++ b/locales/es/common.json @@ -5311,7 +5311,10 @@ "error_busy": "Estos archivos ya se están importando en otra pestaña.", "retry_hint": "Importe los mismos archivos en la misma carpeta otra vez para reintentar los que fallaron.", "skip_unreadable": "Ilegibles en el archivo de Outlook: {count}", - "keep_folders_top_hint": "En el nivel superior, Bandeja de entrada, Elementos enviados, Elementos eliminados y similares van a las suyas." + "keep_folders_top_hint": "En el nivel superior, Bandeja de entrada, Elementos enviados, Elementos eliminados y similares van a las suyas.", + "toast_done": "Importación terminada. Importados: {imported}, fallidos: {failed}.", + "toast_stopped": "La importación se detuvo.", + "toast_show": "Mostrar" }, "mail_export": { "menu_export": "Exportar carpeta…", @@ -5351,7 +5354,10 @@ "download_again": "Descargar de nuevo", "too_large": "La exportación es mayor de lo que este navegador puede guardar en memoria. Use Chrome o Edge, o exporte carpeta por carpeta.", "close": "Cerrar", - "untitled": "(sin asunto)" + "untitled": "(sin asunto)", + "toast_done": "Exportación terminada: {name}", + "toast_stopped": "La exportación se detuvo.", + "toast_show": "Mostrar" }, "recover_deleted": { "tab": "Recuperar elementos eliminados", diff --git a/locales/et/common.json b/locales/et/common.json index 881a92474..4895fbb39 100644 --- a/locales/et/common.json +++ b/locales/et/common.json @@ -5441,7 +5441,10 @@ "error_busy": "Neid faile imporditakse juba teisel vahelehel.", "retry_hint": "Importige samad failid uuesti samasse kausta, et ebaõnnestunud kirju veel kord proovida.", "skip_unreadable": "Outlooki failis loetamatud: {count}", - "keep_folders_top_hint": "Ülemisel tasemel lähevad Sisendkaust, Saadetud, Kustutatud ja muud sellised teie omadesse." + "keep_folders_top_hint": "Ülemisel tasemel lähevad Sisendkaust, Saadetud, Kustutatud ja muud sellised teie omadesse.", + "toast_done": "Import lõpetatud. Imporditud: {imported}, ebaõnnestunud: {failed}.", + "toast_stopped": "Import peatus.", + "toast_show": "Näita" }, "mail_export": { "menu_export": "Ekspordi kaust…", @@ -5481,7 +5484,10 @@ "download_again": "Laadi uuesti alla", "too_large": "Eksport on suurem, kui see brauser mälus hoida suudab. Kasutage Chrome'i või Edge'i või eksportige kaust kaupa.", "close": "Sulge", - "untitled": "(teemata)" + "untitled": "(teemata)", + "toast_done": "Eksport lõpetatud: {name}", + "toast_stopped": "Eksport peatus.", + "toast_show": "Näita" }, "recover_deleted": { "tab": "Taasta kustutatud üksused", diff --git a/locales/fa/common.json b/locales/fa/common.json index 6af851e47..71df22a92 100644 --- a/locales/fa/common.json +++ b/locales/fa/common.json @@ -5441,7 +5441,10 @@ "error_busy": "این فایل‌ها هم‌اکنون در زبانه دیگری درون‌ریزی می‌شوند.", "retry_hint": "برای امتحان دوباره پیام‌های ناموفق، همان فایل‌ها را دوباره در همان پوشه درون‌ریزی کنید.", "skip_unreadable": "خوانا نیست در فایل اوت‌لوک: {count}", - "keep_folders_top_hint": "در بالاترین سطح، صندوق ورودی، موارد ارسال‌شده، موارد حذف‌شده و مانند آن‌ها به پوشه‌های خودتان می‌روند." + "keep_folders_top_hint": "در بالاترین سطح، صندوق ورودی، موارد ارسال‌شده، موارد حذف‌شده و مانند آن‌ها به پوشه‌های خودتان می‌روند.", + "toast_done": "درون‌ریزی تمام شد. درون‌ریزی‌شده: {imported}، ناموفق: {failed}.", + "toast_stopped": "درون‌ریزی متوقف شد.", + "toast_show": "نمایش" }, "mail_export": { "menu_export": "برون‌بری پوشه…", @@ -5481,7 +5484,10 @@ "download_again": "دانلود دوباره", "too_large": "برون‌بری بزرگ‌تر از آن است که این مرورگر در حافظه نگه دارد. از Chrome یا Edge استفاده کنید یا پوشه به پوشه برون‌بری کنید.", "close": "بستن", - "untitled": "(بدون موضوع)" + "untitled": "(بدون موضوع)", + "toast_done": "برون‌بری تمام شد: {name}", + "toast_stopped": "برون‌بری متوقف شد.", + "toast_show": "نمایش" }, "recover_deleted": { "tab": "بازیابی موارد حذف‌شده", diff --git a/locales/fr/common.json b/locales/fr/common.json index 4da3ec0a0..cb8f24412 100644 --- a/locales/fr/common.json +++ b/locales/fr/common.json @@ -5311,7 +5311,10 @@ "error_busy": "Ces fichiers sont déjà en cours d'import dans un autre onglet.", "retry_hint": "Importez à nouveau les mêmes fichiers dans le même dossier pour réessayer ceux qui ont échoué.", "skip_unreadable": "Illisibles dans le fichier Outlook : {count}", - "keep_folders_top_hint": "Au niveau supérieur, Boîte de réception, Éléments envoyés, Éléments supprimés et les autres vont dans les vôtres." + "keep_folders_top_hint": "Au niveau supérieur, Boîte de réception, Éléments envoyés, Éléments supprimés et les autres vont dans les vôtres.", + "toast_done": "Import terminé. Importés : {imported}, échecs : {failed}.", + "toast_stopped": "L'import s'est arrêté.", + "toast_show": "Afficher" }, "mail_export": { "menu_export": "Exporter le dossier…", @@ -5351,7 +5354,10 @@ "download_again": "Télécharger à nouveau", "too_large": "L'export est plus grand que ce que ce navigateur peut garder en mémoire. Utilisez Chrome ou Edge, ou exportez dossier par dossier.", "close": "Fermer", - "untitled": "(sans objet)" + "untitled": "(sans objet)", + "toast_done": "Export terminé : {name}", + "toast_stopped": "L'export s'est arrêté.", + "toast_show": "Afficher" }, "recover_deleted": { "tab": "Récupérer des éléments supprimés", diff --git a/locales/he/common.json b/locales/he/common.json index 52d2e767e..28af6451b 100644 --- a/locales/he/common.json +++ b/locales/he/common.json @@ -5442,7 +5442,10 @@ "error_busy": "הקבצים האלה כבר מיובאים בכרטיסייה אחרת.", "retry_hint": "ייבאו שוב את אותם קבצים לאותה תיקייה כדי לנסות שוב את אלה שנכשלו.", "skip_unreadable": "לא קריאות בקובץ ה-Outlook: {count}", - "keep_folders_top_hint": "ברמה העליונה, דואר נכנס, פריטים שנשלחו, פריטים שנמחקו ודומיהם נכנסים לתיקיות שלכם." + "keep_folders_top_hint": "ברמה העליונה, דואר נכנס, פריטים שנשלחו, פריטים שנמחקו ודומיהם נכנסים לתיקיות שלכם.", + "toast_done": "הייבוא הסתיים. יובאו: {imported}, נכשלו: {failed}.", + "toast_stopped": "הייבוא נעצר.", + "toast_show": "הצגה" }, "mail_export": { "menu_export": "ייצוא תיקייה…", @@ -5482,7 +5485,10 @@ "download_again": "הורדה מחדש", "too_large": "הייצוא גדול ממה שדפדפן זה יכול להחזיק בזיכרון. השתמשו ב-Chrome או ב-Edge, או ייצאו תיקייה אחר תיקייה.", "close": "סגירה", - "untitled": "(ללא נושא)" + "untitled": "(ללא נושא)", + "toast_done": "הייצוא הסתיים: {name}", + "toast_stopped": "הייצוא נעצר.", + "toast_show": "הצגה" }, "recover_deleted": { "tab": "שחזור פריטים שנמחקו", diff --git a/locales/hu/common.json b/locales/hu/common.json index da80ac27e..a3e93dc52 100644 --- a/locales/hu/common.json +++ b/locales/hu/common.json @@ -5441,7 +5441,10 @@ "error_busy": "Ezeket a fájlokat már importálja egy másik lap.", "retry_hint": "Importálja újra ugyanazokat a fájlokat ugyanabba a mappába, hogy a sikertelenekkel újra próbálkozzon.", "skip_unreadable": "Olvashatatlan az Outlook-fájlban: {count}", - "keep_folders_top_hint": "A legfelső szinten a Beérkezett üzenetek, az Elküldött elemek, a Törölt elemek és a hasonlók a saját mappáiba kerülnek." + "keep_folders_top_hint": "A legfelső szinten a Beérkezett üzenetek, az Elküldött elemek, a Törölt elemek és a hasonlók a saját mappáiba kerülnek.", + "toast_done": "Az importálás befejeződött. Importált: {imported}, sikertelen: {failed}.", + "toast_stopped": "Az importálás leállt.", + "toast_show": "Megjelenítés" }, "mail_export": { "menu_export": "Mappa exportálása…", @@ -5481,7 +5484,10 @@ "download_again": "Letöltés újra", "too_large": "Az export nagyobb, mint amit ez a böngésző a memóriában tarthat. Használja a Chrome-ot vagy az Edge-et, vagy exportáljon mappánként.", "close": "Bezárás", - "untitled": "(nincs tárgy)" + "untitled": "(nincs tárgy)", + "toast_done": "Az exportálás befejeződött: {name}", + "toast_stopped": "Az exportálás leállt.", + "toast_show": "Megjelenítés" }, "recover_deleted": { "tab": "Törölt elemek visszaállítása", diff --git a/locales/it/common.json b/locales/it/common.json index aec4abfe5..a7a60b51d 100644 --- a/locales/it/common.json +++ b/locales/it/common.json @@ -5311,7 +5311,10 @@ "error_busy": "Questi file sono già in importazione in un'altra scheda.", "retry_hint": "Importa di nuovo gli stessi file nella stessa cartella per riprovare quelli non riusciti.", "skip_unreadable": "Illeggibili nel file di Outlook: {count}", - "keep_folders_top_hint": "Al livello principale, Posta in arrivo, Posta inviata, Elementi eliminati e simili finiscono nelle tue." + "keep_folders_top_hint": "Al livello principale, Posta in arrivo, Posta inviata, Elementi eliminati e simili finiscono nelle tue.", + "toast_done": "Importazione completata. Importati: {imported}, non riusciti: {failed}.", + "toast_stopped": "L'importazione si è fermata.", + "toast_show": "Mostra" }, "mail_export": { "menu_export": "Esporta cartella…", @@ -5351,7 +5354,10 @@ "download_again": "Scarica di nuovo", "too_large": "L'esportazione è più grande di quanto questo browser possa tenere in memoria. Usa Chrome o Edge, oppure esporta una cartella alla volta.", "close": "Chiudi", - "untitled": "(nessun oggetto)" + "untitled": "(nessun oggetto)", + "toast_done": "Esportazione completata: {name}", + "toast_stopped": "L'esportazione si è fermata.", + "toast_show": "Mostra" }, "recover_deleted": { "tab": "Recupera elementi eliminati", diff --git a/locales/ja/common.json b/locales/ja/common.json index f5b9e1ce9..a6d9fa5e0 100644 --- a/locales/ja/common.json +++ b/locales/ja/common.json @@ -5311,7 +5311,10 @@ "error_busy": "これらのファイルは別のタブですでにインポート中です。", "retry_hint": "失敗したものをもう一度試すには、同じファイルを同じフォルダーにもう一度インポートしてください。", "skip_unreadable": "Outlook ファイル内で読めないもの: {count}", - "keep_folders_top_hint": "最上位では、受信トレイ、送信済みアイテム、削除済みアイテムなどはご自身のフォルダーに入ります。" + "keep_folders_top_hint": "最上位では、受信トレイ、送信済みアイテム、削除済みアイテムなどはご自身のフォルダーに入ります。", + "toast_done": "インポートが完了しました。インポート: {imported}、失敗: {failed}。", + "toast_stopped": "インポートが止まりました。", + "toast_show": "表示" }, "mail_export": { "menu_export": "フォルダーをエクスポート…", @@ -5351,7 +5354,10 @@ "download_again": "もう一度ダウンロード", "too_large": "エクスポートがこのブラウザーでメモリーに保持できる量を超えています。Chrome か Edge を使うか、フォルダーごとにエクスポートしてください。", "close": "閉じる", - "untitled": "(件名なし)" + "untitled": "(件名なし)", + "toast_done": "エクスポートが完了しました: {name}", + "toast_stopped": "エクスポートが止まりました。", + "toast_show": "表示" }, "recover_deleted": { "tab": "削除済みアイテムの復元", diff --git a/locales/ko/common.json b/locales/ko/common.json index b30157e11..475bc796e 100644 --- a/locales/ko/common.json +++ b/locales/ko/common.json @@ -5311,7 +5311,10 @@ "error_busy": "이 파일은 이미 다른 탭에서 가져오는 중입니다.", "retry_hint": "실패한 메시지를 다시 시도하려면 같은 파일을 같은 폴더로 다시 가져오세요.", "skip_unreadable": "Outlook 파일에서 읽을 수 없음: {count}", - "keep_folders_top_hint": "최상위에서는 받은 편지함, 보낸 편지함, 지운 편지함 등이 사용자의 폴더로 들어갑니다." + "keep_folders_top_hint": "최상위에서는 받은 편지함, 보낸 편지함, 지운 편지함 등이 사용자의 폴더로 들어갑니다.", + "toast_done": "가져오기 완료. 가져옴: {imported}, 실패: {failed}.", + "toast_stopped": "가져오기가 멈췄습니다.", + "toast_show": "보기" }, "mail_export": { "menu_export": "폴더 내보내기…", @@ -5351,7 +5354,10 @@ "download_again": "다시 다운로드", "too_large": "내보내기가 이 브라우저가 메모리에 담을 수 있는 크기보다 큽니다. Chrome이나 Edge를 쓰거나 폴더별로 내보내세요.", "close": "닫기", - "untitled": "(제목 없음)" + "untitled": "(제목 없음)", + "toast_done": "내보내기 완료: {name}", + "toast_stopped": "내보내기가 멈췄습니다.", + "toast_show": "보기" }, "recover_deleted": { "tab": "삭제된 항목 복구", diff --git a/locales/lv/common.json b/locales/lv/common.json index 6c7228cf4..6bba8b3d0 100644 --- a/locales/lv/common.json +++ b/locales/lv/common.json @@ -5311,7 +5311,10 @@ "error_busy": "Šie faili jau tiek importēti citā cilnē.", "retry_hint": "Vēlreiz importējiet tos pašus failus tajā pašā mapē, lai vēlreiz mēģinātu neizdevušos.", "skip_unreadable": "Outlook failā nenolasāmi: {count}", - "keep_folders_top_hint": "Augšējā līmenī Iesūtne, Nosūtītie, Dzēstie un līdzīgi nonāk jūsu pašu mapēs." + "keep_folders_top_hint": "Augšējā līmenī Iesūtne, Nosūtītie, Dzēstie un līdzīgi nonāk jūsu pašu mapēs.", + "toast_done": "Importēšana pabeigta. Importēti: {imported}, neizdevās: {failed}.", + "toast_stopped": "Importēšana apstājās.", + "toast_show": "Rādīt" }, "mail_export": { "menu_export": "Eksportēt mapi…", @@ -5351,7 +5354,10 @@ "download_again": "Lejupielādēt vēlreiz", "too_large": "Eksports ir lielāks, nekā šī pārlūkprogramma var noturēt atmiņā. Izmantojiet Chrome vai Edge vai eksportējiet pa mapei.", "close": "Aizvērt", - "untitled": "(bez temata)" + "untitled": "(bez temata)", + "toast_done": "Eksportēšana pabeigta: {name}", + "toast_stopped": "Eksportēšana apstājās.", + "toast_show": "Rādīt" }, "recover_deleted": { "tab": "Atjaunot dzēstos vienumus", diff --git a/locales/mn/common.json b/locales/mn/common.json index 4c3add596..3d25d08da 100644 --- a/locales/mn/common.json +++ b/locales/mn/common.json @@ -5441,7 +5441,10 @@ "error_busy": "Эдгээр файлыг өөр табд аль хэдийн импортлож байна.", "retry_hint": "Амжилтгүй болсон захидлуудыг дахин оролдохын тулд ижил файлуудыг ижил хавтас руу дахин импортлоно уу.", "skip_unreadable": "Outlook файлд уншигдахгүй: {count}", - "keep_folders_top_hint": "Дээд түвшинд Ирсэн, Илгээсэн, Устгасан болон түүнтэй адил хавтаснууд таны өөрийнх рүү орно." + "keep_folders_top_hint": "Дээд түвшинд Ирсэн, Илгээсэн, Устгасан болон түүнтэй адил хавтаснууд таны өөрийнх рүү орно.", + "toast_done": "Импорт дууслаа. Импортолсон: {imported}, амжилтгүй: {failed}.", + "toast_stopped": "Импорт зогслоо.", + "toast_show": "Харуулах" }, "mail_export": { "menu_export": "Хавтас экспортлох…", @@ -5481,7 +5484,10 @@ "download_again": "Дахин татах", "too_large": "Экспорт энэ хөтчийн санах ойд багтахаас том байна. Chrome эсвэл Edge ашиглах, эсвэл хавтас тус бүрээр экспортлоно уу.", "close": "Хаах", - "untitled": "(гарчиггүй)" + "untitled": "(гарчиггүй)", + "toast_done": "Экспорт дууслаа: {name}", + "toast_stopped": "Экспорт зогслоо.", + "toast_show": "Харуулах" }, "recover_deleted": { "tab": "Устгасан зүйлсийг сэргээх", diff --git a/locales/nb/common.json b/locales/nb/common.json index 835c30835..5c464be1e 100644 --- a/locales/nb/common.json +++ b/locales/nb/common.json @@ -5441,7 +5441,10 @@ "error_busy": "Disse filene importeres allerede i en annen fane.", "retry_hint": "Importer de samme filene til samme mappe igjen for å prøve de som mislyktes, på nytt.", "skip_unreadable": "Uleselige i Outlook-filen: {count}", - "keep_folders_top_hint": "På øverste nivå havner Innboks, Sendte elementer, Slettede elementer og lignende i dine egne." + "keep_folders_top_hint": "På øverste nivå havner Innboks, Sendte elementer, Slettede elementer og lignende i dine egne.", + "toast_done": "Import fullført. Importert: {imported}, mislyktes: {failed}.", + "toast_stopped": "Importen stoppet.", + "toast_show": "Vis" }, "mail_export": { "menu_export": "Eksporter mappe…", @@ -5481,7 +5484,10 @@ "download_again": "Last ned på nytt", "too_large": "Eksporten er større enn denne nettleseren kan holde i minnet. Bruk Chrome eller Edge, eller eksporter mappe for mappe.", "close": "Lukk", - "untitled": "(uten emne)" + "untitled": "(uten emne)", + "toast_done": "Eksport fullført: {name}", + "toast_stopped": "Eksporten stoppet.", + "toast_show": "Vis" }, "recover_deleted": { "tab": "Gjenopprett slettede elementer", diff --git a/locales/nl/common.json b/locales/nl/common.json index 064c3eb48..226e049cd 100644 --- a/locales/nl/common.json +++ b/locales/nl/common.json @@ -5311,7 +5311,10 @@ "error_busy": "Deze bestanden worden al in een ander tabblad geïmporteerd.", "retry_hint": "Importeer dezelfde bestanden opnieuw in dezelfde map om de mislukte nog eens te proberen.", "skip_unreadable": "Onleesbaar in het Outlook-bestand: {count}", - "keep_folders_top_hint": "Op het hoogste niveau gaan Postvak IN, Verzonden items, Verwijderde items en dergelijke naar die van u." + "keep_folders_top_hint": "Op het hoogste niveau gaan Postvak IN, Verzonden items, Verwijderde items en dergelijke naar die van u.", + "toast_done": "Import voltooid. Geïmporteerd: {imported}, mislukt: {failed}.", + "toast_stopped": "De import is gestopt.", + "toast_show": "Tonen" }, "mail_export": { "menu_export": "Map exporteren…", @@ -5351,7 +5354,10 @@ "download_again": "Opnieuw downloaden", "too_large": "De export is groter dan deze browser in het geheugen kan houden. Gebruik Chrome of Edge, of exporteer map voor map.", "close": "Sluiten", - "untitled": "(geen onderwerp)" + "untitled": "(geen onderwerp)", + "toast_done": "Export voltooid: {name}", + "toast_stopped": "De export is gestopt.", + "toast_show": "Tonen" }, "recover_deleted": { "tab": "Verwijderde items herstellen", diff --git a/locales/pl/common.json b/locales/pl/common.json index 69309dec6..062e268a1 100644 --- a/locales/pl/common.json +++ b/locales/pl/common.json @@ -5311,7 +5311,10 @@ "error_busy": "Te pliki są już importowane w innej karcie.", "retry_hint": "Zaimportuj te same pliki ponownie do tego samego folderu, aby jeszcze raz spróbować tych, które się nie udały.", "skip_unreadable": "Nieczytelne w pliku programu Outlook: {count}", - "keep_folders_top_hint": "Na najwyższym poziomie Skrzynka odbiorcza, Elementy wysłane, Elementy usunięte i podobne trafiają do Twoich własnych." + "keep_folders_top_hint": "Na najwyższym poziomie Skrzynka odbiorcza, Elementy wysłane, Elementy usunięte i podobne trafiają do Twoich własnych.", + "toast_done": "Import zakończony. Zaimportowano: {imported}, nie udało się: {failed}.", + "toast_stopped": "Import się zatrzymał.", + "toast_show": "Pokaż" }, "mail_export": { "menu_export": "Eksportuj folder…", @@ -5351,7 +5354,10 @@ "download_again": "Pobierz ponownie", "too_large": "Eksport jest większy, niż ta przeglądarka może trzymać w pamięci. Użyj Chrome lub Edge albo eksportuj folder po folderze.", "close": "Zamknij", - "untitled": "(bez tematu)" + "untitled": "(bez tematu)", + "toast_done": "Eksport zakończony: {name}", + "toast_stopped": "Eksport się zatrzymał.", + "toast_show": "Pokaż" }, "recover_deleted": { "tab": "Odzyskaj usunięte elementy", diff --git a/locales/pt/common.json b/locales/pt/common.json index c526a3494..0cd8b0aa0 100644 --- a/locales/pt/common.json +++ b/locales/pt/common.json @@ -5311,7 +5311,10 @@ "error_busy": "Estes arquivos já estão sendo importados em outra aba.", "retry_hint": "Importe os mesmos arquivos na mesma pasta outra vez para tentar de novo os que falharam.", "skip_unreadable": "Ilegíveis no arquivo do Outlook: {count}", - "keep_folders_top_hint": "No nível superior, Caixa de entrada, Itens enviados, Itens excluídos e similares vão para as suas." + "keep_folders_top_hint": "No nível superior, Caixa de entrada, Itens enviados, Itens excluídos e similares vão para as suas.", + "toast_done": "Importação concluída. Importados: {imported}, com falha: {failed}.", + "toast_stopped": "A importação parou.", + "toast_show": "Mostrar" }, "mail_export": { "menu_export": "Exportar pasta…", @@ -5351,7 +5354,10 @@ "download_again": "Baixar de novo", "too_large": "A exportação é maior do que este navegador consegue guardar na memória. Use o Chrome ou o Edge, ou exporte pasta por pasta.", "close": "Fechar", - "untitled": "(sem assunto)" + "untitled": "(sem assunto)", + "toast_done": "Exportação concluída: {name}", + "toast_stopped": "A exportação parou.", + "toast_show": "Mostrar" }, "recover_deleted": { "tab": "Recuperar itens excluídos", diff --git a/locales/ro/common.json b/locales/ro/common.json index 3ce4c4f98..8233b6b61 100644 --- a/locales/ro/common.json +++ b/locales/ro/common.json @@ -5441,7 +5441,10 @@ "error_busy": "Aceste fișiere se importă deja în altă filă.", "retry_hint": "Importați din nou aceleași fișiere în același dosar pentru a reîncerca mesajele care au eșuat.", "skip_unreadable": "Ilizibile în fișierul Outlook: {count}", - "keep_folders_top_hint": "La nivelul de sus, Inbox, Elemente trimise, Elemente șterse și altele asemenea ajung în ale dumneavoastră." + "keep_folders_top_hint": "La nivelul de sus, Inbox, Elemente trimise, Elemente șterse și altele asemenea ajung în ale dumneavoastră.", + "toast_done": "Import încheiat. Importate: {imported}, eșuate: {failed}.", + "toast_stopped": "Importul s-a oprit.", + "toast_show": "Afișează" }, "mail_export": { "menu_export": "Exportă dosarul…", @@ -5481,7 +5484,10 @@ "download_again": "Descarcă din nou", "too_large": "Exportul este mai mare decât poate ține acest browser în memorie. Folosiți Chrome sau Edge sau exportați dosar cu dosar.", "close": "Închide", - "untitled": "(fără subiect)" + "untitled": "(fără subiect)", + "toast_done": "Export încheiat: {name}", + "toast_stopped": "Exportul s-a oprit.", + "toast_show": "Afișează" }, "recover_deleted": { "tab": "Recuperați elementele șterse", diff --git a/locales/ru/common.json b/locales/ru/common.json index dd7684803..7e955e5ef 100644 --- a/locales/ru/common.json +++ b/locales/ru/common.json @@ -5311,7 +5311,10 @@ "error_busy": "Эти файлы уже импортируются в другой вкладке.", "retry_hint": "Снова импортируйте те же файлы в ту же папку, чтобы ещё раз попробовать неудавшиеся.", "skip_unreadable": "Не читаются в файле Outlook: {count}", - "keep_folders_top_hint": "На верхнем уровне Входящие, Отправленные, Удалённые и подобные попадают в ваши собственные." + "keep_folders_top_hint": "На верхнем уровне Входящие, Отправленные, Удалённые и подобные попадают в ваши собственные.", + "toast_done": "Импорт завершён. Импортировано: {imported}, не удалось: {failed}.", + "toast_stopped": "Импорт остановлен.", + "toast_show": "Показать" }, "mail_export": { "menu_export": "Экспортировать папку…", @@ -5351,7 +5354,10 @@ "download_again": "Скачать снова", "too_large": "Экспорт больше, чем этот браузер может держать в памяти. Используйте Chrome или Edge либо экспортируйте по одной папке.", "close": "Закрыть", - "untitled": "(без темы)" + "untitled": "(без темы)", + "toast_done": "Экспорт завершён: {name}", + "toast_stopped": "Экспорт остановлен.", + "toast_show": "Показать" }, "recover_deleted": { "tab": "Восстановить удалённое", diff --git a/locales/sk/common.json b/locales/sk/common.json index f44c36f36..39b4dcb65 100644 --- a/locales/sk/common.json +++ b/locales/sk/common.json @@ -5441,7 +5441,10 @@ "error_busy": "Tieto súbory sa už importujú na inej karte.", "retry_hint": "Importujte rovnaké súbory znova do rovnakého priečinka, aby ste skúsili neúspešné ešte raz.", "skip_unreadable": "V súbore Outlooku nečitateľné: {count}", - "keep_folders_top_hint": "Na najvyššej úrovni skončia Doručená pošta, Odoslaná pošta, Odstránená pošta a podobné vo vašich vlastných." + "keep_folders_top_hint": "Na najvyššej úrovni skončia Doručená pošta, Odoslaná pošta, Odstránená pošta a podobné vo vašich vlastných.", + "toast_done": "Import dokončený. Importované: {imported}, zlyhalo: {failed}.", + "toast_stopped": "Import sa zastavil.", + "toast_show": "Zobraziť" }, "mail_export": { "menu_export": "Exportovať priečinok…", @@ -5481,7 +5484,10 @@ "download_again": "Stiahnuť znova", "too_large": "Export je väčší, než tento prehliadač udrží v pamäti. Použite Chrome alebo Edge, alebo exportujte priečinok po priečinku.", "close": "Zavrieť", - "untitled": "(bez predmetu)" + "untitled": "(bez predmetu)", + "toast_done": "Export dokončený: {name}", + "toast_stopped": "Export sa zastavil.", + "toast_show": "Zobraziť" }, "recover_deleted": { "tab": "Obnoviť odstránené položky", diff --git a/locales/th/common.json b/locales/th/common.json index 39a645601..ec27c5a32 100644 --- a/locales/th/common.json +++ b/locales/th/common.json @@ -458,7 +458,10 @@ "error_busy": "ไฟล์เหล่านี้กำลังถูกนำเข้าในอีกแท็บหนึ่งอยู่แล้ว", "retry_hint": "นำเข้าไฟล์เดิมไปยังโฟลเดอร์เดิมอีกครั้งเพื่อลองข้อความที่ล้มเหลวอีกรอบ", "skip_unreadable": "อ่านไม่ได้ในไฟล์ Outlook: {count}", - "keep_folders_top_hint": "ในระดับบนสุด กล่องจดหมายเข้า รายการที่ส่ง รายการที่ลบ และที่คล้ายกันจะเข้าไปในโฟลเดอร์ของคุณเอง" + "keep_folders_top_hint": "ในระดับบนสุด กล่องจดหมายเข้า รายการที่ส่ง รายการที่ลบ และที่คล้ายกันจะเข้าไปในโฟลเดอร์ของคุณเอง", + "toast_done": "นำเข้าเสร็จแล้ว นำเข้าแล้ว: {imported} ล้มเหลว: {failed}", + "toast_stopped": "การนำเข้าหยุดลง", + "toast_show": "แสดง" }, "mail_export": { "menu_export": "ส่งออกโฟลเดอร์…", @@ -498,7 +501,10 @@ "download_again": "ดาวน์โหลดอีกครั้ง", "too_large": "การส่งออกใหญ่เกินกว่าที่เบราว์เซอร์นี้เก็บไว้ในหน่วยความจำได้ ให้ใช้ Chrome หรือ Edge หรือส่งออกทีละโฟลเดอร์", "close": "ปิด", - "untitled": "(ไม่มีหัวเรื่อง)" + "untitled": "(ไม่มีหัวเรื่อง)", + "toast_done": "ส่งออกเสร็จแล้ว: {name}", + "toast_stopped": "การส่งออกหยุดลง", + "toast_show": "แสดง" }, "recover_deleted": { "tab": "กู้คืนรายการที่ลบ", diff --git a/locales/tr/common.json b/locales/tr/common.json index 8fea33739..8848419b8 100644 --- a/locales/tr/common.json +++ b/locales/tr/common.json @@ -5441,7 +5441,10 @@ "error_busy": "Bu dosyalar zaten başka bir sekmede içe aktarılıyor.", "retry_hint": "Başarısız olanları bir kez daha denemek için aynı dosyaları aynı klasöre yeniden içe aktarın.", "skip_unreadable": "Outlook dosyasında okunamayan: {count}", - "keep_folders_top_hint": "En üst düzeyde Gelen Kutusu, Gönderilmiş Öğeler, Silinmiş Öğeler ve benzerleri sizinkilere gider." + "keep_folders_top_hint": "En üst düzeyde Gelen Kutusu, Gönderilmiş Öğeler, Silinmiş Öğeler ve benzerleri sizinkilere gider.", + "toast_done": "İçe aktarım tamamlandı. İçe aktarılan: {imported}, başarısız: {failed}.", + "toast_stopped": "İçe aktarım durdu.", + "toast_show": "Göster" }, "mail_export": { "menu_export": "Klasörü dışa aktar…", @@ -5481,7 +5484,10 @@ "download_again": "Yeniden indir", "too_large": "Dışa aktarım, bu tarayıcının bellekte tutabileceğinden büyük. Chrome veya Edge kullanın ya da klasör klasör dışa aktarın.", "close": "Kapat", - "untitled": "(konu yok)" + "untitled": "(konu yok)", + "toast_done": "Dışa aktarım tamamlandı: {name}", + "toast_stopped": "Dışa aktarım durdu.", + "toast_show": "Göster" }, "recover_deleted": { "tab": "Silinen öğeleri kurtar", diff --git a/locales/uk/common.json b/locales/uk/common.json index 4a64a248d..780f91a5d 100644 --- a/locales/uk/common.json +++ b/locales/uk/common.json @@ -5311,7 +5311,10 @@ "error_busy": "Ці файли вже імпортуються в іншій вкладці.", "retry_hint": "Знову імпортуйте ті самі файли до тієї самої теки, щоб ще раз спробувати невдалі.", "skip_unreadable": "Не читаються у файлі Outlook: {count}", - "keep_folders_top_hint": "На верхньому рівні Вхідні, Надіслані, Видалені й подібні потрапляють до ваших власних." + "keep_folders_top_hint": "На верхньому рівні Вхідні, Надіслані, Видалені й подібні потрапляють до ваших власних.", + "toast_done": "Імпорт завершено. Імпортовано: {imported}, не вдалося: {failed}.", + "toast_stopped": "Імпорт зупинено.", + "toast_show": "Показати" }, "mail_export": { "menu_export": "Експортувати теку…", @@ -5351,7 +5354,10 @@ "download_again": "Завантажити знову", "too_large": "Експорт більший, ніж цей браузер може тримати в пам'яті. Використовуйте Chrome або Edge чи експортуйте по одній теці.", "close": "Закрити", - "untitled": "(без теми)" + "untitled": "(без теми)", + "toast_done": "Експорт завершено: {name}", + "toast_stopped": "Експорт зупинено.", + "toast_show": "Показати" }, "recover_deleted": { "tab": "Відновити видалене", diff --git a/locales/vi/common.json b/locales/vi/common.json index 6c71133cf..d5aa50ea2 100644 --- a/locales/vi/common.json +++ b/locales/vi/common.json @@ -5453,7 +5453,10 @@ "error_busy": "Các tệp này đang được nhập ở một thẻ khác.", "retry_hint": "Nhập lại cùng các tệp vào cùng thư mục để thử lại những thư không nhập được.", "skip_unreadable": "Không đọc được trong tệp Outlook: {count}", - "keep_folders_top_hint": "Ở cấp cao nhất, Hộp thư đến, Thư đã gửi, Thư đã xóa và các thư mục tương tự sẽ vào thư mục của bạn." + "keep_folders_top_hint": "Ở cấp cao nhất, Hộp thư đến, Thư đã gửi, Thư đã xóa và các thư mục tương tự sẽ vào thư mục của bạn.", + "toast_done": "Đã nhập xong. Đã nhập: {imported}, thất bại: {failed}.", + "toast_stopped": "Việc nhập đã dừng.", + "toast_show": "Hiện" }, "mail_export": { "menu_export": "Xuất thư mục…", @@ -5493,7 +5496,10 @@ "download_again": "Tải xuống lại", "too_large": "Bản xuất lớn hơn mức trình duyệt này giữ được trong bộ nhớ. Hãy dùng Chrome hoặc Edge, hoặc xuất từng thư mục.", "close": "Đóng", - "untitled": "(không có tiêu đề)" + "untitled": "(không có tiêu đề)", + "toast_done": "Đã xuất xong: {name}", + "toast_stopped": "Việc xuất đã dừng.", + "toast_show": "Hiện" }, "recover_deleted": { "tab": "Khôi phục các mục đã xóa", diff --git a/locales/zh-TW/common.json b/locales/zh-TW/common.json index d4daa93f8..b06a30f3a 100644 --- a/locales/zh-TW/common.json +++ b/locales/zh-TW/common.json @@ -5441,7 +5441,10 @@ "error_busy": "這些檔案已在另一個分頁中匯入。", "retry_hint": "把相同的檔案再次匯入同一個資料夾,即可重試失敗的郵件。", "skip_unreadable": "Outlook 檔案中無法讀取:{count}", - "keep_folders_top_hint": "在最上層,收件匣、寄件備份、刪除的郵件等會進入您自己的資料夾。" + "keep_folders_top_hint": "在最上層,收件匣、寄件備份、刪除的郵件等會進入您自己的資料夾。", + "toast_done": "匯入完成。已匯入:{imported},失敗:{failed}。", + "toast_stopped": "匯入已停止。", + "toast_show": "顯示" }, "mail_export": { "menu_export": "匯出資料夾…", @@ -5481,7 +5484,10 @@ "download_again": "重新下載", "too_large": "匯出內容超過此瀏覽器能放在記憶體中的大小。請使用 Chrome 或 Edge,或逐一匯出資料夾。", "close": "關閉", - "untitled": "(無主旨)" + "untitled": "(無主旨)", + "toast_done": "匯出完成:{name}", + "toast_stopped": "匯出已停止。", + "toast_show": "顯示" }, "recover_deleted": { "tab": "復原已刪除的項目", diff --git a/locales/zh/common.json b/locales/zh/common.json index abf66607f..aed16a955 100644 --- a/locales/zh/common.json +++ b/locales/zh/common.json @@ -5311,7 +5311,10 @@ "error_busy": "这些文件已在另一个标签页中导入。", "retry_hint": "把相同的文件再次导入同一个文件夹,即可重试失败的邮件。", "skip_unreadable": "Outlook 文件中无法读取:{count}", - "keep_folders_top_hint": "在顶层,收件箱、已发送邮件、已删除邮件等会进入您自己的文件夹。" + "keep_folders_top_hint": "在顶层,收件箱、已发送邮件、已删除邮件等会进入您自己的文件夹。", + "toast_done": "导入完成。已导入:{imported},失败:{failed}。", + "toast_stopped": "导入已停止。", + "toast_show": "显示" }, "mail_export": { "menu_export": "导出文件夹…", @@ -5351,7 +5354,10 @@ "download_again": "重新下载", "too_large": "导出内容超过了此浏览器能放在内存中的大小。请使用 Chrome 或 Edge,或逐个文件夹导出。", "close": "关闭", - "untitled": "(无主题)" + "untitled": "(无主题)", + "toast_done": "导出完成:{name}", + "toast_stopped": "导出已停止。", + "toast_show": "显示" }, "recover_deleted": { "tab": "恢复已删除项目",