fix: label the composer toolbar buttons and group send options in a menu

This commit is contained in:
Linus Rath
2026-10-11 18:58:26 +02:00
parent e7b9dcac10
commit 9dc0f9c892
33 changed files with 623 additions and 346 deletions
@@ -219,6 +219,7 @@ function filesClient(overrides: Record<string, unknown> = {}) {
function pickFromFiles(nodes: FileNode[]) {
hoisted.picked = nodes;
fireEvent.click(screen.getByTestId('composer-attach-menu'));
fireEvent.click(screen.getByTestId('composer-attach-from-files'));
fireEvent.click(screen.getByTestId('fake-file-picker'));
}
@@ -234,6 +235,7 @@ describe('attach from Files', () => {
useAuthStore.setState({ client: filesClient({ supportsFiles: () => false }) as never });
render(<EmailComposer onClose={vi.fn()} />);
expect(screen.queryByTestId('composer-attach-from-files')).toBeNull();
expect(screen.queryByTestId('composer-attach-menu')).toBeNull();
});
it('attaches the picked files by their blobId and saves them with the draft', async () => {
@@ -197,7 +197,11 @@ const DRAFT = {
draftId: null,
};
const toggle = () => screen.getByTestId('composer-format-toggle') as HTMLButtonElement;
// The plain-text switch lives in the toolbar's Options menu; open it on demand.
const toggle = () => {
if (!screen.queryByTestId('composer-format-toggle')) fireEvent.click(screen.getByTestId('composer-options-menu'));
return screen.getByTestId('composer-format-toggle') as HTMLButtonElement;
};
const sendButton = () => screen.getAllByTestId('composer-send')[0] as HTMLButtonElement;
const textarea = () => document.querySelector('textarea') as HTMLTextAreaElement | null;
const countOf = (haystack: string, needle: string) => haystack.split(needle).length - 1;
@@ -218,14 +222,12 @@ describe('composer HTML / plain-text toggle (#1022)', () => {
render(<EmailComposer initialData={DRAFT} />);
expect(screen.getByTestId('rich-text-editor')).toBeInTheDocument();
expect(textarea()).toBeNull();
expect(toggle()).toHaveAttribute('aria-pressed', 'false');
expect(toggle()).toHaveAttribute('title', 'format_plain_text');
expect(toggle()).toHaveAttribute('aria-checked', 'false');
fireEvent.click(toggle());
expect(screen.queryByTestId('rich-text-editor')).not.toBeInTheDocument();
expect(toggle()).toHaveAttribute('aria-pressed', 'true');
expect(toggle()).toHaveAttribute('title', 'format_rich_text');
expect(toggle()).toHaveAttribute('aria-checked', 'true');
// Formatting flattened, signature carried over as plain text - once.
expect(textarea()!.value).toBe('Draft text\n\n-- \nAlice');
});
@@ -262,7 +264,7 @@ describe('composer HTML / plain-text toggle (#1022)', () => {
useSettingsStore.setState({ plainTextMode: true });
render(<EmailComposer initialData={{ ...DRAFT, body: 'Plain draft' }} />);
expect(textarea()).not.toBeNull();
expect(toggle()).toHaveAttribute('aria-pressed', 'true');
expect(toggle()).toHaveAttribute('aria-checked', 'true');
fireEvent.click(toggle());
expect(screen.getByTestId('rich-text-editor')).toBeInTheDocument();
@@ -0,0 +1,66 @@
import { describe, it, expect, vi } from 'vitest';
import { render, screen, fireEvent } from '@testing-library/react';
import { ComposerToolbarMenu, ComposerToolbarMenuItem, ComposerToolbarMenuCheckItem } from '../composer-toolbar-menu';
import { Paperclip } from '@/components/icons';
describe('ComposerToolbarMenu', () => {
it('names the button with its label and shows how many options are on', () => {
render(
<ComposerToolbarMenu icon={Paperclip} label="Options" activeCount={2} testId="menu">
{() => null}
</ComposerToolbarMenu>
);
const button = screen.getByTestId('menu');
expect(button).toHaveAccessibleName('Options');
expect(button).toHaveTextContent('Options');
expect(button).toHaveTextContent('2');
});
it('keeps the menu open while toggling options and closes on Escape or outside click', () => {
const onToggle = vi.fn();
render(
<div>
<button data-testid="outside">x</button>
<ComposerToolbarMenu icon={Paperclip} label="Options" testId="menu">
{() => (
<ComposerToolbarMenuCheckItem checked={false} onToggle={onToggle} description="hint" testId="opt">
Plain text
</ComposerToolbarMenuCheckItem>
)}
</ComposerToolbarMenu>
</div>
);
expect(screen.queryByRole('menu')).toBeNull();
fireEvent.click(screen.getByTestId('menu'));
expect(screen.getByTestId('menu')).toHaveAttribute('aria-expanded', 'true');
fireEvent.click(screen.getByTestId('opt'));
expect(onToggle).toHaveBeenCalledTimes(1);
expect(screen.getByRole('menu')).toBeInTheDocument();
expect(screen.getByTestId('opt')).toHaveAttribute('aria-checked', 'false');
fireEvent.keyDown(document, { key: 'Escape' });
expect(screen.queryByRole('menu')).toBeNull();
fireEvent.click(screen.getByTestId('menu'));
fireEvent.mouseDown(screen.getByTestId('outside'));
expect(screen.queryByRole('menu')).toBeNull();
});
it('closes after picking a plain action item', () => {
const onSelect = vi.fn();
render(
<ComposerToolbarMenu icon={Paperclip} label="Templates" testId="menu">
{(close) => (
<ComposerToolbarMenuItem onSelect={() => { close(); onSelect(); }} testId="item">
Insert template
</ComposerToolbarMenuItem>
)}
</ComposerToolbarMenu>
);
fireEvent.click(screen.getByTestId('menu'));
fireEvent.click(screen.getByTestId('item'));
expect(onSelect).toHaveBeenCalledTimes(1);
expect(screen.queryByRole('menu')).toBeNull();
});
});
+140
View File
@@ -0,0 +1,140 @@
"use client";
import { useEffect, useId, useRef, useState } from "react";
import { Button } from "@/components/ui/button";
import { Check, ChevronDown, type AppIcon } from "@/components/icons";
import { cn } from "@/lib/utils";
interface ComposerToolbarMenuProps {
icon: AppIcon;
label: string;
/** Number of options that are switched on, shown as a badge on the button. */
activeCount?: number;
testId?: string;
children: (close: () => void) => React.ReactNode;
}
/**
* A labelled toolbar button that opens a small menu above it. The label is
* always the accessible name; it is only hidden visually on narrow screens.
*/
export function ComposerToolbarMenu({ icon: Icon, label, activeCount = 0, testId, children }: ComposerToolbarMenuProps) {
const [open, setOpen] = useState(false);
const rootRef = useRef<HTMLDivElement>(null);
const menuId = useId();
useEffect(() => {
if (!open) return;
const onPointerDown = (event: MouseEvent) => {
if (!rootRef.current?.contains(event.target as Node)) setOpen(false);
};
const onKeyDown = (event: KeyboardEvent) => {
if (event.key === "Escape") {
event.stopPropagation();
setOpen(false);
}
};
document.addEventListener("mousedown", onPointerDown);
document.addEventListener("keydown", onKeyDown, true);
return () => {
document.removeEventListener("mousedown", onPointerDown);
document.removeEventListener("keydown", onKeyDown, true);
};
}, [open]);
const close = () => setOpen(false);
return (
<div ref={rootRef} className="relative">
<Button
type="button"
variant="ghost"
onClick={() => setOpen((v) => !v)}
className={cn("h-9 gap-1.5 px-2 sm:px-2.5", open && "bg-muted")}
title={label}
aria-label={label}
aria-haspopup="menu"
aria-expanded={open}
aria-controls={open ? menuId : undefined}
data-testid={testId}
>
<Icon className="w-4 h-4" />
<span className="hidden sm:inline text-sm">{label}</span>
{activeCount > 0 && (
<span className="min-w-4 h-4 rounded-full bg-primary px-1 text-[10px] font-semibold leading-4 text-primary-foreground">
{activeCount}
</span>
)}
<ChevronDown className="hidden sm:block w-3.5 h-3.5 text-muted-foreground" />
</Button>
{open && (
<div
id={menuId}
role="menu"
aria-label={label}
className="absolute start-0 bottom-full z-50 mb-2 min-w-56 rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg"
>
{children(close)}
</div>
)}
</div>
);
}
interface ItemProps {
icon?: AppIcon;
onSelect: () => void;
testId?: string;
children: React.ReactNode;
}
export function ComposerToolbarMenuItem({ icon: Icon, onSelect, testId, children }: ItemProps) {
return (
<button
type="button"
role="menuitem"
onClick={onSelect}
data-testid={testId}
className="flex w-full items-center gap-2 rounded-sm px-3 py-2 text-start text-sm hover:bg-accent hover:text-accent-foreground"
>
{Icon ? <Icon className="w-4 h-4 shrink-0 text-muted-foreground" /> : null}
<span className="flex-1">{children}</span>
</button>
);
}
interface CheckItemProps {
checked: boolean;
onToggle: () => void;
description?: string;
testId?: string;
children: React.ReactNode;
}
/** A menu entry that stays open on click so several options can be set in one go. */
export function ComposerToolbarMenuCheckItem({ checked, onToggle, description, testId, children }: CheckItemProps) {
return (
<button
type="button"
role="menuitemcheckbox"
aria-checked={checked}
onClick={onToggle}
data-testid={testId}
className="flex w-full items-start gap-2 rounded-sm px-3 py-2 text-start text-sm hover:bg-accent hover:text-accent-foreground"
>
<span
className={cn(
"mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-sm border",
checked ? "border-primary bg-primary text-primary-foreground" : "border-muted-foreground/50"
)}
aria-hidden="true"
>
{checked && <Check className="w-3 h-3" />}
</span>
<span className="flex-1">
<span className="block">{children}</span>
{description && <span className="block text-xs text-muted-foreground">{description}</span>}
</span>
</button>
);
}
+81 -97
View File
@@ -5,7 +5,8 @@ import { useFocusTrap } from "@/hooks/use-focus-trap";
import { useTranslations } from "next-intl";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { X, Paperclip, Send, Save, Check, Loader2, AlertCircle, FileText, BookmarkPlus, CalendarClock, ChevronDown, MailCheck, Search, Users, PackageCheck, LockKeyhole, Type, HardDrive } from "@/components/icons";
import { X, Paperclip, Send, Save, Check, Loader2, AlertCircle, FileText, BookmarkPlus, CalendarClock, ChevronDown, Search, Users, SlidersHorizontal, LayoutTemplate, Upload, FolderOpen } from "@/components/icons";
import { ComposerToolbarMenu, ComposerToolbarMenuItem, ComposerToolbarMenuCheckItem } from "@/components/email/composer-toolbar-menu";
import { cn, formatFileSize, formatDateTime, generateUUID } from "@/lib/utils";
import { debug } from "@/lib/debug";
import { toast } from "@/stores/toast-store";
@@ -3413,112 +3414,95 @@ export function EmailComposer({
className="hidden"
accept="*/*"
/>
<Button
variant="ghost"
size="icon"
onClick={() => fileInputRef.current?.click()}
className="h-9 w-9"
title={t('attach')}
>
<Paperclip className="w-4 h-4" />
</Button>
{filesEnabled && composerClient?.supportsFiles?.() && (
{filesEnabled && composerClient?.supportsFiles?.() ? (
<ComposerToolbarMenu icon={Paperclip} label={t('attach')} testId="composer-attach-menu">
{(close) => <>
<ComposerToolbarMenuItem
icon={Upload}
onSelect={() => { close(); fileInputRef.current?.click(); }}
>
{t('attach_from_device')}
</ComposerToolbarMenuItem>
<ComposerToolbarMenuItem
icon={FolderOpen}
onSelect={() => { close(); setFilesPicker({ client: composerClient, accountId: composerAccountId }); }}
testId="composer-attach-from-files"
>
{t('attach_from_files')}
</ComposerToolbarMenuItem>
</>}
</ComposerToolbarMenu>
) : (
<Button
variant="ghost"
size="icon"
onClick={() => setFilesPicker({ client: composerClient, accountId: composerAccountId })}
className="h-9 w-9"
title={t('attach_from_files')}
aria-label={t('attach_from_files')}
data-testid="composer-attach-from-files"
onClick={() => fileInputRef.current?.click()}
className="h-9 gap-1.5 px-2 sm:px-2.5"
title={t('attach')}
aria-label={t('attach')}
>
<HardDrive className="w-4 h-4" />
<Paperclip className="w-4 h-4" />
<span className="hidden sm:inline text-sm">{t('attach')}</span>
</Button>
)}
<Button
variant="ghost"
size="icon"
onClick={togglePlainTextMode}
className={cn(
"h-9 w-9",
plainTextMode && "bg-muted text-foreground hover:bg-muted"
)}
title={plainTextMode ? t('format_rich_text') : t('format_plain_text')}
aria-label={plainTextMode ? t('format_rich_text') : t('format_plain_text')}
aria-pressed={plainTextMode}
data-testid="composer-format-toggle"
>
<Type className="w-4 h-4" />
</Button>
{templatesEnabled && <>
<Button
variant="ghost"
size="icon"
onClick={() => setShowTemplatePicker(true)}
title={t('use_template')}
className="h-9 w-9"
>
<FileText className="w-4 h-4" />
</Button>
<Button
variant="ghost"
size="icon"
onClick={() => setShowSaveAsTemplate(true)}
title={t('save_as_template')}
className="h-9 w-9"
>
<BookmarkPlus className="w-4 h-4" />
</Button>
</>}
{templatesEnabled && (
<ComposerToolbarMenu icon={LayoutTemplate} label={t('templates_menu')} testId="composer-templates-menu">
{(close) => <>
<ComposerToolbarMenuItem icon={FileText} onSelect={() => { close(); setShowTemplatePicker(true); }}>
{t('insert_template')}
</ComposerToolbarMenuItem>
<ComposerToolbarMenuItem icon={BookmarkPlus} onSelect={() => { close(); setShowSaveAsTemplate(true); }}>
{t('save_as_template')}
</ComposerToolbarMenuItem>
</>}
</ComposerToolbarMenu>
)}
{/* Sign/encrypt controls are contributed by crypto plugins via the
composer-toolbar slot (rendered below). */}
{/* Read-receipt request toggle */}
<Button
variant="ghost"
size="icon"
onClick={() => setRequestReadReceipt(v => !v)}
className={cn(
"h-9 w-9",
requestReadReceipt && "bg-green-600 text-white hover:bg-green-600 hover:text-white dark:bg-green-600 dark:hover:bg-green-600"
)}
title={requestReadReceipt ? t('read_receipt_on') : t('read_receipt_off')}
aria-pressed={requestReadReceipt}
<ComposerToolbarMenu
icon={SlidersHorizontal}
label={t('options')}
activeCount={[plainTextMode, requestReadReceipt, requestDsn, requireTls].filter(Boolean).length}
testId="composer-options-menu"
>
<MailCheck className="w-4 h-4" />
</Button>
{composerClient?.supportsSubmissionExtension?.('DSN') && (
<Button
variant="ghost"
size="icon"
onClick={() => setRequestDsn(v => !v)}
className={cn(
"h-9 w-9",
requestDsn && "bg-green-600 text-white hover:bg-green-600 hover:text-white dark:bg-green-600 dark:hover:bg-green-600"
{() => <>
<ComposerToolbarMenuCheckItem
checked={plainTextMode}
onToggle={togglePlainTextMode}
description={t('option_plain_text_hint')}
testId="composer-format-toggle"
>
{t('option_plain_text')}
</ComposerToolbarMenuCheckItem>
<ComposerToolbarMenuCheckItem
checked={requestReadReceipt}
onToggle={() => setRequestReadReceipt(v => !v)}
description={t('option_read_receipt_hint')}
testId="composer-read-receipt-toggle"
>
{t('option_read_receipt')}
</ComposerToolbarMenuCheckItem>
{composerClient?.supportsSubmissionExtension?.('DSN') && (
<ComposerToolbarMenuCheckItem
checked={requestDsn}
onToggle={() => setRequestDsn(v => !v)}
description={t('option_dsn_hint')}
testId="composer-dsn-toggle"
>
{t('option_dsn')}
</ComposerToolbarMenuCheckItem>
)}
title={requestDsn ? t('dsn_on') : t('dsn_off')}
aria-pressed={requestDsn}
data-testid="composer-dsn-toggle"
>
<PackageCheck className="w-4 h-4" />
</Button>
)}
{composerClient?.supportsSubmissionExtension?.('REQUIRETLS') && (
<Button
variant="ghost"
size="icon"
onClick={() => setRequireTls(v => !v)}
className={cn(
"h-9 w-9",
requireTls && "bg-green-600 text-white hover:bg-green-600 hover:text-white dark:bg-green-600 dark:hover:bg-green-600"
{composerClient?.supportsSubmissionExtension?.('REQUIRETLS') && (
<ComposerToolbarMenuCheckItem
checked={requireTls}
onToggle={() => setRequireTls(v => !v)}
description={t('option_require_tls_hint')}
testId="composer-require-tls-toggle"
>
{t('option_require_tls')}
</ComposerToolbarMenuCheckItem>
)}
title={requireTls ? t('require_tls_on') : t('require_tls_off')}
aria-pressed={requireTls}
data-testid="composer-require-tls-toggle"
>
<LockKeyhole className="w-4 h-4" />
</Button>
)}
</>}
</ComposerToolbarMenu>
<PluginSlot name="composer-toolbar" />
{/* Lets a plugin offer an alternative attachment source (an
external file browser, cloud storage picker, etc). The plugin
+2
View File
@@ -128,6 +128,7 @@ export {
IconLayoutDashboard as LayoutDashboard,
IconLayoutGrid as LayoutGrid,
IconLayoutList as LayoutList,
IconTemplate as LayoutTemplate,
IconBulb as Lightbulb,
IconLink as Link,
IconList as List,
@@ -204,6 +205,7 @@ export {
IconShare2 as Share2,
IconShield as Shield,
IconShieldExclamation as ShieldAlert,
IconAdjustmentsHorizontal as SlidersHorizontal,
IconShieldCheck as ShieldCheck,
IconShieldFilled as ShieldFilled,
IconArrowsShuffle as Shuffle,
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "تصغير",
"maximize": "ملء الشاشة",
"restore": "استعادة",
"read_receipt_on": "إيصال القراءة مطلوب (انقر للتعطيل)",
"read_receipt_off": "طلب إيصال قراءة",
"dsn_on": "تم طلب إشعار التسليم (انقر للتعطيل)",
"dsn_off": "طلب إشعار بالتسليم",
"format_plain_text": "التبديل إلى نص عادي",
"format_rich_text": "التبديل إلى نص منسق (HTML)",
"require_tls_on": "التسليم المشفّر مطلوب (انقر للتعطيل)",
"require_tls_off": "اشتراط التسليم المشفّر (TLS)",
"new_message": "رسالة جديدة",
"signature_edit_hint": "انقر نقرًا مزدوجًا لتحرير التوقيع",
"reply": "رد",
@@ -687,8 +679,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "إذا لم يقبل خادمك هذا العنوان كمرسل للمغلف، فسيُستخدم {identity} بدلاً منه، ويمكن للمستلمين رؤيته في ترويسة Return-Path."
},
"use_template": "قالب",
"save_as_template": "حفظ كقالب",
"attach_from_device": "رفع من هذا الجهاز",
"templates_menu": "القوالب",
"insert_template": "إدراج قالب",
"options": "الخيارات",
"option_plain_text": "نص عادي",
"option_plain_text_hint": "إرسال بدون تنسيق",
"option_read_receipt": "طلب إشعار القراءة",
"option_read_receipt_hint": "اطلب من المستلم تأكيد فتح الرسالة",
"option_dsn": "إشعار التسليم",
"option_dsn_hint": "احصل على تقرير عندما يسلّمها الخادم",
"option_require_tls": "اشتراط التسليم المشفّر",
"option_require_tls_hint": "التسليم عبر TLS فقط، وإلا تُرفض",
"validation": {
"recipient_required": "أضف مستلمًا للإرسال",
"body_required": "اكتب رسالة أو أرفق ملفًا",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Minimitza",
"maximize": "Pantalla completa",
"restore": "Restaura",
"read_receipt_on": "Confirmació de lectura sol·licitada (feu clic per desactivar-la)",
"read_receipt_off": "Sol·licita una confirmació de lectura",
"dsn_on": "Notificació de lliurament sol·licitada (fes clic per desactivar)",
"dsn_off": "Sol·licita una notificació de lliurament",
"format_plain_text": "Canvia a text sense format",
"format_rich_text": "Canvia a text enriquit (HTML)",
"require_tls_on": "Lliurament xifrat obligatori (fes clic per desactivar)",
"require_tls_off": "Exigeix lliurament xifrat (TLS)",
"new_message": "Missatge nou",
"signature_edit_hint": "Feu doble clic per editar la signatura",
"reply": "Respon",
@@ -687,8 +679,19 @@
"email_placeholder": "alias@exemple.com",
"envelope_notice": "Si el vostre servidor no accepta aquesta adreça com a remitent del sobre, s'hi fa servir {identity}, i els destinataris la poden veure a la capçalera Return-Path."
},
"use_template": "Plantilla",
"save_as_template": "Desa com a plantilla",
"attach_from_device": "Puja des d'aquest dispositiu",
"templates_menu": "Plantilles",
"insert_template": "Insereix una plantilla",
"options": "Opcions",
"option_plain_text": "Text pla",
"option_plain_text_hint": "Envia sense format",
"option_read_receipt": "Demana confirmació de lectura",
"option_read_receipt_hint": "Demana al destinatari que confirmi que l'ha obert",
"option_dsn": "Notificació de lliurament",
"option_dsn_hint": "Rep un informe quan el servidor el lliuri",
"option_require_tls": "Exigeix lliurament xifrat",
"option_require_tls_hint": "Lliura només per TLS; si no, retorna'l",
"validation": {
"recipient_required": "Afegiu un destinatari per enviar",
"body_required": "Escriviu un missatge o adjunteu un fitxer",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Minimalizovat",
"maximize": "Celá obrazovka",
"restore": "Obnovit",
"read_receipt_on": "Vyžádáno potvrzení o přečtení (kliknutím vypnete)",
"read_receipt_off": "Vyžádat potvrzení o přečtení",
"dsn_on": "Oznámení o doručení vyžádáno (kliknutím vypnete)",
"dsn_off": "Vyžádat oznámení o doručení",
"format_plain_text": "Přepnout na prostý text",
"format_rich_text": "Přepnout na formátovaný text (HTML)",
"require_tls_on": "Šifrované doručení vyžadováno (kliknutím vypnete)",
"require_tls_off": "Vyžadovat šifrované doručení (TLS)",
"new_message": "Nová zpráva",
"signature_edit_hint": "Dvojklikem upravíte podpis",
"reply": "Odpovědět",
@@ -684,8 +676,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "Pokud váš server tuto adresu jako odesílatele obálky nepřijme, použije se místo ní {identity} a příjemci ji uvidí v záhlaví Return-Path."
},
"use_template": "Šablona",
"save_as_template": "Uložit jako šablonu",
"attach_from_device": "Nahrát z tohoto zařízení",
"templates_menu": "Šablony",
"insert_template": "Vložit šablonu",
"options": "Možnosti",
"option_plain_text": "Prostý text",
"option_plain_text_hint": "Odeslat bez formátování",
"option_read_receipt": "Vyžádat potvrzení o přečtení",
"option_read_receipt_hint": "Požádat příjemce o potvrzení otevření",
"option_dsn": "Oznámení o doručení",
"option_dsn_hint": "Dostat zprávu, až ji server doručí",
"option_require_tls": "Vyžadovat šifrované doručení",
"option_require_tls_hint": "Doručit jen přes TLS, jinak vrátit",
"validation": {
"recipient_required": "Chcete-li zprávu odeslat, přidejte příjemce",
"body_required": "Napište zprávu nebo připojte soubor",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Minimer",
"maximize": "Fuld skærm",
"restore": "Gendan",
"read_receipt_on": "Læsekvittering anmodet (klik for at deaktivere)",
"read_receipt_off": "Anmod om læsekvittering",
"dsn_on": "Leveringsbesked anmodet (klik for at slå fra)",
"dsn_off": "Anmod om leveringsbesked",
"format_plain_text": "Skift til ren tekst",
"format_rich_text": "Skift til formateret tekst (HTML)",
"require_tls_on": "Krypteret levering påkrævet (klik for at slå fra)",
"require_tls_off": "Kræv krypteret levering (TLS)",
"new_message": "Ny besked",
"signature_edit_hint": "Dobbeltklik for at redigere signaturen",
"reply": "Svar",
@@ -686,8 +678,19 @@
"email_placeholder": "alias@eksempel.dk",
"envelope_notice": "Hvis din server ikke accepterer denne adresse som konvolutafsender, bruges {identity} i stedet, og modtagerne kan se den i Return-Path-headeren."
},
"use_template": "Skabelon",
"save_as_template": "Gem som skabelon",
"attach_from_device": "Upload fra denne enhed",
"templates_menu": "Skabeloner",
"insert_template": "Indsæt skabelon",
"options": "Indstillinger",
"option_plain_text": "Ren tekst",
"option_plain_text_hint": "Send uden formatering",
"option_read_receipt": "Anmod om læsekvittering",
"option_read_receipt_hint": "Bed modtageren bekræfte, at den er åbnet",
"option_dsn": "Leveringsbesked",
"option_dsn_hint": "Få en rapport, når serveren leverer den",
"option_require_tls": "Kræv krypteret levering",
"option_require_tls_hint": "Lever kun over TLS, ellers afvis",
"validation": {
"recipient_required": "Tilføj en modtager for at sende",
"body_required": "Skriv en besked eller vedhæft en fil",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Minimieren",
"maximize": "Vollbild",
"restore": "Wiederherstellen",
"read_receipt_on": "Lesebestätigung angefordert (klicken zum Deaktivieren)",
"read_receipt_off": "Lesebestätigung anfordern",
"dsn_on": "Zustellbenachrichtigung angefordert (zum Deaktivieren klicken)",
"dsn_off": "Zustellbenachrichtigung anfordern",
"format_plain_text": "Zu Nur-Text wechseln",
"format_rich_text": "Zu formatiertem Text (HTML) wechseln",
"require_tls_on": "Verschlüsselte Zustellung erforderlich (zum Deaktivieren klicken)",
"require_tls_off": "Verschlüsselte Zustellung verlangen (TLS)",
"new_message": "Neue Nachricht",
"signature_edit_hint": "Doppelklick, um die Signatur zu bearbeiten",
"reply": "Antworten",
@@ -684,8 +676,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "Akzeptiert Ihr Server diese Adresse nicht als Umschlag-Absender, wird dort {identity} verwendet, und Empfänger können sie in der Kopfzeile Return-Path sehen."
},
"use_template": "Vorlage",
"save_as_template": "Als Vorlage speichern",
"attach_from_device": "Von diesem Gerät hochladen",
"templates_menu": "Vorlagen",
"insert_template": "Vorlage einfügen",
"options": "Optionen",
"option_plain_text": "Nur Text",
"option_plain_text_hint": "Ohne Formatierung senden",
"option_read_receipt": "Lesebestätigung anfordern",
"option_read_receipt_hint": "Empfänger bitten, das Öffnen zu bestätigen",
"option_dsn": "Zustellbenachrichtigung",
"option_dsn_hint": "Bericht erhalten, sobald der Server zustellt",
"option_require_tls": "Verschlüsselte Zustellung erzwingen",
"option_require_tls_hint": "Nur über TLS zustellen, sonst zurückweisen",
"validation": {
"recipient_required": "Empfänger hinzufügen zum Senden",
"body_required": "Nachricht schreiben oder Datei anhängen",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Minimize",
"maximize": "Full screen",
"restore": "Restore",
"read_receipt_on": "Read receipt requested (click to disable)",
"read_receipt_off": "Request a read receipt",
"dsn_on": "Delivery notification requested (click to disable)",
"dsn_off": "Request a delivery notification",
"format_plain_text": "Switch to plain text",
"format_rich_text": "Switch to rich text (HTML)",
"require_tls_on": "Encrypted delivery required (click to disable)",
"require_tls_off": "Require encrypted delivery (TLS)",
"new_message": "New Message",
"signature_edit_hint": "Double-click to edit the signature",
"reply": "Reply",
@@ -687,8 +679,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "If your server doesn't accept this address as the envelope sender, {identity} is used there instead, and recipients can see it in the Return-Path header."
},
"use_template": "Template",
"save_as_template": "Save as Template",
"attach_from_device": "Upload from this device",
"templates_menu": "Templates",
"insert_template": "Insert template",
"options": "Options",
"option_plain_text": "Plain text",
"option_plain_text_hint": "Send without formatting",
"option_read_receipt": "Request read receipt",
"option_read_receipt_hint": "Ask the recipient to confirm they opened it",
"option_dsn": "Delivery notification",
"option_dsn_hint": "Get a report when the server delivers it",
"option_require_tls": "Require encrypted delivery",
"option_require_tls_hint": "Only deliver over TLS, otherwise bounce",
"validation": {
"recipient_required": "Add a recipient to send",
"body_required": "Write a message or attach a file",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Minimizar",
"maximize": "Pantalla completa",
"restore": "Restaurar",
"read_receipt_on": "Confirmación de lectura solicitada (haz clic para desactivar)",
"read_receipt_off": "Solicitar confirmación de lectura",
"dsn_on": "Notificación de entrega solicitada (clic para desactivar)",
"dsn_off": "Solicitar notificación de entrega",
"format_plain_text": "Cambiar a texto sin formato",
"format_rich_text": "Cambiar a texto enriquecido (HTML)",
"require_tls_on": "Entrega cifrada obligatoria (clic para desactivar)",
"require_tls_off": "Exigir entrega cifrada (TLS)",
"new_message": "Nuevo Mensaje",
"signature_edit_hint": "Haz doble clic para editar la firma",
"reply": "Responder",
@@ -684,8 +676,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "Si tu servidor no acepta esta dirección como remitente del sobre, se usa {identity} en su lugar, y los destinatarios pueden verla en el encabezado Return-Path."
},
"use_template": "Plantilla",
"save_as_template": "Guardar como plantilla",
"attach_from_device": "Subir desde este dispositivo",
"templates_menu": "Plantillas",
"insert_template": "Insertar plantilla",
"options": "Opciones",
"option_plain_text": "Texto sin formato",
"option_plain_text_hint": "Enviar sin formato",
"option_read_receipt": "Solicitar confirmación de lectura",
"option_read_receipt_hint": "Pedir al destinatario que confirme que lo abrió",
"option_dsn": "Notificación de entrega",
"option_dsn_hint": "Recibir un informe cuando el servidor lo entregue",
"option_require_tls": "Exigir entrega cifrada",
"option_require_tls_hint": "Entregar solo por TLS; si no, devolver",
"validation": {
"recipient_required": "Agregue un destinatario para enviar",
"body_required": "Escriba un mensaje o adjunte un archivo",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "کوچک کردن",
"maximize": "تمام‌صفحه",
"restore": "بازگردانی",
"read_receipt_on": "درخواست تأیید خواندن فعال (کلیک برای غیرفعال کردن)",
"read_receipt_off": "درخواست تأیید خواندن",
"dsn_on": "اعلان تحویل درخواست شد (برای غیرفعال کردن کلیک کنید)",
"dsn_off": "درخواست اعلان تحویل",
"format_plain_text": "تغییر به متن ساده",
"format_rich_text": "تغییر به متن غنی (HTML)",
"require_tls_on": "تحویل رمزگذاری‌شده الزامی است (برای غیرفعال کردن کلیک کنید)",
"require_tls_off": "الزام تحویل رمزگذاری‌شده (TLS)",
"new_message": "پیام جدید",
"signature_edit_hint": "برای ویرایش امضا دوبار کلیک کنید",
"reply": "پاسخ",
@@ -687,8 +679,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "اگر سرور شما این آدرس را به‌عنوان فرستندهٔ پاکت نپذیرد، به‌جای آن {identity} استفاده می‌شود و گیرندگان می‌توانند آن را در سرآیند Return-Path ببینند."
},
"use_template": "قالب",
"save_as_template": "ذخیره به عنوان قالب",
"attach_from_device": "بارگذاری از این دستگاه",
"templates_menu": "قالب‌ها",
"insert_template": "درج قالب",
"options": "گزینه‌ها",
"option_plain_text": "متن ساده",
"option_plain_text_hint": "ارسال بدون قالب‌بندی",
"option_read_receipt": "درخواست رسید خواندن",
"option_read_receipt_hint": "از گیرنده بخواهید باز کردن را تأیید کند",
"option_dsn": "اعلان تحویل",
"option_dsn_hint": "دریافت گزارش وقتی سرور آن را تحویل داد",
"option_require_tls": "الزام تحویل رمزگذاری‌شده",
"option_require_tls_hint": "فقط از طریق TLS تحویل شود، وگرنه برگشت بخورد",
"validation": {
"recipient_required": "یک گیرنده اضافه کنید",
"body_required": "پیامی بنویسید یا فایلی پیوست کنید",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Réduire",
"maximize": "Plein écran",
"restore": "Restaurer",
"read_receipt_on": "Accusé de lecture demandé (cliquez pour désactiver)",
"read_receipt_off": "Demander un accusé de lecture",
"dsn_on": "Notification de remise demandée (cliquer pour désactiver)",
"dsn_off": "Demander une notification de remise",
"format_plain_text": "Passer en texte brut",
"format_rich_text": "Passer en texte enrichi (HTML)",
"require_tls_on": "Remise chiffrée exigée (cliquer pour désactiver)",
"require_tls_off": "Exiger une remise chiffrée (TLS)",
"new_message": "Nouveau message",
"signature_edit_hint": "Double-cliquez pour modifier la signature",
"reply": "Répondre",
@@ -684,8 +676,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "Si votre serveur n'accepte pas cette adresse comme expéditeur d'enveloppe, {identity} est utilisée à la place, et les destinataires peuvent la voir dans l'en-tête Return-Path."
},
"use_template": "Modèle",
"save_as_template": "Enregistrer comme modèle",
"attach_from_device": "Téléverser depuis cet appareil",
"templates_menu": "Modèles",
"insert_template": "Insérer un modèle",
"options": "Options",
"option_plain_text": "Texte brut",
"option_plain_text_hint": "Envoyer sans mise en forme",
"option_read_receipt": "Demander un accusé de lecture",
"option_read_receipt_hint": "Demander au destinataire de confirmer l'ouverture",
"option_dsn": "Notification de remise",
"option_dsn_hint": "Recevoir un rapport quand le serveur le remet",
"option_require_tls": "Exiger une remise chiffrée",
"option_require_tls_hint": "Remettre uniquement via TLS, sinon rejeter",
"validation": {
"recipient_required": "Ajoutez un destinataire pour envoyer",
"body_required": "Rédigez un message ou joignez un fichier",
+12 -9
View File
@@ -623,8 +623,19 @@
"to": "אל:{recipients}"
},
"remove_sub_address": "הסר כתובת משנה",
"use_template": "תבנית",
"save_as_template": "שמור כתבנית",
"attach_from_device": "העלאה מהמכשיר הזה",
"templates_menu": "תבניות",
"insert_template": "הוספת תבנית",
"options": "אפשרויות",
"option_plain_text": "טקסט פשוט",
"option_plain_text_hint": "שליחה ללא עיצוב",
"option_read_receipt": "בקשת אישור קריאה",
"option_read_receipt_hint": "לבקש מהנמען לאשר שפתח את ההודעה",
"option_dsn": "הודעת מסירה",
"option_dsn_hint": "לקבל דוח כשהשרת מוסר את ההודעה",
"option_require_tls": "חיוב מסירה מוצפנת",
"option_require_tls_hint": "למסור רק דרך TLS, אחרת להחזיר",
"validation": {
"recipient_required": "הוסף נמען לשליחה",
"body_required": "כתוב הודעה או צרף קובץ",
@@ -655,14 +666,6 @@
"smime_unlock_message": "הזן את משפט הסיסמה כדי לפתוח את מפתח החתימה ב-S/MIME שלך.",
"smime_unlock_button": "פתח את הנעילה",
"smime_passphrase_placeholder": "ביטוי סיסמה",
"read_receipt_on": "קבלת דואר מבוקשת (לחץ כדי להשבית)",
"read_receipt_off": "בקש קבלת דואר",
"dsn_on": "התבקש אישור מסירה (לחצו לביטול)",
"dsn_off": "בקשת אישור מסירה",
"format_plain_text": "מעבר לטקסט רגיל",
"format_rich_text": "מעבר לטקסט עשיר (HTML)",
"require_tls_on": "נדרשת מסירה מוצפנת (לחצו לביטול)",
"require_tls_off": "דרישת מסירה מוצפנת (TLS)",
"attach_photos": "תמונות וסרטונים",
"attach_files": "קבצים",
"attach_from_files": "צירוף מקבצים",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Kis méret",
"maximize": "Teljes képernyő",
"restore": "Visszaállítás",
"read_receipt_on": "Olvasási visszaigazolás kérve (kattints a letiltáshoz)",
"read_receipt_off": "Olvasási visszaigazolás kérése",
"dsn_on": "Kézbesítési értesítés kérve (kattints a kikapcsoláshoz)",
"dsn_off": "Kézbesítési értesítés kérése",
"format_plain_text": "Váltás egyszerű szövegre",
"format_rich_text": "Váltás formázott szövegre (HTML)",
"require_tls_on": "Titkosított kézbesítés kötelező (kattints a kikapcsoláshoz)",
"require_tls_off": "Titkosított kézbesítés megkövetelése (TLS)",
"new_message": "Új üzenet",
"signature_edit_hint": "Kattintson duplán az aláírás szerkesztéséhez",
"reply": "Válasz",
@@ -687,8 +679,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "Ha a szervered nem fogadja el ezt a címet borítékfeladóként, helyette a(z) {identity} cím kerül oda, és a címzettek láthatják a Return-Path fejlécben."
},
"use_template": "Sablon",
"save_as_template": "Mentés sablonként",
"attach_from_device": "Feltöltés erről az eszközről",
"templates_menu": "Sablonok",
"insert_template": "Sablon beszúrása",
"options": "Beállítások",
"option_plain_text": "Egyszerű szöveg",
"option_plain_text_hint": "Küldés formázás nélkül",
"option_read_receipt": "Olvasási visszaigazolás kérése",
"option_read_receipt_hint": "A címzett erősítse meg, hogy megnyitotta",
"option_dsn": "Kézbesítési értesítés",
"option_dsn_hint": "Jelentés, amikor a szerver kézbesíti",
"option_require_tls": "Titkosított kézbesítés megkövetelése",
"option_require_tls_hint": "Csak TLS-en kézbesítse, különben utasítsa vissza",
"validation": {
"recipient_required": "Adj meg egy címzettet a küldéshez",
"body_required": "Írj üzenetet vagy csatolj fájlt",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Riduci a icona",
"maximize": "Schermo intero",
"restore": "Ripristina",
"read_receipt_on": "Conferma di lettura richiesta (clicca per disattivare)",
"read_receipt_off": "Richiedi una conferma di lettura",
"dsn_on": "Notifica di consegna richiesta (clic per disattivare)",
"dsn_off": "Richiedi una notifica di consegna",
"format_plain_text": "Passa a testo semplice",
"format_rich_text": "Passa a testo formattato (HTML)",
"require_tls_on": "Consegna cifrata obbligatoria (clic per disattivare)",
"require_tls_off": "Richiedi consegna cifrata (TLS)",
"new_message": "Nuovo messaggio",
"signature_edit_hint": "Doppio clic per modificare la firma",
"reply": "Rispondi",
@@ -684,8 +676,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "Se il tuo server non accetta questo indirizzo come mittente della busta, viene usato {identity} al suo posto, e i destinatari possono vederlo nell'intestazione Return-Path."
},
"use_template": "Modello",
"save_as_template": "Salva come modello",
"attach_from_device": "Carica da questo dispositivo",
"templates_menu": "Modelli",
"insert_template": "Inserisci modello",
"options": "Opzioni",
"option_plain_text": "Testo semplice",
"option_plain_text_hint": "Invia senza formattazione",
"option_read_receipt": "Richiedi conferma di lettura",
"option_read_receipt_hint": "Chiedi al destinatario di confermare l'apertura",
"option_dsn": "Notifica di consegna",
"option_dsn_hint": "Ricevi un rapporto quando il server lo consegna",
"option_require_tls": "Richiedi consegna cifrata",
"option_require_tls_hint": "Consegna solo tramite TLS, altrimenti respingi",
"validation": {
"recipient_required": "Aggiungi un destinatario per inviare",
"body_required": "Scrivi un messaggio o allega un file",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "最小化",
"maximize": "全画面表示",
"restore": "元に戻す",
"read_receipt_on": "開封確認を要求中(クリックで無効化)",
"read_receipt_off": "開封確認を要求する",
"dsn_on": "配信通知を要求中(クリックで解除)",
"dsn_off": "配信通知を要求する",
"format_plain_text": "プレーンテキストに切り替え",
"format_rich_text": "リッチテキスト (HTML) に切り替え",
"require_tls_on": "暗号化配信を必須にしています(クリックで解除)",
"require_tls_off": "暗号化配信を必須にする(TLS)",
"new_message": "新規メッセージ",
"signature_edit_hint": "ダブルクリックで署名を編集",
"reply": "返信",
@@ -684,8 +676,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "サーバーがこのアドレスをエンベロープ送信者として受け付けない場合は、代わりに {identity} が使われ、受信者は Return-Path ヘッダーでそのアドレスを確認できます。"
},
"use_template": "テンプレート",
"save_as_template": "テンプレートとして保存",
"attach_from_device": "このデバイスからアップロード",
"templates_menu": "テンプレート",
"insert_template": "テンプレートを挿入",
"options": "オプション",
"option_plain_text": "プレーンテキスト",
"option_plain_text_hint": "書式なしで送信",
"option_read_receipt": "開封確認を要求",
"option_read_receipt_hint": "受信者に開封の確認を求めます",
"option_dsn": "配信通知",
"option_dsn_hint": "サーバーが配信したときにレポートを受け取ります",
"option_require_tls": "暗号化された配信を必須にする",
"option_require_tls_hint": "TLS でのみ配信し、できなければ返送します",
"validation": {
"recipient_required": "送信するには宛先を追加してください",
"body_required": "メッセージを入力するかファイルを添付してください",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "최소화",
"maximize": "전체 화면",
"restore": "복원",
"read_receipt_on": "읽음 확인 요청됨 (클릭하여 해제)",
"read_receipt_off": "읽음 확인 요청",
"dsn_on": "배달 알림 요청됨 (클릭하여 해제)",
"dsn_off": "배달 알림 요청",
"format_plain_text": "일반 텍스트로 전환",
"format_rich_text": "서식 있는 텍스트(HTML)로 전환",
"require_tls_on": "암호화 전송 필수 (클릭하여 해제)",
"require_tls_off": "암호화 전송 필수 (TLS)",
"new_message": "새 메시지",
"signature_edit_hint": "서명을 편집하려면 두 번 클릭하세요",
"reply": "답장",
@@ -684,8 +676,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "서버가 이 주소를 봉투 발신자로 허용하지 않으면 대신 {identity}이(가) 사용되며, 수신자는 Return-Path 헤더에서 이 주소를 볼 수 있습니다."
},
"use_template": "템플릿",
"save_as_template": "템플릿으로 저장",
"attach_from_device": "이 기기에서 업로드",
"templates_menu": "템플릿",
"insert_template": "템플릿 삽입",
"options": "옵션",
"option_plain_text": "일반 텍스트",
"option_plain_text_hint": "서식 없이 보내기",
"option_read_receipt": "읽음 확인 요청",
"option_read_receipt_hint": "수신자에게 열람 확인을 요청합니다",
"option_dsn": "배달 알림",
"option_dsn_hint": "서버가 배달하면 보고서를 받습니다",
"option_require_tls": "암호화된 배달 필수",
"option_require_tls_hint": "TLS로만 배달하고, 불가능하면 반송합니다",
"validation": {
"recipient_required": "보내려면 받는 사람을 추가해 주세요",
"body_required": "메시지를 작성하거나 파일을 첨부해 주세요",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Minimizēt",
"maximize": "Pilnekrāns",
"restore": "Atjaunot",
"read_receipt_on": "Pieprasīts lasīšanas apstiprinājums (noklikšķiniet, lai atspējotu)",
"read_receipt_off": "Pieprasīt lasīšanas apstiprinājumu",
"dsn_on": "Piegādes paziņojums pieprasīts (noklikšķiniet, lai atspējotu)",
"dsn_off": "Pieprasīt piegādes paziņojumu",
"format_plain_text": "Pārslēgt uz vienkāršu tekstu",
"format_rich_text": "Pārslēgt uz formatētu tekstu (HTML)",
"require_tls_on": "Nepieciešama šifrēta piegāde (noklikšķiniet, lai atspējotu)",
"require_tls_off": "Pieprasīt šifrētu piegādi (TLS)",
"new_message": "Jauns ziņojums",
"signature_edit_hint": "Veiciet dubultklikšķi, lai rediģētu parakstu",
"reply": "Atbildēt",
@@ -684,8 +676,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "Ja jūsu serveris nepieņem šo adresi kā aploksnes sūtītāju, tās vietā tiek izmantota {identity}, un adresāti to var redzēt galvenē Return-Path."
},
"use_template": "Veidne",
"save_as_template": "Saglabāt kā veidni",
"attach_from_device": "Augšupielādēt no šīs ierīces",
"templates_menu": "Veidnes",
"insert_template": "Ievietot veidni",
"options": "Opcijas",
"option_plain_text": "Vienkāršs teksts",
"option_plain_text_hint": "Sūtīt bez formatējuma",
"option_read_receipt": "Pieprasīt izlasīšanas apstiprinājumu",
"option_read_receipt_hint": "Lūgt adresātu apstiprināt atvēršanu",
"option_dsn": "Piegādes paziņojums",
"option_dsn_hint": "Saņemt atskaiti, kad serveris to piegādā",
"option_require_tls": "Pieprasīt šifrētu piegādi",
"option_require_tls_hint": "Piegādāt tikai caur TLS, citādi atgriezt",
"validation": {
"recipient_required": "Norādiet vismaz vienu saņēmēju",
"body_required": "Ierakstiet ziņojumu vai pievienojiet failu",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Багасгах",
"maximize": "Бүтэн дэлгэц",
"restore": "Сэргээх",
"read_receipt_on": "Уншсан баримт хүссэн (идэвхгүй болгохын тулд дарна уу)",
"read_receipt_off": "Уншсан баримт хүсэх",
"dsn_on": "Хүргэлтийн мэдэгдэл хүссэн (идэвхгүй болгох бол дарна уу)",
"dsn_off": "Хүргэлтийн мэдэгдэл хүсэх",
"format_plain_text": "Энгийн текст рүү шилжих",
"format_rich_text": "Форматтай текст (HTML) рүү шилжих",
"require_tls_on": "Шифрлэгдсэн хүргэлт шаардлагатай (идэвхгүй болгох бол дарна уу)",
"require_tls_off": "Шифрлэгдсэн хүргэлт шаардах (TLS)",
"new_message": "Шинэ мессеж",
"signature_edit_hint": "Гарын үсгийг засахын тулд давхар товшино уу",
"reply": "Хариулах",
@@ -687,8 +679,19 @@
"email_placeholder": "user@example.com",
"envelope_notice": "Хэрэв таны сервер энэ хаягийг дугтуйн илгээгчээр хүлээн авахгүй бол оронд нь {identity} ашиглагдах бөгөөд хүлээн авагчид үүнийг Return-Path гарчигт харж болно."
},
"use_template": "Загвар",
"save_as_template": "Загвар болгон хадгалах",
"attach_from_device": "Энэ төхөөрөмжөөс байршуулах",
"templates_menu": "Загварууд",
"insert_template": "Загвар оруулах",
"options": "Тохиргоо",
"option_plain_text": "Энгийн текст",
"option_plain_text_hint": "Форматгүй илгээх",
"option_read_receipt": "Уншсан баталгаа хүсэх",
"option_read_receipt_hint": "Хүлээн авагчаас нээснээ баталгаажуулахыг хүсэх",
"option_dsn": "Хүргэлтийн мэдэгдэл",
"option_dsn_hint": "Сервер хүргэх үед тайлан авах",
"option_require_tls": "Шифрлэгдсэн хүргэлт шаардах",
"option_require_tls_hint": "Зөвхөн TLS-ээр хүргэх, үгүй бол буцаах",
"validation": {
"recipient_required": "Илгээхийн тулд хүлээн авагч нэмэх",
"body_required": "Мессеж бичих эсвэл файл хавсаргах",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Minimer",
"maximize": "Fullskjerm",
"restore": "Gjenopprett",
"read_receipt_on": "Ber om lesebekreftelse (klikk for å slå av)",
"read_receipt_off": "Be om lesebekreftelse",
"dsn_on": "Leveringsvarsel forespurt (klikk for å slå av)",
"dsn_off": "Be om leveringsvarsel",
"format_plain_text": "Bytt til ren tekst",
"format_rich_text": "Bytt til formatert tekst (HTML)",
"require_tls_on": "Kryptert levering kreves (klikk for å slå av)",
"require_tls_off": "Krev kryptert levering (TLS)",
"new_message": "Ny melding",
"signature_edit_hint": "Dobbeltklikk for å redigere signaturen",
"reply": "Svar",
@@ -687,8 +679,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "Hvis serveren din ikke godtar denne adressen som konvoluttavsender, brukes {identity} i stedet, og mottakerne kan se den i Return-Path-overskriften."
},
"use_template": "Mal",
"save_as_template": "Lagre som mal",
"attach_from_device": "Last opp fra denne enheten",
"templates_menu": "Maler",
"insert_template": "Sett inn mal",
"options": "Alternativer",
"option_plain_text": "Ren tekst",
"option_plain_text_hint": "Send uten formatering",
"option_read_receipt": "Be om lesebekreftelse",
"option_read_receipt_hint": "Be mottakeren bekrefte at den er åpnet",
"option_dsn": "Leveringsvarsel",
"option_dsn_hint": "Få en rapport når serveren leverer den",
"option_require_tls": "Krev kryptert levering",
"option_require_tls_hint": "Lever bare over TLS, ellers avvis",
"validation": {
"recipient_required": "Legg til minst én mottaker før du sender",
"body_required": "Skriv en melding eller legg ved en fil",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Minimaliseren",
"maximize": "Volledig scherm",
"restore": "Herstellen",
"read_receipt_on": "Leesbevestiging aangevraagd (klik om uit te schakelen)",
"read_receipt_off": "Leesbevestiging aanvragen",
"dsn_on": "Bezorgmelding aangevraagd (klik om uit te schakelen)",
"dsn_off": "Bezorgmelding aanvragen",
"format_plain_text": "Overschakelen naar platte tekst",
"format_rich_text": "Overschakelen naar opgemaakte tekst (HTML)",
"require_tls_on": "Versleutelde bezorging vereist (klik om uit te schakelen)",
"require_tls_off": "Versleutelde bezorging vereisen (TLS)",
"new_message": "Nieuw bericht",
"signature_edit_hint": "Dubbelklik om de handtekening te bewerken",
"reply": "Beantwoorden",
@@ -684,8 +676,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "Als je server dit adres niet accepteert als envelopafzender, wordt daar {identity} gebruikt, en ontvangers kunnen dat zien in de Return-Path-header."
},
"use_template": "Sjabloon",
"save_as_template": "Opslaan als sjabloon",
"attach_from_device": "Uploaden vanaf dit apparaat",
"templates_menu": "Sjablonen",
"insert_template": "Sjabloon invoegen",
"options": "Opties",
"option_plain_text": "Platte tekst",
"option_plain_text_hint": "Verzenden zonder opmaak",
"option_read_receipt": "Leesbevestiging vragen",
"option_read_receipt_hint": "De ontvanger vragen te bevestigen dat die het opende",
"option_dsn": "Bezorgmelding",
"option_dsn_hint": "Een rapport krijgen zodra de server het bezorgt",
"option_require_tls": "Versleutelde bezorging vereisen",
"option_require_tls_hint": "Alleen via TLS bezorgen, anders terugsturen",
"validation": {
"recipient_required": "Voeg een ontvanger toe om te verzenden",
"body_required": "Schrijf een bericht of voeg een bestand toe",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Minimalizuj",
"maximize": "Pełny ekran",
"restore": "Przywróć",
"read_receipt_on": "Zażądano potwierdzenia przeczytania (kliknij, aby wyłączyć)",
"read_receipt_off": "Zażądaj potwierdzenia przeczytania",
"dsn_on": "Zażądano powiadomienia o dostarczeniu (kliknij, aby wyłączyć)",
"dsn_off": "Zażądaj powiadomienia o dostarczeniu",
"format_plain_text": "Przełącz na zwykły tekst",
"format_rich_text": "Przełącz na tekst sformatowany (HTML)",
"require_tls_on": "Wymagane szyfrowane dostarczenie (kliknij, aby wyłączyć)",
"require_tls_off": "Wymagaj szyfrowanego dostarczenia (TLS)",
"new_message": "Nowa wiadomość",
"signature_edit_hint": "Kliknij dwukrotnie, aby edytować podpis",
"reply": "Odpowiedz",
@@ -684,8 +676,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "Jeśli twój serwer nie akceptuje tego adresu jako nadawcy koperty, zostanie użyty {identity}, a odbiorcy zobaczą go w nagłówku Return-Path."
},
"use_template": "Szablon",
"save_as_template": "Zapisz jako szablon",
"attach_from_device": "Prześlij z tego urządzenia",
"templates_menu": "Szablony",
"insert_template": "Wstaw szablon",
"options": "Opcje",
"option_plain_text": "Zwykły tekst",
"option_plain_text_hint": "Wyślij bez formatowania",
"option_read_receipt": "Poproś o potwierdzenie przeczytania",
"option_read_receipt_hint": "Poproś odbiorcę o potwierdzenie otwarcia",
"option_dsn": "Powiadomienie o doręczeniu",
"option_dsn_hint": "Otrzymaj raport, gdy serwer ją doręczy",
"option_require_tls": "Wymagaj szyfrowanego doręczenia",
"option_require_tls_hint": "Doręcz tylko przez TLS, inaczej odrzuć",
"validation": {
"recipient_required": "Dodaj odbiorcę, aby wysłać",
"body_required": "Napisz wiadomość lub załącz plik",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Minimizar",
"maximize": "Ecrã inteiro",
"restore": "Restaurar",
"read_receipt_on": "Confirmação de leitura solicitada (clique para desativar)",
"read_receipt_off": "Solicitar confirmação de leitura",
"dsn_on": "Notificação de entrega pedida (clique para desativar)",
"dsn_off": "Pedir notificação de entrega",
"format_plain_text": "Mudar para texto simples",
"format_rich_text": "Mudar para texto formatado (HTML)",
"require_tls_on": "Entrega cifrada obrigatória (clique para desativar)",
"require_tls_off": "Exigir entrega cifrada (TLS)",
"new_message": "Nova Mensagem",
"signature_edit_hint": "Clique duas vezes para editar a assinatura",
"reply": "Responder",
@@ -684,8 +676,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "Se o seu servidor não aceitar este endereço como remetente do envelope, {identity} é usado em seu lugar, e os destinatários podem vê-lo no cabeçalho Return-Path."
},
"use_template": "Modelo",
"save_as_template": "Salvar como modelo",
"attach_from_device": "Enviar deste dispositivo",
"templates_menu": "Modelos",
"insert_template": "Inserir modelo",
"options": "Opções",
"option_plain_text": "Texto simples",
"option_plain_text_hint": "Enviar sem formatação",
"option_read_receipt": "Pedir confirmação de leitura",
"option_read_receipt_hint": "Pedir ao destinatário que confirme a abertura",
"option_dsn": "Notificação de entrega",
"option_dsn_hint": "Receber um relatório quando o servidor entregar",
"option_require_tls": "Exigir entrega cifrada",
"option_require_tls_hint": "Entregar só via TLS; caso contrário, devolver",
"validation": {
"recipient_required": "Adicione um destinatário para enviar",
"body_required": "Escreva uma mensagem ou anexe um arquivo",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Minimizează",
"maximize": "Ecran complet",
"restore": "Restabilește",
"read_receipt_on": "Solicitare confirmare de citire (faceți clic pentru a dezactiva)",
"read_receipt_off": "Solicitați o confirmare de citire",
"dsn_on": "Notificare de livrare solicitată (clic pentru a dezactiva)",
"dsn_off": "Solicită o notificare de livrare",
"format_plain_text": "Comută la text simplu",
"format_rich_text": "Comută la text formatat (HTML)",
"require_tls_on": "Livrare criptată obligatorie (clic pentru a dezactiva)",
"require_tls_off": "Impune livrare criptată (TLS)",
"new_message": "Mesaj nou",
"signature_edit_hint": "Dublu clic pentru a edita semnătura",
"reply": "Răspunde",
@@ -687,8 +679,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "Dacă serverul dvs. nu acceptă această adresă ca expeditor al plicului, se folosește în schimb {identity}, iar destinatarii o pot vedea în antetul Return-Path."
},
"use_template": "Șablon",
"save_as_template": "Salvează ca șablon",
"attach_from_device": "Încarcă de pe acest dispozitiv",
"templates_menu": "Șabloane",
"insert_template": "Inserează șablon",
"options": "Opțiuni",
"option_plain_text": "Text simplu",
"option_plain_text_hint": "Trimite fără formatare",
"option_read_receipt": "Cere confirmare de citire",
"option_read_receipt_hint": "Cere destinatarului să confirme deschiderea",
"option_dsn": "Notificare de livrare",
"option_dsn_hint": "Primește un raport când serverul îl livrează",
"option_require_tls": "Cere livrare criptată",
"option_require_tls_hint": "Livrează doar prin TLS, altfel respinge",
"validation": {
"recipient_required": "Adăugați un destinatar căruia să îi trimiteți mesajul",
"body_required": "Scrieți un mesaj sau atașați un fișier",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Свернуть",
"maximize": "Во весь экран",
"restore": "Восстановить",
"read_receipt_on": "Запрошено уведомление о прочтении (нажмите, чтобы отключить)",
"read_receipt_off": "Запросить уведомление о прочтении",
"dsn_on": "Запрошено уведомление о доставке (нажмите, чтобы отключить)",
"dsn_off": "Запросить уведомление о доставке",
"format_plain_text": "Переключить на простой текст",
"format_rich_text": "Переключить на форматированный текст (HTML)",
"require_tls_on": "Требуется зашифрованная доставка (нажмите, чтобы отключить)",
"require_tls_off": "Требовать зашифрованную доставку (TLS)",
"new_message": "Новое письмо",
"signature_edit_hint": "Дважды щёлкните, чтобы изменить подпись",
"reply": "Ответить",
@@ -684,8 +676,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "Если ваш сервер не принимает этот адрес как отправителя конверта, вместо него используется {identity}, и получатели увидят его в заголовке Return-Path."
},
"use_template": "Шаблон",
"save_as_template": "Сохранить как шаблон",
"attach_from_device": "Загрузить с этого устройства",
"templates_menu": "Шаблоны",
"insert_template": "Вставить шаблон",
"options": "Параметры",
"option_plain_text": "Обычный текст",
"option_plain_text_hint": "Отправить без форматирования",
"option_read_receipt": "Запросить уведомление о прочтении",
"option_read_receipt_hint": "Попросить получателя подтвердить открытие",
"option_dsn": "Уведомление о доставке",
"option_dsn_hint": "Получить отчёт, когда сервер доставит письмо",
"option_require_tls": "Требовать шифрованную доставку",
"option_require_tls_hint": "Доставлять только через TLS, иначе вернуть",
"validation": {
"recipient_required": "Укажите получателя для отправки",
"body_required": "Напишите сообщение или прикрепите файл",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Minimalizovať",
"maximize": "Celá obrazovka",
"restore": "Obnoviť",
"read_receipt_on": "Potvrdenie o prečítaní požiadané (kliknutím vypnete)",
"read_receipt_off": "Požiadať o potvrdenie o prečítaní",
"dsn_on": "Oznámenie o doručení vyžiadané (kliknutím vypnete)",
"dsn_off": "Vyžiadať oznámenie o doručení",
"format_plain_text": "Prepnúť na obyčajný text",
"format_rich_text": "Prepnúť na formátovaný text (HTML)",
"require_tls_on": "Šifrované doručenie vyžadované (kliknutím vypnete)",
"require_tls_off": "Vyžadovať šifrované doručenie (TLS)",
"new_message": "Nová správa",
"signature_edit_hint": "Dvojklikom upravíte podpis",
"reply": "Odpovedať",
@@ -687,8 +679,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "Ak váš server túto adresu neprijme ako odosielateľa obálky, použije sa namiesto nej {identity} a príjemcovia ju uvidia v hlavičke Return-Path."
},
"use_template": "Šablóna",
"save_as_template": "Uložiť ako šablónu",
"attach_from_device": "Nahrať z tohto zariadenia",
"templates_menu": "Šablóny",
"insert_template": "Vložiť šablónu",
"options": "Možnosti",
"option_plain_text": "Obyčajný text",
"option_plain_text_hint": "Odoslať bez formátovania",
"option_read_receipt": "Vyžiadať potvrdenie o prečítaní",
"option_read_receipt_hint": "Požiadať príjemcu o potvrdenie otvorenia",
"option_dsn": "Oznámenie o doručení",
"option_dsn_hint": "Dostať správu, keď ju server doručí",
"option_require_tls": "Vyžadovať šifrované doručenie",
"option_require_tls_hint": "Doručiť len cez TLS, inak vrátiť",
"validation": {
"recipient_required": "Pridajte príjemcu na odoslanie",
"body_required": "Napíšte správu alebo priložte súbor",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Simge durumuna küçült",
"maximize": "Tam ekran",
"restore": "Geri yükle",
"read_receipt_on": "Okundu bilgisi istendi (devre dışı bırakmak için tıklayın)",
"read_receipt_off": "Okundu bilgisi iste",
"dsn_on": "Teslimat bildirimi istendi (kapatmak için tıklayın)",
"dsn_off": "Teslimat bildirimi iste",
"format_plain_text": "Düz metne geç",
"format_rich_text": "Zengin metne (HTML) geç",
"require_tls_on": "Şifreli teslimat zorunlu (kapatmak için tıklayın)",
"require_tls_off": "Şifreli teslimat zorunlu kıl (TLS)",
"new_message": "Yeni İleti",
"signature_edit_hint": "İmzayı düzenlemek için çift tıklayın",
"reply": "Yanıtla",
@@ -687,8 +679,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "Sunucunuz bu adresi zarf göndereni olarak kabul etmezse yerine {identity} kullanılır ve alıcılar bunu Return-Path başlığında görebilir."
},
"use_template": "Şablon",
"save_as_template": "Şablon Olarak Kaydet",
"attach_from_device": "Bu cihazdan yükle",
"templates_menu": "Şablonlar",
"insert_template": "Şablon ekle",
"options": "Seçenekler",
"option_plain_text": "Düz metin",
"option_plain_text_hint": "Biçimlendirmeden gönder",
"option_read_receipt": "Okundu bilgisi iste",
"option_read_receipt_hint": "Alıcıdan açtığını onaylamasını iste",
"option_dsn": "Teslim bildirimi",
"option_dsn_hint": "Sunucu teslim ettiğinde rapor al",
"option_require_tls": "Şifreli teslimat zorunlu",
"option_require_tls_hint": "Yalnızca TLS ile teslim et, yoksa geri çevir",
"validation": {
"recipient_required": "Göndermek için bir alıcı ekleyin",
"body_required": "Bir ileti yazın veya dosya ekleyin",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "Згорнути",
"maximize": "На весь екран",
"restore": "Відновити",
"read_receipt_on": "Запитано сповіщення про прочитання (натисніть, щоб вимкнути)",
"read_receipt_off": "Запитати сповіщення про прочитання",
"dsn_on": "Запитано сповіщення про доставку (натисніть, щоб вимкнути)",
"dsn_off": "Запитати сповіщення про доставку",
"format_plain_text": "Перемкнути на простий текст",
"format_rich_text": "Перемкнути на форматований текст (HTML)",
"require_tls_on": "Потрібна зашифрована доставка (натисніть, щоб вимкнути)",
"require_tls_off": "Вимагати зашифровану доставку (TLS)",
"new_message": "Нове повідомлення",
"signature_edit_hint": "Двічі клацніть, щоб редагувати підпис",
"reply": "Відповісти",
@@ -684,8 +676,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "Якщо ваш сервер не приймає цю адресу як відправника конверта, замість неї використовується {identity}, і одержувачі бачитимуть її в заголовку Return-Path."
},
"use_template": "Шаблон",
"save_as_template": "Зберегти як шаблон",
"attach_from_device": "Завантажити з цього пристрою",
"templates_menu": "Шаблони",
"insert_template": "Вставити шаблон",
"options": "Параметри",
"option_plain_text": "Звичайний текст",
"option_plain_text_hint": "Надіслати без форматування",
"option_read_receipt": "Запросити сповіщення про прочитання",
"option_read_receipt_hint": "Попросити одержувача підтвердити відкриття",
"option_dsn": "Сповіщення про доставку",
"option_dsn_hint": "Отримати звіт, коли сервер доставить лист",
"option_require_tls": "Вимагати шифровану доставку",
"option_require_tls_hint": "Доставляти лише через TLS, інакше повернути",
"validation": {
"recipient_required": "Додайте одержувача для надсилання",
"body_required": "Напишіть повідомлення або прикріпіть файл",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "最小化",
"maximize": "全螢幕",
"restore": "還原",
"read_receipt_on": "已要求傳送已讀回執(點擊以停用)",
"read_receipt_off": "請求已讀回執",
"dsn_on": "已要求遞送通知(點擊停用)",
"dsn_off": "要求遞送通知",
"format_plain_text": "切換為純文字",
"format_rich_text": "切換為 HTML 格式文字",
"require_tls_on": "已要求加密遞送(點擊停用)",
"require_tls_off": "要求加密遞送 (TLS)",
"new_message": "新郵件",
"signature_edit_hint": "點兩下即可編輯簽名檔",
"reply": "回覆",
@@ -687,8 +679,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "如果您的伺服器不接受此地址作為信封寄件者,將改用 {identity},收件者可以在 Return-Path 標頭中看到它。"
},
"use_template": "範本",
"save_as_template": "儲存為範本",
"attach_from_device": "從此裝置上傳",
"templates_menu": "範本",
"insert_template": "插入範本",
"options": "選項",
"option_plain_text": "純文字",
"option_plain_text_hint": "不帶格式傳送",
"option_read_receipt": "要求讀取回條",
"option_read_receipt_hint": "請收件人確認已開啟郵件",
"option_dsn": "投遞通知",
"option_dsn_hint": "伺服器投遞後收到報告",
"option_require_tls": "要求加密投遞",
"option_require_tls_hint": "僅透過 TLS 投遞,否則退回",
"validation": {
"recipient_required": "請新增收件者",
"body_required": "請輸入郵件內容或新增附件",
+12 -9
View File
@@ -612,14 +612,6 @@
"minimize": "最小化",
"maximize": "全屏",
"restore": "还原",
"read_receipt_on": "已请求已读回执(点击以关闭)",
"read_receipt_off": "请求已读回执",
"dsn_on": "已请求投递通知(点击禁用)",
"dsn_off": "请求投递通知",
"format_plain_text": "切换为纯文本",
"format_rich_text": "切换为富文本 (HTML)",
"require_tls_on": "已要求加密投递(点击禁用)",
"require_tls_off": "要求加密投递 (TLS)",
"new_message": "新邮件",
"signature_edit_hint": "双击以编辑签名",
"reply": "回复",
@@ -684,8 +676,19 @@
"email_placeholder": "alias@example.com",
"envelope_notice": "如果您的服务器不接受此地址作为信封发件人,将改用 {identity},收件人可以在 Return-Path 标头中看到它。"
},
"use_template": "模板",
"save_as_template": "保存为模板",
"attach_from_device": "从此设备上传",
"templates_menu": "模板",
"insert_template": "插入模板",
"options": "选项",
"option_plain_text": "纯文本",
"option_plain_text_hint": "不带格式发送",
"option_read_receipt": "请求已读回执",
"option_read_receipt_hint": "请收件人确认已打开邮件",
"option_dsn": "投递通知",
"option_dsn_hint": "服务器投递后收到报告",
"option_require_tls": "要求加密投递",
"option_require_tls_hint": "仅通过 TLS 投递,否则退回",
"validation": {
"recipient_required": "请添加收件人",
"body_required": "请输入邮件内容或添加附件",