diff --git a/web/src/locales/ru.ts b/web/src/locales/ru.ts index 2b68a36..f48f0d8 100644 --- a/web/src/locales/ru.ts +++ b/web/src/locales/ru.ts @@ -1053,8 +1053,216 @@ export const catalog: Catalog = { "Draft saved": "Черновик сохранён", "Emptying folder…": "Папка очищается…", "Nothing unread here": "Здесь нет непрочитанного", + // ── Added after the first translation pass ────────────────────────── + // Features that shipped after the catalogues were written, so these + // strings had no entry here and fell back to English. Reported by a + // native speaker reviewing the German catalogue (#247); every language + // had the same gap. The keyboard bindings among them register their + // group and description in English at the call site and are translated + // at render. + " and {count} more": " и ещё {count}", + "10 people or more": "10 человек или больше", + "20 people or more": "20 человек или больше", + "5 people or more": "5 человек или больше", + "50 people or more": "50 человек или больше", + "A banner on any message whose sender is not on one of your own domains.": "Плашка на каждом письме, отправитель которого не принадлежит одному из ваших доменов.", + "A calendar of its own, derived from the birthdays already on your contact cards. Nothing is written anywhere — the dates stay on the cards, and an event disappears when the contact does or the birthday is cleared. It can be hidden from the calendar’s own sidebar without turning it off here.": "Отдельный календарь, построенный по дням рождения, которые уже есть в карточках контактов. Никуда ничего не записывается: даты остаются в карточках, а событие исчезает вместе с контактом или после удаления даты рождения. Его можно скрыть на боковой панели календаря, не отключая здесь.", + "A calendar published at a URL — a timetable, a rota, a public holiday list. It is read-only, refreshed when you open the calendar, and never stored: the events are fetched and kept only for as long as this tab is open.": "Календарь, опубликованный по адресу: расписание, график дежурств, список праздников. Он доступен только для чтения, обновляется при открытии календаря и нигде не сохраняется: события загружаются и хранятся только пока открыта эта вкладка.", + "A link whose text names one domain and whose destination is another is always flagged, even where the destination is trusted — being trusted is not the same as being the place the text claimed.": "Ссылка, в тексте которой указан один домен, а ведёт она на другой, отмечается всегда, даже если домен назначения доверенный: быть доверенным и быть тем местом, которое обещал текст, — разные вещи.", + "Actions": "Действия", + "Added from a message, and removable here — previously the only way to undo one was to find another message from the same sender.": "Добавлено из письма и удаляется здесь: раньше отменить это можно было, только найдя другое письмо того же отправителя.", + "Added here, or from the dialog when a link is opened. A domain also covers its subdomains.": "Добавляется здесь или в диалоге при открытии ссылки. Домен включает и свои поддомены.", + "Agenda view": "Список дел", + "All three start switched off. A client that begins by interrupting is one people learn to click through, and a warning clicked through without reading costs the same attention and buys nothing.": "Все три изначально выключены. Клиент, который начинает с того, что прерывает вас, приучает закрывать предупреждения не читая, а закрытое не глядя предупреждение отнимает столько же внимания и не даёт ничего.", + "All {n} in {folder} are selected.": "Выбраны все {n} в папке {folder}.", + "All {n} on this page are selected.": "Выбраны все {n} на этой странице.", + "Also count these domains as inside": "Считать внутренними также эти домены", + "Always": "Всегда", + "Always showing images from": "Всегда показывать изображения от", + "An image loaded from a sender's server tells them the message was opened, when, and from roughly where. Approved images are fetched by ihasmail's own server rather than the browser, so the sender learns none of those.": "Изображение, загруженное с сервера отправителя, сообщает ему, что письмо открыли, когда и примерно откуда. Разрешённые изображения загружает сервер ihasmail, а не браузер, поэтому отправитель не узнаёт ничего из этого.", + "Applies to": "Применяется к", + "Archive and next": "Архивировать и далее", + "Archive by month": "Архивировать по месяцам", + "Archive by year": "Архивировать по годам", + "Archive failed: {error}": "Не удалось архивировать: {error}", + "Archive to {folder}": "Архивировать в {folder}", + "Ask before opening a link in a message": "Спрашивать перед открытием ссылки в письме", + "Ask before sending outside": "Спрашивать перед отправкой наружу", + "Ask before sending to a large group": "Спрашивать перед отправкой большой группе", + "Back to the event": "Назад к событию", + "Before it happens": "Прежде чем это произойдёт", + "Birthdays": "Дни рождения", + "By sender": "По отправителю", + "By subject": "По теме", + "Choose…": "Выбрать…", + "Classic": "Классическая", + "Click to move the event": "Нажмите, чтобы переместить событие", + "Close without saving?": "Закрыть без сохранения?", + "Compose as new": "Написать как новое письмо", + "Compose new message": "Написать новое письмо", + "Conversation": "Цепочка", + "Conversation moved to {folder}": "Цепочка перемещена в {folder}", + "Could not be read": "Не удалось прочитать", + "Could not import this file: {error}": "Не удалось импортировать этот файл: {error}", + "Could not load this file.": "Не удалось загрузить этот файл.", + "Could not read this calendar: {reason}": "Не удалось прочитать этот календарь: {reason}", + "Could not read winmail.dat. The original is still attached below.": "Не удалось прочитать winmail.dat. Оригинал по-прежнему приложен ниже.", + "Counts people rather than headers, so one address in To and nine in Cc is a message to ten. Catches a reply-all onto a long thread.": "Считает людей, а не заголовки: один адрес в «Кому» и девять в «Копия» — это письмо десятерым. Ловит ответ всем в длинной цепочке.", + "Date received": "Дата получения", + "Date sent": "Дата отправки", + "Day view": "День", + "Dracula, Gruvbox, Rosé Pine and Tokyo Night are the work of their own projects and are used under the MIT licence; the shades between their published colours are derived, and every one of them is checked for contrast. The accent colour below still applies over any of them.": "Dracula, Gruvbox, Rosé Pine и Tokyo Night созданы своими проектами и используются по лицензии MIT; оттенки между опубликованными цветами выведены из них, и каждый проверен на контраст. Акцентный цвет ниже по-прежнему применяется поверх любой из тем.", + "Earlier": "Раньше", + "Every folder": "Все папки", + "Everyone addressed will receive this.": "Это получат все указанные адресаты.", + "File contents": "Содержимое файла", + "Filled in when the template is inserted, so you can edit the result before sending. One that cannot be answered yet — a recipient's name on a message you have not addressed — is left in the body as written, rather than becoming a blank.": "Подставляется при вставке шаблона, так что результат можно отредактировать перед отправкой. То, что пока определить нельзя, — например, имя получателя в письме, у которого ещё нет адресата, — остаётся в тексте как написано, а не превращается в пустоту.", + "Forward as attachment": "Переслать вложением", + "From the birthdays on your contacts. Nothing is stored.": "По дням рождения из ваших контактов. Ничего не сохраняется.", + "Go to Calendar": "Перейти к календарю", + "Go to Contacts": "Перейти к контактам", + "Go to Drafts": "Перейти к черновикам", + "Go to Files": "Перейти к файлам", + "Go to Inbox": "Перейти во «Входящие»", + "Go to Sent": "Перейти в «Отправленные»", + "Go to Settings": "Перейти к настройкам", + "Go to Starred": "Перейти к отмеченным", + "Import iCAL file…": "Импортировать файл iCAL…", + "Labels are IMAP keywords stored on your messages, so every other client sees them. Names, colours and nesting are ihasmail’s own and follow your account. Nesting is display only — it rewrites nothing in the mailbox.": "Ярлыки — это ключевые слова IMAP, которые хранятся на письмах, поэтому их видит любой другой клиент. Названия, цвета и вложенность принадлежат самому ihasmail и следуют за вашей учётной записью. Вложенность влияет только на отображение и ничего не переписывает в почтовом ящике.", + "Largest first": "Сначала большие", + "Later": "Позже", + "Light or dark": "Светлая или тёмная", + "Mark messages from outside": "Отмечать письма извне", + "Marked as spam": "Помечено как спам", + "Message order": "Порядок писем", + "Month view": "Месяц", + "More ways to send this": "Другие способы отправки", + "Names the outside recipients and asks, rather than refusing.": "Называет внешних получателей и спрашивает, а не отказывает.", + "Navigation": "Навигация", + "Nested under": "Вложено в", + "Never": "Никогда", + "Never ask": "Никогда не спрашивать", + "Newest first": "Сначала новые", + "Next conversation": "Следующая цепочка", + "Next period": "Следующий период", + "No availability information for {who}": "Нет сведений о занятости для {who}", + "No files inside — it carries only the formatted copy of the message.": "Внутри нет файлов — только форматированная копия письма.", + "No verdict recorded": "Решение не записано", + "Nobody here has free/busy on this server, so none of these rows can say whether anyone is free.": "Ни у кого здесь нет сведений о занятости на этом сервере, поэтому ни одна из строк не может сказать, свободен ли кто-либо.", + "Nothing (top level)": "Ничего (верхний уровень)", + "Now, on your clock": "Сейчас, по вашим часам", + "Oldest first": "Сначала старые", + "Only the beginning is shown — download the file for the rest.": "Показано только начало — скачайте файл, чтобы увидеть остальное.", + "Only when it has unread mail": "Только при непрочитанных письмах", + "Open a link to {domain}?": "Открыть ссылку на {domain}?", + "Open it": "Открыть", + "Open links to these domains without asking": "Открывать ссылки на эти домены без вопросов", + "Open, and stop asking about {domain}": "Открыть и больше не спрашивать про {domain}", + "Opening…": "Открытие…", + "Ordered by the server over the whole folder, not just the messages loaded so far. Ties always fall back to newest first, so the order never shuffles between two looks at the same folder.": "Сортирует сервер по всей папке, а не только по уже загруженным письмам. При равенстве всегда используется порядок «сначала новые», поэтому между двумя открытиями одной папки порядок не меняется.", + "Placeholders": "Подстановки", + "Previous conversation": "Предыдущая цепочка", + "Previous period": "Предыдущий период", + "Privacy & safety": "Конфиденциальность и безопасность", + "Read receipts": "Уведомления о прочтении", + "Reading, sending, and how dates and times are shown. What reaches a sender lives in Privacy & safety.": "Чтение, отправка и то, как показываются даты и время. То, что доходит до отправителя, — в разделе «Конфиденциальность и безопасность».", + "Remote content": "Внешнее содержимое", + "Remove subscription": "Удалить подписку", + "Remove {domain}": "Удалить {domain}", + "Rendered": "С оформлением", + "Save changes": "Сохранить изменения", + "Save filters": "Сохранить фильтры", + "Save your changes?": "Сохранить изменения?", + "Saved": "Сохранено", + "Select all {n} in {folder}": "Выбрать все {n} в папке {folder}", + "Send message": "Отправить письмо", + "Send outside your organisation?": "Отправить за пределы организации?", + "Send to {count} people?": "Отправить {count} получателям?", + "Show birthdays from your contacts": "Показывать дни рождения из контактов", + "Show in the sidebar": "Показывать на боковой панели", + "Show keyboard shortcuts": "Показать сочетания клавиш", + "Somebody else saved this file while it was open. Copy your changes, close it, and start again.": "Кто-то другой сохранил этот файл, пока он был открыт. Скопируйте свои изменения, закройте файл и начните заново.", + "Sort by, in order": "Сортировать по, в этом порядке", + "Source": "Исходный текст", + "Spam filter": "Спам-фильтр", + "Starred": "Отмеченные", + "Starred first": "Сначала отмеченные", + "Stay here": "Остаться здесь", + "Stop trusting {address}": "Больше не доверять {address}", + "Subscribe to a calendar": "Подписаться на календарь", + "Subscribed calendar": "Календарь по подписке", + "Subscribed calendars": "Календари по подписке", + "Subscribed to {url}": "Оформлена подписка на {url}", + "That file is no longer there.": "Этого файла больше нет.", + "That identity's address": "Адрес этого профиля отправителя", + "The Inbox only": "Только «Входящие»", + "The message is held in this browser and has not been submitted yet, so taking it back costs nothing.": "Письмо удерживается в этом браузере и ещё не отправлено, поэтому вернуть его ничего не стоит.", + "The name on the identity you are sending as": "Имя профиля отправителя, от которого вы пишете", + "The subject already on the message": "Тема, которая уже указана в письме", + "Their address": "Их адрес", + "Their first name alone": "Только их имя", + "Then nothing": "Затем ничего", + "There is no preview for this kind of file.": "Для файлов такого типа предпросмотра нет.", + "There is nothing in it to export": "В нём нечего экспортировать", + "This file is not UTF-8 text, so editing it here would corrupt it — download it instead.": "Это не текст в UTF-8, поэтому правка здесь его испортит — лучше скачайте файл.", + "This file is too big to show here ({size}) — download it to read it.": "Файл слишком велик, чтобы показать его здесь ({size}) — скачайте его, чтобы прочитать.", + "This goes to {recipients}{rest}.": "Это уйдёт {recipients}{rest}.", + "This link does not go where it says": "Эта ссылка ведёт не туда, куда обещает", + "This message packs its attachments into a winmail.dat, which most clients cannot open.": "Это письмо упаковывает вложения в winmail.dat, который большинство клиентов открыть не могут.", + "Throw away your changes?": "Отбросить изменения?", + "Today, in your date format": "Сегодня, в вашем формате даты", + "Unread first": "Сначала непрочитанные", + "Unsaved changes": "Несохранённые изменения", + "View as": "Показывать как", + "Warnings": "Предупреждения", + "Week view": "Неделя", + "What is it called?": "Как это назвать?", + "What reaches a sender, and what asks before it happens.": "Что доходит до отправителя и что спрашивает, прежде чем это произойдёт.", + "What you changed here will be lost.": "Изменения, сделанные здесь, будут потеряны.", + "Who the message is addressed to": "Кому адресовано письмо", + "Working out what is selected…": "Определяем, что выбрано…", + "You": "Вы", + "Your Sieve script has changes that have not been saved.": "В вашем скрипте Sieve есть несохранённые изменения.", + "Your filter rules have changes that have not been saved.": "В ваших правилах фильтрации есть несохранённые изменения.", + "Your own identity domains are always inside and do not need listing. A domain here also covers its subdomains.": "Домены ваших собственных профилей отправителя всегда считаются внутренними, их указывать не нужно. Домен, указанный здесь, включает и свои поддомены.", + "Your own:": "Ваши:", + "dark mode": "тёмную тему", + "file": "файл", + "light mode": "светлую тему", + "scored {score} against a threshold of {threshold}": "оценка {score} при пороге {threshold}", + "scored {score}, with no threshold stated": "оценка {score}, порог не указан", + "this view": "этот раздел", + "{count} conversations moved to {folder}": "Цепочек перемещено в {folder}: {count}", + "{count} folders": "Папок: {count}", + "{name}’s birthday": "День рождения: {name}", + "{name}’s birthday ({age})": "День рождения: {name} ({age})", + // ── Third pass ────────────────────────────────────────────────────── + // Sentences that lib/ and store/ were building in English, and the two + // swipe labels that reach t() through a variable and so were invisible + // to a scan for t("literal"). See #259. + "A read receipt was already sent for this message.": "Уведомление о прочтении для этого письма уже отправлено.", + "Add star": "Отметить", + "Could not attach": "Не удалось вложить", + "Delete forever?": "Удалить навсегда?", + "Delete?": "Удалить?", + "No recipients": "Нет получателей", + "No sending identity available": "Нет доступного профиля отправителя", + "Pick a date and time.": "Выберите дату и время.", + "Pick a time at least a minute from now.": "Выберите время не меньше чем через минуту.", + "Remove star": "Снять отметку", + "Requested, to {address}. Never sent automatically.": "Запрошено, на {address}. Никогда не отправляется автоматически.", + "The sender did not request a read receipt.": "Отправитель не запрашивал уведомление о прочтении.", + "This is bulk or list mail; read receipts for it only confirm the address is live.": "Это массовая или списочная рассылка; уведомление о прочтении лишь подтвердит, что адрес действующий.", + "This message has not been received, so there is nothing to report.": "Это письмо не было получено, поэтому сообщать не о чем.", + "This message was sent automatically, so no read receipt is offered.": "Это письмо отправлено автоматически, поэтому уведомление о прочтении не предлагается.", + "This server will not hold a message longer than {span}.": "Этот сервер не удерживает письмо дольше чем {span}.", + "Upload failed": "Не удалось загрузить", }, plurals: { + // ── Third pass ───────────────────────────────────────────────────── + "Move {n} messages to Trash?": { one: "Переместить {n} письмо в корзину?", few: "Переместить {n} письма в корзину?", many: "Переместить {n} писем в корзину?", other: "Переместить {n} письма в корзину?" }, + "{n} days": { one: "{n} день", few: "{n} дня", many: "{n} дней", other: "{n} дня" }, + "{n} hours": { one: "{n} час", few: "{n} часа", many: "{n} часов", other: "{n} часа" }, "Updated {n} contacts, nothing new": { one: "Обновлён {n} контакт, новых нет", few: "Обновлено {n} контакта, новых нет", many: "Обновлено {n} контактов, новых нет", other: "Обновлено {n} контакта, новых нет" }, "{n} updated": { one: "{n} обновлён", few: "{n} обновлено", many: "{n} обновлено", other: "{n} обновлено" }, "Updated {n} contacts you already had": { one: "Обновлён контакт, который уже был", few: "Обновлено {n} контакта, которые уже были", many: "Обновлено {n} контактов, которые уже были", other: "Обновлено {n} контакта, которые уже были" },