diff --git a/README.md b/README.md index 8ad5399d..c9e1404c 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Run it on a Raspberry Pi, a home server, or a $5 VPS. Your data stays yours. - **Expenses & reports** — See what your vehicles actually cost you. - **Dashboard** — A fleet-wide overview with widgets you can rearrange to your liking. - **Auth & feature toggles** — Username/password login with sessions, and the ability to turn off features you don't need. -- **10 languages** — English, Hindi, Spanish, French, German, Italian, Arabic, Romanian, Hungarian, and Finnish. +- **11 languages** — English, Hindi, Spanish, French, German, Italian, Arabic, Romanian, Hungarian, Finnish, and Russian. ## Tech stack diff --git a/docs/i18n.md b/docs/i18n.md index b4d86f9e..1559cc3c 100644 --- a/docs/i18n.md +++ b/docs/i18n.md @@ -22,9 +22,9 @@ Tracktor uses Paraglide (inlang) with the Svelte 5 addon for runtime-localized U ## Adding a new language -1. Add the language in your Paraglide source/messages `i18n/messages` and regenerate the compiled outputs under `src/lib/paraglide/messages/`. -2. Ensure the new language code is included in Paraglide's generated `locales` array (in `src/lib/paraglide/runtime.js`). -3. Optionally add a human-readable label in `src/lib/components/feature/settings/SettingsForm.svelte` in the `localeLabels` map. +1. Add a message file for the language in `i18n/messages/.json`, using `en.json` as the reference for keys. +2. Add the locale code to the `locales` array in `i18n/project.inlang/settings.json`. The Paraglide vite plugin regenerates `src/lib/paraglide/` (including the `locales` array) on the next `vite dev`/`vite build`. +3. Optionally add a human-readable label in the `localeLabels` map in `src/lib/helper/settings-form.helper.ts`. 4. Provide translations for your messages via inlang tooling (VS Code Sherlock, Fink, etc.). ## Notes diff --git a/i18n/messages/ru.json b/i18n/messages/ru.json new file mode 100644 index 00000000..98436267 --- /dev/null +++ b/i18n/messages/ru.json @@ -0,0 +1,813 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "hello_world": "Привет, {name} из ru!", + "app_name": "Tracktor", + "app_title": "Ваш гараж", + "app_new_update_available": "Доступно обновление. Перезагрузка…", + "app_add_vehicle": "Добавить автомобиль", + "vehicle_scope_all": "Все автомобили", + "vehicle_scope_manage": "Управление автомобилями", + "form_vehicle_label": "Автомобиль", + "form_vehicle_desc": "К какому автомобилю относится запись", + "app_empty_select_message": "Выберите автомобиль, чтобы посмотреть подробности", + "app_empty_select_hint": "Выберите автомобиль из гаража выше, чтобы загрузить его панель.", + "demo_banner": "Это демонстрационная версия. Данные периодически сбрасываются и не сохраняются навсегда. Не вводите личную информацию.", + "default_login": "Логин по умолчанию: demo / demo", + "auth_username": "Имя пользователя", + "auth_username_placeholder": "имя пользователя", + "auth_password": "Пароль", + "auth_password_placeholder": "********", + "auth_confirm_password": "Подтвердите пароль", + "auth_login_button": "Войти", + "auth_signup_button": "Зарегистрироваться", + "auth_login_loading": "Выполняется вход…", + "auth_signup_loading": "Создание аккаунта…", + "auth_password_mismatch": "Пароли не совпадают!", + "auth_login_title": "С возвращением", + "auth_login_subtitle": "Войдите, чтобы держать под контролем автомобили, заправки и документы.", + "settings_tab_personalization": "Персонализация", + "settings_tab_interface": "Интерфейс", + "settings_tab_localization": "Локализация", + "settings_tab_advanced": "Дополнительно", + "settings_tab_features": "Функции", + "settings_tab_units": "Единицы измерения", + "settings_title": "Настройки", + "settings_page_description": "Настройте внешний вид, язык, региональные форматы и поведение интерфейса.", + "settings_label_date_format": "Формат даты", + "settings_label_locale": "Язык", + "settings_label_timezone": "Часовой пояс", + "settings_label_currency": "Валюта", + "settings_label_unit_distance": "Единица расстояния", + "settings_label_unit_volume": "Единица объёма топлива", + "settings_label_theme": "Тема", + "settings_label_dark_mode": "Стиль тёмной темы", + "settings_label_custom_css": "Пользовательский CSS", + "settings_update_button": "Сохранить настройки", + "settings_select_unit_system": "Выберите систему единиц", + "settings_select_theme": "Выберите тему", + "settings_select_dark_mode": "Выберите стиль тёмной темы", + "settings_desc_date_format": "Выберите предпочитаемый формат даты", + "settings_desc_locale": "Выберите язык интерфейса", + "settings_desc_timezone": "Выберите часовой пояс для отображения дат", + "settings_desc_currency": "Выберите предпочитаемую валюту", + "settings_desc_unit_distance": "Единица измерения расстояния", + "settings_desc_unit_volume": "Единица измерения объёма", + "settings_label_mileage_format": "Формат отображения расхода", + "settings_desc_mileage_format": "Выберите, как отображать расход топлива", + "settings_mileage_format_distance_per_fuel": "Расстояние на топливо (например, км/л, mpg)", + "settings_mileage_format_fuel_per_distance": "Топливо на расстояние (например, л/100 км)", + "settings_mileage_format_uk_mpg": "UK MPG (мили на имперский галлон)", + "settings_desc_theme": "Выберите предпочитаемую тему", + "settings_desc_dark_mode": "Выберите контрастность для тёмной темы", + "settings_desc_custom_css": "CSS-стили для настройки интерфейса", + "settings_select_language": "Выберите язык", + "settings_updated_success": "Настройки успешно сохранены!", + "common_example_prefix": "Пример — ", + "common_invalid_format": "Неверный формат…", + "common_kilometer": "Километры", + "common_mile": "Мили", + "common_litre": "Литр", + "common_gallon": "Галлон", + "common_submit": "Сохранить", + "common_details": "Подробности", + "common_close": "Закрыть", + "common_view": "Открыть", + "common_view_all": "Показать все", + "common_view_less": "Свернуть", + "common_loading": "Загрузка…", + "common_add": "Добавить", + "common_yes": "Да", + "common_no": "Нет", + "common_cancel": "Отмена", + "common_confirm": "Подтвердить", + "common_continue": "Продолжить", + "common_skip": "Пропустить", + "delete_dialog_title": "Удаление", + "delete_dialog_message": "Вы уверены, что хотите удалить?", + "common_select_column": "Выбрать столбец", + "common_import": "Импорт", + "common_search": "Поиск", + "common_columns": "Столбцы", + "common_rows_per_page": "Строк на странице", + "common_no_data_available": "Нет данных", + "common_no_records_found": "Записи не найдены", + "common_add_new": "Добавить", + "common_no_match_found": "Совпадений не найдено", + "common_search_placeholder": "Поиск: {name}", + "common_select_placeholder": "Выберите {name}…", + "common_date_from": "С", + "common_date_to": "По", + "common_export_csv": "Экспорт в CSV", + "nav_overview": "Обзор", + "nav_fuel_logs": "Заправки", + "nav_maintenance": "Обслуживание", + "nav_reminders": "Напоминания", + "tools_export_data": "Экспорт данных", + "tools_import_data": "Импорт данных", + "vehicle_form_make_label": "Марка", + "vehicle_form_make_desc": "Производитель автомобиля", + "vehicle_form_model_label": "Модель", + "vehicle_form_model_desc": "Модель автомобиля", + "vehicle_form_year_label": "Год", + "vehicle_form_year_desc": "Год выпуска", + "vehicle_form_color_label": "Цвет", + "vehicle_form_color_desc": "Цвет автомобиля", + "vehicle_form_fuel_type_label": "Тип топлива", + "vehicle_form_fuel_type_desc": "Тип топлива, на котором работает автомобиль", + "vehicle_form_fuel_type_placeholder": "Выберите тип топлива", + "vehicle_form_vehicle_type_label": "Тип транспорта", + "vehicle_form_vehicle_type_desc": "Категория транспортного средства", + "vehicle_form_vehicle_type_placeholder": "Выберите тип транспорта", + "vehicle_form_odometer_label": "Одометр", + "vehicle_form_odometer_desc": "Текущие показания одометра", + "vehicle_form_license_label": "Госномер", + "vehicle_form_license_desc": "Регистрационный номер автомобиля", + "vehicle_form_vin_label": "VIN", + "vehicle_form_vin_desc": "Идентификационный номер автомобиля", + "vehicle_toast_saved": "Автомобиль успешно сохранён", + "vehicle_toast_updated": "Автомобиль успешно обновлён", + "vehicle_toast_error_prefix": "Ошибка при сохранении: ", + "vehicle_list_empty": "Здесь пока пусто. Добавьте первый автомобиль, чтобы начать.", + "vehicle_delete_success": "Автомобиль удалён.", + "vehicle_delete_error": "При удалении автомобиля произошла ошибка.", + "vehicle_action_add_fuel_log": "Добавить заправку", + "vehicle_action_add_maintenance_log": "Добавить запись об обслуживании", + "vehicle_action_add_reminder": "Добавить напоминание", + "vehicle_action_more_info": "Подробнее", + "vehicle_action_update_vehicle": "Изменить автомобиль", + "vehicle_action_edit": "Изменить", + "vehicle_action_delete": "Удалить", + "tools_export_encrypt_label": "Шифровать экспортируемые данные", + "tools_export_password_label": "Пароль шифрования", + "tools_export_password_placeholder": "Введите пароль для шифрования", + "tools_export_password_hint": "Сохраните этот пароль — он понадобится для расшифровки данных при импорте.", + "tools_export_status_exporting": "Экспорт…", + "tools_export_button": "Экспортировать базу", + "tools_export_info_title": "Информация об экспорте", + "tools_export_info_bullet_1": "Экспортируются все таблицы и данные базы", + "tools_export_info_bullet_2": "Включая автомобили, заправки, записи об обслуживании и прочее", + "tools_export_info_bullet_3": "Шифрование по желанию — для защиты конфиденциальных данных", + "tools_export_info_bullet_4": "Скачивается в виде JSON-файла", + "tools_export_success": "Данные успешно экспортированы", + "tools_export_error": "Не удалось экспортировать данные", + "tools_import_upload_label": "Загрузить JSON-файл", + "tools_import_paste_label": "Или вставить JSON-данные", + "tools_import_paste_placeholder": "Вставьте сюда экспортированные JSON-данные…", + "tools_import_password_label": "Пароль расшифровки (если данные зашифрованы)", + "tools_import_password_placeholder": "Введите пароль, если данные зашифрованы", + "tools_import_status_importing": "Импорт…", + "tools_import_button": "Импортировать базу", + "tools_import_warning_title": "⚠️ Внимание при импорте", + "tools_import_warning_bullet_1": "Это заменит ВСЕ существующие данные", + "tools_import_warning_bullet_2": "Сначала обязательно сделайте резервную копию текущих данных", + "tools_import_warning_bullet_3": "Импорт нельзя отменить", + "tools_import_warning_bullet_4": "Убедитесь, что формат JSON корректен", + "tools_import_success": "Данные успешно импортированы", + "tools_import_error": "Не удалось импортировать данные", + "tools_import_invalid_json": "Неверный формат JSON", + "feature_overview_disabled_title": "Раздел «Обзор» отключён", + "feature_overview_disabled_hint": "Включите эту функцию в настройках, чтобы видеть обзорную панель", + "feature_fuel_disabled_title": "Раздел «Заправки» отключён", + "feature_fuel_disabled_hint": "Включите эту функцию в настройках, чтобы отслеживать расход топлива", + "feature_maintenance_disabled_title": "Раздел «Обслуживание» отключён", + "feature_maintenance_disabled_hint": "Включите эту функцию в настройках, чтобы вести записи об обслуживании", + "feature_reminders_disabled_title": "Раздел «Напоминания» отключён", + "feature_reminders_disabled_hint": "Включите эту функцию в настройках, чтобы управлять напоминаниями", + "overview_chart_no_data": "Нет данных", + "overview_chart_cost_label": "Расходы", + "overview_chart_cost_title": "Расходы по времени ({currency})", + "overview_chart_mileage_label": "Расход", + "overview_chart_mileage_title": "Расход топлива по времени ({unit})", + "fuel_import_title": "Импорт заправок", + "fuel_add_title": "Добавить заправку", + "col_date": "Дата", + "col_odometer": "Одометр", + "col_distance_driven": "Пройдено", + "col_filled": "Полный бак", + "col_missed_last": "Пропуск записей", + "col_fuel_amount": "Объём топлива", + "col_cost": "Стоимость", + "col_mileage": "Расход", + "col_notes": "Заметки", + "col_attachment": "Вложение", + "col_no_end_date": "Без даты окончания", + "fuel_volume_label_fuel": "Объём топлива", + "fuel_volume_label_energy": "Энергия", + "fuel_empty_list": "Для этого автомобиля нет записей о заправках.", + "form_date": "Дата", + "form_date_desc": "Дата заправки", + "form_odometer": "Одометр", + "form_odometer_desc": "Текущие показания одометра", + "form_volume_fuel": "Объём топлива", + "form_volume_energy": "Полученная энергия", + "form_rate": "Цена за единицу", + "form_cost": "Стоимость", + "form_cost_desc": "Стоимость заправки", + "form_cost_desc_ev": "Стоимость зарядки", + "form_full_charge": "Полный заряд", + "form_full_tank": "Полный бак", + "form_full_charge_desc": "Батарея заряжена полностью?", + "form_full_tank_desc": "Бак заправлен до полного?", + "form_missed_last": "Пропуск записей", + "form_missed_last_desc": "Были ли пропущены предыдущие записи?", + "form_notes": "Заметки", + "form_notes_placeholder": "Добавьте подробности, если есть…", + "form_attachment": "Вложение", + "fuel_toast_saved": "Заправка успешно сохранена!", + "fuel_toast_updated": "Заправка успешно обновлена!", + "fuel_toast_error_prefix": "Ошибка при сохранении: ", + "notifications_title": "Уведомления", + "notifications_new": "новых", + "notifications_syncing": "Загрузка свежих данных…", + "notifications_caught_up": "Новых уведомлений нет.", + "notifications_section_reminders": "Напоминания", + "notifications_section_alerts": "Оповещения о документах", + "notifications_mark_done_title": "Отметить напоминание как выполненное", + "notifications_mark_done_aria": "Отметить напоминание «{type}» как выполненное", + "notifications_mark_all_read_title": "Отметить все как прочитанные", + "notifications_mark_all_read_aria": "Отметить все уведомления как прочитанные", + "notifications_overdue_days": "Просрочено на {days} дн.", + "notifications_due_today": "Срок сегодня", + "notifications_due_tomorrow": "Срок завтра", + "notifications_due_in_days": "Срок через {days} дн.", + "alerts_status_expired": "Истёк", + "alerts_status_expiring": "Истекает", + "alerts_status_valid": "Действует", + "alerts_status_missing": "Отсутствует", + "notifications_expires": "Истекает", + "notifications_error_no_id": "Невозможно обновить напоминание без идентификатора.", + "notifications_error_update_failed": "Не удалось обновить напоминание.", + "notifications_success_marked_done": "Напоминание отмечено как выполненное.", + "notifications_severity_overdue": "Просрочено", + "notifications_severity_due_soon": "Скоро срок", + "notifications_severity_upcoming": "Предстоит", + "settings_custom_css_placeholder": "Добавьте свой CSS здесь…", + "settings_features_intro": "Включайте и отключайте функции под свои задачи", + "feature_label_fuel": "Заправки", + "feature_desc_fuel": "Учёт расхода топлива и истории заправок", + "feature_label_maintenance": "Обслуживание", + "feature_desc_maintenance": "Записи и планирование работ по обслуживанию", + "feature_label_reminders": "Напоминания", + "feature_desc_reminders": "Напоминания о важных событиях по автомобилю", + "feature_label_overview": "Обзор", + "feature_desc_overview": "Обзорная панель с ключевыми показателями по автомобилю", + "settings_error_date_format_invalid": "Неверный формат", + "settings_error_timezone_invalid": "Недопустимый часовой пояс.", + "settings_error_currency_required": "Укажите валюту", + "maintenance_form_attachment_label": "Вложение", + "maintenance_form_attachment_desc": "Загрузите чек или документ об обслуживании", + "maintenance_form_date_label": "Дата", + "maintenance_form_date_desc": "Дата обслуживания", + "maintenance_form_odometer_label": "Одометр", + "maintenance_form_odometer_desc": "Текущие показания одометра", + "maintenance_form_service_center_label": "Сервис", + "maintenance_form_service_center_desc": "Название сервисного центра", + "maintenance_form_cost_label": "Стоимость", + "maintenance_form_cost_desc": "Стоимость обслуживания", + "maintenance_form_notes_label": "Заметки", + "maintenance_form_notes_desc": "Дополнительные сведения", + "maintenance_form_notes_placeholder": "Добавьте подробности, если есть…", + "maintenance_toast_saved": "Запись об обслуживании сохранена", + "maintenance_toast_updated": "Запись об обслуживании обновлена", + "maintenance_toast_error_prefix": "Ошибка при сохранении: ", + "maintenance_form_error_fix": "Исправьте ошибки в форме перед отправкой.", + "maintenance_list_empty": "Для этого автомобиля нет записей об обслуживании.", + "maintenance_col_service_center": "Сервис", + "maintenance_menu_open": "Открыть меню", + "maintenance_menu_edit": "Изменить", + "maintenance_menu_delete": "Удалить", + "maintenance_menu_sheet_title": "Изменить запись об обслуживании", + "maintenance_tab_title": "История обслуживания", + "maintenance_add_action": "Добавить запись об обслуживании", + "maintenance_export_pdf": "Экспорт в PDF", + "maintenance_delete_success": "Запись об обслуживании удалена.", + "maintenance_delete_error": "При удалении записи об обслуживании произошла ошибка.", + "reminder_form_due_date_label": "Срок", + "reminder_form_due_date_desc": "Когда должно сработать напоминание?", + "reminder_form_type_label": "Тип", + "reminder_form_type_desc": "Выберите тип напоминания", + "reminder_form_schedule_label": "Когда напомнить", + "reminder_form_schedule_desc": "За сколько напомнить о сроке?", + "reminder_form_recurrence_type_label": "Повторение", + "reminder_form_recurrence_type_desc": "Должно ли напоминание повторяться?", + "reminder_form_recurrence_interval_label": "Повторять каждые", + "reminder_form_recurrence_interval_desc": "Частота повторения", + "reminder_form_recurrence_end_date_label": "Дата окончания", + "reminder_form_recurrence_end_date_desc": "Когда прекратить повторения? (необязательно)", + "reminder_form_note_label": "Заметка", + "reminder_form_note_desc": "Добавьте подробности", + "reminder_form_note_placeholder": "Опишите, на что обратить внимание", + "reminder_form_is_completed_label": "Отметить как выполненное", + "reminder_toast_created": "Напоминание создано.", + "reminder_toast_updated": "Напоминание обновлено", + "reminder_toast_error_prefix": "Ошибка при сохранении: ", + "reminder_list_empty": "Напоминаний пока нет. Создайте первое, чтобы не пропустить сроки продления.", + "reminder_list_select_vehicle": "Выберите автомобиль, чтобы посмотреть напоминания.", + "reminder_list_select_hint": "Выберите автомобиль выше, чтобы загрузить его предстоящие напоминания.", + "reminder_col_due_date": "Срок", + "reminder_col_reminder_schedule": "Когда напомнить", + "reminder_col_recurrence": "Повторение", + "reminder_col_note": "Заметки", + "reminder_menu_toggle_done": "Отметить как «{status}»", + "reminder_menu_toggle_done_done": "Отметить как невыполненное", + "reminder_menu_toggle_done_pending": "Отметить как выполненное", + "reminder_menu_edit": "Изменить", + "reminder_menu_delete": "Удалить", + "reminder_menu_open": "Открыть меню", + "reminder_menu_sheet_title": "Изменить напоминание", + "reminder_add_action": "Добавить напоминание", + "reminder_delete_success": "Напоминание удалено.", + "reminder_delete_error": "При удалении напоминания произошла ошибка.", + "reminder_status_completed": "Выполнено", + "reminder_status_pending": "Ожидает", + "reminder_status_overdue": "Просрочено", + "reminder_status_error": "Не удалось изменить статус напоминания.", + "reminder_toast_error_fallback": "Не удалось сохранить напоминание.", + "settings_sheet_title": "Настройки", + "profile_menu_item": "Профиль", + "profile_sheet_title": "Профиль", + "profile_sheet_desc": "Измените имя пользователя и пароль", + "profile_username": "Имя пользователя", + "profile_username_desc": "Ваше отображаемое имя", + "profile_password_hint": "Оставьте поля пароля пустыми, чтобы сохранить текущий пароль", + "profile_current_password": "Текущий пароль", + "profile_current_password_desc": "Требуется для смены пароля", + "profile_new_password": "Новый пароль", + "profile_new_password_desc": "Минимум 6 символов", + "profile_confirm_password": "Подтвердите пароль", + "profile_confirm_password_desc": "Введите новый пароль ещё раз", + "profile_update_button": "Обновить профиль", + "tools_menu": "Инструменты", + "data_export_import_menu_item": "Экспорт и импорт данных", + "data_export_import_sheet_title": "Экспорт и импорт данных", + "data_export_import_sheet_desc": "Экспортируйте или импортируйте базу данных, при желании с шифрованием", + "logout_menu_item": "Выйти", + "custom_fields_label": "Дополнительные поля", + "custom_fields_add_button": "Добавить поле", + "custom_fields_name_placeholder": "Название поля", + "custom_fields_value_placeholder": "Значение поля", + "custom_fields_remove_aria": "Удалить поле", + "custom_fields_empty_message": "Дополнительных полей нет. Нажмите «Добавить поле», чтобы начать.", + "vehicle_details_vin": "VIN", + "vehicle_details_not_specified": "Не указано", + "vehicle_details_not_available": "Недоступно", + "vehicle_details_section_title": "Подробности", + "vehicle_details_license_plate": "Госномер", + "vehicle_details_fuel_type": "Тип топлива", + "vehicle_details_odometer": "Одометр", + "vehicle_details_not_recorded": "Нет данных", + "vehicle_details_color": "Цвет", + "vehicle_details_year": "Год", + "vehicle_type_car": "Легковой автомобиль", + "vehicle_type_motorcycle": "Мотоцикл", + "vehicle_type_scooter": "Скутер", + "vehicle_type_truck": "Грузовик", + "vehicle_type_van": "Фургон", + "vehicle_type_bus": "Автобус", + "vehicle_type_farm_vehicle": "Сельхозтехника", + "vehicle_type_yacht": "Яхта", + "vehicle_type_rv": "Дом на колёсах / прицеп", + "vehicle_type_other": "Другое", + "fuel_type_diesel": "Дизель", + "fuel_type_petrol": "Бензин", + "fuel_type_electric": "Электро", + "fuel_type_lpg": "Пропан (LPG)", + "fuel_type_cng": "Метан (CNG)", + "fuel_type_ev": "Электромобиль (EV)", + "reminder_schedule_same_day": "В день срока", + "reminder_schedule_one_day_before": "За 1 день", + "reminder_schedule_three_days_before": "За 3 дня", + "reminder_schedule_one_week_before": "За неделю", + "reminder_schedule_one_month_before": "За месяц", + "recurrence_type_none": "Без повторения", + "recurrence_type_daily": "Ежедневно", + "recurrence_type_weekly": "Еженедельно", + "recurrence_type_monthly": "Ежемесячно", + "recurrence_type_yearly": "Ежегодно", + "recurrence_every": "каждые", + "recurrence_renew_every": "Продлевать каждые", + "recurrence_interval_days": "дн.", + "recurrence_interval_weeks": "нед.", + "recurrence_interval_months": "мес.", + "recurrence_interval_years": "лет", + "recurrence_until": "До", + "file_drop_existing_note": "Прикреплённый файл (нажмите, чтобы открыть)", + "fuel_import_step_1_title": "Шаг 1: загрузка CSV-файла", + "fuel_import_step_1_desc": "Выберите текстовый файл с разделителями, содержащий данные о заправках, чтобы начать импорт.", + "fuel_import_drop_placeholder": "Перетащите сюда текстовый файл с разделителями или нажмите для выбора", + "fuel_import_headers_checkbox": "Первая строка содержит заголовки", + "fuel_import_delimiter_title": "Разделитель", + "fuel_import_delimiter_desc": "Выберите символ, разделяющий поля", + "fuel_import_date_format_title": "Формат даты", + "fuel_import_date_format_desc": "Укажите формат, в котором записаны даты в вашем CSV-файле.", + "fuel_import_error_no_headers": "Заголовки не найдены. Обновите csv.helper.ts, чтобы он возвращал заголовки.", + "fuel_import_step_2_title": "Шаг 2: сопоставление столбцов", + "fuel_import_step_2_desc": "Сопоставьте столбцы CSV-файла с соответствующими полями записи о заправке. Обязательные поля отмечены знаком *.", + "fuel_import_step_3_title": "Шаг 3: предпросмотр и импорт", + "fuel_import_step_3_desc": "Проверьте, как выглядят данные перед импортом.", + "fuel_import_no_preview": "Данных для предпросмотра пока нет. Реализуйте разбор в csv.helper.ts, чтобы заполнить строки.", + "fuel_import_success": "Импортировано заправок: {count}.", + "fuel_import_failed_count": "Импортировано: {imported}, с ошибкой: {failed}", + "fuel_import_error_generic": "Не удалось импортировать заправки.", + "fuel_import_vehicle_label": "Автомобиль:", + "fuel_import_delimiter_comma": "Запятая ( , )", + "fuel_import_delimiter_semicolon": "Точка с запятой ( ; )", + "fuel_import_delimiter_tab": "Табуляция ( \\t )", + "fuel_import_delimiter_pipe": "Вертикальная черта ( | )", + "fuel_import_delimiter_custom": "Свой", + "fuel_import_date_error": "В некоторых строках дата не соответствует формату «{format}»", + "fuel_import_date_format_placeholder": "например, MM/DD/YYYY", + "fuel_import_date_invalid": "Неверная дата", + "fuel_import_no_vehicle": "Автомобиль не выбран", + "fuel_import_col_date_hint": "Дата заправки", + "fuel_import_col_odometer_hint": "Показания одометра на момент заправки", + "fuel_import_col_fuel_hint": "Объём топлива или полученная энергия", + "fuel_import_col_cost_hint": "Общая стоимость записи", + "fuel_import_col_filled_hint": "Это полный бак или полный заряд?", + "fuel_import_col_missed_hint": "Была ли пропущена предыдущая запись?", + "fuel_import_col_notes_hint": "Любые дополнительные заметки", + "autocomplete_placeholder": "Введите или выберите…", + "autocomplete_loading": "Загрузка подсказок…", + "autocomplete_no_results": "Подсказок нет. Можно ввести своё значение.", + "input_date_placeholder": "Выберите дату", + "loading_default_message": "Загрузка…", + "dropzone_placeholder_image": "Нажмите или перетащите изображение для загрузки", + "dropzone_placeholder_attachment": "Перетащите файл сюда или нажмите для выбора", + "dropzone_placeholder_default": "Нажмите или перетащите файлы для загрузки", + "dropzone_error_single_file": "Загрузите только один файл.", + "dropzone_error_file_size": "Размер файла превышает лимит {size}.", + "dropzone_unknown_file": "Неизвестный файл", + "dropzone_uploading": "Загрузка…", + "dropzone_supports": "Поддерживаются: {types}", + "dropzone_max_size": "Макс. размер: {size}", + "dropzone_error_file_type": "Недопустимый тип файла", + "dropzone_hint_accept_limit": "{types} до {size}", + "vehicle_details_color_aria": "Цвет", + "vehicle_details_close_aria": "Закрыть", + "attachment_link_view_title": "Открыть вложение", + "file_preview_not_available": "Предпросмотр недоступен", + "file_preview_download_hint": "Этот тип файла нельзя посмотреть в браузере. Скачайте его для просмотра.", + "file_preview_download_button": "Скачать файл", + "file_preview_aria_download": "Скачать", + "file_preview_aria_close": "Закрыть", + "theme_toggle_label": "Переключить тему", + "fuel_log_edit": "Изменить", + "fuel_log_delete": "Удалить", + "fuel_log_menu_open": "Открыть меню", + "fuel_log_delete_success": "Запись о заправке удалена", + "fuel_log_menu_sheet_title": "Изменить запись о заправке", + "fuel_log_delete_error": "При удалении записи о заправке произошла ошибка.", + "color_picker_label": "Выберите цвет", + "reminder_type_maintenance": "Обслуживание", + "reminder_type_insurance": "Продление страховки", + "reminder_type_pollution": "Экологический контроль", + "reminder_type_registration": "Регистрация / налог", + "reminder_type_inspection": "Техосмотр", + "reminder_type_custom": "Другое", + "alert_status_expired_ago": "{label}: истёк {days} дн. назад", + "alert_status_expires_in": "{label}: истекает через {days} дн.", + "alert_status_valid_for": "{label}: действует ещё {days} дн.", + "alert_record_not_found": "Запись «{label}» не найдена. Добавьте данные, чтобы не пропустить сроки.", + "settings_error_format_not_valid": "Неверный формат", + "common_kilogram_unit": "Килограмм (кг)", + "common_pound_unit": "Фунт (lb)", + "settings_section_fuel_types": "Типы топлива", + "settings_section_fuel_types_desc": "Выберите единицу измерения для каждого вида топлива.", + "fuel_type_petrol_diesel": "Бензин / дизель", + "theme_slate": "Сланцевая", + "theme_stone": "Каменная", + "theme_red": "Красная", + "theme_rose": "Розовая", + "theme_blue": "Синяя", + "theme_green": "Зелёная", + "theme_purple": "Фиолетовая", + "theme_orange": "Оранжевая", + "theme_yellow": "Жёлтая", + "theme_teal": "Бирюзовая", + "theme_indigo": "Индиго", + "theme_pink": "Фуксия", + "dark_variant_default": "Обычный", + "dark_variant_dim": "Приглушённый", + "dark_variant_oled": "OLED (чистый чёрный)", + "settings_tab_notifications": "Уведомления", + "settings_personalization_desc": "Настройте оформление: темы, язык и форматы.", + "settings_section_general": "Основное", + "settings_section_general_desc": "Настройте внешний вид, локализацию и форматы отображения", + "settings_units_desc": "Настройте единицы измерения расстояния, объёма и типов топлива.", + "settings_section_units": "Единицы измерения", + "settings_section_units_desc": "Выберите единицы для расстояния, расхода и типов топлива", + "settings_section_feature_flags": "Функции приложения", + "settings_section_feature_flags_desc": "Включайте и отключайте основные модули приложения", + "settings_notifications_desc": "Настройте подписки провайдеров и время ежедневной отправки уведомлений.", + "settings_localization_desc": "Задайте язык и региональные настройки.", + "settings_advanced_desc": "Тонкая настройка интерфейса с помощью своих стилей.", + "settings_nav_desc_personalization": "Тема, отображение и стиль", + "settings_nav_desc_localization": "Язык и региональные форматы", + "settings_nav_desc_advanced": "Свой CSS и дополнительные параметры", + "settings_nav_desc_notifications": "Оповещения и напоминания", + "settings_nav_desc_units": "Единицы измерения", + "settings_nav_desc_features": "Настройка функций", + "settings_reset_defaults": "Сбросить к значениям по умолчанию", + "settings_cancel_button": "Отмена", + "settings_secure_note": "Ваши настройки хранятся надёжно и применяются на всех устройствах.", + "settings_error_fix_errors": "Исправьте следующие ошибки:", + "settings_fuel_types_label": "Типы топлива", + "settings_fuel_types_desc": "Выберите единицу измерения для каждого вида топлива.", + "fuel_type_label_petrol_diesel": "Бензин / дизель", + "fuel_type_label_lpg": "Пропан (LPG)", + "fuel_type_label_cng": "Метан (CNG)", + "notif_scheduled_delivery": "Отправка по расписанию", + "notif_scheduled_delivery_desc": "Уведомления в приложении приходят сразу. Это расписание влияет только на отправку через провайдеров.", + "notif_processing_schedule": "Расписание обработки", + "notif_processing_schedule_desc": "Отправлять уведомления через провайдеров по расписанию.", + "notif_send_now": "Отправить сейчас", + "notif_providers": "Провайдеры", + "notif_providers_desc": "Создавайте, изменяйте, проверяйте и включайте провайдеров уведомлений.", + "notif_providers_channels_info": "Каждого провайдера можно подписать на каналы «Напоминание», «Оповещение» и «Информация».", + "notif_add_provider": "Добавить провайдера", + "notif_empty_title": "Провайдеры уведомлений пока не настроены", + "notif_empty_desc": "Добавьте провайдера, чтобы получать напоминания, оповещения и информационные уведомления по расписанию.", + "notif_load_failed": "Не удалось загрузить провайдеров уведомлений", + "notif_select_provider_type": "Выберите тип провайдера", + "notif_select_channel": "Выберите хотя бы один канал уведомлений", + "notif_provider_updated": "Провайдер успешно обновлён", + "notif_provider_created": "Провайдер успешно создан", + "notif_provider_deleted": "Провайдер удалён", + "notif_provider_delete_failed": "Не удалось удалить провайдера", + "notif_channel_reminder": "Напоминание", + "notif_channel_reminder_desc": "Сроки и уведомления-напоминания", + "notif_channel_alert": "Оповещение", + "notif_channel_alert_desc": "Срочное или истекающее — требует внимания", + "notif_channel_information": "Информация", + "notif_channel_information_desc": "Общие информационные сообщения", + "notif_provider_enabled": "Включён", + "notif_provider_test": "Проверить провайдера", + "notif_provider_edit": "Изменить провайдера", + "notif_provider_delete": "Удалить провайдера", + "notif_dialog_add_title": "Добавить провайдера уведомлений", + "notif_dialog_edit_title": "Изменить провайдера уведомлений", + "notif_dialog_desc": "Выберите тип провайдера, укажите получателя и подпишите его на нужные каналы. Новые провайдеры включены по умолчанию, отключить их можно на карточке провайдера.", + "notif_provider_name": "Название провайдера", + "notif_provider_name_placeholder": "Ежедневная сводка на email", + "notif_provider_type": "Тип провайдера", + "notif_provider_type_email": "Email (SMTP)", + "notif_provider_type_webhook": "Вебхук", + "notif_provider_type_gotify": "Gotify", + "notif_provider_type_select": "Выберите тип провайдера", + "notif_dialog_cancel": "Отмена", + "notif_dialog_create": "Создать провайдера", + "notif_dialog_update": "Сохранить провайдера", + "notif_channel_subscriptions": "Подписки на каналы", + "notif_channel_subscriptions_desc": "Выберите, какие каналы уведомлений должен получать этот провайдер.", + "notif_test_title": "Проверка провайдера", + "notif_test_success": "Тестовое уведомление успешно отправлено", + "notif_test_email_label": "Тестовый email", + "notif_test_email_placeholder": "recipient@example.com", + "notif_test_email_desc": "Необязательный адрес получателя для этого тестового сообщения.", + "notif_test_message_label": "Тестовое сообщение", + "notif_test_message_placeholder": "Это тестовое уведомление из Tracktor", + "notif_test_send": "Отправить тест", + "notif_cron_presets": "Готовые варианты", + "notif_cron_every_minute": "Каждую минуту", + "notif_cron_every_5_min": "Каждые 5 минут", + "notif_cron_every_15_min": "Каждые 15 минут", + "notif_cron_every_30_min": "Каждые 30 минут", + "notif_cron_every_hour": "Каждый час", + "notif_cron_every_2_hours": "Каждые 2 часа", + "notif_cron_every_6_hours": "Каждые 6 часов", + "notif_cron_every_12_hours": "Каждые 12 часов", + "notif_cron_daily_midnight": "Ежедневно в полночь", + "notif_cron_daily_2am": "Ежедневно в 2:00", + "notif_cron_daily_8am": "Ежедневно в 8:00", + "notif_cron_daily_noon": "Ежедневно в полдень", + "notif_cron_weekly_monday": "Раз в неделю (по понедельникам)", + "notif_cron_monthly_1st": "Раз в месяц (1-го числа)", + "notif_cron_expression_required": "Укажите выражение", + "notif_cron_must_have_5_parts": "Должно быть 5 частей", + "notif_cron_invalid_chars": "Недопустимые символы", + "notif_cron_valid": "Выражение корректно", + "notif_cron_invalid": "Некорректное выражение", + "notif_cron_custom": "Своё расписание", + "notif_email_smtp_settings": "Настройки SMTP-сервера", + "notif_email_host": "Хост", + "notif_email_port": "Порт", + "notif_email_use_ssl": "Использовать SSL/TLS", + "notif_email_use_ssl_desc": "Включить защищённое соединение", + "notif_email_auth": "Аутентификация", + "notif_email_username": "Имя пользователя / email", + "notif_email_password": "Пароль", + "notif_email_password_keep": "Пароль (оставьте пустым, чтобы не менять)", + "notif_email_sender_info": "Отправитель и получатель", + "notif_email_from": "Email отправителя", + "notif_email_from_name": "Имя отправителя (необязательно)", + "notif_email_from_name_placeholder": "Уведомления Tracktor", + "notif_email_recipient": "Email получателя", + "notif_email_recipient_desc": "Адрес электронной почты получателя", + "notif_webhook_config": "Настройка вебхука", + "notif_webhook_url": "URL вебхука", + "notif_webhook_method": "HTTP-метод", + "notif_webhook_headers": "Дополнительные заголовки (JSON)", + "notif_webhook_headers_desc": "Заголовки, которые нужно добавить к запросу вебхука", + "notif_webhook_auth_type": "Тип авторизации", + "notif_webhook_auth_none": "Без авторизации", + "notif_webhook_auth_basic": "Basic Auth", + "notif_webhook_auth_bearer": "Bearer-токен", + "notif_webhook_auth_apikey": "API-ключ", + "notif_webhook_username": "Имя пользователя", + "notif_webhook_apikey_header": "Название заголовка для API-ключа", + "notif_gotify_config": "Настройка сервера Gotify", + "notif_gotify_url": "URL сервера", + "notif_gotify_url_desc": "Адрес вашего сервера Gotify", + "notif_gotify_token": "Токен приложения", + "notif_gotify_token_keep": "Токен приложения (оставьте пустым, чтобы не менять)", + "notif_gotify_token_desc": "Токен приложения из Gotify (не клиентский токен)", + "notif_gotify_priority": "Приоритет (0–10)", + "notif_gotify_priority_desc": "Уровень приоритета сообщения. Чем выше, тем заметнее уведомление", + "notif_cleared_success_one": "Удалено 1 прочитанное уведомление", + "notif_cleared_success_other": "Удалено прочитанных уведомлений: {count}", + "notif_cleared_partial": "Удалено: {success}, с ошибкой: {failed}", + "notif_clear_failed": "Не удалось удалить прочитанные уведомления", + "notif_all_marked_read": "Все уведомления отмечены как прочитанные", + "notif_mark_read_failed": "Не удалось отметить уведомления как прочитанные", + "notif_button_mark_all_read": "Прочитать все", + "notif_button_clear_read": "Удалить прочитанные", + "notif_button_clear_all_read_title": "Удалить все прочитанные уведомления", + "notif_status_read": "Прочитано", + "notif_status_unread": "Не прочитано", + "notif_due_prefix": "Срок: {date}", + "notif_save_provider_failed": "Не удалось сохранить провайдера", + "notif_update_provider_failed": "Не удалось обновить провайдера", + "notif_send_all_failed": "Не удалось отправить уведомления", + "notif_send_all_success": "Отправлено уведомлений: {notifCount} через {successCount}/{providerCount} включённых провайдеров", + "notif_confirm_delete": "Удалить «{name}»?", + "notif_webhook_bearer_keep": "Bearer-токен (оставьте пустым, чтобы не менять)", + "notif_webhook_apikey_keep": "API-ключ (оставьте пустым, чтобы не менять)", + "notif_test_failed": "Не удалось отправить тестовое уведомление", + "notif_test_send_desc": "Отправить тестовое уведомление через «{name}»", + "notif_cron_every_n_minutes": "Каждые {n} минут", + "notif_cron_hourly_at_minute": "Каждый час в {n} минут", + "notif_cron_daily_at": "Ежедневно в {time}", + "vehicle_hub_back_to_vehicles": "К списку автомобилей", + "vehicle_hub_plate_copied": "Госномер скопирован", + "vehicle_hub_insurance_valid_till": "Страховка действует до", + "vehicle_hub_vehicle_type": "Тип транспорта", + "vehicle_hub_activity_title": "Последние события", + "vehicle_hub_activity_empty": "Недавних событий нет", + "vehicle_hub_activity_fuel_added": "Заправка", + "vehicle_hub_activity_maintenance": "Обслуживание", + "vehicle_hub_records_count": "Записей: {count}", + "vehicle_hub_valid_till": "Действует до {date}", + "vehicle_hub_upcoming_count": "Предстоит: {count}", + "vehicle_hub_view_details": "Подробнее", + "vehicle_hub_manage_title": "Управление автомобилем", + "vehicle_hub_stat_odometer": "Одометр", + "vehicle_hub_stat_mileage": "Средний расход", + "vehicle_hub_stat_fuel_logs": "Заправки", + "vehicle_hub_stat_maintenance_logs": "Записи об обслуживании", + "col_vehicle": "Автомобиль", + "overview_chart_pick_vehicle": "Выберите автомобиль, чтобы увидеть этот график", + "fuel_page_title": "Учёт топлива", + "fuel_page_description": "Следите за расходом топлива и затратами", + "fuel_stat_used": "Израсходовано топлива", + "fuel_stat_spent": "Всего потрачено", + "fuel_stat_avg_mileage": "Средний расход", + "fuel_stat_entries": "Всего записей", + "maintenance_page_title": "Обслуживание", + "maintenance_page_description": "История работ и предстоящее обслуживание", + "maintenance_stat_last_service": "Последнее обслуживание", + "maintenance_stat_next_service": "Следующее обслуживание", + "maintenance_stat_odometer": "Одометр", + "maintenance_stat_total_services": "Всего работ", + "maintenance_stat_total_spent": "Всего потрачено", + "maintenance_stat_due_soon": "Скоро срок", + "maintenance_tab_overview": "Обзор", + "maintenance_tab_history": "История обслуживания", + "maintenance_timeline_title": "Хронология обслуживания", + "maintenance_upcoming_empty": "Ничего не запланировано", + "maintenance_history_empty": "История обслуживания пока пуста", + "maintenance_next_service_fallback": "Плановое обслуживание", + "maintenance_also_upcoming": "Также предстоит", + "reminder_page_title": "Напоминания", + "reminder_page_description": "Не пропускайте сроки обслуживания, страховки и техосмотра", + "reminder_filter_all": "Все", + "reminder_filter_all_types": "Все типы", + "reminder_filter_service": "Обслуживание", + "reminder_filter_puc": "Экология", + "reminder_filter_insurance": "Страховка", + "reminder_filter_others": "Прочее", + "reminder_section_upcoming": "Предстоящие", + "reminder_section_completed": "Выполненные", + "reminder_section_marked_done": "Отмечены выполненными", + "reminder_empty_title": "Напоминания пока не настроены", + "reminder_stat_overdue": "Просрочено", + "reminder_stat_due_soon": "Скоро срок", + "reminder_stat_upcoming": "Предстоящие", + "reminder_stat_completed": "Выполнено", + "reminder_calendar_title": "Календарь", + "reminder_quick_actions_title": "Быстрые действия", + "reminder_manage_all_action": "Все напоминания", + "reminder_list_title": "Напоминания", + "reminder_list_title_for_date": "Напоминания на {date}", + "reminder_clear_filter": "Сбросить", + "reminder_calendar_empty_day": "На эту дату напоминаний нет.", + "reports_page_title": "Отчёты", + "reports_page_description": "Расходы и экспорт данных по вашему автопарку", + "reports_section_costs": "Расходы", + "reports_section_details": "Подробный отчёт", + "reports_section_exports": "Экспорт", + "reports_stat_fuel_costs": "Расходы на топливо", + "reports_stat_maintenance_costs": "Расходы на обслуживание", + "reports_chart_breakdown_title": "Структура расходов", + "reports_chart_trend_title": "Расходы по месяцам", + "reports_chart_trend_unavailable": "Динамика по месяцам доступна только для всех автомобилей вместе", + "reports_export_maintenance_title": "История обслуживания", + "reports_export_maintenance_description": "Экспорт истории обслуживания в PDF", + "reports_export_maintenance_hint": "Выберите автомобиль, чтобы экспортировать его историю обслуживания", + "reports_export_data_title": "Полный экспорт данных", + "reports_export_data_description": "Экспорт всех данных автопарка в JSON", + "reports_type_fuel": "Топливо", + "reports_type_maintenance": "Обслуживание", + "reports_type_compliance": "Документы", + "nav_compliance": "Документы", + "vehicle_action_add_compliance": "Добавить документ", + "feature_compliance_disabled_title": "Раздел «Документы» отключён", + "feature_compliance_disabled_hint": "Включите эту функцию в настройках, чтобы вести страховку, экологический контроль, техосмотр и регистрацию", + "feature_label_compliance": "Документы", + "feature_desc_compliance": "Учёт страховки, экологического контроля, техосмотра и регистрации", + "compliance_type_insurance": "Страховка", + "compliance_type_emissions": "Экологический контроль", + "compliance_type_roadworthiness": "Техосмотр", + "compliance_type_registration": "Регистрация / транспортный налог", + "compliance_type_other": "Другое", + "compliance_field_policy_number": "Номер полиса", + "compliance_field_certificate_number": "Номер сертификата", + "compliance_field_registration_number": "Регистрационный номер", + "compliance_field_document_number": "Номер документа", + "compliance_field_provider": "Страховая компания", + "compliance_field_testing_center": "Пункт контроля", + "compliance_field_inspection_center": "Пункт техосмотра", + "compliance_field_issuing_authority": "Кем выдан", + "compliance_recurrence_type_fixed": "Фиксированная дата окончания", + "compliance_recurrence_type_yearly": "Продлевается ежегодно", + "compliance_recurrence_type_monthly": "Продлевается ежемесячно", + "compliance_recurrence_type_no_end": "Без даты окончания", + "compliance_form_type_label": "Тип документа", + "compliance_form_type_desc": "Какой это документ", + "compliance_form_other_label_label": "Название типа", + "compliance_form_other_label_desc": "Назовите этот тип документа, например «WOF (Новая Зеландия)» или «TÜV (Германия)»", + "compliance_form_attachment_label": "Документ", + "compliance_form_attachment_desc": "Загрузите документ", + "compliance_form_issuer_desc": "Компания, пункт контроля или орган, выдавший документ", + "compliance_form_document_number_desc": "Номер, указанный в документе", + "compliance_form_start_date_label": "Дата начала", + "compliance_form_start_date_desc": "Дата, с которой документ действует", + "compliance_form_recurrence_type_label": "Как продлевается документ?", + "compliance_form_recurrence_type_desc": "Тип продления для этого документа", + "compliance_form_recurrence_interval_desc": "Как часто документ продлевается", + "compliance_form_end_date_label": "Дата окончания", + "compliance_form_end_date_desc": "Дата, когда документ перестаёт действовать", + "compliance_form_cost_label": "Стоимость", + "compliance_form_cost_desc": "Стоимость документа, если есть", + "compliance_form_notes_label": "Дополнительные заметки", + "compliance_form_notes_desc": "Любая дополнительная информация", + "compliance_form_notes_placeholder": "Добавьте подробности…", + "compliance_form_error_fix": "Исправьте ошибки в форме перед отправкой.", + "compliance_toast_saved": "Документ успешно сохранён", + "compliance_toast_updated": "Документ успешно обновлён", + "compliance_toast_error_prefix": "Ошибка при сохранении: ", + "compliance_list_empty": "Для этого автомобиля документы не найдены.", + "compliance_col_cost": "Стоимость", + "compliance_col_start_date": "Дата начала", + "compliance_col_end_date": "Дата окончания", + "compliance_col_next_due": "Следующий срок", + "compliance_col_recurrence": "Продление", + "compliance_col_notes": "Заметки", + "compliance_col_view_document": "Открыть документ", + "compliance_menu_open": "Открыть меню", + "compliance_menu_edit": "Изменить", + "compliance_menu_delete": "Удалить", + "compliance_menu_sheet_title": "Изменить документ", + "compliance_delete_success": "Документ удалён.", + "compliance_delete_error": "При удалении документа произошла ошибка.", + "compliance_page_title": "Документы", + "compliance_page_description": "Контроль страховки, экологического контроля, техосмотра и регистрации", + "compliance_add_action": "Добавить документ", + "compliance_filter_all_types": "Все типы", + "compliance_filter_all": "Все", + "compliance_filter_valid": "Действующие", + "compliance_filter_expiring_soon": "Скоро истекают", + "compliance_filter_expired": "Истёкшие", + "compliance_stat_total": "Всего", + "compliance_stat_valid": "Действующие", + "compliance_stat_expiring_soon": "Скоро истекают", + "compliance_stat_expired": "Истёкшие", + "compliance_cta_heading": "Держите документы в порядке", + "compliance_cta_description": "Обновляйте документы вовремя, чтобы избежать штрафов и законно ездить.", + "vehicle_hub_other_compliance_valid_till": "Другие документы действуют до", + "vehicle_hub_activity_compliance_updated": "Документ обновлён", + "vehicle_hub_activity_document_prefix": "Документ №", + "reports_stat_compliance_costs": "Расходы на документы", + "compliance_col_document": "Документ", + "compliance_col_status": "Статус", + "compliance_col_days_left": "Осталось дней" +} diff --git a/i18n/project.inlang/settings.json b/i18n/project.inlang/settings.json index aed47185..5dec532c 100644 --- a/i18n/project.inlang/settings.json +++ b/i18n/project.inlang/settings.json @@ -8,5 +8,5 @@ "pathPattern": "./messages/{locale}.json" }, "baseLocale": "en", - "locales": ["en", "ar", "hi", "es", "fr", "de", "it", "hu", "fi", "ro"] + "locales": ["en", "ar", "hi", "es", "fr", "de", "it", "hu", "fi", "ro", "ru"] } diff --git a/src/lib/helper/settings-form.helper.ts b/src/lib/helper/settings-form.helper.ts index 194d1ae6..5a3884ba 100644 --- a/src/lib/helper/settings-form.helper.ts +++ b/src/lib/helper/settings-form.helper.ts @@ -77,7 +77,8 @@ export function createSettingsOptions( it: 'Italiano', hu: 'Magyar', fi: 'Suomi', - ro: 'Română' + ro: 'Română', + ru: 'Русский' }; return {