fix: read Outlook files more safely and put their special folders in the right place

- A message whose attachments are bigger than the server takes is
  skipped before anything is read (a 1 GB attachment took several GB in
  the worker and could crash it), and a worker that stops answering
  ends the import with a message instead of a wait that never ends.
- The items after a broken one in a PST folder are counted as
  unreadable in the summary instead of disappearing.
- Sent Items and Deleted Items are known from the PST's own entry IDs,
  and the Inbox and the others by their names in more languages, so a
  PST imported at the top level fills the user's own folders whatever
  its language. The hint about that shows only for the top level.
- Message-ID, In-Reply-To and Content-ID from the PST can't carry line
  breaks into the rebuilt headers.
This commit is contained in:
Linus Rath
2026-11-01 06:45:33 +01:00
parent d9b62dfe9d
commit 7102a6f0cb
39 changed files with 324 additions and 83 deletions
@@ -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 }) {
/>
<span>
{t("keep_folders")}
<span id={`${id}-keep-hint`} className="block text-xs text-muted-foreground">{t("keep_folders_hint")}</span>
<span id={`${id}-keep-hint`} className="block text-xs text-muted-foreground">
{t("keep_folders_hint")}
{target === TOP && <> {t("keep_folders_top_hint")}</>}
</span>
</span>
</label>
)}
+12 -1
View File
@@ -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 });
@@ -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' };
+64 -2
View File
@@ -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: '<a@b>\r\nBcc: victim@example.org', inReplyTo: 'c@d',
html: '<img src="cid:img1">',
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: <c@d>\r$/m);
const evil = new TextDecoder().decode(buildMime({
subject: 's', to: [], cc: [], bcc: [], text: 'x', html: '<img src="cid:x>\r\nX-Evil: 1">',
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');
+14 -2
View File
@@ -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<WorkerMessage> => {
while (queue.length === 0) await new Promise<void>((resolve) => { wake = resolve; });
while (queue.length === 0) {
let timer: ReturnType<typeof setTimeout> | undefined;
await new Promise<void>((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;
+55 -6
View File
@@ -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<PstFolderRef> {
top = null;
}
function* walk(folder: PstObject, path: string[], depth: number): Generator<PstFolderRef> {
// 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<number, string>();
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<PstFolderRef> {
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<PstFolderRef> {
// 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.
+23 -7
View File
@@ -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,
};
}
}
+16 -3
View File
@@ -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 `<id>`, 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");
+2
View File
@@ -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";
+4 -2
View File
@@ -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": "تصدير المجلد…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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": "برون‌بری پوشه…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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": "ייצוא תיקייה…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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": "フォルダーをエクスポート…",
+4 -2
View File
@@ -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": "폴더 내보내기…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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": "Хавтас экспортлох…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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": "Экспортировать папку…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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": "ส่งออกโฟลเดอร์…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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": "Експортувати теку…",
+4 -2
View File
@@ -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…",
+4 -2
View File
@@ -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": "匯出資料夾…",
+4 -2
View File
@@ -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": "导出文件夹…",