Merge main: keep both ru and uk in the language list
This commit is contained in:
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -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}" },
|
||||||
|
},
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user