Merge main: keep both ru and uk in the language list

This commit is contained in:
2026-08-31 13:08:46 -07:00
3 changed files with 905 additions and 0 deletions
+1
View File
@@ -42,6 +42,7 @@ export const UI_LANGUAGES: readonly UiLanguage[] = [
{ tag: "fr", name: "Français", beta: true }, { tag: "fr", name: "Français", beta: true },
{ tag: "nl", name: "Nederlands", beta: true }, { tag: "nl", name: "Nederlands", beta: true },
{ tag: "pt-BR", name: "Português (Brasil)", beta: true }, { tag: "pt-BR", name: "Português (Brasil)", beta: true },
{ tag: "ru", name: "Русский", beta: true },
{ tag: "uk", name: "Українська", beta: true }, { tag: "uk", name: "Українська", beta: true },
]; ];
@@ -0,0 +1,37 @@
import { describe, expect, it, afterEach } from "vitest";
import { plural, setCatalog } from "@/lib/i18n";
import { catalog as ru } from "@/locales/ru";
/**
* Russian is the first shipped catalogue that needs `few` and `many`, so this
* checks the real entries rather than a fixture. English would have rendered
* "5 письмо" for all of these, which is the kind of wrong that makes a
* translation read as machine output however good the vocabulary is.
*/
const FORMS = { one: "{n} message", other: "{n} messages" };
afterEach(() => setCatalog("en", { strings: {}, plurals: {} }));
describe("Russian plurals", () => {
it("picks one, few and many by the language's own rule", () => {
setCatalog("ru", ru);
expect(plural(1, FORMS)).toBe("1 письмо"); // one
expect(plural(2, FORMS)).toBe("2 письма"); // few
expect(plural(3, FORMS)).toBe("3 письма");
expect(plural(5, FORMS)).toBe("5 писем"); // many
expect(plural(11, FORMS)).toBe("11 писем"); // 11-14 are many, not few
expect(plural(21, FORMS)).toBe("21 письмо"); // 21 is one again
expect(plural(22, FORMS)).toBe("22 письма");
expect(plural(25, FORMS)).toBe("25 писем");
expect(plural(0, FORMS)).toBe("0 писем");
});
it("carries every form for each counted string it ships", () => {
// A catalogue missing `few` silently falls back to `other`, which is
// grammatical often enough to go unnoticed and wrong the rest of the time.
for (const [key, forms] of Object.entries(ru.plurals)) {
for (const cat of ["one", "few", "many", "other"] as const) {
expect(forms[cat], `${key} is missing "${cat}"`).toBeTruthy();
}
}
});
});
+867
View File
@@ -0,0 +1,867 @@
import type { Catalog } from "@/lib/i18n";
/**
* Russian — generated by AI, and not reviewed by a native speaker.
*
* First of Phase 2, and the first catalogue where the plural machinery earns
* its keep: Russian needs three forms where English has two, and choosing
* between them is not a question about the number 1. `plural()` was built
* around `Intl.PluralRules` for exactly this, and the entries below are the
* first real use of `few` and `many` rather than a test fixture.
*
* 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 ──────────────────────────────
*
* Register: **вы**, lowercase, which is the neutral polite address every
* Russian interface uses. Capitalised «Вы» is correspondence style — it reads
* as a letter addressed to one person, not as software — and using it here
* would be a small, constant wrongness on every screen. This follows the
* formal-address decision the other languages took, and in Russian it costs
* nothing: it is simply what software says.
*
* Most of the interface avoids the question anyway, because Russian UI
* convention is the infinitive for actions — «Удалить», «Ответить» — rather
* than an imperative addressed at the reader.
*
* 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 a mail message: it is what Russian mail
* clients call one, and «сообщение» reads as a chat message. «Ярлык» for
* label, which is Gmail's word in Russian — the same rule as French, Spanish
* and Portuguese, and a fifth answer to it.
*
* 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: {
/*
* Three forms, which is the whole reason plural() takes a map rather than
* (one, other). Intl.PluralRules picks: 1 is `one`, 2-4 are `few`, 5-20
* and most others are `many`. English needs none of this and would have
* shipped "1 писем" without it.
*/
"{n} messages": { one: "{n} письмо", few: "{n} письма", many: "{n} писем", other: "{n} письма" },
"{n} conversations": { one: "{n} цепочка", few: "{n} цепочки", many: "{n} цепочек", other: "{n} цепочки" },
// Impersonal, so the count needs no agreement at all — which is what
// Russian interfaces actually do here.
"{n} selected": { one: "Выбрано: {n}", few: "Выбрано: {n}", many: "Выбрано: {n}", other: "Выбрано: {n}" },
},
};