diff --git a/components/mail-transfer/mail-import-dialog.tsx b/components/mail-transfer/mail-import-dialog.tsx index aa057ae52..414132a51 100644 --- a/components/mail-transfer/mail-import-dialog.tsx +++ b/components/mail-transfer/mail-import-dialog.tsx @@ -19,7 +19,7 @@ import { startImport } from "./start-import"; const ACCEPT = ".eml,.zip,.mbox,.mbx,.pst,.ost,message/rfc822,application/zip,application/mbox"; const TOP = "\u0000top"; -const SKIP_ORDER: SkipReason[] = ["too_large", "deleted", "embedded", "contact", "calendar", "other"]; +const SKIP_ORDER: SkipReason[] = ["too_large", "deleted", "embedded", "unreadable", "contact", "calendar", "other"]; interface Picked { file: File; @@ -236,7 +236,10 @@ export function MailImportDialog({ request }: { request: ImportRequest }) { /> {t("keep_folders")} - {t("keep_folders_hint")} + + {t("keep_folders_hint")} + {target === TOP && <> {t("keep_folders_top_hint")}} + )} diff --git a/lib/mail-import/__tests__/engine.test.ts b/lib/mail-import/__tests__/engine.test.ts index bef72ae34..160105ca2 100644 --- a/lib/mail-import/__tests__/engine.test.ts +++ b/lib/mail-import/__tests__/engine.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect, vi } from 'vitest'; -import { runImport, uploadWindowEnd, quotaFrom, type ImportProgress, type ImportOptions } from '@/lib/mail-import/engine'; +import { runImport, uploadWindowEnd, quotaFrom, FolderResolver, type ImportProgress, type ImportOptions } from '@/lib/mail-import/engine'; import { checkpointKey, deleteCheckpoint, readCheckpoint } from '@/lib/mail-import/checkpoints'; import type { IJMAPClient, UploadedEmailImport } from '@/lib/jmap/client-interface'; import type { Mailbox } from '@/lib/jmap/types'; @@ -363,6 +363,17 @@ describe('runImport', () => { expect(Object.keys(fake.imported[0].mailboxIds)).toEqual(['target']); }); + it('puts a top folder into the special folder the file names, in any language', async () => { + const mailboxes = [mailbox('in', 'Posteingang', { role: 'inbox' }), mailbox('sent', 'Gesendet', { role: 'sent' }), mailbox('bin', 'Papierkorb', { role: 'trash' })]; + const client = { getMailboxes: async () => mailboxes, createMailbox: vi.fn() } as unknown as IJMAPClient; + const folders = new FolderResolver(client, 'acc', null); + // A Spanish PST whose store says this is Sent Items. + await expect(folders.resolve(['Elementos enviados'], 'sent')).resolves.toBe('sent'); + // Names in the languages Outlook ships most often. + await expect(folders.resolve(['Éléments supprimés'])).resolves.toBe('bin'); + await expect(folders.resolve(['Bandeja de entrada'])).resolves.toBe('in'); + }); + it('reads the hour window and the quota from the server', () => { expect(uploadWindowEnd(Date.UTC(2026, 10, 1, 13, 20))).toBe(Date.UTC(2026, 10, 1, 14, 0)); expect(quotaFrom('You have exceeded the blob upload quota of 1000 files or 50000000 bytes.')).toEqual({ files: 1000, bytes: 50000000 }); diff --git a/lib/mail-import/__tests__/pst-source.test.ts b/lib/mail-import/__tests__/pst-source.test.ts index 81e08e023..74cad2a8b 100644 --- a/lib/mail-import/__tests__/pst-source.test.ts +++ b/lib/mail-import/__tests__/pst-source.test.ts @@ -102,6 +102,19 @@ describe('openPstSource', () => { expect(FakeWorker.instances[0].terminated).toBe(true); }); + it('gives up on a worker that stops answering (killed for memory sends no error)', async () => { + class SilentWorker { + onmessage: unknown = null; + onerror: unknown = null; + terminated = false; + postMessage() {} + terminate() { this.terminated = true; } + } + vi.stubGlobal('Worker', SilentWorker); + const source = openPstSource(new File(['!BDN'], 'x.pst'), { skipBefore: 0, maxMessageBytes: 1e9 }, { watchdogMs: 30 }); + await expect(source.next()).rejects.toMatchObject({ name: 'PstReadError', code: 'unreadable' }); + }); + it('turns a worker error into a coded failure', async () => { vi.stubGlobal('Worker', FakeWorker); FakeWorker.failWith = { code: 'encrypted', message: 'PSTFile::open PST is encrypted' }; diff --git a/lib/mail-import/__tests__/pst.test.ts b/lib/mail-import/__tests__/pst.test.ts index dbd2f7bdd..3511f973e 100644 --- a/lib/mail-import/__tests__/pst.test.ts +++ b/lib/mail-import/__tests__/pst.test.ts @@ -1,12 +1,12 @@ // @vitest-environment node -import { describe, it, expect } from 'vitest'; +import { describe, it, expect, vi } from 'vitest'; import fs from 'node:fs'; import path from 'node:path'; import PostalMime from 'postal-mime'; import { PSTFile } from 'pst-extractor'; import { walkPst, type PstItem } from '@/lib/mail-import/pst/items'; import { buildMime, encodeHeaderText, keptHeaders, type PstMailData } from '@/lib/mail-import/pst/mime'; -import { itemKind, pstFolders } from '@/lib/mail-import/pst/extract'; +import { itemKind, pstFolders, readPstMessage } from '@/lib/mail-import/pst/extract'; import { registerPstFile, openSync, readSync } from '@/lib/mail-import/pst/shims/fs'; // Aspose's Outlook.pst (MIT, see fixtures/Outlook.pst.LICENSE). @@ -151,6 +151,68 @@ describe('pstFolders without an IPM subtree entry (OST files)', () => { }); }); +describe('PST special folders', () => { + it('knows Sent Items and Deleted Items from the store\'s entry IDs, whatever their names', () => { + const roles = Object.fromEntries([...pstFolders(new PSTFile(fs.readFileSync(FIXTURE)))].map((r) => [r.path.join('/'), r.topRole])); + expect(roles['Sent Items']).toBe('sent'); + expect(roles['Deleted Items']).toBe('trash'); + expect(roles['Inbox']).toBeUndefined(); + }); + + it('gives every message the role of its top folder', () => { + const items = [...walkPst(new PSTFile(fs.readFileSync(FIXTURE)), { skipBefore: 0, maxMessageBytes: 50_000_000 }).items]; + const sent = items.filter((i) => i.kind === 'message' && i.folder[0] === 'Sent Items'); + expect(sent.length).toBeGreaterThan(0); + expect(sent.every((i) => i.kind === 'message' && i.folderRole === 'sent')).toBe(true); + }); +}); + +describe('PST safety', () => { + const stream = (length: number) => ({ length, readCompletely: vi.fn() }); + const message = (attachments: unknown[]) => ({ + subject: 'big', numberOfAttachments: attachments.length, getAttachment: (i: number) => attachments[i], numberOfRecipients: 0, + }); + + it('skips a message whose attachments are too big before reading any of them', () => { + const big = stream(900_000_000); + const read = readPstMessage(message([{ attachMethod: 1, fileInputStream: big, filename: 'a.iso' }]), 50_000_000); + expect(read.tooLarge).toBe(true); + expect(big.readCompletely).not.toHaveBeenCalled(); + }); + + it('counts what is left of a folder after a broken item as unreadable', () => { + let n = 0; + const folder = { + displayName: 'Inbox', containerClass: 'IPF.Note', descriptorNodeId: 9, hasSubfolders: false, contentCount: 5, + getNextChild: () => { if (++n > 2) throw new Error('broken block'); return { messageClass: 'IPM.Contact', subject: `c${n}` }; }, + }; + const pst = { + getMessageStore: () => ({ getBinaryItem: () => null }), + getRootFolder: () => ({ displayName: '', descriptorNodeId: 1, hasSubfolders: true, getSubFolders: () => [folder] }), + }; + const items = [...walkPst(pst, { skipBefore: 0, maxMessageBytes: 1e9 }).items]; + expect(items.map((i) => (i.kind === 'skipped' ? i.reason : 'message'))).toEqual(['contact', 'contact', 'unreadable', 'unreadable', 'unreadable']); + expect(items.map((i) => i.index)).toEqual([0, 1, 2, 3, 4]); + }); + + it('keeps line breaks and spaces out of the ids it writes into headers', () => { + const text = new TextDecoder().decode(buildMime({ + subject: 's', to: [], cc: [], bcc: [], text: 'x', + messageId: '\r\nBcc: victim@example.org', inReplyTo: 'c@d', + html: '', + attachments: [{ filename: 'i.png', mimeType: 'image/png', contentId: 'img1', data: new Uint8Array([1]) }], + })); + expect(text).not.toMatch(/^Bcc:/m); + expect(text).not.toMatch(/^Message-ID:/m); + expect(text).toMatch(/^In-Reply-To: \r$/m); + const evil = new TextDecoder().decode(buildMime({ + subject: 's', to: [], cc: [], bcc: [], text: 'x', html: '', + attachments: [{ filename: 'i.png', mimeType: 'image/png', contentId: 'x>\r\nX-Evil: 1', data: new Uint8Array([1]) }], + })); + expect(evil).not.toMatch(/^X-Evil:/m); + }); +}); + describe('itemKind', () => { it('sorts Outlook message classes', () => { expect(itemKind('IPM.Note')).toBe('mail'); diff --git a/lib/mail-import/pst-source.ts b/lib/mail-import/pst-source.ts index fcb049108..9d6c8bbab 100644 --- a/lib/mail-import/pst-source.ts +++ b/lib/mail-import/pst-source.ts @@ -43,7 +43,10 @@ type WorkerMessage = /** Messages asked for ahead of the import, so the worker keeps busy without filling memory. */ const AHEAD = 4; -export async function* openPstSource(file: File, options: SourceOptions): ItemSource { +/** How long the worker may stay silent while a message is awaited before the import gives up (it may have run out of memory). */ +const WATCHDOG_MS = 120_000; + +export async function* openPstSource(file: File, options: SourceOptions, tuning: { watchdogMs?: number } = {}): ItemSource { const worker = new Worker(pstWorkerUrl()); const queue: WorkerMessage[] = []; let wake: (() => void) | null = null; @@ -58,8 +61,16 @@ export async function* openPstSource(file: File, options: SourceOptions): ItemSo }; const onAbort = () => push({ type: "abort" }); options.signal?.addEventListener("abort", onAbort, { once: true }); + // A worker killed for memory sends no error: don't wait for it forever. const next = async (): Promise => { - while (queue.length === 0) await new Promise((resolve) => { wake = resolve; }); + while (queue.length === 0) { + let timer: ReturnType | undefined; + await new Promise((resolve) => { + wake = resolve; + timer = setTimeout(() => push({ type: "error", code: "unreadable", message: "The PST reader stopped answering" }), tuning.watchdogMs ?? WATCHDOG_MS); + }); + clearTimeout(timer); + } wake = null; return queue.shift()!; }; @@ -100,6 +111,7 @@ export async function* openPstSource(file: File, options: SourceOptions): ItemSo receivedAt: item.receivedAt, label: item.label, embeddedSkipped: item.embeddedSkipped, + folderRole: item.folderRole, }; } else { out = item; diff --git a/lib/mail-import/pst/extract.ts b/lib/mail-import/pst/extract.ts index 08ec78531..3cab3039f 100644 --- a/lib/mail-import/pst/extract.ts +++ b/lib/mail-import/pst/extract.ts @@ -21,6 +21,9 @@ const SYSTEM_FOLDERS = new Set([ const ROOT_NAMES = new Set(["top of personal folders", "top of outlook data file", "root - mailbox", "ipm_subtree", "root - public"]); const PR_IPM_SUBTREE_ENTRYID = 0x35e0; +const PR_IPM_WASTEBASKET_ENTRYID = 0x35e3; +const PR_IPM_SENTMAIL_ENTRYID = 0x35e4; +const PR_IPM_DRAFTS_ENTRYID = 0x36d7; const PR_FLAG_STATUS = 0x1090; const PR_SENDER_SMTP_ADDRESS = 0x5d01; const PR_SENT_REPRESENTING_SMTP_ADDRESS = 0x5d02; @@ -46,6 +49,8 @@ function isMailFolder(folder: PstObject): boolean { export interface PstFolderRef { folder: PstObject; path: string[]; + /** What the PST says the top folder of `path` is (sent, trash, drafts), whatever its name in the user's language. */ + topRole?: string; /** A calendar, contacts or other non-mail folder: its items are counted, not imported. */ mail: boolean; } @@ -76,7 +81,25 @@ export function* pstFolders(pst: PstObject): Generator { top = null; } - function* walk(folder: PstObject, path: string[], depth: number): Generator { + // Special folders by their entry IDs: the message store names Sent Items and + // Deleted Items, the top folder names Drafts. The Inbox is found by name. + const roles = new Map(); + const nidOf = (entry: { length: number; readUInt32LE(at: number): number } | null | undefined) => + entry && entry.length >= 24 ? entry.readUInt32LE(20) : null; + try { + const store = pst.getMessageStore(); + for (const [id, role] of [[PR_IPM_SENTMAIL_ENTRYID, "sent"], [PR_IPM_WASTEBASKET_ENTRYID, "trash"]] as const) { + const nid = nidOf(store.getBinaryItem?.(id)); + if (nid !== null) roles.set(nid, role); + } + const drafts = nidOf((top ?? root).getBinaryItem?.(PR_IPM_DRAFTS_ENTRYID)); + if (drafts !== null) roles.set(drafts, "drafts"); + } catch { + /* names are the fallback */ + } + const nidOfFolder = (folder: PstObject): number => Number(folder.descriptorNodeId?.toNumber?.() ?? folder.descriptorNodeId); + + function* walk(folder: PstObject, path: string[], depth: number, topRole?: string): Generator { if (!folder.hasSubfolders) return; for (const child of folder.getSubFolders()) { const name = String(child.displayName || "").trim(); @@ -84,8 +107,9 @@ export function* pstFolders(pst: PstObject): Generator { // Outside the IPM subtree only what sits next to the mailbox's top counts as system data. if (!top && path.length === 0 && SYSTEM_FOLDERS.has(lower)) continue; const childPath = !top && ROOT_NAMES.has(lower) && path.length === 0 ? path : [...path, name || "Folder"]; - yield { folder: child, path: childPath, mail: isMailFolder(child) }; - yield* walk(child, childPath, depth + 1); + const role = childPath.length === 1 && path.length === 0 ? roles.get(nidOfFolder(child)) : topRole; + yield { folder: child, path: childPath, mail: isMailFolder(child), topRole: role }; + yield* walk(child, childPath, depth + 1, role); } } @@ -175,13 +199,38 @@ export interface PstMessage { receivedAt?: Date; /** Attached messages pst-extractor can't read. */ embedded: number; + /** Bigger than the server takes: nothing was read in. */ + tooLarge?: boolean; } -/** A mail item's properties, its attachments read in, as data for buildMime. */ -export function readPstMessage(m: PstObject): PstMessage { +function streamLength(stream: PstObject): number { + return typeof stream?.length === "number" ? stream.length : Number(stream?.length?.toNumber?.() ?? 0); +} + +/** + * A mail item's properties, its attachments read in, as data for buildMime. + * A message whose attachments alone would be bigger than `maxBytes` once in + * base64 is reported `tooLarge` before anything is read: a 1 GB attachment + * would take several GB in the worker. + */ +export function readPstMessage(m: PstObject, maxBytes = Number.POSITIVE_INFINITY): PstMessage { const attachments: PstAttachmentData[] = []; let embedded = 0; const count = Number(m.numberOfAttachments) || 0; + if (Number.isFinite(maxBytes)) { + let declared = 0; + for (let i = 0; i < count; i++) { + try { + const a = m.getAttachment(i); + if (a && a.attachMethod !== ATTACH_EMBEDDED_MSG) declared += streamLength(a.fileInputStream); + } catch { + /* read below, or skipped there */ + } + } + if (Math.ceil(declared / 3) * 4 > maxBytes) { + return { mail: { subject: str(m.subject), to: [], cc: [], bcc: [], attachments: [] }, keywords: {}, embedded: 0, tooLarge: true }; + } + } for (let i = 0; i < count; i++) { let a: PstObject; try { a = m.getAttachment(i); } catch { continue; } @@ -189,7 +238,7 @@ export function readPstMessage(m: PstObject): PstMessage { if (a.attachMethod === ATTACH_EMBEDDED_MSG) { embedded++; continue; } const stream = a.fileInputStream; if (!stream) continue; - const length = typeof stream.length === "number" ? stream.length : Number(stream.length?.toNumber?.() ?? 0); + const length = streamLength(stream); const buffer = new Uint8Array(length); try { // pst-extractor wants a Buffer; one over our bytes fills them in place. diff --git a/lib/mail-import/pst/items.ts b/lib/mail-import/pst/items.ts index 38375b1e8..5380d6563 100644 --- a/lib/mail-import/pst/items.ts +++ b/lib/mail-import/pst/items.ts @@ -13,6 +13,7 @@ export type PstItem = receivedAt?: string; label: string; embeddedSkipped: number; + folderRole?: string; } | { kind: "skipped"; index: number; reason: SkipReason; label?: string }; @@ -37,15 +38,25 @@ export function walkPst(pst: any, options: { skipBefore: number; skipAlso?: Set< let index = 0; for (const ref of folders) { if (!(Number(ref.folder.contentCount) > 0)) continue; + const count = Number(ref.folder.contentCount) || 0; + let read = 0; for (;;) { let child: any; try { child = ref.folder.getNextChild(); } catch { - // A broken item ends this folder's list in pst-extractor; go on with the next folder. + // A broken item ends this folder's list in pst-extractor: count what is + // left of the folder as unreadable and go on with the next folder. + for (let left = count - read; left > 0; left--) { + const i = index++; + yield i < options.skipBefore || options.skipAlso?.has(i) + ? { kind: "skipped", index: i, reason: "resumed" } + : { kind: "skipped", index: i, reason: "unreadable" }; + } break; } if (!child) break; + read++; const i = index++; if (i < options.skipBefore || options.skipAlso?.has(i)) { yield { kind: "skipped", index: i, reason: "resumed" }; @@ -58,10 +69,14 @@ export function walkPst(pst: any, options: { skipBefore: number; skipAlso?: Set< continue; } let mime: Uint8Array; - let read; + let message; try { - read = readPstMessage(child); - mime = buildMime(read.mail, { boundarySeed: options.boundarySeed }); + message = readPstMessage(child, options.maxMessageBytes); + if (message.tooLarge) { + yield { kind: "skipped", index: i, reason: "too_large", label }; + continue; + } + mime = buildMime(message.mail, { boundarySeed: options.boundarySeed }); } catch { yield { kind: "skipped", index: i, reason: "other", label }; continue; @@ -75,10 +90,11 @@ export function walkPst(pst: any, options: { skipBefore: number; skipAlso?: Set< index: i, folder: ref.path, mime, - keywords: read.keywords, - receivedAt: utcDate(read.receivedAt), + keywords: message.keywords, + receivedAt: utcDate(message.receivedAt), label, - embeddedSkipped: read.embedded, + embeddedSkipped: message.embedded, + folderRole: ref.topRole, }; } } diff --git a/lib/mail-import/pst/mime.ts b/lib/mail-import/pst/mime.ts index 43484f2fa..4aca45ee2 100644 --- a/lib/mail-import/pst/mime.ts +++ b/lib/mail-import/pst/mime.ts @@ -148,6 +148,17 @@ function textPart(text: string, subtype: "plain" | "html"): Part { return leaf(`text/${subtype}; charset=utf-8`, encoder.encode(text.replace(/\r?\n/g, CRLF))); } +/** A message id from the PST as ``, or undefined: no line breaks or spaces can get into the header. */ +function msgId(value: string | undefined): string | undefined { + const id = (value ?? "").replace(/[\r\n]/g, "").trim().replace(/^<|>$/g, ""); + return /^[^<>\s]+$/.test(id) ? `<${id}>` : undefined; +} + +/** A Content-ID without anything that could end the header or the angle brackets. */ +function cid(value: string): string { + return value.replace(/[<>\s]/g, ""); +} + export interface MimeOptions { /** Makes boundaries reproducible (tests). */ boundarySeed?: string; @@ -179,7 +190,7 @@ export function buildMime(mail: PstMailData, options: MimeOptions = {}): Uint8Ar body = multipart("related", [body, ...inline.map((a) => leaf( `${a.mimeType}${fileParams(a.filename)}`, a.data, - [`Content-ID: <${a.contentId}>`, `Content-Disposition: inline${fileParams(a.filename).replace(/; name/g, "; filename")}`], + [`Content-ID: <${cid(a.contentId!)}>`, `Content-Disposition: inline${fileParams(a.filename).replace(/; name/g, "; filename")}`], ))]); } const extra: Part[] = attached.map((a) => leaf( @@ -203,8 +214,10 @@ export function buildMime(mail: PstMailData, options: MimeOptions = {}): Uint8Ar // Only sent mail and drafts have Bcc recipients; a received header block never names them. if (!mail.headers && mail.bcc.length > 0) header.push(`Bcc: ${addressList(mail.bcc)}`); if (!has("subject")) header.push(`Subject: ${encodeHeaderText(mail.subject)}`); - if (!has("message-id") && mail.messageId) header.push(`Message-ID: ${mail.messageId}`); - if (!has("in-reply-to") && mail.inReplyTo) header.push(`In-Reply-To: ${mail.inReplyTo}`); + const messageId = msgId(mail.messageId); + const inReplyTo = msgId(mail.inReplyTo); + if (!has("message-id") && messageId) header.push(`Message-ID: ${messageId}`); + if (!has("in-reply-to") && inReplyTo) header.push(`In-Reply-To: ${inReplyTo}`); if (!has("importance") && mail.importance === 2) header.push("Importance: high"); if (!has("importance") && mail.importance === 0) header.push("Importance: low"); header.push("MIME-Version: 1.0"); diff --git a/lib/mail-import/sources.ts b/lib/mail-import/sources.ts index 8832441ba..34d5ccb94 100644 --- a/lib/mail-import/sources.ts +++ b/lib/mail-import/sources.ts @@ -25,6 +25,8 @@ export type SkipReason = | "other" /** Messages attached to a PST message, which pst-extractor can't read. */ | "embedded" + /** PST items after a broken one in the same folder, which pst-extractor can't reach. */ + | "unreadable" /** Imported by an earlier run of the same import. */ | "resumed"; diff --git a/locales/ar/common.json b/locales/ar/common.json index 65fb75fdb..c49b07ecf 100644 --- a/locales/ar/common.json +++ b/locales/ar/common.json @@ -5397,7 +5397,7 @@ "target_label": "الاستيراد إلى", "target_top": "المستوى الأعلى", "keep_folders": "إعادة إنشاء مجلدات الملف", - "keep_folders_hint": "يُعاد استخدام المجلدات التي تحمل الاسم نفسه. تذهب علبة الوارد والعناصر المرسلة والعناصر المحذوفة في المستوى الأعلى إلى مجلداتك.", + "keep_folders_hint": "يُعاد استخدام المجلدات التي تحمل الاسم نفسه.", "resume": "المتابعة من حيث توقف آخر استيراد لهذه الملفات (الرسائل المنجزة: {count})", "quota_note": "كثير من الخوادم لا تقبل من المستخدم الواحد إلا نحو 1000 رسالة أو 50 ميغابايت في الساعة. يتوقف الاستيراد الأكبر مؤقتًا ثم يتابع وحده.", "start": "استيراد", @@ -5439,7 +5439,9 @@ "error_failures": "فشلت رسائل كثيرة متتالية، لذا توقف الاستيراد. استورد الملفات نفسها إلى المجلد نفسه لاحقًا للمتابعة.", "error_network": "فشل الاتصال بالخادم مرارًا، لذا توقف الاستيراد. استورد الملفات نفسها إلى المجلد نفسه مرة أخرى للمتابعة.", "error_busy": "يجري استيراد هذه الملفات في علامة تبويب أخرى بالفعل.", - "retry_hint": "استورد الملفات نفسها إلى المجلد نفسه مرة أخرى لإعادة محاولة الرسائل التي فشلت." + "retry_hint": "استورد الملفات نفسها إلى المجلد نفسه مرة أخرى لإعادة محاولة الرسائل التي فشلت.", + "skip_unreadable": "غير مقروءة في ملف Outlook: {count}", + "keep_folders_top_hint": "في المستوى الأعلى تذهب علبة الوارد والعناصر المرسلة والعناصر المحذوفة وما شابهها إلى مجلداتك." }, "mail_export": { "menu_export": "تصدير المجلد…", diff --git a/locales/ca/common.json b/locales/ca/common.json index 5a0c2111c..5a834fd3c 100644 --- a/locales/ca/common.json +++ b/locales/ca/common.json @@ -5397,7 +5397,7 @@ "target_label": "Importa a", "target_top": "Nivell superior", "keep_folders": "Recrea les carpetes del fitxer", - "keep_folders_hint": "Les carpetes amb el mateix nom es tornen a fer servir. Safata d'entrada, Elements enviats i Elements suprimits al nivell superior van a les vostres.", + "keep_folders_hint": "Les carpetes amb el mateix nom es tornen a fer servir.", "resume": "Continua on es va aturar l'última importació d'aquests fitxers (missatges ja fets: {count})", "quota_note": "Molts servidors només accepten uns 1000 missatges o 50 MB per hora de cada usuari. Una importació més gran fa una pausa i després continua sola.", "start": "Importa", @@ -5439,7 +5439,9 @@ "error_failures": "Han fallat massa missatges seguits, així que la importació s'ha aturat. Torneu a importar els mateixos fitxers a la mateixa carpeta més tard per continuar.", "error_network": "La connexió amb el servidor ha fallat diverses vegades, així que la importació s'ha aturat. Torneu a importar els mateixos fitxers a la mateixa carpeta per continuar.", "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." + "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." }, "mail_export": { "menu_export": "Exporta la carpeta…", diff --git a/locales/cs/common.json b/locales/cs/common.json index ea4edc14f..c7296a926 100644 --- a/locales/cs/common.json +++ b/locales/cs/common.json @@ -5267,7 +5267,7 @@ "target_label": "Importovat do", "target_top": "Nejvyšší úroveň", "keep_folders": "Znovu vytvořit složky ze souboru", - "keep_folders_hint": "Složky se stejným názvem se použijí znovu. Doručená pošta, Odeslaná pošta a Odstraněná pošta na nejvyšší úrovni skončí ve vašich vlastních.", + "keep_folders_hint": "Složky se stejným názvem se použijí znovu.", "resume": "Pokračovat tam, kde se poslední import těchto souborů zastavil (již hotové zprávy: {count})", "quota_note": "Mnoho serverů přijímá od jednoho uživatele jen asi 1000 zpráv nebo 50 MB za hodinu. Větší import se pozastaví a pak pokračuje sám.", "start": "Importovat", @@ -5309,7 +5309,9 @@ "error_failures": "Příliš mnoho zpráv za sebou selhalo, proto se import zastavil. Importujte stejné soubory později znovu do stejné složky, abyste pokračovali.", "error_network": "Spojení se serverem opakovaně selhalo, proto se import zastavil. Importujte stejné soubory znovu do stejné složky, abyste pokračovali.", "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." + "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." }, "mail_export": { "menu_export": "Exportovat složku…", diff --git a/locales/da/common.json b/locales/da/common.json index 2db8c6f0f..7aaa9a13e 100644 --- a/locales/da/common.json +++ b/locales/da/common.json @@ -5397,7 +5397,7 @@ "target_label": "Importér til", "target_top": "Øverste niveau", "keep_folders": "Genskab mapperne fra filen", - "keep_folders_hint": "Mapper med samme navn bruges igen. Indbakke, Sendt post og Slettet post på øverste niveau havner i dine egne.", + "keep_folders_hint": "Mapper med samme navn bruges igen.", "resume": "Fortsæt, hvor den sidste import af disse filer stoppede (beskeder allerede klaret: {count})", "quota_note": "Mange servere tager kun imod omkring 1000 beskeder eller 50 MB i timen fra én bruger. En større import holder pause og fortsætter derefter af sig selv.", "start": "Importér", @@ -5439,7 +5439,9 @@ "error_failures": "For mange beskeder i træk mislykkedes, så importen stoppede. Importér de samme filer til samme mappe igen senere for at fortsætte.", "error_network": "Forbindelsen til serveren svigtede gentagne gange, så importen stoppede. Importér de samme filer til samme mappe igen for at fortsætte.", "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." + "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." }, "mail_export": { "menu_export": "Eksportér mappe…", diff --git a/locales/de/common.json b/locales/de/common.json index 43ff4d62a..848f58402 100644 --- a/locales/de/common.json +++ b/locales/de/common.json @@ -5267,7 +5267,7 @@ "target_label": "Importieren in", "target_top": "Oberste Ebene", "keep_folders": "Ordner aus der Datei übernehmen", - "keep_folders_hint": "Ordner mit gleichem Namen werden wiederverwendet. Posteingang, Gesendete Elemente und Gelöschte Elemente auf oberster Ebene landen in Ihren eigenen.", + "keep_folders_hint": "Ordner mit gleichem Namen werden wiederverwendet.", "resume": "Dort weitermachen, wo der letzte Import dieser Dateien aufgehört hat (bereits erledigte Nachrichten: {count})", "quota_note": "Viele Server nehmen pro Benutzer nur etwa 1000 Nachrichten oder 50 MB pro Stunde an. Ein größerer Import pausiert und läuft dann von selbst weiter.", "start": "Importieren", @@ -5309,7 +5309,9 @@ "error_failures": "Zu viele Nachrichten sind nacheinander fehlgeschlagen, daher wurde der Import angehalten. Importieren Sie dieselben Dateien später erneut in denselben Ordner, um weiterzumachen.", "error_network": "Die Verbindung zum Server ist wiederholt fehlgeschlagen, daher wurde der Import angehalten. Importieren Sie dieselben Dateien erneut in denselben Ordner, um weiterzumachen.", "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." + "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." }, "mail_export": { "menu_export": "Ordner exportieren…", diff --git a/locales/en/common.json b/locales/en/common.json index 5ec102c54..547f3587e 100644 --- a/locales/en/common.json +++ b/locales/en/common.json @@ -5397,7 +5397,7 @@ "target_label": "Import into", "target_top": "Top level", "keep_folders": "Recreate the folders from the file", - "keep_folders_hint": "Folders with the same name are used again. Inbox, Sent Items and Deleted Items at the top go into your own.", + "keep_folders_hint": "Folders with the same name are used again.", "resume": "Continue where the last import of these files stopped (messages already done: {count})", "quota_note": "Many servers take only about 1000 messages or 50 MB an hour from one user. A larger import pauses and then goes on by itself.", "start": "Import", @@ -5439,7 +5439,9 @@ "error_failures": "Too many messages failed in a row, so the import stopped. Import the same files into the same folder again later to go on.", "error_network": "The connection to the server kept failing, so the import stopped. Import the same files into the same folder again to go on.", "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." + "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." }, "mail_export": { "menu_export": "Export folder…", diff --git a/locales/es/common.json b/locales/es/common.json index e18e98a31..dca463886 100644 --- a/locales/es/common.json +++ b/locales/es/common.json @@ -5267,7 +5267,7 @@ "target_label": "Importar en", "target_top": "Nivel superior", "keep_folders": "Recrear las carpetas del archivo", - "keep_folders_hint": "Las carpetas con el mismo nombre se reutilizan. Bandeja de entrada, Elementos enviados y Elementos eliminados en el nivel superior van a las suyas.", + "keep_folders_hint": "Las carpetas con el mismo nombre se reutilizan.", "resume": "Seguir donde se detuvo la última importación de estos archivos (mensajes ya procesados: {count})", "quota_note": "Muchos servidores solo aceptan unos 1000 mensajes o 50 MB por hora de cada usuario. Una importación mayor se pausa y luego sigue sola.", "start": "Importar", @@ -5309,7 +5309,9 @@ "error_failures": "Fallaron demasiados mensajes seguidos, así que la importación se detuvo. Importe los mismos archivos en la misma carpeta más tarde para seguir.", "error_network": "La conexión con el servidor falló varias veces, así que la importación se detuvo. Importe los mismos archivos en la misma carpeta otra vez para seguir.", "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." + "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." }, "mail_export": { "menu_export": "Exportar carpeta…", diff --git a/locales/et/common.json b/locales/et/common.json index 08a6b11d9..881a92474 100644 --- a/locales/et/common.json +++ b/locales/et/common.json @@ -5397,7 +5397,7 @@ "target_label": "Impordi kausta", "target_top": "Ülemine tase", "keep_folders": "Loo failist kaustad uuesti", - "keep_folders_hint": "Sama nimega kaustu kasutatakse uuesti. Ülemise taseme Sisendkaust, Saadetud ja Kustutatud lähevad teie omadesse.", + "keep_folders_hint": "Sama nimega kaustu kasutatakse uuesti.", "resume": "Jätka sealt, kus nende failide viimane import peatus (juba tehtud kirju: {count})", "quota_note": "Paljud serverid võtavad ühelt kasutajalt vastu ainult umbes 1000 kirja või 50 MB tunnis. Suurem import teeb pausi ja jätkab siis ise.", "start": "Impordi", @@ -5439,7 +5439,9 @@ "error_failures": "Liiga palju kirju järjest ebaõnnestus, seega import peatus. Importige samad failid hiljem uuesti samasse kausta, et jätkata.", "error_network": "Ühendus serveriga katkes korduvalt, seega import peatus. Importige samad failid uuesti samasse kausta, et jätkata.", "error_busy": "Neid faile imporditakse juba teisel vahelehel.", - "retry_hint": "Importige samad failid uuesti samasse kausta, et ebaõnnestunud kirju veel kord proovida." + "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." }, "mail_export": { "menu_export": "Ekspordi kaust…", diff --git a/locales/fa/common.json b/locales/fa/common.json index 66a6dbb30..6af851e47 100644 --- a/locales/fa/common.json +++ b/locales/fa/common.json @@ -5397,7 +5397,7 @@ "target_label": "درون‌ریزی به", "target_top": "بالاترین سطح", "keep_folders": "ساختن دوباره پوشه‌های فایل", - "keep_folders_hint": "پوشه‌های هم‌نام دوباره به کار می‌روند. صندوق ورودی، موارد ارسال‌شده و موارد حذف‌شده در بالاترین سطح به پوشه‌های خودتان می‌روند.", + "keep_folders_hint": "پوشه‌های هم‌نام دوباره به کار می‌روند.", "resume": "ادامه از جایی که آخرین درون‌ریزی این فایل‌ها متوقف شد (پیام‌های انجام‌شده: {count})", "quota_note": "بسیاری از سرورها از هر کاربر فقط حدود ۱۰۰۰ پیام یا ۵۰ مگابایت در ساعت می‌پذیرند. درون‌ریزی بزرگ‌تر مکث می‌کند و سپس خودش ادامه می‌دهد.", "start": "درون‌ریزی", @@ -5439,7 +5439,9 @@ "error_failures": "پیام‌های زیادی پشت سر هم ناموفق بودند، بنابراین درون‌ریزی متوقف شد. برای ادامه، بعداً همان فایل‌ها را دوباره در همان پوشه درون‌ریزی کنید.", "error_network": "اتصال به سرور چند بار قطع شد، بنابراین درون‌ریزی متوقف شد. برای ادامه، همان فایل‌ها را دوباره در همان پوشه درون‌ریزی کنید.", "error_busy": "این فایل‌ها هم‌اکنون در زبانه دیگری درون‌ریزی می‌شوند.", - "retry_hint": "برای امتحان دوباره پیام‌های ناموفق، همان فایل‌ها را دوباره در همان پوشه درون‌ریزی کنید." + "retry_hint": "برای امتحان دوباره پیام‌های ناموفق، همان فایل‌ها را دوباره در همان پوشه درون‌ریزی کنید.", + "skip_unreadable": "خوانا نیست در فایل اوت‌لوک: {count}", + "keep_folders_top_hint": "در بالاترین سطح، صندوق ورودی، موارد ارسال‌شده، موارد حذف‌شده و مانند آن‌ها به پوشه‌های خودتان می‌روند." }, "mail_export": { "menu_export": "برون‌بری پوشه…", diff --git a/locales/fr/common.json b/locales/fr/common.json index b1169e59d..4da3ec0a0 100644 --- a/locales/fr/common.json +++ b/locales/fr/common.json @@ -5267,7 +5267,7 @@ "target_label": "Importer dans", "target_top": "Niveau supérieur", "keep_folders": "Recréer les dossiers du fichier", - "keep_folders_hint": "Les dossiers du même nom sont réutilisés. Boîte de réception, Éléments envoyés et Éléments supprimés au niveau supérieur vont dans les vôtres.", + "keep_folders_hint": "Les dossiers du même nom sont réutilisés.", "resume": "Reprendre là où le dernier import de ces fichiers s'est arrêté (messages déjà traités : {count})", "quota_note": "Beaucoup de serveurs n'acceptent qu'environ 1000 messages ou 50 Mo par heure et par utilisateur. Un import plus grand se met en pause puis reprend tout seul.", "start": "Importer", @@ -5309,7 +5309,9 @@ "error_failures": "Trop de messages ont échoué à la suite, l'import s'est donc arrêté. Importez à nouveau les mêmes fichiers dans le même dossier plus tard pour reprendre.", "error_network": "La connexion au serveur a échoué plusieurs fois, l'import s'est donc arrêté. Importez à nouveau les mêmes fichiers dans le même dossier pour reprendre.", "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é." + "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." }, "mail_export": { "menu_export": "Exporter le dossier…", diff --git a/locales/he/common.json b/locales/he/common.json index 2d16c53ca..52d2e767e 100644 --- a/locales/he/common.json +++ b/locales/he/common.json @@ -5398,7 +5398,7 @@ "target_label": "ייבוא אל", "target_top": "רמה עליונה", "keep_folders": "יצירה מחדש של התיקיות מהקובץ", - "keep_folders_hint": "תיקיות באותו שם ישמשו שוב. דואר נכנס, פריטים שנשלחו ופריטים שנמחקו ברמה העליונה ייכנסו לתיקיות שלכם.", + "keep_folders_hint": "תיקיות באותו שם ישמשו שוב.", "resume": "להמשיך מהמקום שבו נעצר הייבוא האחרון של הקבצים האלה (הודעות שכבר טופלו: {count})", "quota_note": "שרתים רבים מקבלים ממשתמש אחד רק כ-1000 הודעות או 50 MB בשעה. ייבוא גדול יותר נעצר לזמן מה ואז ממשיך מעצמו.", "start": "ייבוא", @@ -5440,7 +5440,9 @@ "error_failures": "יותר מדי הודעות ברצף נכשלו, ולכן הייבוא נעצר. ייבאו שוב מאוחר יותר את אותם קבצים לאותה תיקייה כדי להמשיך.", "error_network": "החיבור לשרת נכשל שוב ושוב, ולכן הייבוא נעצר. ייבאו שוב את אותם קבצים לאותה תיקייה כדי להמשיך.", "error_busy": "הקבצים האלה כבר מיובאים בכרטיסייה אחרת.", - "retry_hint": "ייבאו שוב את אותם קבצים לאותה תיקייה כדי לנסות שוב את אלה שנכשלו." + "retry_hint": "ייבאו שוב את אותם קבצים לאותה תיקייה כדי לנסות שוב את אלה שנכשלו.", + "skip_unreadable": "לא קריאות בקובץ ה-Outlook: {count}", + "keep_folders_top_hint": "ברמה העליונה, דואר נכנס, פריטים שנשלחו, פריטים שנמחקו ודומיהם נכנסים לתיקיות שלכם." }, "mail_export": { "menu_export": "ייצוא תיקייה…", diff --git a/locales/hu/common.json b/locales/hu/common.json index 5b8daff55..da80ac27e 100644 --- a/locales/hu/common.json +++ b/locales/hu/common.json @@ -5397,7 +5397,7 @@ "target_label": "Importálás ide", "target_top": "Legfelső szint", "keep_folders": "A fájl mappáinak újbóli létrehozása", - "keep_folders_hint": "Az azonos nevű mappák újra felhasználódnak. A legfelső szinten lévő Beérkezett üzenetek, Elküldött elemek és Törölt elemek a saját mappáiba kerülnek.", + "keep_folders_hint": "Az azonos nevű mappák újra felhasználódnak.", "resume": "Folytatás ott, ahol e fájlok legutóbbi importálása megállt (már kész üzenetek: {count})", "quota_note": "Sok szerver felhasználónként óránként csak körülbelül 1000 üzenetet vagy 50 MB-ot fogad. A nagyobb importálás szünetel, majd magától folytatódik.", "start": "Importálás", @@ -5439,7 +5439,9 @@ "error_failures": "Túl sok üzenet hiúsult meg egymás után, ezért az importálás leállt. Később importálja újra ugyanazokat a fájlokat ugyanabba a mappába a folytatáshoz.", "error_network": "A kapcsolat a szerverrel többször megszakadt, ezért az importálás leállt. Importálja újra ugyanazokat a fájlokat ugyanabba a mappába a folytatáshoz.", "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." + "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." }, "mail_export": { "menu_export": "Mappa exportálása…", diff --git a/locales/it/common.json b/locales/it/common.json index 9a80d3a0f..aec4abfe5 100644 --- a/locales/it/common.json +++ b/locales/it/common.json @@ -5267,7 +5267,7 @@ "target_label": "Importa in", "target_top": "Livello principale", "keep_folders": "Ricrea le cartelle del file", - "keep_folders_hint": "Le cartelle con lo stesso nome vengono riutilizzate. Posta in arrivo, Posta inviata ed Elementi eliminati al livello principale finiscono nelle tue.", + "keep_folders_hint": "Le cartelle con lo stesso nome vengono riutilizzate.", "resume": "Riprendi da dove si è fermata l'ultima importazione di questi file (messaggi già elaborati: {count})", "quota_note": "Molti server accettano solo circa 1000 messaggi o 50 MB all'ora per utente. Un'importazione più grande va in pausa e poi riprende da sola.", "start": "Importa", @@ -5309,7 +5309,9 @@ "error_failures": "Troppi messaggi di fila non sono riusciti, quindi l'importazione si è fermata. Importa di nuovo gli stessi file nella stessa cartella più tardi per continuare.", "error_network": "La connessione al server non è riuscita più volte, quindi l'importazione si è fermata. Importa di nuovo gli stessi file nella stessa cartella per continuare.", "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." + "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." }, "mail_export": { "menu_export": "Esporta cartella…", diff --git a/locales/ja/common.json b/locales/ja/common.json index 357bb8cdd..f5b9e1ce9 100644 --- a/locales/ja/common.json +++ b/locales/ja/common.json @@ -5267,7 +5267,7 @@ "target_label": "インポート先", "target_top": "最上位", "keep_folders": "ファイルのフォルダーを作り直す", - "keep_folders_hint": "同じ名前のフォルダーはそのまま使います。最上位の受信トレイ、送信済みアイテム、削除済みアイテムはご自身のフォルダーに入ります。", + "keep_folders_hint": "同じ名前のフォルダーはそのまま使います。", "resume": "これらのファイルの前回のインポートが止まったところから続ける(処理済みのメッセージ: {count})", "quota_note": "多くのサーバーは 1 人のユーザーから 1 時間に約 1000 通または 50 MB までしか受け付けません。それより大きいインポートは一時停止し、その後自動で再開します。", "start": "インポート", @@ -5309,7 +5309,9 @@ "error_failures": "続けて失敗したメッセージが多すぎるため、インポートを停止しました。後で同じファイルを同じフォルダーにもう一度インポートすると続きから再開します。", "error_network": "サーバーへの接続が何度も失敗したため、インポートを停止しました。同じファイルを同じフォルダーにもう一度インポートすると続きから再開します。", "error_busy": "これらのファイルは別のタブですでにインポート中です。", - "retry_hint": "失敗したものをもう一度試すには、同じファイルを同じフォルダーにもう一度インポートしてください。" + "retry_hint": "失敗したものをもう一度試すには、同じファイルを同じフォルダーにもう一度インポートしてください。", + "skip_unreadable": "Outlook ファイル内で読めないもの: {count}", + "keep_folders_top_hint": "最上位では、受信トレイ、送信済みアイテム、削除済みアイテムなどはご自身のフォルダーに入ります。" }, "mail_export": { "menu_export": "フォルダーをエクスポート…", diff --git a/locales/ko/common.json b/locales/ko/common.json index 8df89afd8..b30157e11 100644 --- a/locales/ko/common.json +++ b/locales/ko/common.json @@ -5267,7 +5267,7 @@ "target_label": "가져올 위치", "target_top": "최상위", "keep_folders": "파일의 폴더를 다시 만들기", - "keep_folders_hint": "이름이 같은 폴더는 다시 사용합니다. 최상위의 받은 편지함, 보낸 편지함, 지운 편지함은 사용자의 폴더로 들어갑니다.", + "keep_folders_hint": "이름이 같은 폴더는 다시 사용합니다.", "resume": "이 파일들의 마지막 가져오기가 멈춘 곳부터 계속 (이미 처리한 메시지: {count})", "quota_note": "많은 서버는 사용자 한 명에게서 시간당 약 1000개의 메시지 또는 50MB만 받습니다. 더 큰 가져오기는 잠시 멈췄다가 저절로 계속됩니다.", "start": "가져오기", @@ -5309,7 +5309,9 @@ "error_failures": "연속으로 실패한 메시지가 너무 많아 가져오기를 멈췄습니다. 나중에 같은 파일을 같은 폴더로 다시 가져오면 이어서 진행합니다.", "error_network": "서버 연결이 계속 실패해 가져오기를 멈췄습니다. 같은 파일을 같은 폴더로 다시 가져오면 이어서 진행합니다.", "error_busy": "이 파일은 이미 다른 탭에서 가져오는 중입니다.", - "retry_hint": "실패한 메시지를 다시 시도하려면 같은 파일을 같은 폴더로 다시 가져오세요." + "retry_hint": "실패한 메시지를 다시 시도하려면 같은 파일을 같은 폴더로 다시 가져오세요.", + "skip_unreadable": "Outlook 파일에서 읽을 수 없음: {count}", + "keep_folders_top_hint": "최상위에서는 받은 편지함, 보낸 편지함, 지운 편지함 등이 사용자의 폴더로 들어갑니다." }, "mail_export": { "menu_export": "폴더 내보내기…", diff --git a/locales/lv/common.json b/locales/lv/common.json index 0c117a2ca..6c7228cf4 100644 --- a/locales/lv/common.json +++ b/locales/lv/common.json @@ -5267,7 +5267,7 @@ "target_label": "Importēt mapē", "target_top": "Augšējais līmenis", "keep_folders": "Atjaunot mapes no faila", - "keep_folders_hint": "Mapes ar tādu pašu nosaukumu tiek izmantotas atkārtoti. Augšējā līmeņa Iesūtne, Nosūtītie un Dzēstie nonāk jūsu pašu mapēs.", + "keep_folders_hint": "Mapes ar tādu pašu nosaukumu tiek izmantotas atkārtoti.", "resume": "Turpināt no vietas, kur šo failu pēdējā importēšana apstājās (jau apstrādāti ziņojumi: {count})", "quota_note": "Daudzi serveri no viena lietotāja pieņem tikai aptuveni 1000 ziņojumu vai 50 MB stundā. Lielāka importēšana apstājas un pēc tam turpinās pati.", "start": "Importēt", @@ -5309,7 +5309,9 @@ "error_failures": "Pārāk daudz ziņojumu pēc kārtas neizdevās, tāpēc importēšana apstājās. Vēlāk vēlreiz importējiet tos pašus failus tajā pašā mapē, lai turpinātu.", "error_network": "Savienojums ar serveri atkārtoti neizdevās, tāpēc importēšana apstājās. Vēlreiz importējiet tos pašus failus tajā pašā mapē, lai turpinātu.", "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." + "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." }, "mail_export": { "menu_export": "Eksportēt mapi…", diff --git a/locales/mn/common.json b/locales/mn/common.json index f3c1ef0b6..4c3add596 100644 --- a/locales/mn/common.json +++ b/locales/mn/common.json @@ -5397,7 +5397,7 @@ "target_label": "Импортлох газар", "target_top": "Дээд түвшин", "keep_folders": "Файлын хавтаснуудыг дахин үүсгэх", - "keep_folders_hint": "Ижил нэртэй хавтсыг дахин ашиглана. Дээд түвшний Ирсэн, Илгээсэн, Устгасан хавтаснууд таны өөрийнх рүү орно.", + "keep_folders_hint": "Ижил нэртэй хавтсыг дахин ашиглана.", "resume": "Эдгээр файлын сүүлийн импорт зогссон газраас үргэлжлүүлэх (аль хэдийн хийсэн захидал: {count})", "quota_note": "Олон сервер нэг хэрэглэгчээс цагт ойролцоогоор 1000 захидал эсвэл 50 MB л хүлээн авдаг. Үүнээс том импорт түр зогсоод дараа нь өөрөө үргэлжилнэ.", "start": "Импортлох", @@ -5439,7 +5439,9 @@ "error_failures": "Дараалан хэт олон захидал амжилтгүй болсон тул импорт зогслоо. Үргэлжлүүлэхийн тулд дараа нь ижил файлуудыг ижил хавтас руу дахин импортлоно уу.", "error_network": "Сервертэй холболт удаа дараа тасарсан тул импорт зогслоо. Үргэлжлүүлэхийн тулд ижил файлуудыг ижил хавтас руу дахин импортлоно уу.", "error_busy": "Эдгээр файлыг өөр табд аль хэдийн импортлож байна.", - "retry_hint": "Амжилтгүй болсон захидлуудыг дахин оролдохын тулд ижил файлуудыг ижил хавтас руу дахин импортлоно уу." + "retry_hint": "Амжилтгүй болсон захидлуудыг дахин оролдохын тулд ижил файлуудыг ижил хавтас руу дахин импортлоно уу.", + "skip_unreadable": "Outlook файлд уншигдахгүй: {count}", + "keep_folders_top_hint": "Дээд түвшинд Ирсэн, Илгээсэн, Устгасан болон түүнтэй адил хавтаснууд таны өөрийнх рүү орно." }, "mail_export": { "menu_export": "Хавтас экспортлох…", diff --git a/locales/nb/common.json b/locales/nb/common.json index d1bb21c19..835c30835 100644 --- a/locales/nb/common.json +++ b/locales/nb/common.json @@ -5397,7 +5397,7 @@ "target_label": "Importer til", "target_top": "Øverste nivå", "keep_folders": "Gjenskap mappene fra filen", - "keep_folders_hint": "Mapper med samme navn brukes på nytt. Innboks, Sendte elementer og Slettede elementer på øverste nivå havner i dine egne.", + "keep_folders_hint": "Mapper med samme navn brukes på nytt.", "resume": "Fortsett der forrige import av disse filene stoppet (meldinger allerede ferdige: {count})", "quota_note": "Mange servere tar bare imot rundt 1000 meldinger eller 50 MB i timen fra én bruker. En større import tar en pause og fortsetter så av seg selv.", "start": "Importer", @@ -5439,7 +5439,9 @@ "error_failures": "For mange meldinger på rad mislyktes, så importen stoppet. Importer de samme filene til samme mappe igjen senere for å fortsette.", "error_network": "Tilkoblingen til serveren mislyktes gang på gang, så importen stoppet. Importer de samme filene til samme mappe igjen for å fortsette.", "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." + "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." }, "mail_export": { "menu_export": "Eksporter mappe…", diff --git a/locales/nl/common.json b/locales/nl/common.json index c60b4c431..064c3eb48 100644 --- a/locales/nl/common.json +++ b/locales/nl/common.json @@ -5267,7 +5267,7 @@ "target_label": "Importeren in", "target_top": "Hoogste niveau", "keep_folders": "De mappen uit het bestand overnemen", - "keep_folders_hint": "Mappen met dezelfde naam worden opnieuw gebruikt. Postvak IN, Verzonden items en Verwijderde items op het hoogste niveau gaan naar die van u.", + "keep_folders_hint": "Mappen met dezelfde naam worden opnieuw gebruikt.", "resume": "Doorgaan waar de laatste import van deze bestanden stopte (al verwerkte berichten: {count})", "quota_note": "Veel servers nemen per gebruiker maar ongeveer 1000 berichten of 50 MB per uur aan. Een grotere import pauzeert en gaat daarna vanzelf verder.", "start": "Importeren", @@ -5309,7 +5309,9 @@ "error_failures": "Te veel berichten na elkaar zijn mislukt, dus de import is gestopt. Importeer dezelfde bestanden later opnieuw in dezelfde map om verder te gaan.", "error_network": "De verbinding met de server mislukte steeds, dus de import is gestopt. Importeer dezelfde bestanden opnieuw in dezelfde map om verder te gaan.", "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." + "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." }, "mail_export": { "menu_export": "Map exporteren…", diff --git a/locales/pl/common.json b/locales/pl/common.json index 99d7ea5f0..69309dec6 100644 --- a/locales/pl/common.json +++ b/locales/pl/common.json @@ -5267,7 +5267,7 @@ "target_label": "Importuj do", "target_top": "Najwyższy poziom", "keep_folders": "Odtwórz foldery z pliku", - "keep_folders_hint": "Foldery o tej samej nazwie są używane ponownie. Skrzynka odbiorcza, Elementy wysłane i Elementy usunięte na najwyższym poziomie trafiają do Twoich własnych.", + "keep_folders_hint": "Foldery o tej samej nazwie są używane ponownie.", "resume": "Kontynuuj tam, gdzie zatrzymał się ostatni import tych plików (wiadomości już zrobione: {count})", "quota_note": "Wiele serwerów przyjmuje od jednego użytkownika tylko około 1000 wiadomości lub 50 MB na godzinę. Większy import robi przerwę, a potem sam działa dalej.", "start": "Importuj", @@ -5309,7 +5309,9 @@ "error_failures": "Zbyt wiele wiadomości z rzędu się nie udało, więc import się zatrzymał. Zaimportuj te same pliki później ponownie do tego samego folderu, aby kontynuować.", "error_network": "Połączenie z serwerem wielokrotnie zawiodło, więc import się zatrzymał. Zaimportuj te same pliki ponownie do tego samego folderu, aby kontynuować.", "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." + "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." }, "mail_export": { "menu_export": "Eksportuj folder…", diff --git a/locales/pt/common.json b/locales/pt/common.json index 9c0f43c32..c526a3494 100644 --- a/locales/pt/common.json +++ b/locales/pt/common.json @@ -5267,7 +5267,7 @@ "target_label": "Importar para", "target_top": "Nível superior", "keep_folders": "Recriar as pastas do arquivo", - "keep_folders_hint": "Pastas com o mesmo nome são reutilizadas. Caixa de entrada, Itens enviados e Itens excluídos no nível superior vão para as suas.", + "keep_folders_hint": "Pastas com o mesmo nome são reutilizadas.", "resume": "Continuar de onde a última importação destes arquivos parou (mensagens já processadas: {count})", "quota_note": "Muitos servidores aceitam só cerca de 1000 mensagens ou 50 MB por hora de cada usuário. Uma importação maior faz uma pausa e depois continua sozinha.", "start": "Importar", @@ -5309,7 +5309,9 @@ "error_failures": "Muitas mensagens falharam seguidas, por isso a importação parou. Importe os mesmos arquivos na mesma pasta mais tarde para continuar.", "error_network": "A conexão com o servidor falhou várias vezes, por isso a importação parou. Importe os mesmos arquivos na mesma pasta outra vez para continuar.", "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." + "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." }, "mail_export": { "menu_export": "Exportar pasta…", diff --git a/locales/ro/common.json b/locales/ro/common.json index 285eb455f..3ce4c4f98 100644 --- a/locales/ro/common.json +++ b/locales/ro/common.json @@ -5397,7 +5397,7 @@ "target_label": "Importă în", "target_top": "Nivelul de sus", "keep_folders": "Recreează dosarele din fișier", - "keep_folders_hint": "Dosarele cu același nume sunt refolosite. Inbox, Elemente trimise și Elemente șterse de la nivelul de sus ajung în ale dumneavoastră.", + "keep_folders_hint": "Dosarele cu același nume sunt refolosite.", "resume": "Continuă de unde s-a oprit ultimul import al acestor fișiere (mesaje deja procesate: {count})", "quota_note": "Multe servere acceptă de la un utilizator doar circa 1000 de mesaje sau 50 MB pe oră. Un import mai mare face o pauză și apoi continuă singur.", "start": "Importă", @@ -5439,7 +5439,9 @@ "error_failures": "Prea multe mesaje la rând au eșuat, așa că importul s-a oprit. Importați mai târziu aceleași fișiere în același dosar pentru a continua.", "error_network": "Conexiunea la server a eșuat de mai multe ori, așa că importul s-a oprit. Importați din nou aceleași fișiere în același dosar pentru a continua.", "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." + "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ă." }, "mail_export": { "menu_export": "Exportă dosarul…", diff --git a/locales/ru/common.json b/locales/ru/common.json index 60d2080a4..dd7684803 100644 --- a/locales/ru/common.json +++ b/locales/ru/common.json @@ -5267,7 +5267,7 @@ "target_label": "Импортировать в", "target_top": "Верхний уровень", "keep_folders": "Воссоздать папки из файла", - "keep_folders_hint": "Папки с тем же именем используются повторно. Входящие, Отправленные и Удалённые на верхнем уровне попадают в ваши собственные.", + "keep_folders_hint": "Папки с тем же именем используются повторно.", "resume": "Продолжить с места, где остановился прошлый импорт этих файлов (уже обработано сообщений: {count})", "quota_note": "Многие серверы принимают от одного пользователя лишь около 1000 сообщений или 50 МБ в час. Большой импорт приостанавливается и затем продолжается сам.", "start": "Импортировать", @@ -5309,7 +5309,9 @@ "error_failures": "Слишком много сообщений подряд не удалось импортировать, поэтому импорт остановлен. Позже снова импортируйте те же файлы в ту же папку, чтобы продолжить.", "error_network": "Соединение с сервером несколько раз прерывалось, поэтому импорт остановлен. Снова импортируйте те же файлы в ту же папку, чтобы продолжить.", "error_busy": "Эти файлы уже импортируются в другой вкладке.", - "retry_hint": "Снова импортируйте те же файлы в ту же папку, чтобы ещё раз попробовать неудавшиеся." + "retry_hint": "Снова импортируйте те же файлы в ту же папку, чтобы ещё раз попробовать неудавшиеся.", + "skip_unreadable": "Не читаются в файле Outlook: {count}", + "keep_folders_top_hint": "На верхнем уровне Входящие, Отправленные, Удалённые и подобные попадают в ваши собственные." }, "mail_export": { "menu_export": "Экспортировать папку…", diff --git a/locales/sk/common.json b/locales/sk/common.json index 56dd2f3fb..f44c36f36 100644 --- a/locales/sk/common.json +++ b/locales/sk/common.json @@ -5397,7 +5397,7 @@ "target_label": "Importovať do", "target_top": "Najvyššia úroveň", "keep_folders": "Znovu vytvoriť priečinky zo súboru", - "keep_folders_hint": "Priečinky s rovnakým názvom sa použijú znova. Doručená pošta, Odoslaná pošta a Odstránená pošta na najvyššej úrovni skončia vo vašich vlastných.", + "keep_folders_hint": "Priečinky s rovnakým názvom sa použijú znova.", "resume": "Pokračovať tam, kde sa posledný import týchto súborov zastavil (už hotové správy: {count})", "quota_note": "Mnohé servery prijímajú od jedného používateľa len asi 1000 správ alebo 50 MB za hodinu. Väčší import sa pozastaví a potom pokračuje sám.", "start": "Importovať", @@ -5439,7 +5439,9 @@ "error_failures": "Príliš veľa správ za sebou zlyhalo, preto sa import zastavil. Importujte rovnaké súbory neskôr znova do rovnakého priečinka, aby ste pokračovali.", "error_network": "Spojenie so serverom opakovane zlyhalo, preto sa import zastavil. Importujte rovnaké súbory znova do rovnakého priečinka, aby ste pokračovali.", "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." + "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." }, "mail_export": { "menu_export": "Exportovať priečinok…", diff --git a/locales/th/common.json b/locales/th/common.json index 603c2bc09..39a645601 100644 --- a/locales/th/common.json +++ b/locales/th/common.json @@ -414,7 +414,7 @@ "target_label": "นำเข้าไปที่", "target_top": "ระดับบนสุด", "keep_folders": "สร้างโฟลเดอร์จากไฟล์ขึ้นใหม่", - "keep_folders_hint": "โฟลเดอร์ที่ชื่อเดียวกันจะถูกใช้ซ้ำ กล่องจดหมายเข้า รายการที่ส่ง และรายการที่ลบในระดับบนสุดจะเข้าไปในโฟลเดอร์ของคุณเอง", + "keep_folders_hint": "โฟลเดอร์ที่ชื่อเดียวกันจะถูกใช้ซ้ำ", "resume": "ทำต่อจากจุดที่การนำเข้าไฟล์เหล่านี้ครั้งล่าสุดหยุดไว้ (ข้อความที่ทำแล้ว: {count})", "quota_note": "เซิร์ฟเวอร์หลายแห่งรับจากผู้ใช้หนึ่งคนได้เพียงประมาณ 1000 ข้อความหรือ 50 MB ต่อชั่วโมง การนำเข้าที่ใหญ่กว่านี้จะหยุดพักแล้วทำต่อเอง", "start": "นำเข้า", @@ -456,7 +456,9 @@ "error_failures": "ข้อความล้มเหลวติดต่อกันมากเกินไป การนำเข้าจึงหยุดลง นำเข้าไฟล์เดิมไปยังโฟลเดอร์เดิมอีกครั้งภายหลังเพื่อทำต่อ", "error_network": "การเชื่อมต่อกับเซิร์ฟเวอร์ล้มเหลวซ้ำๆ การนำเข้าจึงหยุดลง นำเข้าไฟล์เดิมไปยังโฟลเดอร์เดิมอีกครั้งเพื่อทำต่อ", "error_busy": "ไฟล์เหล่านี้กำลังถูกนำเข้าในอีกแท็บหนึ่งอยู่แล้ว", - "retry_hint": "นำเข้าไฟล์เดิมไปยังโฟลเดอร์เดิมอีกครั้งเพื่อลองข้อความที่ล้มเหลวอีกรอบ" + "retry_hint": "นำเข้าไฟล์เดิมไปยังโฟลเดอร์เดิมอีกครั้งเพื่อลองข้อความที่ล้มเหลวอีกรอบ", + "skip_unreadable": "อ่านไม่ได้ในไฟล์ Outlook: {count}", + "keep_folders_top_hint": "ในระดับบนสุด กล่องจดหมายเข้า รายการที่ส่ง รายการที่ลบ และที่คล้ายกันจะเข้าไปในโฟลเดอร์ของคุณเอง" }, "mail_export": { "menu_export": "ส่งออกโฟลเดอร์…", diff --git a/locales/tr/common.json b/locales/tr/common.json index 227075d45..8fea33739 100644 --- a/locales/tr/common.json +++ b/locales/tr/common.json @@ -5397,7 +5397,7 @@ "target_label": "Şuraya aktar", "target_top": "En üst düzey", "keep_folders": "Dosyadaki klasörleri yeniden oluştur", - "keep_folders_hint": "Aynı adlı klasörler yeniden kullanılır. En üst düzeydeki Gelen Kutusu, Gönderilmiş Öğeler ve Silinmiş Öğeler sizinkilere gider.", + "keep_folders_hint": "Aynı adlı klasörler yeniden kullanılır.", "resume": "Bu dosyaların son içe aktarımının durduğu yerden devam et (zaten işlenen iletiler: {count})", "quota_note": "Birçok sunucu bir kullanıcıdan saatte yalnızca yaklaşık 1000 ileti veya 50 MB kabul eder. Daha büyük bir içe aktarım duraklar ve sonra kendiliğinden devam eder.", "start": "İçe aktar", @@ -5439,7 +5439,9 @@ "error_failures": "Arka arkaya çok fazla ileti başarısız olduğundan içe aktarım durdu. Devam etmek için aynı dosyaları daha sonra aynı klasöre yeniden içe aktarın.", "error_network": "Sunucuya bağlantı tekrar tekrar başarısız olduğundan içe aktarım durdu. Devam etmek için aynı dosyaları aynı klasöre yeniden içe aktarın.", "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." + "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." }, "mail_export": { "menu_export": "Klasörü dışa aktar…", diff --git a/locales/uk/common.json b/locales/uk/common.json index 904ebfec3..4a64a248d 100644 --- a/locales/uk/common.json +++ b/locales/uk/common.json @@ -5267,7 +5267,7 @@ "target_label": "Імпортувати до", "target_top": "Верхній рівень", "keep_folders": "Відтворити теки з файлу", - "keep_folders_hint": "Теки з тією самою назвою використовуються повторно. Вхідні, Надіслані та Видалені на верхньому рівні потрапляють до ваших власних.", + "keep_folders_hint": "Теки з тією самою назвою використовуються повторно.", "resume": "Продовжити з місця, де зупинився останній імпорт цих файлів (уже оброблено повідомлень: {count})", "quota_note": "Багато серверів приймають від одного користувача лише близько 1000 повідомлень або 50 МБ на годину. Більший імпорт призупиняється, а потім продовжується сам.", "start": "Імпортувати", @@ -5309,7 +5309,9 @@ "error_failures": "Забагато повідомлень поспіль не вдалося імпортувати, тому імпорт зупинено. Пізніше знову імпортуйте ті самі файли до тієї самої теки, щоб продовжити.", "error_network": "З'єднання із сервером кілька разів переривалося, тому імпорт зупинено. Знову імпортуйте ті самі файли до тієї самої теки, щоб продовжити.", "error_busy": "Ці файли вже імпортуються в іншій вкладці.", - "retry_hint": "Знову імпортуйте ті самі файли до тієї самої теки, щоб ще раз спробувати невдалі." + "retry_hint": "Знову імпортуйте ті самі файли до тієї самої теки, щоб ще раз спробувати невдалі.", + "skip_unreadable": "Не читаються у файлі Outlook: {count}", + "keep_folders_top_hint": "На верхньому рівні Вхідні, Надіслані, Видалені й подібні потрапляють до ваших власних." }, "mail_export": { "menu_export": "Експортувати теку…", diff --git a/locales/vi/common.json b/locales/vi/common.json index eb1c3aef7..6c71133cf 100644 --- a/locales/vi/common.json +++ b/locales/vi/common.json @@ -5409,7 +5409,7 @@ "target_label": "Nhập vào", "target_top": "Cấp cao nhất", "keep_folders": "Tạo lại các thư mục từ tệp", - "keep_folders_hint": "Thư mục cùng tên sẽ được dùng lại. Hộp thư đến, Thư đã gửi và Thư đã xóa ở cấp cao nhất sẽ vào thư mục của bạn.", + "keep_folders_hint": "Thư mục cùng tên sẽ được dùng lại.", "resume": "Tiếp tục từ chỗ lần nhập trước của các tệp này dừng lại (thư đã xử lý: {count})", "quota_note": "Nhiều máy chủ chỉ nhận khoảng 1000 thư hoặc 50 MB mỗi giờ từ một người dùng. Lần nhập lớn hơn sẽ tạm dừng rồi tự tiếp tục.", "start": "Nhập", @@ -5451,7 +5451,9 @@ "error_failures": "Quá nhiều thư liên tiếp không nhập được nên việc nhập đã dừng. Hãy nhập lại cùng các tệp vào cùng thư mục sau để tiếp tục.", "error_network": "Kết nối tới máy chủ liên tục thất bại nên việc nhập đã dừng. Hãy nhập lại cùng các tệp vào cùng thư mục để tiếp tục.", "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." + "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." }, "mail_export": { "menu_export": "Xuất thư mục…", diff --git a/locales/zh-TW/common.json b/locales/zh-TW/common.json index 35258a250..d4daa93f8 100644 --- a/locales/zh-TW/common.json +++ b/locales/zh-TW/common.json @@ -5397,7 +5397,7 @@ "target_label": "匯入到", "target_top": "最上層", "keep_folders": "依檔案重建資料夾", - "keep_folders_hint": "同名資料夾會重複使用。最上層的收件匣、寄件備份和刪除的郵件會進入您自己的資料夾。", + "keep_folders_hint": "同名資料夾會重複使用。", "resume": "從這些檔案上次匯入停止的地方繼續(已處理的郵件:{count})", "quota_note": "許多伺服器每小時只接受單一使用者約 1000 封郵件或 50 MB。較大的匯入會暫停,然後自動繼續。", "start": "匯入", @@ -5439,7 +5439,9 @@ "error_failures": "連續失敗的郵件太多,匯入已停止。請稍後把相同的檔案再次匯入同一個資料夾以繼續。", "error_network": "與伺服器的連線多次失敗,匯入已停止。請把相同的檔案再次匯入同一個資料夾以繼續。", "error_busy": "這些檔案已在另一個分頁中匯入。", - "retry_hint": "把相同的檔案再次匯入同一個資料夾,即可重試失敗的郵件。" + "retry_hint": "把相同的檔案再次匯入同一個資料夾,即可重試失敗的郵件。", + "skip_unreadable": "Outlook 檔案中無法讀取:{count}", + "keep_folders_top_hint": "在最上層,收件匣、寄件備份、刪除的郵件等會進入您自己的資料夾。" }, "mail_export": { "menu_export": "匯出資料夾…", diff --git a/locales/zh/common.json b/locales/zh/common.json index 3686dea1c..abf66607f 100644 --- a/locales/zh/common.json +++ b/locales/zh/common.json @@ -5267,7 +5267,7 @@ "target_label": "导入到", "target_top": "顶层", "keep_folders": "按文件重建文件夹", - "keep_folders_hint": "同名文件夹会被重复使用。顶层的收件箱、已发送邮件和已删除邮件会进入您自己的文件夹。", + "keep_folders_hint": "同名文件夹会被重复使用。", "resume": "从这些文件上次导入停止的地方继续(已处理的邮件:{count})", "quota_note": "很多服务器每小时只接受单个用户约 1000 封邮件或 50 MB。更大的导入会暂停,然后自动继续。", "start": "导入", @@ -5309,7 +5309,9 @@ "error_failures": "连续失败的邮件太多,导入已停止。请稍后把相同的文件再次导入同一个文件夹以继续。", "error_network": "与服务器的连接多次失败,导入已停止。请把相同的文件再次导入同一个文件夹以继续。", "error_busy": "这些文件已在另一个标签页中导入。", - "retry_hint": "把相同的文件再次导入同一个文件夹,即可重试失败的邮件。" + "retry_hint": "把相同的文件再次导入同一个文件夹,即可重试失败的邮件。", + "skip_unreadable": "Outlook 文件中无法读取:{count}", + "keep_folders_top_hint": "在顶层,收件箱、已发送邮件、已删除邮件等会进入您自己的文件夹。" }, "mail_export": { "menu_export": "导出文件夹…",