diff --git a/web/src/lib/languages.ts b/web/src/lib/languages.ts index 1b7cbe4..fd6934e 100644 --- a/web/src/lib/languages.ts +++ b/web/src/lib/languages.ts @@ -42,6 +42,7 @@ export const UI_LANGUAGES: readonly UiLanguage[] = [ { tag: "fr", name: "Français", beta: true }, { tag: "nl", name: "Nederlands", beta: true }, { tag: "pt-BR", name: "Português (Brasil)", beta: true }, + { tag: "uk", name: "Українська", beta: true }, ]; /** Where to report a bad translation. Beta languages depend on it. */ diff --git a/web/src/locales/__tests__/uk-plurals.test.ts b/web/src/locales/__tests__/uk-plurals.test.ts new file mode 100644 index 0000000..db7a28a --- /dev/null +++ b/web/src/locales/__tests__/uk-plurals.test.ts @@ -0,0 +1,36 @@ +import { describe, expect, it, afterEach } from "vitest"; +import { plural, setCatalog } from "@/lib/i18n"; +import { catalog as uk } from "@/locales/uk"; + +/** + * Ukrainian needs `few` and `many` where English has one plural, and the rule + * is not "n === 1": 11 is `many` despite ending in 1, and 21 is `one` again. + * English's two-form assumption would render "5 лист", which is the kind of + * wrong that makes a translation read as machine output whatever the + * vocabulary is. + */ +const FORMS = { one: "{n} message", other: "{n} messages" }; +afterEach(() => setCatalog("en", { strings: {}, plurals: {} })); + +describe("Ukrainian plurals", () => { + it("picks one, few and many by the language's own rule", () => { + setCatalog("uk", uk); + expect(plural(1, FORMS)).toBe("1 лист"); + expect(plural(2, FORMS)).toBe("2 листи"); + expect(plural(4, FORMS)).toBe("4 листи"); + expect(plural(5, FORMS)).toBe("5 листів"); + expect(plural(11, FORMS)).toBe("11 листів"); // many, despite ending in 1 + expect(plural(21, FORMS)).toBe("21 лист"); // one again + expect(plural(0, FORMS)).toBe("0 листів"); + }); + + it("carries every form for each counted string it ships", () => { + // A missing `few` falls back to `other` silently, and is grammatical often + // enough to go unnoticed while being wrong the rest of the time. + for (const [key, forms] of Object.entries(uk.plurals)) { + for (const cat of ["one", "few", "many", "other"] as const) { + expect(forms[cat], `${key} is missing "${cat}"`).toBeTruthy(); + } + } + }); +}); diff --git a/web/src/locales/uk.ts b/web/src/locales/uk.ts new file mode 100644 index 0000000..48bd318 --- /dev/null +++ b/web/src/locales/uk.ts @@ -0,0 +1,859 @@ +import type { Catalog } from "@/lib/i18n"; + +/** + * Ukrainian — generated by AI, and not reviewed by a native speaker. + * + * Marked Beta, with the report link doing the job a native speaker would. A + * missing string renders its English source, so deleting a bad entry is a + * valid fix. + * + * ── Decisions this file is consistent about ────────────────────────────── + * + * This is a translation, not a transliteration of the Russian one. The two + * languages share a plural structure and a script and almost nothing else + * that matters here: «Вхідні» is not «Входящие», «Кошик» is not «Корзина», + * «Листування» is not «Цепочка». Producing Ukrainian by adapting Russian is + * the failure mode a Ukrainian reader will spot in the first sentence and + * will rightly resent, so the vocabulary was chosen against what Ukrainian + * mail clients say rather than against the neighbouring file. + * + * Register: **ви**, lowercase — the neutral polite address, matching the + * decision every other catalogue took. As in Russian, most of the interface + * sidesteps it by using the infinitive for actions. + * + * Terminology, fixed once so it cannot drift: + * + * Inbox Вхідні Archive (verb) архівувати + * Drafts Чернетки Delete видалити + * Sent Надіслані Move to перемістити до + * Deleted Items Кошик Reply відповісти + * Junk / Spam Спам Reply all відповісти всім + * Folder Тека Forward переслати + * Label Мітка Star позначити + * Conversation Листування Read / unread прочитано / непрочитано + * Message Лист Settings Налаштування + * Attachment Вкладення Signature Підпис + * Contact Контакт Identity Профіль відправника + * + * «Тека» rather than «папка» for folder: both are used, and «тека» is the + * form Ukrainian software has settled on. «Мітка» for label rather than + * Russian's «ярлык», which in Ukrainian means a shortcut. + * + * Product names are never translated: ihasmail, Stalwart, JMAP, Sieve, vCard. + */ +export const catalog: Catalog = { + strings: { + // ── Actions ──────────────────────────────────────────────────────── + "Archive": "Архівувати", + "Archive (e)": "Архівувати (e)", + "Delete": "Видалити", + "Delete (#)": "Видалити (#)", + "Reply": "Відповісти", + "Reply (r)": "Відповісти (r)", + "Reply all": "Відповісти всім", + "Forward": "Переслати", + "Move to…": "Перемістити до…", + "Move to (v)": "Перемістити до (v)", + "Move to folder": "Перемістити до теки", + "Move here": "Перемістити сюди", + "Mark as read": "Позначити як прочитане", + "Mark as read (Shift+I)": "Позначити як прочитане (Shift+I)", + "Mark as unread": "Позначити як непрочитане", + "Mark as unread (Shift+U)": "Позначити як непрочитане (Shift+U)", + "Mark all as read": "Позначити все як прочитане", + "Mark all as read, incl. subfolders": "Позначити все як прочитане, разом із вкладеними теками", + "Star": "Позначити", + "Labels": "Мітки", + "Labels (l)": "Мітки (l)", + "Label as": "Додати мітку", + "Label…": "Мітка…", + "Compose": "Написати", + "Compose message": "Написати лист", + "Send": "Надіслати", + "Send at": "Надіслати о", + "Cancel send": "Скасувати надсилання", + "Schedule send": "Запланувати надсилання", + "Save": "Зберегти", + "Save & activate": "Зберегти й увімкнути", + "Save & close (Esc)": "Зберегти й закрити (Esc)", + "Save as template": "Зберегти як шаблон", + "Save draft now": "Зберегти чернетку зараз", + "Cancel": "Скасувати", + "Close": "Закрити", + "Done": "Готово", + "Continue": "Продовжити", + "Edit": "Змінити", + "Edit…": "Змінити…", + "Rename": "Перейменувати", + "Remove": "Прибрати", + "Restore": "Відновити", + "Retry": "Повторити", + "Reload": "Перезавантажити", + "Refresh": "Оновити", + "Copy": "Копіювати", + "Copy email address": "Копіювати адресу", + "Download": "Завантажити", + "Download all": "Завантажити все", + "Download (.eml)": "Завантажити (.eml)", + "Download latest as .eml": "Завантажити останній як .eml", + "Upload": "Вивантажити", + "Upload files…": "Вивантажити файли…", + "Print": "Друк", + "Print conversation": "Надрукувати листування", + "Undo (Ctrl+Z)": "Скасувати (Ctrl+Z)", + "Redo": "Повернути", + "Dismiss": "Закрити", + "Discard changes": "Відхилити зміни", + "Discard draft": "Видалити чернетку", + "Duplicate": "Дублювати", + "Validate": "Перевірити", + "Revoke": "Відкликати", + "Turn off": "Вимкнути", + "Clear": "Очистити", + "Clear selection": "Зняти позначення", + "Clear custom colour": "Прибрати власний колір", + "Select": "Вибрати", + "Select all": "Вибрати все", + "Unsubscribe": "Відписатися", + "Share…": "Поділитися…", + "Stop sharing": "Закрити доступ", + "Open": "Відкрити", + "Open in new tab": "Відкрити в новій вкладці", + "Open in calendar": "Відкрити в календарі", + "Back": "Назад", + "Back (u)": "Назад (u)", + "Back to list": "Назад до списку", + "Back to my files": "Назад до моїх файлів", + "Go back to the list": "Повернутися до списку", + "Next": "Далі", + "Previous": "Назад", + "More": "Ще", + "More actions": "Інші дії", + "More options": "Інші параметри", + "Move up": "Вгору", + "Move down": "Вниз", + "Drag to reorder": "Перетягніть, щоб змінити порядок", + "Right-click for options": "Права кнопка миші — параметри", + + // ── Mail ─────────────────────────────────────────────────────────── + "Mail": "Пошта", + "Message": "Лист", + "Messages": "Листи", + "Message body": "Текст листа", + "Message headers": "Заголовки листа", + "Message size": "Розмір листа", + "Message-ID": "Message-ID", + "Original message": "Початковий лист", + "Delete this message": "Видалити цей лист", + "New message to this address": "Новий лист на цю адресу", + "Conversation view": "Показувати листуванням", + "Draft": "Чернетка", + "Unread": "Непрочитані", + "Unread only": "Лише непрочитані", + "All mail": "Уся пошта", + "Sender": "Відправник", + "Sender domain": "Домен відправника", + "Recipients": "Одержувачі", + "From": "Від", + "To": "Кому", + "Cc": "Копія", + "Bcc": "Прихована копія", + "Subject": "Тема", + "Subject (optional)": "Тема (необов'язково)", + "Body": "Текст", + "Body text": "Звичайний текст", + "Attach files": "Прикріпити файли", + "Attach from Files": "Прикріпити з Файлів", + "Remove attachment": "Прибрати вкладення", + "Has attachment": "Є вкладення", + "Has the words": "Містить слова", + "Header name": "Назва заголовка", + "Show headers": "Показати заголовки", + "Show original": "Показати оригінал", + "Show details": "Показати подробиці", + "Show images": "Показати зображення", + "Remote images": "Зовнішні зображення", + "Remote images are blocked to protect your privacy.": "Зовнішні зображення заблоковано, щоб захистити вашу приватність.", + "Always from {email}": "Завжди від {email}", + "This looks like a mailing list.": "Схоже, це розсилка.", + "This folder is empty": "Тека порожня", + "This folder is empty.": "Тека порожня.", + "Delete all spam now": "Видалити весь спам зараз", + "Deleting spam is permanent — it does not go to Deleted Items first.": "Видалення спаму остаточне — він не потрапляє спершу до кошика.", + "Keep in Inbox": "Залишити у вхідних", + "Newer (k)": "Новіше (k)", + "Older (j)": "Старіше (j)", + "Open the next (older) conversation": "Відкрити наступне листування (старіше)", + "Open the previous (newer) conversation": "Відкрити попереднє листування (новіше)", + "Loading conversation…": "Завантаження листування…", + "Important": "Важливе", + "Unverified": "Не перевірено", + "Priority": "Пріоритет", + "High": "Високий", + "Normal": "Звичайний", + "Low": "Низький", + "to {recipients}": "кому: {recipients}", + "From: {sender}": "Від: {sender}", + "Waiting on the server — goes out {when}.": "Очікує на сервері — буде надіслано {when}.", + "Scheduled — click to clear the schedule": "Заплановано — натисніть, щоб скасувати", + "Nothing scheduled": "Нічого не заплановано", + "The message waits on the server, so it goes out whether or not ihasmail is open.": "Лист чекає на сервері й буде надісланий незалежно від того, чи відкрито ihasmail.", + "This server holds a message for up to {span}.": "Цей сервер утримує лист до {span}.", + "Date and time to send": "Дата й час надсилання", + "Undo send window": "Час на скасування надсилання", + "Read receipt requested": "Запитано сповіщення про прочитання", + "The sender asked for a read receipt.": "Відправник запитав сповіщення про прочитання.", + "Request read receipt": "Запитати сповіщення про прочитання", + "Always request read receipts": "Завжди запитувати сповіщення про прочитання", + "Receipt": "Сповіщення", + "Never send one": "Ніколи не надсилати", + "Not this time": "Не цього разу", + "It would go to {address}, which is not where the message came from.": "Воно пішло б на {address}, а лист надійшов не звідти.", + "Use “Show original” for the complete raw message.": "Натисніть «Показати оригінал», щоб побачити лист повністю.", + + // ── Folders, calendar, contacts, files ───────────────────────────── + "Folder": "Тека", + "Folders": "Теки", + "Folder options": "Параметри теки", + "New folder": "Нова тека", + "New subfolder": "Нова вкладена тека", + "Delete folder": "Видалити теку", + "No matching folders": "Відповідних тек немає", + "No subfolders here.": "Тут немає вкладених тек.", + "Type a folder name…": "Введіть назву теки…", + "+ New folder…": "+ Нова тека…", + "Create, rename and hide folders.": "Створення, перейменування та приховування тек.", + "Show unsubscribed (hidden) folders": "Показувати непідписані (приховані) теки", + "Storage: {used} of {total} used.": "Сховище: зайнято {used} з {total}.", + "{used} of {total}": "{used} з {total}", + + "Calendar": "Календар", + "My calendars": "Мої календарі", + "New calendar": "Новий календар", + "Calendar options": "Параметри календаря", + "Calendar & contacts": "Календар і контакти", + "Calendar is not available": "Календар недоступний", + "Event": "Подія", + "New event": "Нова подія", + "(new event)": "(нова подія)", + "New all-day event": "Нова подія на весь день", + "Add title": "Додати назву", + "Add location": "Додати місце", + "Add to calendar": "Додати до календаря", + "Add to my calendar": "Додати до мого календаря", + "Remove from calendar": "Прибрати з календаря", + "Remove from my calendar": "Прибрати з мого календаря", + "All day": "Весь день", + "all-day": "весь день", + "Starts": "Початок", + "Starts (optional)": "Початок (необов'язково)", + "Ends": "Завершення", + "Ends (optional)": "Завершення (необов'язково)", + "Day": "День", + "Week": "Тиждень", + "Month": "Місяць", + "Agenda": "Список", + "Today": "Сьогодні", + "Go to day": "Перейти до дня", + "Go to week": "Перейти до тижня", + "Previous month": "Попередній місяць", + "Next month": "Наступний місяць", + "Does not repeat": "Не повторюється", + "Daily": "Щодня", + "Every weekday": "Щобудня", + "Yearly": "Щороку", + "Custom…": "Власний варіант…", + "Weekly on {weekday}": "Щотижня, {weekday}", + "Monthly on day {day}": "Щомісяця, {day}-го числа", + "Repeat every": "Повторювати кожні", + "Repeat until": "Повторювати до", + "after N times": "після N разів", + "on date": "до дати", + "never": "ніколи", + "day(s)": "дн.", + "week(s)": "тижн.", + "month(s)": "міс.", + "year(s)": "р.", + "Reminders": "Нагадування", + "Add reminder": "Додати нагадування", + "Remove reminder": "Прибрати нагадування", + "Default reminder": "Нагадування за замовчуванням", + "At time of event": "У момент події", + "5 minutes before": "За 5 хвилин", + "10 minutes before": "За 10 хвилин", + "15 minutes before": "За 15 хвилин", + "30 minutes before": "За 30 хвилин", + "1 hour before": "За 1 годину", + "1 day before": "За 1 день", + "15 minutes": "15 хвилин", + "30 minutes": "30 хвилин", + "45 minutes": "45 хвилин", + "1 hour": "1 година", + "1.5 hours": "1,5 години", + "2 hours": "2 години", + "Default event length": "Тривалість події за замовчуванням", + "Default view": "Вигляд за замовчуванням", + "Guests": "Учасники", + "Add guests by name or email": "Додати учасників за іменем або адресою", + "Send invitation emails to guests": "Надсилати учасникам запрошення поштою", + "Going?": "Будете?", + "Yes": "Так", + "No": "Ні", + "Maybe": "Можливо", + "Confirmed": "Підтверджено", + "Tentative": "Під питанням", + "Cancelled": "Скасовано", + "organizer": "організатор", + "Organizer: {name}": "Організатор: {name}", + "Free": "Вільний", + "Busy": "Зайнятий", + "Free/busy": "Зайнятість", + "Show as": "Показувати як", + "Availability on {date}": "Зайнятість на {date}", + "Count all events as busy": "Вважати всі події зайнятістю", + "Only events I'm attending": "Лише події, де я беру участь", + "Don't include in availability": "Не враховувати в зайнятості", + "Meeting link": "Посилання на зустріч", + "No events in the next 60 days.": "Найближчі 60 днів подій немає.", + "Working hours": "Робочий час", + "Working hours start": "Початок робочого часу", + "Working hours end": "Кінець робочого часу", + "Colour categories": "Кольорові категорії", + "Category": "Категорія", + "No category": "Без категорії", + "New category": "Нова категорія", + "Delete category": "Видалити категорію", + "Manage categories…": "Керування категоріями…", + "Use category color": "Колір категорії", + "Use calendar color": "Колір календаря", + "Use the default colour": "Колір за замовчуванням", + "+{n} more": "+{n}", + + "Contacts": "Контакти", + "Contacts are not available": "Контакти недоступні", + "New contact": "Новий контакт", + "Edit contact": "Змінити контакт", + "Select a contact": "Виберіть контакт", + "All contacts": "Усі контакти", + "Search contacts": "Пошук за контактами", + "Search contacts to add…": "Знайдіть контакти, щоб додати…", + "Loading contacts…": "Завантаження контактів…", + "Add to contacts": "Додати до контактів", + "Add to my contacts": "Додати до моїх контактів", + "Remove from my contacts": "Прибрати з моїх контактів", + "Address book": "Адресна книга", + "Address books": "Адресні книги", + "All address books": "Усі адресні книги", + "My address books": "Мої адресні книги", + "New address book": "Нова адресна книга", + "No address books yet.": "Адресних книг поки немає.", + "Choose from address books": "Вибрати з адресних книг", + "Import vCard": "Імпорт vCard", + "Export all": "Експортувати все", + "Export book": "Експортувати книгу", + "Email group": "Написати групі", + "Email everyone": "Написати всім", + "Members": "Учасники", + "Members ({count})": "Учасники ({count})", + "Group": "Група", + "· group": "· група", + "Person": "Людина", + "First name": "Ім'я", + "Last name": "Прізвище", + "Middle name": "По батькові", + "More name fields": "Інші поля імені", + "Nickname": "Псевдонім", + "Prefix": "Звертання", + "Suffix": "Суфікс", + "Dr.": "Д-р", + "Jr.": "Мол.", + "Display name": "Відображуване ім'я", + "Job title": "Посада", + "Organization": "Організація", + "Company": "Компанія", + "Birthday": "День народження", + "Notes": "Нотатки", + "Website": "Сайт", + "Phone": "Телефон", + "Add phone": "Додати телефон", + "Add email": "Додати адресу", + "Add address": "Додати поштову адресу", + "Address": "Адреса", + "Street": "Вулиця", + "City": "Місто", + "State / Region": "Область / регіон", + "Postal code": "Індекс", + "Country": "Країна", + "Change photo": "Змінити фото", + "Remove photo": "Прибрати фото", + "Updated {date}": "Оновлено {date}", + "Modified": "Змінено", + "Search names and addresses": "Пошук за іменами й адресами", + "Add a person or group…": "Додати людину або групу…", + "Choose recipients": "Вибрати одержувачів", + "Available to add": "Можна додати", + "vCard": "vCard", + "vCard attachment": "Вкладення vCard", + + "Files": "Файли", + "My files": "Мої файли", + "File storage is not available": "Сховище файлів недоступне", + "Drag files here or use Upload.": "Перетягніть файли сюди або натисніть «Вивантажити».", + "Shared": "Спільний доступ", + "Shared with me": "Доступні мені", + "Nothing is shared with you.": "Вам нічого не відкрили.", + "Not shared with anyone yet.": "Доступ поки нікому не відкрито.", + "Check for new shares": "Перевірити нові", + "Shared files are copied to your account when attached.": "Під час прикріплення спільні файли копіюються до вашого облікового запису.", + "Viewer": "Читання", + "Editor": "Редагування", + "Size": "Розмір", + "Add files": "Додати файли", + "Minimize": "Згорнути", + + // ── Settings ─────────────────────────────────────────────────────── + "Settings": "Налаштування", + "All settings": "Усі налаштування", + "Sections": "Розділи", + "General": "Загальні", + "Appearance": "Вигляд", + "Make ihasmail yours.": "Налаштуйте ihasmail під себе.", + "Reading": "Читання", + "Reading pane": "Область читання", + "Reading, sending and list behaviour. Settings are stored in this browser.": "Поведінка під час читання, надсилання та в списку. Налаштування зберігаються в цьому браузері.", + "Right of the list": "Праворуч від списку", + "Below the list": "Під списком", + "Hidden (open full width)": "Прихована (відкривати на всю ширину)", + "Off (open messages full width)": "Вимкнена (листи на всю ширину)", + "Off": "Вимкнено", + "Composing": "Написання", + "Default format": "Формат за замовчуванням", + "Rich text (HTML)": "Форматований текст (HTML)", + "Plain text": "Звичайний текст", + "Quote original message in replies": "Цитувати початковий лист у відповідях", + "Place signature above quoted text": "Ставити підпис над цитатою", + "Attachment reminder": "Нагадування про вкладення", + "Warn when the message mentions an attachment but none is attached.": "Попереджати, якщо лист згадує вкладення, але його немає.", + "Spell check while typing": "Перевіряти орфографію під час введення", + "Confirm before deleting": "Питати перед видаленням", + "Show message snippets": "Показувати початок листа", + "Preview the first line of each message in the list.": "Показувати перший рядок кожного листа у списку.", + "Show sender avatars": "Показувати аватари відправників", + "Group messages from the same thread together.": "Об'єднувати листи одного листування.", + "After archiving or deleting": "Після архівування або видалення", + "Ask before showing (recommended)": "Питати перед показом (рекомендовано)", + "Always (all messages)": "Завжди (усі листи)", + "Show automatically from my contacts": "Автоматично для моїх контактів", + "Immediately when opened": "Одразу під час відкриття", + "After 2 seconds": "Через 2 секунди", + "After 5 seconds": "Через 5 секунд", + "Never automatically": "Ніколи автоматично", + "When someone requests a read receipt": "Коли запитують сповіщення про прочитання", + "Ask me on each message": "Питати для кожного листа", + "5 seconds": "5 секунд", + "8 seconds": "8 секунд", + "15 seconds": "15 секунд", + "30 seconds": "30 секунд", + "Locale": "Регіон", + "Language": "Мова", + "Interface language": "Мова інтерфейсу", + "Language & region": "Мова та регіон", + "Date format": "Формат дати", + "Time format": "Формат часу", + "Time zone": "Часовий пояс", + "Week starts on": "Тиждень починається з", + "Monday": "Понеділок", + "Tuesday": "Вівторок", + "Wednesday": "Середа", + "Thursday": "Четвер", + "Friday": "П'ятниця", + "Saturday": "Субота", + "Sunday": "Неділя", + "12-hour clock (6:23 PM)": "12-годинний формат (6:23 PM)", + "24-hour clock (18:23)": "24-годинний формат (18:23)", + "Browser default ({zone})": "Як у браузері ({zone})", + "Default ({zone})": "За замовчуванням ({zone})", + "Automatic ({example})": "Автоматично ({example})", + "Automatic ({locale})": "Автоматично ({locale})", + "Automatic": "Автоматично", + "Preview: {example}": "Приклад: {example}", + "Dates, times and month names follow this choice.": "Дати, час і назви місяців залежать від цього вибору.", + "Your mail server reports {name} ({tag}).": "Ваш поштовий сервер повідомляє {name} ({tag}).", + "Your mail server does not report a locale, so the browser's is used.": "Ваш поштовий сервер не повідомляє мову, тому використовується мова браузера.", + "Dates": "Дати", + "Date": "Дата", + "Time": "Час", + "When": "Коли", + "Then": "Потім", + "then": "потім", + "Theme": "Тема", + "Accent color": "Акцентний колір", + "Color": "Колір", + "Colour": "Колір", + "Text color": "Колір тексту", + "Density & text": "Щільність і текст", + "Display density": "Щільність відображення", + "Comfortable": "Вільна", + "Cozy (default)": "Середня (за замовчуванням)", + "Compact": "Щільна", + "Text size": "Розмір тексту", + "Font size": "Розмір шрифту", + "Small": "Дрібний", + "Medium": "Середній", + "Large": "Великий", + "Huge": "Дуже великий", + "Sidebar": "Бічна панель", + "Show labels in the sidebar": "Показувати мітки на бічній панелі", + "Collapse sidebar to icons": "Згорнути бічну панель до значків", + "Apply the theme to messages too": "Застосовувати тему й до листів", + "Swiping": "Жести проведення", + "Swipe left": "Провести ліворуч", + "Swipe right": "Провести праворуч", + "Backup": "Резервна копія", + "Export settings": "Експорт налаштувань", + "Import settings": "Імпорт налаштувань", + "Settings imported": "Налаштування імпортовано", + "Invalid settings file": "Хибний файл налаштувань", + "Reset to defaults": "Скинути до значень за замовчуванням", + "Default mail app": "Поштова програма за замовчуванням", + "Documentation": "Документація", + "About ihasmail": "Про ihasmail", + "About": "Про програму", + "Server": "Сервер", + "Server capabilities": "Можливості сервера", + "Accounts": "Облікові записи", + "Account": "Обліковий запис", + "Max upload": "Максимальне вивантаження", + "{size} MB": "{size} МБ", + "KB": "КБ", + "Image privacy proxy": "Проксі приватності зображень", + "enabled": "увімкнено", + "disabled": "вимкнено", + "Enabled": "Увімкнено", + "active": "активний", + "hidden": "прихована", + "connected": "підключено", + "reconnecting…": "перепідключення…", + "AGPL-3.0 source": "Вихідний код AGPL-3.0", + + // ── Identities, templates, filters ───────────────────────────────── + "Identities & signatures": "Профілі відправника та підписи", + "Add identity": "Додати профіль", + "Delete identity": "Видалити профіль", + "Make default": "Зробити основним", + "Default": "Основний", + "Show when composing": "Показувати під час написання", + "Hide when composing": "Приховувати під час написання", + "Signature": "Підпис", + "Your signature…": "Ваш підпис…", + "Reply-To": "Зворотна адреса", + "Reply-To (optional)": "Зворотна адреса (необов'язково)", + "Reply-To: {addresses}": "Зворотна адреса: {addresses}", + "Replies go to…": "Відповіді надходять на…", + "Set a Reply-To address": "Вказати зворотну адресу", + "{email} is now your default identity": "{email} тепер ваш основний профіль", + "Templates": "Шаблони", + "New template": "Новий шаблон", + "Delete template": "Видалити шаблон", + "Insert template": "Вставити шаблон", + "Template text…": "Текст шаблону…", + "Subject: {subject}": "Тема: {subject}", + "Filters & rules": "Фільтри та правила", + "Filters unavailable": "Фільтри недоступні", + "Rules": "Правила", + "Rule name": "Назва правила", + "New rule": "Нове правило", + "Delete rule": "Видалити правило", + "No filters yet": "Фільтрів поки немає", + "Add condition": "Додати умову", + "Remove condition": "Прибрати умову", + "Add action": "Додати дію", + "Remove action": "Прибрати дію", + "all of the following match": "виконуються всі умови", + "any of the following match": "виконується будь-яка з умов", + "contains": "містить", + "does not contain": "не містить", + "is": "дорівнює", + "is not": "не дорівнює", + "matches (wildcards * ?)": "збігається з (шаблони * ?)", + "does not match": "не збігається з", + "matches regex": "збігається з регулярним виразом", + "does not match regex": "не збігається з регулярним виразом", + "exists": "існує", + "does not exist": "не існує", + "is larger than": "більше ніж", + "is smaller than": "менше ніж", + "Stop processing more rules": "Припинити обробку решти правил", + "keep copy": "залишити копію", + "Forward to": "Переслати на", + "Reject with message": "Відхилити з повідомленням", + "Scripts": "Скрипти", + "Scripts (advanced)": "Скрипти (для досвідчених)", + "Script name": "Назва скрипту", + "New script": "Новий скрипт", + "Delete script": "Видалити скрипт", + "Sieve source": "Вихідний код Sieve", + "Preview generated Sieve script": "Переглянути створений скрипт Sieve", + "Start with rules": "Почати з правил", + "Switch to rules?": "Перейти до правил?", + "Create filter": "Створити фільтр", + "Filter messages like this": "Фільтрувати схожі листи", + "Filter messages like this…": "Фільтрувати схожі листи…", + "Also apply to existing messages in": "Застосувати й до листів у", + "keyword (e.g. $important, work)": "ключове слово (наприклад, $important, work)", + "Other header…": "Інший заголовок…", + "Out of office": "Автовідповідь про відсутність", + "Auto-reply enabled": "Автовідповідь увімкнено", + + // ── Security, sessions, notifications ────────────────────────────── + "Security & sessions": "Безпека та сеанси", + "Password": "Пароль", + "Your password": "Ваш пароль", + "Current password": "Поточний пароль", + "New password": "Новий пароль", + "Confirm new password": "Підтвердьте новий пароль", + "Current code": "Поточний код", + "Code from your authenticator": "Код з програми-автентифікатора", + "Two-factor authentication": "Двофакторна автентифікація", + "Turn off two-factor authentication": "Вимкнути двофакторну автентифікацію", + "Your password alone will be enough to sign in again.": "Для входу знову буде достатньо самого пароля.", + "App passwords": "Паролі програм", + "New app password for": "Новий пароль програми для", + "Your new app password": "Ваш новий пароль програми", + "Secret": "Секрет", + "Thunderbird on my laptop": "Thunderbird на ноутбуці", + "Active webmail sessions": "Активні сеанси вебпошти", + "Sign out": "Вийти", + "Sign out here": "Вийти тут", + "Sign out all other sessions": "Завершити всі інші сеанси", + "Signed in as": "Вхід виконано як", + "This is my own device": "Це мій власний пристрій", + "this device": "цей пристрій", + "Device": "Пристрій", + "IP": "IP", + "Last active": "Остання активність", + "Created": "Створено", + "Expires": "Спливає", + "Status": "Стан", + "Online": "У мережі", + "Reason": "Причина", + "Type": "Тип", + "Email or username": "Адреса або ім'я користувача", + "Use your usual address as the username.": "Як ім'я користувача вкажіть свою звичайну адресу.", + "Fast, friendly webmail. Your mailbox, your way.": "Швидка та зручна вебпошта. Ваша скринька — на ваш смак.", + + "Notifications": "Сповіщення", + "Notifications are blocked in your browser settings.": "Сповіщення заблоковано в налаштуваннях браузера.", + "Not supported in this browser.": "Не підтримується в цьому браузері.", + "Desktop notifications while ihasmail is open": "Системні сповіщення, поки ihasmail відкрито", + "Notify me even when ihasmail is closed": "Сповіщати, навіть коли ihasmail закрито", + "Play a sound for new mail": "Звук при новому листі", + "Test notification": "Перевірити сповіщення", + "Background notifications are on": "Фонові сповіщення увімкнено", + "The tab title and favicon always show your unread Inbox count.": "Заголовок вкладки та значок завжди показують кількість непрочитаних у вхідних.", + "Live updates are delivered via JMAP push ({state}).": "Оновлення в реальному часі надходять через JMAP push ({state}).", + "Shows a system notification when new mail arrives in your Inbox while the tab is in the background.": "Показує системне сповіщення, коли до вхідних надходить лист, а вкладка у фоні.", + + // ── Editor, search, shortcuts, misc ──────────────────────────────── + "Formatting": "Форматування", + "Formatting options": "Параметри форматування", + "Remove formatting": "Прибрати форматування", + "Bold (Ctrl+B)": "Жирний (Ctrl+B)", + "Italic (Ctrl+I)": "Курсив (Ctrl+I)", + "Underline (Ctrl+U)": "Підкреслений (Ctrl+U)", + "Strikethrough": "Закреслений", + "Highlight": "Виділення кольором", + "Bulleted list": "Маркований список", + "Numbered list": "Нумерований список", + "Increase indent": "Збільшити відступ", + "Decrease indent": "Зменшити відступ", + "Align left": "За лівим краєм", + "Align right": "За правим краєм", + "Center": "По центру", + "Quote": "Цитата", + "Code block": "Блок коду", + "Normal text": "Звичайний текст", + "Insert link (Ctrl+K)": "Вставити посилання (Ctrl+K)", + "Insert image": "Вставити зображення", + "Link": "Посилання", + "List": "Список", + "Emoji": "Емодзі", + "Write your message…": "Напишіть лист…", + "Search": "Пошук", + "Search mail": "Пошук поштою", + "Advanced search": "Розширений пошук", + "Keyboard shortcuts": "Сполучення клавіш", + "Keyboard shortcuts (?)": "Сполучення клавіш (?)", + "Shortcuts": "Сполучення", + "Go to": "Перейти", + "Menu": "Меню", + "Options": "Параметри", + "Send options": "Параметри надсилання", + "Name": "Ім'я", + "Email": "Адреса", + "Email address": "Адреса електронної пошти", + "Description": "Опис", + "Location": "Місце", + "Visibility": "Видимість", + "Private": "Особисте", + "Work": "Робота", + "Loading…": "Завантаження…", + "None": "Немає", + "optional": "необов'язково", + "Always show": "Завжди показувати", + "to": "кому", + "Received": "Отримано", + "In-Reply-To": "In-Reply-To", + "References": "References", + "Add label / keyword": "Додати мітку або ключове слово", + "Manage labels": "Керування мітками", + "Create “{name}”": "Створити «{name}»", + "Type a name to create your first label.": "Введіть назву, щоб створити першу мітку.", + "Labels are IMAP keywords stored on your messages, so they sync to other clients. Names and colours are kept in this browser.": "Мітки — це ключові слова IMAP, які зберігаються в самих листах і синхронізуються з іншими клієнтами. Назви та кольори залишаються в цьому браузері.", + "New label": "Нова мітка", + "Delete label": "Видалити мітку", + "PDF": "PDF", + "Large attachments may be rejected by some servers": "Деякі сервери відхиляють великі вкладення", + "Images are stored in your Files (folder “ihasmail”) and embedded when you send.": "Зображення зберігаються у ваших Файлах (тека «ihasmail») і вставляються під час надсилання.", + "Thanks for your message. I'm away until … and will reply when I'm back.": "Дякую за лист. Мене немає до … і я відповім після повернення.", + "Automatically reply to people who email you while you're away. Each sender gets at most one reply.": "Автоматично відповідати тим, хто напише вам за час відсутності. Кожен відправник отримає не більше однієї відповіді.", + "Sort incoming mail automatically. Rules run on the server (Sieve), so they work for every client you use.": "Автоматично сортувати вхідну пошту. Правила виконуються на сервері (Sieve), тому працюють в усіх клієнтах.", + "Canned responses you can insert into any message from the composer's template button.": "Готові відповіді, які можна вставити в будь-який лист кнопкою шаблонів у редакторі.", + "Create a rule to move newsletters to a folder, flag important senders, or forward mail.": "Створіть правило, щоб складати розсилки до теки, позначати важливих відправників або пересилати пошту.", + "Advanced: manage raw Sieve scripts. Only one script can be active at a time.": "Для досвідчених: робота зі скриптами Sieve напряму. Одночасно активний лише один скрипт.", + "Only part of your filter script arrived.": "Скрипт фільтрації отримано не повністю.", + "Your active script “{name}” was written by hand.": "Ваш активний скрипт «{name}» написано вручну.", + "Another script (“{name}”) is active. Saving rules here will activate the “ihasmail” script instead.": "Активний інший скрипт («{name}»). Якщо зберегти правила тут, замість нього увімкнеться скрипт «ihasmail».", + "“{name}” will be deactivated (not deleted) and a new “ihasmail” script will take over.": "«{name}» буде вимкнено (не видалено), а його місце займе новий скрипт «ihasmail».", + "Sieve filtering is not available for this account.": "Фільтрація Sieve недоступна для цього облікового запису.", + "Sieve filtering is not enabled for this account.": "Фільтрацію Sieve не увімкнено для цього облікового запису.", + "Vacation responses are not available for this account.": "Автовідповіді про відсутність недоступні для цього облікового запису.", + "This account does not have the JMAP calendars capability.": "Цей обліковий запис не має можливості JMAP «календарі».", + "This account does not have the JMAP contacts capability.": "Цей обліковий запис не має можливості JMAP «контакти».", + "This account does not have the JMAP file storage capability.": "Цей обліковий запис не має можливості JMAP «сховище файлів».", + + // ── Labels held in constants, translated where they render ───────── + "Add": "Додати", + "Create subfolders": "Створювати вкладені теки", + "Dark": "Темна", + "Light": "Світла", + "Match system": "Як у системі", + "Day.Month.Year": "День.Місяць.Рік", + "Day/Month/Year": "День/Місяць/Рік", + "Month/Day/Year": "Місяць/День/Рік", + "Year-Month-Day (ISO 8601)": "Рік-Місяць-День (ISO 8601)", + "Edit all": "Змінювати все", + "Edit contents": "Змінювати вміст", + "Edit own": "Змінювати своє", + "Flag": "Позначати", + "Mark read": "Позначати прочитаним", + "Private props": "Особисті властивості", + "Read": "Читати", + "Read events": "Читати події", + "RSVP": "Відповідати на запрошення", + "See free/busy": "Бачити зайнятість", + "Share": "Відкривати доступ", + "Write": "Писати", + "Live updates connected": "Оновлення в реальному часі підключено", + "Live updates reconnecting…": "Перепідключення оновлень у реальному часі…", + "Live updates off — checking periodically instead": "Оновлення в реальному часі вимкнено — виконується періодична перевірка", + "Mark as read / unread": "Позначити як прочитане / непрочитане", + "Star / unstar": "Позначити / зняти позначку", + "Report spam / not spam": "Позначити як спам / не спам", + "Report spam": "Позначити як спам", + "Not spam": "Не спам", + "Nothing": "Нічого", + "Later today": "Сьогодні пізніше", + "Tomorrow morning": "Завтра вранці", + "Tomorrow afternoon": "Завтра вдень", + "Monday morning": "У понеділок вранці", + "Open draft": "Відкрити чернетку", + "Undo": "Скасувати", + "Deleted Items": "Кошик", + "Choose a date": "Виберіть дату", + "Choose a date and time": "Виберіть дату й час", + "Pick date and time…": "Вибрати дату й час…", + "After": "Після", + "Before": "До", + + // ── Folder names shown for a JMAP role (see lib/mailboxName.ts) ──── + "folder\u0004Inbox": "Вхідні", + "folder\u0004Archive": "Архів", + "folder\u0004Drafts": "Чернетки", + "folder\u0004Sent": "Надіслані", + "folder\u0004Deleted Items": "Кошик", + "folder\u0004Junk Mail": "Спам", + "folder\u0004Important": "Важливе", + "folder\u0004All mail": "Уся пошта", + "folder": "тека", + "“{name}” moved into “{parent}”": "«{name}» переміщено до «{parent}»", + "“{name}” moved to the top level": "«{name}» переміщено на верхній рівень", + "Could not move “{name}”: {reason}": "Не вдалося перемістити «{name}»: {reason}", + "Delete “{name}”?": "Видалити «{name}»?", + "Rename folder": "Перейменувати теку", + "Search: {query}": "Пошук: {query}", + "No conversation selected": "Листування не вибрано", + "Drop here for the top level": "Перетягніть сюди, щоб винести на верхній рівень", + + // ── Longer prose ─────────────────────────────────────────────────── + "Search mail (from:, to:, subject:, has:attachment, is:unread, in:, before:, after:)": "Пошук поштою (from:, to:, subject:, has:attachment, is:unread, in:, before:, after:)", + "Settings → Filters & rules": "Налаштування → Фільтри та правила", + "Open the Mail view to see all shortcuts.": "Відкрийте розділ «Пошта», щоб побачити всі сполучення клавіш.", + "Gmail-style shortcuts are always on. Press {key} anywhere to see this list.": "Сполучення клавіш у стилі Gmail завжди увімкнено. Натисніть {key} будь-де, щоб побачити цей список.", + "Select a conversation to read it here · Press {key} for shortcuts": "Виберіть листування, щоб прочитати його тут · {key} — сполучення клавіш", + "Tip: press {key} on a conversation to apply labels. Search with {operator}.": "Порада: натисніть {key} на листуванні, щоб додати мітки. Шукайте через {operator}.", + "A fast, friendly, open-source webmail for {server}, built on JMAP.": "Швидка та зручна вебпошта з відкритим кодом для {server}, побудована на JMAP.", + "Defaults for the calendar views and new events.": "Значення за замовчуванням для виглядів календаря та нових подій.", + "Replies will go to this address instead of the From address": "Відповіді надходитимуть на цю адресу, а не на адресу відправника", + "Replies to mail sent from this identity go here instead of the From address.": "Відповіді на листи з цього профілю надходять сюди, а не на адресу відправника.", + "New identities must use an address this account is allowed to send from (aliases configured on the server).": "Новий профіль має використовувати адресу, з якої цьому обліковому запису дозволено надсилати (псевдоніми налаштовуються на сервері).", + "Not offered when composing. It still receives mail, and you can still send from it by showing it again.": "Не пропонується під час написання листа. Адреса й далі отримує пошту, і з неї знову можна надсилати, якщо показати її назад.", + "Each identity is a sender address with its own name, Reply-To and signature. The default identity is preselected when you compose; set a Reply-To when replies should go somewhere other than the From address.": "Кожен профіль — це адреса відправника зі своїм іменем, зворотною адресою та підписом. Основний профіль підставляється під час написання листа; вкажіть зворотну адресу, якщо відповіді мають надходити не на адресу відправника.", + "This signature is larger than the server's {limit}-byte limit. ihasmail will keep the full version in your Files and store a short text fallback on the server — other mail clients will see the plain-text version.": "Цей підпис більший за серверне обмеження в {limit} байт. ihasmail збереже повну версію у ваших Файлах, а на сервері залишить короткий текстовий варіант — інші поштові клієнти побачать саме його.", + "Outlook-style categories you can assign to events from the right-click menu or the event editor. The category name is stored on the event, so it syncs to other clients.": "Категорії у стилі Outlook, які можна призначати подіям через контекстне меню або редактор події. Назва категорії зберігається в самій події й синхронізується з іншими клієнтами.", + "Plain-text mail already follows the theme. With this on, HTML mail that brings no colours of its own does as well, instead of sitting on a white card. Messages that style themselves are left exactly as the sender designed them.": "Листи у звичайному тексті вже відповідають темі. З цим налаштуванням їй відповідають і HTML-листи без власних кольорів, замість того щоб показуватися на білому тлі. Листи з власним оформленням залишаються саме такими, якими їх задумав відправник.", + "This is separate from {setting} in General, which decides how dates, times and numbers are written. You can read an English interface with German dates, or the other way round.": "Це не те саме, що {setting} у розділі «Загальні», де визначається, як записуються дати, час і числа. Можна читати англійський інтерфейс з українськими датами — або навпаки.", + "On a touchscreen, drag a message sideways to act on it. Each direction can do one thing, or nothing. These follow your account, so a phone and a tablet agree; a mouse ignores them and keeps dragging messages into folders instead.": "На сенсорному екрані проведіть по листу вбік, щоб виконати над ним дію. Кожен напрямок може робити щось одне — або нічого. Налаштування прив'язане до облікового запису, тож телефон і планшет поводяться однаково; миша його ігнорує, і листи, як і раніше, перетягуються до тек.", + "This screen has no touchscreen, so nothing here changes what it does. Your phone or tablet will pick these up.": "Цей екран не сенсорний, тому тут нічого не зміниться. Налаштування підхоплять телефон або планшет.", + "Holding a message selects it, and holding a folder opens its menu. Pull the top of the message list down to check for new mail.": "Довге натискання на листі позначає його, а на теці — відкриває її меню. Потягніть список листів донизу, щоб перевірити пошту.", + "A receipt tells whoever asked that this address is live and when the message was read, and the sender chooses where it goes — so there is no automatic option. Bulk mail, mailing lists and anything marked auto-submitted are never offered one at all.": "Сповіщення повідомляє тому, хто його запитав, що адреса діюча і коли лист було прочитано, а відправник сам обирає, куди його надіслати, — тому автоматичного варіанта немає. Для масових розсилок, списків розсилки та всього позначеного як надіслане автоматично воно не пропонується взагалі.", + "This browser cannot register apps for {scheme} links. Safari, in particular, has no such API — you can still make ihasmail the default from your operating system if you install it as an app.": "Цей браузер не вміє реєструвати програми для посилань {scheme}. Зокрема, у Safari немає такого інтерфейсу — але ihasmail усе одно можна зробити програмою за замовчуванням засобами операційної системи, встановивши його як застосунок.", + "Registering for {scheme} links requires a secure (HTTPS) connection.": "Для реєстрації посилань {scheme} потрібне захищене з'єднання (HTTPS).", + "Open {scheme} links — in web pages, documents and other apps — in ihasmail instead of a desktop mail client. Your browser will ask you to confirm, and you can change it later in its own settings (Chrome: Settings › Privacy and security › Site settings › Protocol handlers; Firefox: Settings › General › Applications).": "Відкривати посилання {scheme} — на вебсторінках, у документах та інших програмах — у ihasmail, а не в поштовій програмі на комп'ютері. Браузер попросить підтвердження, і згодом це можна змінити в його налаштуваннях (Chrome: Налаштування › Конфіденційність і безпека › Налаштування сайтів › Обробники протоколів; Firefox: Налаштування › Загальні › Програми).", + "Requested in this browser. Whether it took effect is up to the browser — check its settings if mail links still open elsewhere.": "Запитано в цьому браузері. Чи спрацювало це, вирішує він сам — перевірте його налаштування, якщо поштові посилання й далі відкриваються деінде.", + "For a system-wide default, install ihasmail as an app first (in Chrome: the install icon in the address bar). Your operating system can then offer ihasmail directly wherever it asks which mail app to use.": "Щоб задати програму за замовчуванням для всієї системи, спершу встановіть ihasmail як застосунок (у Chrome — значок встановлення в адресному рядку). Після цього операційна система зможе пропонувати ihasmail усюди, де запитує, якою поштовою програмою скористатися.", + "Needs a browser with the Push API and a mail server that publishes a push key.": "Потрібен браузер із Push API та поштовий сервер, який публікує push-ключ.", + "Your mail server delivers these straight to your browser, so they arrive with no ihasmail tab open, naming the sender and subject. Your browser still has to be running — if you quit it completely, notifications wait and arrive when you open it again.": "Поштовий сервер доставляє їх прямо в браузер, тому вони надходять без відкритої вкладки ihasmail і містять відправника й тему. Браузер при цьому має бути запущений: якщо закрити його повністю, сповіщення почекають і надійдуть під час наступного запуску.", + "Your mail server can wake this browser, but will not include the sender or subject. Your browser still has to be running.": "Поштовий сервер може розбудити цей браузер, але не повідомить відправника й тему. Браузер при цьому має бути запущений.", + "This is what a new-mail notification looks like.": "Так виглядає сповіщення про новий лист.", + "You're signed in as {user}. Your password is never stored in the browser; the server keeps it encrypted per-session for talking to Stalwart.": "Ви увійшли як {user}. Пароль ніколи не зберігається в браузері: сервер тримає його зашифрованим на час сеансу, щоб спілкуватися зі Stalwart.", + "App passwords are managed by your mail administrator.": "Паролями програм керує ваш поштовий адміністратор.", + "Changing your password signs out your other webmail sessions. Any app passwords keep working.": "Зміна пароля завершує інші сеанси вебпошти. Паролі програм продовжують працювати.", + "This account has two-factor authentication on. ihasmail can't sign you in with a code yet, so signing in on another device needs an app password — or you can turn two-factor authentication off here.": "Для цього облікового запису увімкнено двофакторну автентифікацію. ihasmail поки не вміє входити за кодом, тому для входу на іншому пристрої потрібен пароль програми — або двофакторну автентифікацію можна вимкнути тут.", + "A separate password for a mail app or device, which you can revoke on its own. App passwords skip two-factor codes, so they keep working in apps that can't ask for one.": "Окремий пароль для поштової програми чи пристрою, який можна відкликати окремо. Паролі програм обходять двофакторні коди й тому працюють там, де запитати код неможливо.", + "Copy it into {name} now — it isn't shown again.": "Скопіюйте його до {name} зараз — більше він не показується.", + "No other users found in the directory, so nobody new can be added. Sharing already in place is listed below and can still be removed.": "У каталозі не знайдено інших користувачів, тому додати нікого. Уже відкритий доступ перелічено нижче, і його й далі можна закрити.", + "Stalwart does not publish its version number to mail clients, so ihasmail reports the edition where the server gives one. ihasmail requires 0.16 or newer, and sign-in refuses anything older.": "Stalwart не повідомляє поштовим клієнтам номер версії, тому ihasmail показує редакцію, якщо сервер її називає. ihasmail потребує версію 0.16 або новішу, і вхід зі старішою не виконується.", + "It {damage}, so the rules in it can't be shown or edited — saving what did arrive would write it back over the rest. Reload the page to try again. Your rules are still on the server; nothing here has changed them.": "Він {damage}, тому правила в ньому не можна показати чи змінити: збереження отриманої частини затерло б решту. Перезавантажте сторінку й спробуйте знову. Ваші правила залишаються на сервері, тут їх ніщо не змінювало.", + "The visual rule editor only manages scripts it created. You can edit the script in the {tab} tab, or start fresh with rules (the existing script will be kept but deactivated).": "Візуальний редактор правил працює лише зі скриптами, які створив сам. Скрипт можна змінити на вкладці {tab} або почати заново з правил (наявний скрипт збережеться, але буде вимкнено).", + "Your filter script {damage}, so only part of it arrived. Adding a rule would write that part back over the whole thing. Reload the page and try again.": "Ваш скрипт фільтрації {damage}, тому отримано лише його частину. Додавання правила затерло б цією частиною весь скрипт. Перезавантажте сторінку й спробуйте знову.", + "Your filter script couldn't be read just now, so adding a rule would risk overwriting it. Reload the page and try again.": "Скрипт фільтрації зараз не вдалося прочитати, тому додавання правила ризикує його перезаписати. Перезавантажте сторінку й спробуйте знову.", + "Your active Sieve script was written by hand, so rules can't be added automatically. Open {where} to edit the script or switch to managed rules.": "Ваш активний скрипт Sieve написано вручну, тому правила не можна додати автоматично. Відкрийте {where}, щоб змінити скрипт або перейти до керованих правил.", + "Only languages ihasmail has been translated into appear here, so this list grows as translations land rather than ahead of them — a language offered without strings behind it would leave the page claiming to be in a language it is not.": "Тут показано лише мови, якими перекладено ihasmail, тому список зростає разом із перекладами, а не випереджає їх: мова без текстів змусила б сторінку стверджувати, що вона написана мовою, якою не є.", + "tell us about it": "повідомте нам", + "This translation was generated by AI and has not been checked by a native speaker, so it is marked Beta until somebody who speaks it signs it off. Anything that reads wrongly is worth reporting — {report}.": "Цей переклад зроблено ШІ й не перевірено носієм мови, тому його позначено як Beta, доки хтось його не підтвердить. Про все, що звучить неправильно, варто повідомити — {report}.", + "{name} is the palette from {site}, and what a new account starts on. It is a dark theme, so it counts as dark wherever that matters, and the accent colour below still applies on top of it.": "{name} — це палітра з {site}, з якою починає новий обліковий запис. Тема темна, тому скрізь, де це важливо, вважається темною, а акцентний колір нижче застосовується поверх неї.", + "ihasmail's own version is the date of the commit it was built from, followed by where that commit came from: {example} was built from a commit dated the 30th of August 2026 that arrived through pull request 129. A commit that did not come through one carries its short SHA instead — {sha}. The version deliberately says nothing about Stalwart; what this build needs from the server is the line above.": "Власна версія ihasmail — це дата коміту, з якого його зібрано, і вказівка, звідки цей коміт узявся: {example} зібрано з коміту від 30 серпня 2026 року, що надійшов через pull request 129. Коміт, який надійшов інакше, несе замість цього короткий SHA — {sha}. Версія навмисно нічого не повідомляє про Stalwart; те, що цій збірці потрібно від сервера, вказано рядком вище.", + }, + plurals: { + /* + * Ukrainian takes the same three forms as Russian and the same rule, but + * not the same words. Sharing a plural structure is not sharing a + * language, and a catalogue produced by adapting the Russian one is the + * thing a Ukrainian reader would notice first. + */ + "{n} messages": { one: "{n} лист", few: "{n} листи", many: "{n} листів", other: "{n} листа" }, + "{n} conversations": { one: "{n} листування", few: "{n} листування", many: "{n} листувань", other: "{n} листування" }, + "{n} selected": { one: "Вибрано: {n}", few: "Вибрано: {n}", many: "Вибрано: {n}", other: "Вибрано: {n}" }, + }, +};