{
"forms": {
"upload_dir_error": "Ошибка при создании папки загрузки",
"file_create_error": "Ошибка при создании файла",
"multipart_stream_error": "Ошибка в потоке multipart",
"file_write_error": "Ошибка при записи файла",
"required": "Это поле обязательно для заполнения",
"too_short": "Слишком короткое (мин {})",
"too_long": "Слишком длинное (макс {})",
"email_invalid": "Неверный формат email адреса",
"url_invalid": "Пожалуйста, введите корректный URL",
"hash_error": "Ошибка хеширования: {}",
"password_empty": "Пароль не может быть пустым",
"filter_invalid_value": "Фильтр static/media получил неверное значение ({}) вместо пути к файлу.",
"number_invalid": "Неверное число",
"number_required": "Обязательно",
"integer_required": "Должно быть целым числом",
"decimal_required": "Должно быть в десятичном формате",
"min_value": "Требуется мин {}",
"max_value": "Превышен макс {}",
"precision_max": "Максимальная точность {} цифр после запятой",
"precision_min": "Минимальная точность {} цифр после запятой",
"color_invalid": "Неверный цвет (формат: #RRGGBB или #RGB)",
"color_no_hash": "Цвет должен начинаться с #",
"color_bad_hex": "Содержит не шестнадцатеричные символы",
"slug_invalid": "Неверный slug",
"slug_no_dash": "Slug не должен начинаться или заканчиваться дефисом",
"uuid_invalid": "Неверный формат UUID (ожидается: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)",
"json_invalid": "Неверный JSON: {}",
"ipv4_only": "Принимаются только IPv4 адреса",
"ipv6_only": "Принимаются только IPv6 адреса",
"ip_invalid": "Неверный IP адрес",
"date_invalid": "Неверный формат даты",
"date_too_old": "Слишком старая (мин : {})",
"date_too_far": "Слишком далеко (макс : {})",
"time_invalid": "Неверный формат времени",
"file_required": "Пожалуйста, выберите хотя бы один файл",
"file_extension_blocked": "Файл '{}' не разрешён. Разрешённые расширения: {}",
"finalize_error": "Ошибка при финализации поля '{}': {}",
"template_missing": "Отсутствует шаблон: {}",
"render_js_error": "Ошибка рендеринга JS: {}",
"tera_not_configured": "Tera не настроен",
"config_not_found": "Конфигурация не найдена в расширениях",
"hint_slug": "Формат: буквы-цифры-дефисы",
"hint_uuid": "Формат: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"hint_json": "Требуется корректный формат JSON",
"hint_ip_v4": "Формат IPv4: 192.168.1.1",
"hint_ip_v6": "Формат IPv6: 2001:0db8:85a3::8a2e:0370:7334",
"hint_ip": "Формат IPv4 или IPv6",
"validation_overflow": "Обнаружено переполнение стека: бесконечная рекурсия в валидации",
"choice_invalid": "Неверный выбор",
"choice_invalid_value": "Неверный выбор: {}",
"select_required": "Пожалуйста, выберите опцию",
"checkbox_required": "Пожалуйста, выберите хотя бы одну опцию",
"multipart_error": "Ошибка multipart",
"body_error": "Ошибка чтения тела запроса",
"aegis_query_error": "Ошибка разбора строки запроса: {}",
"aegis_urlencoded_error": "Ошибка разбора urlencoded тела: {}",
"aegis_json_error": "Ошибка разбора JSON тела: {}",
"auth_required": "Требуется аутентификация",
"role_insufficient": "Недостаточно прав",
"time_too_old": "Слишком рано (мин : {})",
"time_too_far": "Слишком поздно (макс : {})",
"datetime_too_old": "Слишком рано (мин : {})",
"datetime_too_far": "Слишком поздно (макс : {})",
"duration_invalid": "Неверная длительность (ожидается количество секунд)",
"duration_too_short": "Минимальная длительность: {} секунд",
"duration_too_long": "Максимальная длительность: {} секунд",
"file_max_count": "Разрешено максимум {} файлов",
"file_too_large": "Файл '{}' слишком большой ({}МБ > макс {}МБ)",
"file_invalid_image": "Файл '{}' не является корректным изображением",
"image_too_wide": "Изображение '{}' слишком широкое ({}px > {}px)",
"image_too_tall": "Изображение '{}' слишком высокое ({}px > {}px)",
"boolean_required": "Вы должны принять это поле",
"slug_unicode_invalid": "Разрешены только буквы, цифры, дефисы и подчёркивания",
"unique_field_taken": "Этот {} уже используется.",
"unique_value_taken": "Значение поля '{}' уже используется.",
"unique_constraint_violated": "Нарушено ограничение уникальности.",
"db_error": "Ошибка БД: {}",
"text_field_too_large": "Поле слишком большое (макс 1 МБ)",
"upload_too_large": "Файл слишком большой (макс {}МБ)"
},
"csrf": {
"missing": "Отсутствует CSRF токен",
"invalid": "Неверный CSRF токен",
"invalid_or_missing": "Неверный или отсутствующий CSRF токен",
"forbidden": "Неверный CSRF токен",
"session_write_error": "Ошибка записи сессии"
},
"error": {
"source": "Источник: {}",
"AppError": "Ошибка приложения",
"build": "Ошибка сборки: {}",
"internal": "Внутренняя ошибка",
"forbidden": "Доступ запрещён",
"not_found": "Ресурс не найден",
"validation": "Ошибка валидации: {}",
"database": "Ошибка базы данных: {}",
"io": "Ошибка ввода-вывода: {}",
"template": "Ошибка шаблона: {}",
"custom": "Пользовательская ошибка: {}",
"title": {
"not_found": "Страница не найдена",
"forbidden": "Доступ запрещён",
"validation": "Ошибка валидации",
"database": "Ошибка базы данных",
"template": "Ошибка рендеринга шаблона",
"internal": "Внутренняя ошибка сервера"
},
"path_not_found": "Запрошенный путь '{}' не найден",
"internal_occurred": "Произошла внутренняя ошибка",
"context_occurred": "Произошла ошибка AppError"
},
"title": {
"template": "Ошибка шаблона в '{}'"
},
"build": {
"validation_failed": "Ошибка валидации сборки: {}",
"check_failed": "Ошибка сборки с {} ошибками проверки",
"template_failed": "Ошибка загрузки шаблона: {}",
"db_missing": "Требуется подключение к базе данных при включённой функции 'orm'",
"component_not_ready": "Компонент '{}' не готов"
},
"middleware": {
"host_invalid": "Неверный хост: '{}' (Разрешённые хосты: {})",
"host_debug": "Неверный хост: '{}'. Добавьте его в RUNIQUE_ALLOWED_HOSTS.",
"bad_request": "Неверный запрос"
},
"html": {
"404_title": "404",
"404_text": "Страница не найдена",
"500_title": "500",
"500_text": "На сервере произошла ошибка",
"500_notice": "Наша команда уведомлена и работает над проблемой.",
"429_title": "429",
"429_text": "Слишком много запросов. Пожалуйста, подождите немного и повторите попытку.",
"back_home": "Вернуться на главную",
"critical_error_title": "Критическая ошибка",
"critical_error_text": "Система обработки ошибок сама столкнулась с ошибкой.",
"critical_error_contact": "Эта ситуация никогда не должна была произойти. Пожалуйста, свяжитесь с системным администратором."
},
"debug": {
"stack_trace_title": "Подробная трассировка ошибки",
"stack_trace_tip": "Самая верхняя ошибка (уровень 0) обычно является корневой причиной. Последующие ошибки показывают, как ошибка распространилась в коде."
},
"flash": {
"welcome": "Добро пожаловать, {}, ваш аккаунт создан!",
"fix_errors": "Пожалуйста, исправьте ошибки",
"success_demo": "Это сообщение об успехе.",
"info_demo": "Это информационное сообщение.",
"warning_demo": "Это предупреждающее сообщение.",
"error_demo": "Это сообщение об ошибке."
},
"log": {
"db_connecting": "Подключение к базе данных {}...",
"db_connected": "База данных успешно подключена ({})",
"db_failed": "Не удалось подключиться к базе данных",
"db_engine": "Движок: {}",
"template_render_error": "Ошибка рендеринга шаблона",
"error_handler": "Произошла критическая ошибка",
"error_handled": "Ошибка обработана",
"files_count": "добавление JS файлов в форму",
"js_file_skip": "JS файл пропущен",
"already_initialized": "Логгер уже инициализирован"
},
"cli": {
"creating_project": "Создание проекта '{}'...",
"admin_detected": "Обнаружен admin → запуск daemon",
"add_admin_hint": "Добавьте .with_admin(...) в ваш builder для активации панели администратора.",
"daemon_error": "[Daemon] Ошибка: {}",
"cargo_run_failed": "Приложение не запустилось корректно (cargo run)",
"file_not_found": "Файл не найден: {}\nУбедитесь, что вы находитесь в корне вашего проекта Runique.",
"admin_not_found": "Файл admin не найден: {}\nСоздайте src/admin.rs с макросом admin!{{}}.",
"name_empty": "Имя проекта не может быть пустым",
"name_invalid": "Имя проекта должно содержать только буквы, цифры, _ или -",
"name_dash": "Имя проекта не может начинаться с -",
"folder_exists": "Папка '{}' уже существует",
"cargo_run_expect": "Не удалось запустить cargo run",
"project_created": "Проект '{}' успешно создан!",
"getting_started": "Для начала:",
"cd_hint": "cd {}",
"cargo_run_hint": "cargo run"
},
"daemon": {
"modification_detected": "Обнаружено изменение → регенерация...",
"unable_read": "Невозможно прочитать: {}",
"parse_error": "Ошибка разбора: {}",
"no_resource": "Нет ресурсов в admin!{{}} — нечего генерировать",
"with_admin_disabled": "with_admin отключён → daemon остановлен",
"operational": "Daemon работает → src/admin/generated.rs",
"generation_error": "Ошибка генерации: {}",
"watcher_error": "Ошибка наблюдателя: {}",
"unable_create": "Невозможно создать наблюдателя: {}",
"unable_watch": "Невозможно наблюдать за {} : {}"
},
"macro": {
"named_fields_only": "Только структуры с именованными полями",
"structs_only": "Работает только со структурами",
"forms_field_required": "Структура '{}' должна иметь поле 'Forms'",
"field_no_name": "Поле без имени",
"model_form_named_only": "DeriveModelForm: только структуры с именованными полями",
"model_form_structs_only": "DeriveModelForm: только структуры"
},
"parser": {
"string_expected": "Ожидалась строка, найдено: {}",
"string_eof": "Ожидалась строка, конец файла",
"array_expected": "Ожидался массив [...] для разрешений, найдено: {}",
"array_eof": "Ожидался массив [...] для разрешений, конец файла",
"role_required": "Требуется хотя бы одна роль в permissions: [...]",
"punct_expected": "Ожидалось '{}', найдено: {}",
"punct_eof": "Ожидалось '{}', конец файла",
"title_required": "admin!: 'title' обязателен",
"permissions_required": "admin!: 'permissions' обязателен",
"list_display_exclude_exclusive": "admin!: 'list_display' и 'list_exclude' взаимно исключают друг друга"
},
"TemplateMessage": {
"debug_info_title": "Отладочная информация",
"debug_field_title": "Заголовок",
"debug_field_count": "Количество полей",
"debug_error_count": "Ошибки",
"debug_main_message": "Основное сообщение",
"debug_root_cause": "Корневая причина",
"debug_details": "Дополнительные детали",
"debug_request_info": "Информация о запросе",
"debug_http_method": "HTTP метод",
"debug_path": "Путь",
"debug_query_params": "Параметры запроса",
"debug_http_headers": "HTTP заголовки",
"debug_template_info": "Информация о шаблоне",
"debug_template_name": "Имя шаблона",
"debug_error_line": "Строка ошибки",
"debug_template_source": "Исходный код шаблона",
"debug_available_templates": "Доступные шаблоны",
"debug_stack_trace_title": "Подробная трассировка ошибки",
"debug_stack_trace_tip": "Самая верхняя ошибка (уровень 0) обычно является корневой причиной. Последующие ошибки показывают, как ошибка распространилась в коде.",
"debug_environment": "Окружение",
"debug_debug_mode": "Режим отладки",
"debug_enabled": "Включено",
"debug_disabled": "Отключено",
"debug_rust_version": "Версия Rust",
"debug_app_version": "Версия приложения",
"debug_status_code": "Код статуса",
"debug_header_name": "Имя",
"debug_header_value": "Значение"
},
"admin": {
"group": "Группа",
"groups": "Группы",
"resource": "Ресурс",
"resources": "Ресурсы",
"can_create": "Создать",
"can_read": "Чтение",
"can_update": "Изменение",
"can_delete": "Удалить",
"can_update_own": "Изменение",
"can_delete_own": "Удалить",
"name": "Имя",
"username": "Имя пользователя",
"email": "Email",
"staff": "Сотрудник",
"superuser": "Суперпользователь",
"active": "Активен",
"user": {
"username_too_short": "Имя пользователя слишком короткое (минимум 3 символа)",
"invalid_email": "Неверный формат email адреса"
},
"login": {
"title": "Вход",
"subtitle": "Войдите для доступа к панели администратора",
"label_username": "Имя пользователя",
"label_password": "Пароль",
"btn_submit": "Войти",
"error_session": "Ошибка при открытии сессии.",
"error_credentials": "Неверные учётные данные или недостаточно прав.",
"error_locked": "Слишком много попыток. Аккаунт временно заблокирован. Повторите через {} секунд."
},
"logout": {
"success": "Выход выполнен успешно."
},
"access": {
"no_auth_handler": "Обработчик аутентификации не настроен. Вызовите .auth(MyAuth) на AdminConfig.",
"insufficient_rights": "Недостаточно прав для доступа к администрированию"
},
"dashboard": {
"title": "Панель управления",
"subtitle": "Обзор приложения",
"card_resources": "Ресурсы",
"th_resource": "Ресурс",
"th_key": "Ключ",
"th_permissions": "Разрешения",
"th_actions": "Действия",
"btn_list": "Список",
"btn_create": "Создать",
"see_list": "Посмотреть список →",
"empty_title": "Нет зарегистрированных ресурсов",
"empty_desc": "Объявите ваши ресурсы в src/admin.rs с макросом admin!{{}} затем запустите runique start"
},
"list": {
"breadcrumb_admin": "Администрирование",
"entries_count_one": "запись",
"entries_count_many": "записей",
"btn_create": "Создать",
"th_id": "id",
"th_actions": "Действия",
"bool_true": "Да",
"bool_false": "Нет",
"btn_detail": "Детали",
"btn_edit": "Изменить",
"btn_delete": "Удалить",
"confirm_delete": "Действительно удалить?",
"empty_title": "Нет записей",
"empty_desc": "Начните с создания элемента.",
"btn_create_first": "Создать первый",
"search_placeholder": "Поиск..."
},
"create": {
"title": "Создать",
"breadcrumb": "Создать",
"card_info": "Информация",
"no_fields": "Пока нет доступных полей.",
"btn_cancel": "Отмена",
"btn_submit": "Создать",
"success": "Запись успешно создана!"
},
"edit": {
"title": "Изменить",
"breadcrumb": "Изменить",
"card_info": "Информация",
"no_fields": "Пока нет доступных полей.",
"btn_cancel": "Отмена",
"btn_submit": "Сохранить",
"success": "Запись успешно обновлена!"
},
"detail": {
"title": "Детали",
"breadcrumb": "Детали",
"entry_label": "Запись",
"btn_list": "← Список",
"btn_edit": "Изменить",
"btn_delete": "Удалить",
"confirm_delete": "Удалить эту запись?"
},
"reset_password": {
"btn": "Сбросить пароль",
"success_email": "Reset link sent to {}.",
"success_link": "Reset link (mailer not configured): {}",
"error_no_email": "No email field found for this user.",
"error_send": "Error sending email: {}",
"email_subject": "Сброс пароля",
"email_title": "Сброс пароля",
"email_greeting": "Здравствуйте,",
"email_body": "Нажмите на ссылку, чтобы сбросить пароль (действительна 1 час):",
"email_btn": "Сбросить пароль",
"email_ignore": "Если вы не запрашивали сброс, проигнорируйте это сообщение."
},
"user_created": {
"email_subject": "Добро пожаловать — установите пароль",
"email_sent": "Приветственное письмо отправлено на {}.",
"email_greeting": "Добро пожаловать,",
"email_body": "Для вас создан аккаунт. Нажмите на ссылку, чтобы установить пароль:",
"email_btn": "Установить пароль",
"email_validity": "Ссылка действительна 1 час. Если вы не ожидали этого сообщения, проигнорируйте его."
},
"delete": {
"title": "Удалить",
"breadcrumb": "Удалить",
"heading": "Подтвердить удаление",
"btn_cancel": "← Отмена",
"btn_confirm": "Да, удалить безвозвратно",
"success": "Запись успешно удалена!",
"warning": {
"title": "Внимание!",
"desc": "Вы собираетесь удалить запись",
"of": "ресурса",
"irreversible": "Это действие необратимо."
},
"not_found": "Ресурс не найден."
},
"bulk": {
"no_selection": "Элементы не выбраны.",
"no_field_selected": "Ни одно поле не изменено.",
"delete_success": "элемент(ов) удалено.",
"update_success": "элемент(ов) обновлено."
},
"base": {
"title": "Администрирование",
"breadcrumb": "Админ",
"toggle": "Свернуть меню",
"logout_title": "Выход"
},
"superuser_wizard": {
"title": "=== Создать суперпользователя ===",
"algo_prompt": "[1/5] Алгоритм хэширования",
"algo_argon2": "Argon2 (рекомендуется)",
"algo_bcrypt": "Bcrypt",
"algo_scrypt": "Scrypt",
"algo_custom": "Пользовательский провайдер",
"provider_path": "Путь к провайдеру",
"invalid_path": "Неверный путь.",
"username_prompt": "[2/5] Имя пользователя",
"username_empty": "Имя пользователя не может быть пустым.",
"username_taken": "Пользователь с таким именем уже существует.",
"email_prompt": "[3/5] Email",
"email_invalid": "Недействительный email.",
"email_taken": "Пользователь с таким email уже существует.",
"password_prompt": "[4/5] Пароль",
"password_too_short": "Пароль должен содержать не менее 10 символов.",
"confirm_prompt": "[5/5] Подтвердите пароль",
"password_mismatch": "Пароли не совпадают. Попробуйте снова.",
"review_algo": " Алгоритм : {}",
"review_username": " Логин : {}",
"review_email": " Email : {}",
"review_password": " Пароль : ••••••••",
"review_action": "Действие",
"confirm_create": "Подтвердить и создать",
"change_algo": "Изменить алгоритм",
"modify_password": "Изменить пароль",
"success": "✓ Суперпользователь успешно создан!",
"id_line": " ID : {}",
"username_line": " Логин : {}",
"email_line": " Email : {}"
},
"builtin": {
"invalid_id": "Недопустимый идентификатор.",
"droit_resource_required": "Пожалуйста, выберите хотя бы один ресурс.",
"droit_exists": "Право \"{}\" уже существует.",
"groupe_exists": "Группа с именем \"{}\" уже существует."
}
},
"makemigrations": {
"scanning": "Сканирование сущностей в '{}'...",
"found_schema": "-> Схема найдена: {}",
"found_extend": "-> Найдено расширение таблицы фреймворка: {}",
"no_schema": "Функции schema() не найдены в '{}'.",
"schema_count": "Найдено {} схем(а).",
"updated_lib": "Обновлено {}",
"no_changes": "Изменений не обнаружено. Ваша схема актуальна.",
"destructive_detected": "Обнаружены деструктивные изменения:",
"generated": "Сгенерировано: {}",
"snapshot_updated": "Снимок обновлён: {}",
"seaorm_alter": "Сгенерирована миграция SeaORM ALTER: {}",
"batch_up": "Сгенерирован пакет up: {}",
"batch_down": "Сгенерирован пакет down: {}",
"apply_hint": "Запустите 'sea-orm-cli migrate up' для применения.",
"extend_unknown_table": "extend!{{}} : \"{}\" не является известной таблицей фреймворка. Разрешённые таблицы: {}. Для расширения таблицы приложения измените её model!{{}} напрямую.",
"extend_invalid_syntax": "extend!{{}} : неверный синтаксис. Ожидается: table: \"имя_таблицы\", fields: {{ ... }}",
"admin_positioned": "AdminTableMigration размещена после миграции '{}'",
"files_ready": "{} файл(ов) готов(о) к миграции."
},
"migrate": {
"applying": "Применение миграций из '{}'...",
"run_hint": "Выполните: sea-orm-cli migrate up",
"complete_up": "Миграция завершена.",
"complete": "Откат завершён.",
"available_for": "Доступные файлы отката для '{}':",
"rolling_back_batch": "Откат пакета: {}",
"done": "Готово: {}",
"rolling_back": "Откат: {}",
"no_applied_dir": "Каталог applied/ не найден.",
"by_time_header": "by_time (полные пакеты):",
"none_available": "Файлы отката отсутствуют.",
"usage": "Использование:",
"usage_files": "runique migration down --files <table/timestamp> [<table/timestamp> ...]",
"usage_batch": "runique migration down --batch <timestamp>",
"no_down": "Инструкции down не найдены.",
"executing": "Выполняется: {}"
},
"reset": {
"forgot_title": "Забыли пароль",
"reset_title": "Новый пароль",
"success_title": "Пароль сброшен",
"email_label": "Адрес электронной почты",
"new_password_label": "Новый пароль",
"confirm_label": "Подтвердите пароль",
"email_mismatch": "Адрес электронной почты не соответствует ссылке.",
"invalid_link": "Недействительная ссылка.",
"invalid_or_expired": "Ссылка для сброса недействительна или истекла.",
"password_min_length": "Пароль должен содержать не менее {} символов.",
"password_mismatch": "Пароли не совпадают.",
"check_inbox": "Если этот адрес связан с аккаунтом, вы получите письмо для сброса пароля.",
"email_subject": "Сброс пароля",
"email_body": "<p>Здравствуйте, {0},</p><p>Перейдите по ссылке ниже для сброса пароля (действительна 1 час):</p><p><a href=\"{1}\">{2}</a></p>"
},
"permission": {
"col.id": "ID",
"col.can_create": "Создание",
"col.can_delete": "Удаление",
"col.can_delete_own": "Удаление (своё)",
"col.can_read": "Чтение",
"col.can_update": "Изменение",
"col.can_update_own": "Изменение (своё)",
"col.groupes": "Группы",
"col.resource_key": "Ресурс",
"col.actions": "Действия"
}
}