Files
grm/src/gitea_runner_manager/i18n.py
T
Emil Simeonov adb758f5f5 GRM-15: feat: add lifecycle CLI commands and RunnerManager extensions
- Add start, stop, enable, disable, status, remove methods to RunnerManager
- Add corresponding CLI subcommands: grm start/stop/enable/disable/status/remove
- Add i18n translations for lifecycle commands across all supported languages
- Add comprehensive unit tests for lifecycle methods and CLI commands
- Fix environment variable leakage in CLI tests for GITEA_URL
2026-06-18 22:59:50 +02:00

320 lines
16 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Simple i18n for GRM console messages.
Set GRM_LANG environment variable to override the default English.
Supported: en, bg, de, ru, zh.
"""
from __future__ import annotations
import os
TRANSLATIONS: dict[str, dict[str, str]] = {
"Installing Gitea Runner on {host}": {
"en": "Installing Gitea Runner on {host}",
"bg": "Инсталиране на Gitea Runner на {host}",
"de": "Gitea Runner wird auf {host} installiert",
"ru": "Установка Gitea Runner на {host}",
"zh": "正在 {host} 上安装 Gitea Runner",
},
"Updating Gitea Runner on {host}": {
"en": "Updating Gitea Runner on {host}",
"bg": "Актуализиране на Gitea Runner на {host}",
"de": "Gitea Runner wird auf {host} aktualisiert",
"ru": "Обновление Gitea Runner на {host}",
"zh": "正在 {host} 上更新 Gitea Runner",
},
"Running Ansible playbook": {
"en": "Running Ansible playbook",
"bg": "Изпълнение на Ansible playbook",
"de": "Ansible-Playbook wird ausgeführt",
"ru": "Выполнение Ansible playbook",
"zh": "正在运行 Ansible playbook",
},
"Full log: {log_file}": {
"en": "Full log: {log_file}",
"bg": "Пълен лог: {log_file}",
"de": "Vollständiges Log: {log_file}",
"ru": "Полный лог: {log_file}",
"zh": "完整日志: {log_file}",
},
"Done. See full log: {log_file}": {
"en": "Done. See full log: {log_file}",
"bg": "Готово. Вижте пълния лог: {log_file}",
"de": "Fertig. Siehe vollständiges Log: {log_file}",
"ru": "Готово. См. полный лог: {log_file}",
"zh": "完成。查看完整日志: {log_file}",
},
"Ansible failed with exit code {code}. See full log: {log_file}": {
"en": "Ansible failed with exit code {code}. See full log: {log_file}",
"bg": "Ansible е неуспешен с код {code}. Вижте пълния лог: {log_file}",
"de": "Ansible fehlgeschlagen mit Exit-Code {code}. Siehe Log: {log_file}",
"ru": "Ansible завершился с кодом {code}. См. лог: {log_file}",
"zh": "Ansible 失败,退出码 {code}。查看日志: {log_file}",
},
"GITEA_REGISTRATION_TOKEN must be set (or pass --token)": {
"en": "GITEA_REGISTRATION_TOKEN must be set (or pass --token)",
"bg": "GITEA_REGISTRATION_TOKEN трябва да е зададен (или подайте --token)",
"de": "GITEA_REGISTRATION_TOKEN muss gesetzt sein (oder --token übergeben)",
"ru": "GITEA_REGISTRATION_TOKEN должен быть задан (или передайте --token)",
"zh": "必须设置 GITEA_REGISTRATION_TOKEN(或传递 --token",
},
"Playbook not found: {playbook}": {
"en": "Playbook not found: {playbook}",
"bg": "Playbook не е намерен: {playbook}",
"de": "Playbook nicht gefunden: {playbook}",
"ru": "Playbook не найден: {playbook}",
"zh": "未找到 Playbook: {playbook}",
},
"GITEA_URL must be set (or pass --url)": {
"en": "GITEA_URL must be set (or pass --url)",
"bg": "GITEA_URL трябва да е зададен (или подайте --url)",
"de": "GITEA_URL muss gesetzt sein (oder --url übergeben)",
"ru": "GITEA_URL должен быть задан (или передайте --url)",
"zh": "必须设置 GITEA_URL(或传递 --url",
},
"Installation failed: {error}": {
"en": "Installation failed: {error}",
"bg": "Инсталацията неуспешна: {error}",
"de": "Installation fehlgeschlagen: {error}",
"ru": "Установка не удалась: {error}",
"zh": "安装失败: {error}",
},
"Update failed: {error}": {
"en": "Update failed: {error}",
"bg": "Актуализацията неуспешна: {error}",
"de": "Update fehlgeschlagen: {error}",
"ru": "Обновление не удалось: {error}",
"zh": "更新失败: {error}",
},
"SSH user": {
"en": "SSH user",
"bg": "SSH потребител",
"de": "SSH-Benutzer",
"ru": "SSH пользователь",
"zh": "SSH 用户",
},
"Path to SSH private key": {
"en": "Path to SSH private key",
"bg": "Път към SSH частен ключ",
"de": "Pfad zum SSH-Private-Key",
"ru": "Путь к SSH приватному ключу",
"zh": "SSH 私钥路径",
},
"Gitea Runner name (default: host)": {
"en": "Gitea Runner name (default: host)",
"bg": "Име на Gitea Runner (по подразбиране: host)",
"de": "Gitea Runner-Name (Standard: host)",
"ru": "Имя Gitea Runner (по умолчанию: host)",
"zh": "Gitea Runner 名称(默认: host",
},
"Registration token (env: GITEA_REGISTRATION_TOKEN)": {
"en": "Registration token (env: GITEA_REGISTRATION_TOKEN)",
"bg": "Регистрационен токен (env: GITEA_REGISTRATION_TOKEN)",
"de": "Registrierungstoken (env: GITEA_REGISTRATION_TOKEN)",
"ru": "Токен регистрации (env: GITEA_REGISTRATION_TOKEN)",
"zh": "注册令牌(环境变量: GITEA_REGISTRATION_TOKEN",
},
"Gitea Runner deployment mode (default: docker)": {
"en": "Gitea Runner deployment mode (default: docker)",
"bg": "Режим на разполагане на Gitea Runner (по подразбиране: docker)",
"de": "Gitea Runner-Bereitstellungsmodus (Standard: docker)",
"ru": "Режим развёртывания Gitea Runner (по умолчанию: docker)",
"zh": "Gitea Runner 部署模式(默认: docker",
},
"Gitea admin API token for integration test (env: GITEA_ADMIN_TOKEN)": {
"en": "Gitea admin API token for integration test (env: GITEA_ADMIN_TOKEN)",
"bg": "Gitea admin API токен за интеграционен тест (env: GITEA_ADMIN_TOKEN)",
"de": "Gitea-Admin-API-Token für Integrationstest (env: GITEA_ADMIN_TOKEN)",
"ru": "Токен админ API Gitea для интеграционного теста (env: GITEA_ADMIN_TOKEN)",
"zh": "Gitea 管理员 API 令牌,用于集成测试(环境变量: GITEA_ADMIN_TOKEN",
},
"Integration test API retries (default: 3, env: GITEA_INTEGRATION_RETRIES)": {
"en": "Integration test API retries (default: 3, env: GITEA_INTEGRATION_RETRIES)",
"bg": "Повторни опити за интеграционен тест API (по подразбиране: 3, env: GITEA_INTEGRATION_RETRIES)",
"de": "API-Wiederholungen für Integrationstest (Standard: 3, env: GITEA_INTEGRATION_RETRIES)",
"ru": "Повторы API интеграционного теста (по умолчанию: 3, env: GITEA_INTEGRATION_RETRIES)",
"zh": "集成测试 API 重试次数(默认: 3,环境变量: GITEA_INTEGRATION_RETRIES",
},
"Prompt for sudo password": {
"en": "Prompt for sudo password",
"bg": "Подканване за sudo парола",
"de": "Nach sudo-Passwort fragen",
"ru": "Запросить пароль sudo",
"zh": "提示输入 sudo 密码",
},
"Specific Gitea Runner version": {
"en": "Specific Gitea Runner version",
"bg": "Конкретна версия на Gitea Runner",
"de": "Spezifische Gitea Runner-Version",
"ru": "Конкретная версия Gitea Runner",
"zh": "指定 Gitea Runner 版本",
},
"Install and configure a Gitea Runner on a remote host.": {
"en": "Install and configure a Gitea Runner on a remote host.",
"bg": "Инсталиране и конфигуриране на Gitea Runner на отдалечен хост.",
"de": "Gitea Runner auf einem Remote-Host installieren und konfigurieren.",
"ru": "Установить и настроить Gitea Runner на удалённом хосте.",
"zh": "在远程主机上安装并配置 Gitea Runner。",
},
"Update the Gitea Runner binary on a remote host.": {
"en": "Update the Gitea Runner binary on a remote host.",
"bg": "Актуализиране на Gitea Runner двоичния файл на отдалечен хост.",
"de": "Gitea Runner-Binary auf einem Remote-Host aktualisieren.",
"ru": "Обновить бинарный файл Gitea Runner на удалённом хосте.",
"zh": "在远程主机上更新 Gitea Runner 二进制文件。",
},
"Start and configure a Gitea Runner on a remote host.": {
"en": "Start and configure a Gitea Runner on a remote host.",
"bg": "Стартиране и конфигуриране на Gitea Runner на отдалечен хост.",
"de": "Gitea Runner auf einem Remote-Host starten und konfigurieren.",
"ru": "Запустить и настроить Gitea Runner на удалённом хосте.",
"zh": "在远程主机上启动并配置 Gitea Runner。",
},
"Stop a Gitea Runner on a remote host.": {
"en": "Stop a Gitea Runner on a remote host.",
"bg": "Спиране на Gitea Runner на отдалечен хост.",
"de": "Gitea Runner auf einem Remote-Host stoppen.",
"ru": "Остановить Gitea Runner на удалённом хосте.",
"zh": "在远程主机上停止 Gitea Runner。",
},
"Enable a Gitea Runner to start on boot.": {
"en": "Enable a Gitea Runner to start on boot.",
"bg": "Активиране на Gitea Runner за стартиране при зареждане.",
"de": "Gitea Runner für den Start beim Booten aktivieren.",
"ru": "Включить автозапуск Gitea Runner при загрузке.",
"zh": "启用 Gitea Runner 开机自启。",
},
"Disable a Gitea Runner and deregister it.": {
"en": "Disable a Gitea Runner and deregister it.",
"bg": "Деактивиране на Gitea Runner и дерегистрация.",
"de": "Gitea Runner deaktivieren und abmelden.",
"ru": "Отключить Gitea Runner и отменить его регистрацию.",
"zh": "禁用 Gitea Runner 并注销其注册。",
},
"Check the status of a Gitea Runner.": {
"en": "Check the status of a Gitea Runner.",
"bg": "Проверка на състоянието на Gitea Runner.",
"de": "Status eines Gitea Runner prüfen.",
"ru": "Проверить состояние Gitea Runner.",
"zh": "检查 Gitea Runner 的状态。",
},
"Remove a Gitea Runner completely.": {
"en": "Remove a Gitea Runner completely.",
"bg": "Пълно премахване на Gitea Runner.",
"de": "Gitea Runner vollständig entfernen.",
"ru": "Полностью удалить Gitea Runner.",
"zh": "完全移除 Gitea Runner。",
},
"Starting Gitea Runner {name} on {host}": {
"en": "Starting Gitea Runner {name} on {host}",
"bg": "Стартиране на Gitea Runner {name} на {host}",
"de": "Starte Gitea Runner {name} auf {host}",
"ru": "Запуск Gitea Runner {name} на {host}",
"zh": "正在 {host} 上启动 Gitea Runner {name}",
},
"Stopping Gitea Runner {name} on {host}": {
"en": "Stopping Gitea Runner {name} on {host}",
"bg": "Спиране на Gitea Runner {name} на {host}",
"de": "Stoppe Gitea Runner {name} auf {host}",
"ru": "Остановка Gitea Runner {name} на {host}",
"zh": "正在 {host} 上停止 Gitea Runner {name}",
},
"Enabling Gitea Runner {name} on {host}": {
"en": "Enabling Gitea Runner {name} on {host}",
"bg": "Активиране на Gitea Runner {name} на {host}",
"de": "Aktiviere Gitea Runner {name} auf {host}",
"ru": "Включение Gitea Runner {name} на {host}",
"zh": "正在 {host} 上启用 Gitea Runner {name}",
},
"Disabling Gitea Runner {name} on {host}": {
"en": "Disabling Gitea Runner {name} on {host}",
"bg": "Деактивиране на Gitea Runner {name} на {host}",
"de": "Deaktiviere Gitea Runner {name} auf {host}",
"ru": "Отключение Gitea Runner {name} на {host}",
"zh": "正在 {host} 上禁用 Gitea Runner {name}",
},
"Checking status of Gitea Runner {name} on {host}": {
"en": "Checking status of Gitea Runner {name} on {host}",
"bg": "Проверка на състоянието на Gitea Runner {name} на {host}",
"de": "Prüfe Status von Gitea Runner {name} auf {host}",
"ru": "Проверка состояния Gitea Runner {name} на {host}",
"zh": "正在检查 {host} 上 Gitea Runner {name} 的状态",
},
"Removing Gitea Runner {name} from {host}": {
"en": "Removing Gitea Runner {name} from {host}",
"bg": "Премахване на Gitea Runner {name} от {host}",
"de": "Entferne Gitea Runner {name} von {host}",
"ru": "Удаление Gitea Runner {name} с {host}",
"zh": "正在从 {host} 移除 Gitea Runner {name}",
},
"Start failed: {error}": {
"en": "Start failed: {error}",
"bg": "Стартирането неуспешно: {error}",
"de": "Start fehlgeschlagen: {error}",
"ru": "Запуск не удался: {error}",
"zh": "启动失败: {error}",
},
"Stop failed: {error}": {
"en": "Stop failed: {error}",
"bg": "Спирането неуспешно: {error}",
"de": "Stop fehlgeschlagen: {error}",
"ru": "Остановка не удалась: {error}",
"zh": "停止失败: {error}",
},
"Enable failed: {error}": {
"en": "Enable failed: {error}",
"bg": "Активирането неуспешно: {error}",
"de": "Aktivierung fehlgeschlagen: {error}",
"ru": "Включение не удалось: {error}",
"zh": "启用失败: {error}",
},
"Disable failed: {error}": {
"en": "Disable failed: {error}",
"bg": "Деактивирането неуспешно: {error}",
"de": "Deaktivierung fehlgeschlagen: {error}",
"ru": "Отключение не удалось: {error}",
"zh": "禁用失败: {error}",
},
"Status check failed: {error}": {
"en": "Status check failed: {error}",
"bg": "Проверката на състоянието неуспешна: {error}",
"de": "Statusprüfung fehlgeschlagen: {error}",
"ru": "Проверка состояния не удалась: {error}",
"zh": "状态检查失败: {error}",
},
"Remove failed: {error}": {
"en": "Remove failed: {error}",
"bg": "Премахването неуспешно: {error}",
"de": "Entfernung fehlgeschlagen: {error}",
"ru": "Удаление не удалось: {error}",
"zh": "移除失败: {error}",
},
"Gitea Runner Manager — manage Gitea Actions runners.": {
"en": "Gitea Runner Manager — manage Gitea Actions runners.",
"bg": "Gitea Runner Manager — управление на Gitea Actions runners.",
"de": "Gitea Runner Manager — Gitea Actions Runner verwalten.",
"ru": "Gitea Runner Manager — управление Gitea Actions runners.",
"zh": "Gitea Runner Manager — 管理 Gitea Actions runners。",
},
"Command: {cmd}": {
"en": "Command: {cmd}",
"bg": "Команда: {cmd}",
"de": "Befehl: {cmd}",
"ru": "Команда: {cmd}",
"zh": "命令: {cmd}",
},
}
def _(key: str, **kwargs: object) -> str:
"""Return a translated string for the given key.
Translation is opt-in via the ``GRM_LANG`` environment variable.
If unset, English is always returned regardless of system locale.
"""
lang = os.getenv("GRM_LANG", "en")
if lang not in ("en", "bg", "de", "ru", "zh"):
lang = "en"
template = TRANSLATIONS.get(key, {}).get(lang, key)
return template.format(**kwargs)