fix(i18n): add missing translation keys for signatures and email import

Fixes 25 failing tests across translations and eml-import test suites:

- Add 141 missing i18n keys to en/common.json for P2.1 (extended signatures
  feature) and P2.5 (email import feature). Keys cover:
  - signatures.* (signature editor, toolbar labels, per-identity settings)
  - settings.importer.* (mail import UI labels and messages)
  - settings.tabs.signatures, settings.{loading,refresh}
  - email_composer.{insert_signature,no_signature,select_signature}
  - identities.form.{signature_store_*,use_global_default}
  - calendar.{edit,delete,duplicate}, contacts.{edit,delete,send_email}
  - contacts.import.csv_* (CSV column mapping labels)
  - Other related keys for sharing, mailbox context menu, file operations

- Propagate new keys to all 23 other locale files:
  - ar, ca, cs, da, de, es, fa, fr, he, hu, it, ja, ko, lv, nl, pl, pt, ro,
    ru, sk, tr, uk, zh
  - 19 locales with real, idiomatic translations matching existing tone
  - 4 locales (da, es, fa, zh) with English placeholders pending native
    translation

- Fix eml-import test: update accept-string expectation to match actual
  EML_IMPORT_ACCEPT constant (now includes .tgz, .tar.gz, application/gzip
  support added in P2.5)

All 53 tests now pass:
  - 48 translation completeness tests
  - 5 eml-import tests

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Bernd Rodler
2026-08-07 15:15:17 +02:00
co-authored by Claude Sonnet 5
parent a0bffa9467
commit 1189b146ef
26 changed files with 4123 additions and 253 deletions
+168 -11
View File
@@ -567,7 +567,8 @@
"copied": "Скопировано!",
"copy_failed": "Не удалось скопировать"
},
"send_now": "Отправить сейчас"
"send_now": "Отправить сейчас",
"create_appointment": "Создать встречу"
},
"email_composer": {
"read_receipt_on": "Запрошено уведомление о прочтении (нажмите, чтобы отключить)",
@@ -712,7 +713,10 @@
"delete_table": "Удалить таблицу",
"pick_size": "Выбрать размер"
},
"send_filing_warning": "Отправлено - но последующая очистка не удалась, может остаться устаревший черновик."
"send_filing_warning": "Отправлено - но последующая очистка не удалась, может остаться устаревший черновик.",
"insert_signature": "Вставить подпись",
"no_signature": "Без подписи",
"select_signature": "Выбрать подпись"
},
"confirm_dialog": {
"confirm": "Подтвердить",
@@ -888,7 +892,10 @@
"downloads": "Загрузки",
"content_senders": "Содержимое и отправители",
"about_data": "О программе и данные",
"debug": "Отладка"
"debug": "Отладка",
"import": "Импорт",
"sharing": "Общий доступ",
"signatures": "Подписи"
},
"tab_groups": {
"general": "Общие",
@@ -2007,7 +2014,39 @@
"scoped": {
"back": "Назад к моей учётной записи",
"managing": "Управление: {name}"
}
},
"importer": {
"action_label": "Импорт",
"cancel": "Отмена",
"choose_files": "Выбрать файлы",
"conflict_copy": "Сохранить оба",
"conflict_description": "Выберите, что делать, если импортируемое сообщение уже существует.",
"conflict_label": "Обработка дубликатов",
"conflict_replace": "Заменить дубликаты",
"conflict_skip": "Пропустить дубликаты",
"description": "Импортируйте сообщения электронной почты из файлов .eml в папку.",
"error_details": "{count, plural, one {# ошибка} other {# ошибок}}",
"fail": "Не удалось выполнить импорт",
"file_description": "Выберите один или несколько файлов .eml для импорта.",
"file_label": "Файлы",
"files_selected": "{count, plural, one {# файл выбран} other {# файлов выбрано}}",
"folder_description": "Выберите папку, в которую нужно импортировать сообщения.",
"folder_label": "Папка назначения",
"import_complete": "Импорт завершён",
"import_more": "Импортировать ещё",
"importing": "Импортирование...",
"progress_failed": "{count} не удалось",
"progress_imported": "{count} импортировано",
"progress_skipped": "{count} пропущено",
"start_import": "{count, plural, one {Импортировать # файл} other {Импортировать # файлов}}",
"success": "{count, plural, one {# сообщение импортировано} other {# сообщений импортировано}}",
"summary_failed": "{count, plural, one {# сообщение не импортировано} other {# сообщений не импортировано}}",
"summary_imported": "{count, plural, one {# сообщение импортировано} other {# сообщений импортировано}}",
"summary_skipped": "{count, plural, one {# сообщение пропущено} other {# сообщений пропущено}}",
"title": "Импорт почты"
},
"loading": "Загрузка...",
"refresh": "Обновить"
},
"errors": {
"page_error_title": "Что-то пошло не так",
@@ -2085,7 +2124,8 @@
"toast_error_delete_has_email": "Папка не пуста. Сначала очистите её.",
"placeholder_folder_name": "Имя папки",
"create": "Создать",
"rename_confirm": "Переименовать"
"rename_confirm": "Переименовать",
"share_folder": "Поделиться папкой..."
},
"shortcuts": {
"title": "Сочетания клавиш",
@@ -2184,7 +2224,11 @@
"save": "Сохранить идентификацию",
"cancel": "Отмена",
"creating": "Создание...",
"updating": "Обновление..."
"updating": "Обновление...",
"signature_store_default": "Подпись по умолчанию",
"signature_store_mapping": "Сопоставление подписей",
"signature_store_reply": "Подпись для ответа",
"use_global_default": "Использовать значение по умолчанию"
},
"sub_address": {
"button_tooltip": "Использовать суб-адрес",
@@ -2510,7 +2554,29 @@
"success": "{count, plural, one {1 контакт импортирован} other {# контактов импортировано}}",
"failed": "Импорт не выполнен",
"close": "Закрыть",
"file_too_large": "Файл слишком большой (макс. 5 МБ)"
"file_too_large": "Файл слишком большой (макс. 5 МБ)",
"csv_address": "Адрес",
"csv_address_book": "Адресная книга",
"csv_back": "Назад",
"csv_city": "Город",
"csv_company": "Компания",
"csv_country": "Страна",
"csv_email": "Email",
"csv_first_name": "Имя",
"csv_ignore": "Игнорировать этот столбец",
"csv_job_title": "Должность",
"csv_last_name": "Фамилия",
"csv_load_all": "Загрузить все",
"csv_map_columns": "Сопоставить столбцы",
"csv_nickname": "Псевдоним",
"csv_note": "Заметка",
"csv_phone": "Телефон",
"csv_postcode": "Почтовый индекс",
"csv_preview": "Предпросмотр",
"csv_preview_title": "Предпросмотр ({count, plural, one {# строка} other {# строк}})",
"csv_region": "Область/регион",
"csv_website": "Веб-сайт",
"file_types_csv": "Файлы .csv"
},
"export": {
"title": "Экспорт контактов",
@@ -2569,7 +2635,10 @@
"has_phone": "С телефоном",
"has_photo": "С фото"
},
"open_categories": "Открыть категории"
"open_categories": "Открыть категории",
"delete": "Удалить",
"edit": "Редактировать",
"send_email": "Отправить письмо"
},
"calendar": {
"title": "Календарь",
@@ -2988,7 +3057,37 @@
"bah": "Bahman",
"esf": "Esfand"
},
"nav_open_menu": "Открыть меню"
"nav_open_menu": "Открыть меню",
"delete": "Удалить",
"duplicate": "Дублировать",
"edit": "Редактировать",
"freeBusy": {
"busy": "Занято",
"check": "Проверить доступность",
"click_to_select": "Нажмите на свободный слот, чтобы выбрать это время",
"free": "Свободно",
"hide": "Скрыть доступность",
"loading": "Загрузка...",
"no_participants": "Добавьте участников, чтобы проверить доступность.",
"tentative": "Предварительно",
"timezone": "Часовой пояс",
"title": "Доступность",
"unavailable": "Отсутствует",
"unknown": "Нет данных"
},
"resources": {
"clear_all": "Очистить всё",
"filter_all": "Все",
"hide": "Скрыть ресурсы",
"no_resources": "Нет доступных ресурсов",
"remove": "Удалить {name}",
"search_placeholder": "Поиск ресурсов...",
"title": "Ресурсы",
"type_equipment": "Оборудование",
"type_other": "Другое",
"type_room": "Помещения",
"type_vehicle": "Транспорт"
}
},
"advanced_search": {
"title": "Расширенный поиск",
@@ -3153,7 +3252,8 @@
"open_folder_tree": "Открыть дерево папок",
"other_accounts": "Другие учётные записи",
"migration_title": "Обновление ваших файлов…",
"migration_description": "Папки и файлы упорядочиваются в правильную структуру. Это происходит только один раз."
"migration_description": "Папки и файлы упорядочиваются в правильную структуру. Это происходит только один раз.",
"send_as_attachment": "Отправить как вложение"
},
"smime": {
"your_certificates": "Ваши сертификаты",
@@ -3308,7 +3408,14 @@
"readWrite": "Чтение и запись",
"manager": "Управляющий",
"custom": "Пользовательский"
}
},
"accept": "Принять",
"decline": "Отклонить",
"no_shares_by_me": "Вы пока ничего не предоставили в общий доступ.",
"no_shares_with_me": "Пока нет папок, к которым вам предоставлен доступ.",
"shared_by": "Предоставлено",
"tab_shared_by_me": "Предоставлено мной",
"tab_shared_with_me": "Предоставлено мне"
},
"quote_header": {
"reply_line": "{date}, {from} написал:",
@@ -3324,5 +3431,55 @@
"install": "Установить",
"dont_remind": "Больше не напоминать",
"dismiss_aria": "Закрыть запрос на установку"
},
"signatures": {
"add_signature": "Добавить подпись",
"default": "По умолчанию",
"default_signature": {
"description": "Используется для новых сообщений, если не переопределено для отдельной идентификации.",
"label": "Подпись по умолчанию"
},
"delete_message": "Вы уверены, что хотите удалить \"{name}\"? Это действие нельзя отменить.",
"delete_title": "Удалить подпись?",
"description": "Создавайте и управляйте подписями электронной почты для использования при написании писем или ответе на них.",
"duplicate": "Дублировать",
"edit_signature": "Редактировать подпись",
"editor_label": "Подпись",
"html_preview_label": "Просмотр HTML",
"name_label": "Имя",
"name_placeholder": "напр., Работа, Личное",
"name_required": "Имя обязательно",
"new_signature": "Новая подпись",
"no_signature": "Без подписи",
"no_signatures": "Подписей пока нет",
"per_identity_signatures": {
"description": "Переопределите подпись по умолчанию и подпись для ответа для отдельных идентификаций.",
"label": "Подписи для отдельных идентификаций"
},
"plain_text_preview_label": "Просмотр в виде обычного текста",
"reply": "Ответ",
"reply_signature": {
"description": "Используется при ответе или пересылке, если не переопределено для отдельной идентификации.",
"label": "Подпись для ответа"
},
"show_editor": "Показать редактор",
"show_preview": "Показать предпросмотр",
"title": "Подписи",
"toolbar": {
"align_center": "По центру",
"align_left": "По левому краю",
"align_right": "По правому краю",
"bold": "Жирный",
"bullet_list": "Маркированный список",
"italic": "Курсив",
"link": "Ссылка",
"ordered_list": "Нумерованный список",
"remove_color": "Убрать цвет",
"strikethrough": "Зачёркнутый",
"text_color": "Цвет текста",
"underline": "Подчёркнутый"
},
"use_global_default": "Использовать значение по умолчанию",
"your_signatures": "Ваши подписи ({count})"
}
}