From 9dc0f9c892bfd951a09ff65608b6a3cfb24debea Mon Sep 17 00:00:00 2001 From: Linus Rath <139418639+rathlinus@users.noreply.github.com> Date: Sun, 11 Oct 2026 18:58:25 +0200 Subject: [PATCH] fix: label the composer toolbar buttons and group send options in a menu --- .../composer-attach-from-files.test.tsx | 2 + .../__tests__/composer-format-toggle.test.tsx | 14 +- .../__tests__/composer-toolbar-menu.test.tsx | 66 +++++++ components/email/composer-toolbar-menu.tsx | 140 ++++++++++++++ components/email/email-composer.tsx | 178 ++++++++---------- components/icons/index.ts | 2 + locales/ar/common.json | 21 ++- locales/ca/common.json | 21 ++- locales/cs/common.json | 21 ++- locales/da/common.json | 21 ++- locales/de/common.json | 21 ++- locales/en/common.json | 21 ++- locales/es/common.json | 21 ++- locales/fa/common.json | 21 ++- locales/fr/common.json | 21 ++- locales/he/common.json | 21 ++- locales/hu/common.json | 21 ++- locales/it/common.json | 21 ++- locales/ja/common.json | 21 ++- locales/ko/common.json | 21 ++- locales/lv/common.json | 21 ++- locales/mn/common.json | 21 ++- locales/nb/common.json | 21 ++- locales/nl/common.json | 21 ++- locales/pl/common.json | 21 ++- locales/pt/common.json | 21 ++- locales/ro/common.json | 21 ++- locales/ru/common.json | 21 ++- locales/sk/common.json | 21 ++- locales/tr/common.json | 21 ++- locales/uk/common.json | 21 ++- locales/zh-TW/common.json | 21 ++- locales/zh/common.json | 21 ++- 33 files changed, 623 insertions(+), 346 deletions(-) create mode 100644 components/email/__tests__/composer-toolbar-menu.test.tsx create mode 100644 components/email/composer-toolbar-menu.tsx diff --git a/components/email/__tests__/composer-attach-from-files.test.tsx b/components/email/__tests__/composer-attach-from-files.test.tsx index cbfc0111f..938a612f9 100644 --- a/components/email/__tests__/composer-attach-from-files.test.tsx +++ b/components/email/__tests__/composer-attach-from-files.test.tsx @@ -219,6 +219,7 @@ function filesClient(overrides: Record = {}) { 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(); 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 () => { diff --git a/components/email/__tests__/composer-format-toggle.test.tsx b/components/email/__tests__/composer-format-toggle.test.tsx index 530412700..8b64cbf66 100644 --- a/components/email/__tests__/composer-format-toggle.test.tsx +++ b/components/email/__tests__/composer-format-toggle.test.tsx @@ -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(); 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(); 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(); diff --git a/components/email/__tests__/composer-toolbar-menu.test.tsx b/components/email/__tests__/composer-toolbar-menu.test.tsx new file mode 100644 index 000000000..0b8a4b713 --- /dev/null +++ b/components/email/__tests__/composer-toolbar-menu.test.tsx @@ -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( + + {() => null} + + ); + 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( +
+ + + {() => ( + + Plain text + + )} + +
+ ); + 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( + + {(close) => ( + { close(); onSelect(); }} testId="item"> + Insert template + + )} + + ); + fireEvent.click(screen.getByTestId('menu')); + fireEvent.click(screen.getByTestId('item')); + expect(onSelect).toHaveBeenCalledTimes(1); + expect(screen.queryByRole('menu')).toBeNull(); + }); +}); diff --git a/components/email/composer-toolbar-menu.tsx b/components/email/composer-toolbar-menu.tsx new file mode 100644 index 000000000..bba4b502c --- /dev/null +++ b/components/email/composer-toolbar-menu.tsx @@ -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(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 ( +
+ + {open && ( + + )} +
+ ); +} + +interface ItemProps { + icon?: AppIcon; + onSelect: () => void; + testId?: string; + children: React.ReactNode; +} + +export function ComposerToolbarMenuItem({ icon: Icon, onSelect, testId, children }: ItemProps) { + return ( + + ); +} + +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 ( + + ); +} diff --git a/components/email/email-composer.tsx b/components/email/email-composer.tsx index 9d12c18cf..8c3b59752 100644 --- a/components/email/email-composer.tsx +++ b/components/email/email-composer.tsx @@ -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="*/*" /> - - {filesEnabled && composerClient?.supportsFiles?.() && ( + {filesEnabled && composerClient?.supportsFiles?.() ? ( + + {(close) => <> + { close(); fileInputRef.current?.click(); }} + > + {t('attach_from_device')} + + { close(); setFilesPicker({ client: composerClient, accountId: composerAccountId }); }} + testId="composer-attach-from-files" + > + {t('attach_from_files')} + + } + + ) : ( )} - - {templatesEnabled && <> - - - } + {templatesEnabled && ( + + {(close) => <> + { close(); setShowTemplatePicker(true); }}> + {t('insert_template')} + + { close(); setShowSaveAsTemplate(true); }}> + {t('save_as_template')} + + } + + )} {/* Sign/encrypt controls are contributed by crypto plugins via the composer-toolbar slot (rendered below). */} - - {/* Read-receipt request toggle */} - - {composerClient?.supportsSubmissionExtension?.('DSN') && ( - - )} - {composerClient?.supportsSubmissionExtension?.('REQUIRETLS') && ( - - )} + } + {/* Lets a plugin offer an alternative attachment source (an external file browser, cloud storage picker, etc). The plugin diff --git a/components/icons/index.ts b/components/icons/index.ts index bf07212b7..79d4e29f1 100644 --- a/components/icons/index.ts +++ b/components/icons/index.ts @@ -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, diff --git a/locales/ar/common.json b/locales/ar/common.json index 8c4e603f8..5ccca2ab1 100644 --- a/locales/ar/common.json +++ b/locales/ar/common.json @@ -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": "اكتب رسالة أو أرفق ملفًا", diff --git a/locales/ca/common.json b/locales/ca/common.json index 703e32714..c85c9fd0e 100644 --- a/locales/ca/common.json +++ b/locales/ca/common.json @@ -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", diff --git a/locales/cs/common.json b/locales/cs/common.json index 473c7d55c..05698280d 100644 --- a/locales/cs/common.json +++ b/locales/cs/common.json @@ -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", diff --git a/locales/da/common.json b/locales/da/common.json index 3ac8df7e5..4baf47730 100644 --- a/locales/da/common.json +++ b/locales/da/common.json @@ -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", diff --git a/locales/de/common.json b/locales/de/common.json index 9fb9ce1f3..390d57ad2 100644 --- a/locales/de/common.json +++ b/locales/de/common.json @@ -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", diff --git a/locales/en/common.json b/locales/en/common.json index dd3b04a12..0e792bbc0 100644 --- a/locales/en/common.json +++ b/locales/en/common.json @@ -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", diff --git a/locales/es/common.json b/locales/es/common.json index b437d5e03..3dae12941 100644 --- a/locales/es/common.json +++ b/locales/es/common.json @@ -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", diff --git a/locales/fa/common.json b/locales/fa/common.json index 09b36fc18..3b11dcdc7 100644 --- a/locales/fa/common.json +++ b/locales/fa/common.json @@ -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": "پیامی بنویسید یا فایلی پیوست کنید", diff --git a/locales/fr/common.json b/locales/fr/common.json index 6232dfd8d..358eac34e 100644 --- a/locales/fr/common.json +++ b/locales/fr/common.json @@ -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", diff --git a/locales/he/common.json b/locales/he/common.json index 595d951e8..33a8469f7 100644 --- a/locales/he/common.json +++ b/locales/he/common.json @@ -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": "צירוף מקבצים", diff --git a/locales/hu/common.json b/locales/hu/common.json index d50c2f88c..dc93a9845 100644 --- a/locales/hu/common.json +++ b/locales/hu/common.json @@ -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", diff --git a/locales/it/common.json b/locales/it/common.json index d357e2dc2..e8e707815 100644 --- a/locales/it/common.json +++ b/locales/it/common.json @@ -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", diff --git a/locales/ja/common.json b/locales/ja/common.json index 9946e2872..806d6aebd 100644 --- a/locales/ja/common.json +++ b/locales/ja/common.json @@ -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": "メッセージを入力するかファイルを添付してください", diff --git a/locales/ko/common.json b/locales/ko/common.json index 69e2f513f..5fda57ac5 100644 --- a/locales/ko/common.json +++ b/locales/ko/common.json @@ -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": "메시지를 작성하거나 파일을 첨부해 주세요", diff --git a/locales/lv/common.json b/locales/lv/common.json index 3919b336d..da816faa6 100644 --- a/locales/lv/common.json +++ b/locales/lv/common.json @@ -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", diff --git a/locales/mn/common.json b/locales/mn/common.json index d06a54f49..4b6cb20ad 100644 --- a/locales/mn/common.json +++ b/locales/mn/common.json @@ -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": "Мессеж бичих эсвэл файл хавсаргах", diff --git a/locales/nb/common.json b/locales/nb/common.json index 7a9760471..3520ba2e3 100644 --- a/locales/nb/common.json +++ b/locales/nb/common.json @@ -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", diff --git a/locales/nl/common.json b/locales/nl/common.json index 2fca5a719..417981107 100644 --- a/locales/nl/common.json +++ b/locales/nl/common.json @@ -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", diff --git a/locales/pl/common.json b/locales/pl/common.json index 175406ec7..e9cc0ea5a 100644 --- a/locales/pl/common.json +++ b/locales/pl/common.json @@ -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", diff --git a/locales/pt/common.json b/locales/pt/common.json index e32d59ef4..8c4a5543c 100644 --- a/locales/pt/common.json +++ b/locales/pt/common.json @@ -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", diff --git a/locales/ro/common.json b/locales/ro/common.json index b31274a36..ea20629ef 100644 --- a/locales/ro/common.json +++ b/locales/ro/common.json @@ -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", diff --git a/locales/ru/common.json b/locales/ru/common.json index 37a6cf4a9..a894c3e0d 100644 --- a/locales/ru/common.json +++ b/locales/ru/common.json @@ -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": "Напишите сообщение или прикрепите файл", diff --git a/locales/sk/common.json b/locales/sk/common.json index e1b96831e..569eded4a 100644 --- a/locales/sk/common.json +++ b/locales/sk/common.json @@ -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", diff --git a/locales/tr/common.json b/locales/tr/common.json index 20a974252..6aab43ca9 100644 --- a/locales/tr/common.json +++ b/locales/tr/common.json @@ -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", diff --git a/locales/uk/common.json b/locales/uk/common.json index c41908bbf..a937e1b4e 100644 --- a/locales/uk/common.json +++ b/locales/uk/common.json @@ -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": "Напишіть повідомлення або прикріпіть файл", diff --git a/locales/zh-TW/common.json b/locales/zh-TW/common.json index 3110777ae..93e999c2a 100644 --- a/locales/zh-TW/common.json +++ b/locales/zh-TW/common.json @@ -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": "請輸入郵件內容或新增附件", diff --git a/locales/zh/common.json b/locales/zh/common.json index 46dc5397f..e681572b6 100644 --- a/locales/zh/common.json +++ b/locales/zh/common.json @@ -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": "请输入邮件内容或添加附件",