feat: say when an import or export running in the background ends, and keep the focus in its dialog

This commit is contained in:
Linus Rath
2026-11-01 07:01:28 +01:00
parent 3da2f0c549
commit 75aa66e0d9
35 changed files with 318 additions and 68 deletions
@@ -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(<MailTransferHost />);
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(<MailTransferHost />);
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(<MailTransferHost />);
act(() => {
@@ -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<HTMLButtonElement>(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 ? (
<>
<Button variant="outline" onClick={hide}>{t("background")}</Button>
<Button ref={stageButton} variant="outline" onClick={hide}>{t("background")}</Button>
<Button variant="destructive" onClick={() => cancelJob()} aria-describedby={`${id}-status`}>{t("cancel_export")}</Button>
</>
) : (
@@ -102,7 +104,7 @@ export function MailExportDialog({ request }: { request: ExportRequest }) {
{progress.phase === "done" && progress.file?.download && (
<Button variant="outline" onClick={() => progress.file?.download?.()} data-testid="mail-export-download">{t("download_again")}</Button>
)}
<Button onClick={() => close()}>{t("close")}</Button>
<Button ref={stageButton} onClick={() => close()}>{t("close")}</Button>
</>
)}
>
@@ -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<HTMLButtonElement>(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 ? (
<>
<Button variant="outline" onClick={hide}>{t("background")}</Button>
<Button ref={stageButton} variant="outline" onClick={hide}>{t("background")}</Button>
<Button variant="destructive" onClick={() => cancelJob()} aria-describedby={`${id}-status`}>{t("cancel_import")}</Button>
</>
) : (
<Button onClick={() => close()}>{t("close")}</Button>
<Button ref={stageButton} onClick={() => close()}>{t("close")}</Button>
)}
>
<ProgressBody progress={progress} t={t} locale={locale} statusId={`${id}-status`} />
@@ -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<string | undefined>(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" && <MailImportDialog request={request} />}
@@ -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<HTMLElement | null>, 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);
+8 -2
View File
@@ -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": "استعادة العناصر المحذوفة",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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": "بازیابی موارد حذف‌شده",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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": "שחזור פריטים שנמחקו",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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": "削除済みアイテムの復元",
+8 -2
View File
@@ -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": "삭제된 항목 복구",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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": "Устгасан зүйлсийг сэргээх",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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": "Восстановить удалённое",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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": "กู้คืนรายการที่ลบ",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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": "Відновити видалене",
+8 -2
View File
@@ -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",
+8 -2
View File
@@ -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": "復原已刪除的項目",
+8 -2
View File
@@ -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": "恢复已删除项目",