GRM-30: feat: add runner labels support and refactor i18n to JSON
This commit was merged in pull request #9.
This commit is contained in:
@@ -94,6 +94,12 @@ def cli() -> None:
|
||||
default=lambda: int(os.getenv("GITEA_INTEGRATION_RETRIES", "3")),
|
||||
help=_("Integration test API retries (default: 3, env: GITEA_INTEGRATION_RETRIES)"),
|
||||
)
|
||||
@click.option(
|
||||
"--labels",
|
||||
"-l",
|
||||
default=lambda: os.getenv("GITEA_RUNNER_LABELS", ""),
|
||||
help=_("Runner labels for Gitea Actions (env: GITEA_RUNNER_LABELS). Example: docker:docker://alpine:latest"),
|
||||
)
|
||||
@click.option(
|
||||
"--ask-become-pass/--no-ask-become-pass",
|
||||
default=True,
|
||||
@@ -109,6 +115,7 @@ def install(
|
||||
url: str,
|
||||
admin_token: str | None,
|
||||
integration_retries: int,
|
||||
labels: str,
|
||||
ask_become_pass: bool,
|
||||
) -> None:
|
||||
manager = RunnerManager()
|
||||
@@ -123,6 +130,7 @@ def install(
|
||||
mode=mode,
|
||||
admin_token=admin_token,
|
||||
integration_retries=integration_retries,
|
||||
labels=labels or None,
|
||||
ask_become_pass=ask_become_pass,
|
||||
)
|
||||
except GRMError as e:
|
||||
@@ -377,7 +385,7 @@ def list_runners() -> None:
|
||||
click.echo(_("No runners registered. Use 'grm install' to add one."))
|
||||
return
|
||||
|
||||
click.echo(f"{_('NAME'):<20} {_('HOST'):<18} {_('USER'):<12} {_('MODE'):<8} {_('STATUS')}")
|
||||
click.echo("-" * 70)
|
||||
click.echo(f"{_('NAME'):<18} {_('HOST'):<16} {_('USER'):<10} {_('MODE'):<8} {_('LABELS'):<30} {_('STATUS')}")
|
||||
click.echo("-" * 100)
|
||||
for r in runners:
|
||||
click.echo(f"{r['name']:<20} {r['host']:<18} {r['user']:<12} {r['mode']:<8} {r['status']}")
|
||||
click.echo(f"{r['name']:<18} {r['host']:<16} {r['user']:<10} {r['mode']:<8} {r['labels']:<30} {r['status']}")
|
||||
|
||||
@@ -6,769 +6,13 @@ Supported: en, bg, de, ru, zh.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
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 URL (env: GITEA_URL)": {
|
||||
"en": "Gitea URL (env: GITEA_URL)",
|
||||
"bg": "Gitea URL (env: GITEA_URL)",
|
||||
"de": "Gitea-URL (env: GITEA_URL)",
|
||||
"ru": "URL Gitea (env: GITEA_URL)",
|
||||
"zh": "Gitea URL(环境变量: GITEA_URL)",
|
||||
},
|
||||
"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: REPO_TOKEN)": {
|
||||
"en": "Gitea admin API token for integration test (env: REPO_TOKEN)",
|
||||
"bg": "Gitea admin API токен за интеграционен тест (env: REPO_TOKEN)",
|
||||
"de": "Gitea-Admin-API-Token für Integrationstest (env: REPO_TOKEN)",
|
||||
"ru": "Токен админ API Gitea для интеграционного теста (env: REPO_TOKEN)",
|
||||
"zh": "Gitea 管理员 API 令牌,用于集成测试(环境变量: REPO_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 (default)": {
|
||||
"en": "Prompt for sudo password (default)",
|
||||
"bg": "Подканване за sudo парола (по подразбиране)",
|
||||
"de": "Nach sudo-Passwort fragen (Standard)",
|
||||
"ru": "Запросить пароль sudo (по умолчанию)",
|
||||
"zh": "提示输入 sudo 密码(默认)",
|
||||
},
|
||||
"Do not prompt for sudo password": {
|
||||
"en": "Do not prompt for sudo password",
|
||||
"bg": "Без подканване за sudo парола",
|
||||
"de": "Nicht 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 二进制文件。",
|
||||
},
|
||||
"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} 的状态",
|
||||
},
|
||||
"Checking status of Gitea Runner {name} on {host} as {user} (sudo required)": {
|
||||
"en": "Checking status of Gitea Runner {name} on {host} as {user} (sudo required)",
|
||||
"bg": "Проверка на състоянието на Gitea Runner {name} на {host} като {user} (необходим е sudo)",
|
||||
"de": "Prüfe Status von Gitea Runner {name} auf {host} als {user} (sudo erforderlich)",
|
||||
"ru": "Проверка состояния Gitea Runner {name} на {host} как {user} (требуется sudo)",
|
||||
"zh": "正在检查 {host} 上 Gitea Runner {name} 的状态(用户 {user},需要 sudo)",
|
||||
},
|
||||
"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}",
|
||||
},
|
||||
"Start a registered Gitea Runner.": {
|
||||
"en": "Start a registered Gitea Runner.",
|
||||
"bg": "Стартиране на регистриран Gitea Runner.",
|
||||
"de": "Einen registrierten Gitea Runner starten.",
|
||||
"ru": "Запустить зарегистрированный Gitea Runner.",
|
||||
"zh": "启动已注册的 Gitea Runner。",
|
||||
},
|
||||
"Stop a registered Gitea Runner.": {
|
||||
"en": "Stop a registered Gitea Runner.",
|
||||
"bg": "Спиране на регистриран Gitea Runner.",
|
||||
"de": "Einen registrierten Gitea Runner stoppen.",
|
||||
"ru": "Остановить зарегистрированный Gitea Runner.",
|
||||
"zh": "停止已注册的 Gitea Runner。",
|
||||
},
|
||||
"Enable a registered Gitea Runner to start on boot.": {
|
||||
"en": "Enable a registered Gitea Runner to start on boot.",
|
||||
"bg": "Разрешаване на регистриран Gitea Runner да стартира при зареждане.",
|
||||
"de": "Einen registrierten Gitea Runner für den Autostart aktivieren.",
|
||||
"ru": "Включить автозапуск зарегистрированного Gitea Runner.",
|
||||
"zh": "启用已注册的 Gitea Runner 开机自启。",
|
||||
},
|
||||
"Disable a registered Gitea Runner and deregister it.": {
|
||||
"en": "Disable a registered Gitea Runner and deregister it.",
|
||||
"bg": "Деактивиране на регистриран Gitea Runner и дерегистриране.",
|
||||
"de": "Einen registrierten Gitea Runner deaktivieren und abmelden.",
|
||||
"ru": "Отключить и дерегистрировать зарегистрированный Gitea Runner.",
|
||||
"zh": "禁用并注销已注册的 Gitea Runner。",
|
||||
},
|
||||
"Check the status of a registered Gitea Runner.": {
|
||||
"en": "Check the status of a registered Gitea Runner.",
|
||||
"bg": "Проверка на състоянието на регистриран Gitea Runner.",
|
||||
"de": "Status eines registrierten Gitea Runners prüfen.",
|
||||
"ru": "Проверить состояние зарегистрированного Gitea Runner.",
|
||||
"zh": "检查已注册的 Gitea Runner 状态。",
|
||||
},
|
||||
"Remove a registered Gitea Runner completely.": {
|
||||
"en": "Remove a registered Gitea Runner completely.",
|
||||
"bg": "Пълно премахване на регистриран Gitea Runner.",
|
||||
"de": "Einen registrierten Gitea Runner vollständig entfernen.",
|
||||
"ru": "Полностью удалить зарегистрированный Gitea Runner.",
|
||||
"zh": "完全移除已注册的 Gitea Runner。",
|
||||
},
|
||||
"Override host from registry": {
|
||||
"en": "Override host from registry",
|
||||
"bg": "Замяна на хоста от регистъра",
|
||||
"de": "Host aus Registrierung überschreiben",
|
||||
"ru": "Переопределить хост из реестра",
|
||||
"zh": "覆盖注册表中的主机",
|
||||
},
|
||||
"Override user from registry": {
|
||||
"en": "Override user from registry",
|
||||
"bg": "Замяна на потребителя от регистъра",
|
||||
"de": "Benutzer aus Registrierung überschreiben",
|
||||
"ru": "Переопределить пользователя из реестра",
|
||||
"zh": "覆盖注册表中的用户",
|
||||
},
|
||||
"Override SSH key from registry": {
|
||||
"en": "Override SSH key from registry",
|
||||
"bg": "Замяна на SSH ключа от регистъра",
|
||||
"de": "SSH-Schlüssel aus Registrierung überschreiben",
|
||||
"ru": "Переопределить SSH ключ из реестра",
|
||||
"zh": "覆盖注册表中的 SSH 密钥",
|
||||
},
|
||||
"Override deployment mode from registry": {
|
||||
"en": "Override deployment mode from registry",
|
||||
"bg": "Замяна на режима на внедряване от регистъра",
|
||||
"de": "Bereitstellungsmodus aus Registrierung überschreiben",
|
||||
"ru": "Переопределить режим развертывания из реестра",
|
||||
"zh": "覆盖注册表中的部署模式",
|
||||
},
|
||||
"Runner '{name}' not found in registry. Use 'grm install' first or provide --host and --user.": {
|
||||
"en": "Runner '{name}' not found in registry. Use 'grm install' first or provide --host and --user.",
|
||||
"bg": "Runner '{name}' не е намерен в регистъра. Използвайте 'grm install' първо или подайте --host и --user.",
|
||||
"de": (
|
||||
"Runner '{name}' nicht in Registrierung gefunden. "
|
||||
"Verwenden Sie zuerst 'grm install' oder geben Sie --host und --user an."
|
||||
),
|
||||
"ru": "Runner '{name}' не найден в реестре. Сначала используйте 'grm install' или укажите --host и --user.",
|
||||
"zh": "注册表中未找到 Runner '{name}'。请先使用 'grm install' 或提供 --host 和 --user。",
|
||||
},
|
||||
"List all registered runners with live status.": {
|
||||
"en": "List all registered runners with live status.",
|
||||
"bg": "Списък на всички регистрирани runners с актуално състояние.",
|
||||
"de": "Alle registrierten Runner mit Live-Status auflisten.",
|
||||
"ru": "Список всех зарегистрированных runners с текущим статусом.",
|
||||
"zh": "列出所有已注册 runners 的实时状态。",
|
||||
},
|
||||
"No runners registered. Use 'grm install' to add one.": {
|
||||
"en": "No runners registered. Use 'grm install' to add one.",
|
||||
"bg": "Няма регистрирани runners. Използвайте 'grm install', за да добавите.",
|
||||
"de": "Keine Runner registriert. Verwenden Sie 'grm install', um einen hinzuzufügen.",
|
||||
"ru": "Нет зарегистрированных runners. Используйте 'grm install' чтобы добавить.",
|
||||
"zh": "没有已注册的 runners。使用 'grm install' 添加一个。",
|
||||
},
|
||||
"List failed: {error}": {
|
||||
"en": "List failed: {error}",
|
||||
"bg": "Списъкът неуспешен: {error}",
|
||||
"de": "Auflistung fehlgeschlagen: {error}",
|
||||
"ru": "Ошибка списка: {error}",
|
||||
"zh": "列表失败: {error}",
|
||||
},
|
||||
"NAME": {
|
||||
"en": "NAME",
|
||||
"bg": "ИМЕ",
|
||||
"de": "NAME",
|
||||
"ru": "ИМЯ",
|
||||
"zh": "名称",
|
||||
},
|
||||
"HOST": {
|
||||
"en": "HOST",
|
||||
"bg": "ХОСТ",
|
||||
"de": "HOST",
|
||||
"ru": "ХОСТ",
|
||||
"zh": "主机",
|
||||
},
|
||||
"USER": {
|
||||
"en": "USER",
|
||||
"bg": "ПОТРЕБИТЕЛ",
|
||||
"de": "BENUTZER",
|
||||
"ru": "ПОЛЬЗОВАТЕЛЬ",
|
||||
"zh": "用户",
|
||||
},
|
||||
"MODE": {
|
||||
"en": "MODE",
|
||||
"bg": "РЕЖИМ",
|
||||
"de": "MODUS",
|
||||
"ru": "РЕЖИМ",
|
||||
"zh": "模式",
|
||||
},
|
||||
"STATUS": {
|
||||
"en": "STATUS",
|
||||
"bg": "СТАТУС",
|
||||
"de": "STATUS",
|
||||
"ru": "СТАТУС",
|
||||
"zh": "状态",
|
||||
},
|
||||
"active": {
|
||||
"en": "active",
|
||||
"bg": "активен",
|
||||
"de": "aktiv",
|
||||
"ru": "активен",
|
||||
"zh": "活跃",
|
||||
},
|
||||
"inactive": {
|
||||
"en": "inactive",
|
||||
"bg": "неактивен",
|
||||
"de": "inaktiv",
|
||||
"ru": "неактивен",
|
||||
"zh": "不活跃",
|
||||
},
|
||||
"failed": {
|
||||
"en": "failed",
|
||||
"bg": "неуспешен",
|
||||
"de": "fehlgeschlagen",
|
||||
"ru": "сбой",
|
||||
"zh": "失败",
|
||||
},
|
||||
"unknown": {
|
||||
"en": "unknown",
|
||||
"bg": "неизвестен",
|
||||
"de": "unbekannt",
|
||||
"ru": "неизвестно",
|
||||
"zh": "未知",
|
||||
},
|
||||
"=== Operation Report ===": {
|
||||
"en": "=== Operation Report ===",
|
||||
"bg": "=== Отчет за операцията ===",
|
||||
"de": "=== Operationsbericht ===",
|
||||
"ru": "=== Отчет об операции ===",
|
||||
"zh": "=== 操作报告 ===",
|
||||
},
|
||||
"completed": {
|
||||
"en": "completed",
|
||||
"bg": "завършено",
|
||||
"de": "abgeschlossen",
|
||||
"ru": "завершено",
|
||||
"zh": "已完成",
|
||||
},
|
||||
"pending": {
|
||||
"en": "pending",
|
||||
"bg": "чакащо",
|
||||
"de": "ausstehend",
|
||||
"ru": "в ожидании",
|
||||
"zh": "待处理",
|
||||
},
|
||||
"in_progress": {
|
||||
"en": "in progress",
|
||||
"bg": "в процес",
|
||||
"de": "in Bearbeitung",
|
||||
"ru": "в процессе",
|
||||
"zh": "进行中",
|
||||
},
|
||||
"Save runner '{name}' to local registry": {
|
||||
"en": "Save runner '{name}' to local registry",
|
||||
"bg": "Запазване на runner '{name}' в локалния регистър",
|
||||
"de": "Runner '{name}' in lokaler Registrierung speichern",
|
||||
"ru": "Сохранить runner '{name}' в локальном реестре",
|
||||
"zh": "将 runner '{name}' 保存到本地注册表",
|
||||
},
|
||||
"Remove runner '{name}' from local registry": {
|
||||
"en": "Remove runner '{name}' from local registry",
|
||||
"bg": "Премахване на runner '{name}' от локалния регистър",
|
||||
"de": "Runner '{name}' aus lokaler Registrierung entfernen",
|
||||
"ru": "Удалить runner '{name}' из локального реестра",
|
||||
"zh": "从本地注册表移除 runner '{name}'",
|
||||
},
|
||||
"Skip remote cleanup and only remove the local registry entry": {
|
||||
"en": "Skip remote cleanup and only remove the local registry entry",
|
||||
"bg": "Пропуснете отдалеченото почистване и премахнете само локалния запис",
|
||||
"de": "Remote-Bereinigung überspringen und nur den lokalen Registrierungseintrag entfernen",
|
||||
"ru": "Пропустить удаленную очистку и удалить только локальную запись реестра",
|
||||
"zh": "跳过远程清理,仅删除本地注册表条目",
|
||||
},
|
||||
"Ad-hoc command failed on {host}: {stderr}": {
|
||||
"en": "Ad-hoc command failed on {host}: {stderr}",
|
||||
"bg": "Ad-hoc командата неуспешна на {host}: {stderr}",
|
||||
"de": "Ad-hoc-Befehl auf {host} fehlgeschlagen: {stderr}",
|
||||
"ru": "Ad-hoc команда не удалась на {host}: {stderr}",
|
||||
"zh": "Ad-hoc 命令在 {host} 上失败: {stderr}",
|
||||
},
|
||||
"ERROR: REPO_TOKEN is not set.": {
|
||||
"en": "ERROR: REPO_TOKEN is not set.",
|
||||
"bg": "ГРЕШКА: REPO_TOKEN не е зададен.",
|
||||
"de": "FEHLER: REPO_TOKEN ist nicht gesetzt.",
|
||||
"ru": "ОШИБКА: REPO_TOKEN не задан.",
|
||||
"zh": "错误:未设置 REPO_TOKEN。",
|
||||
},
|
||||
"Configuring branch protection for {branch}...": {
|
||||
"en": "Configuring branch protection for {branch}...",
|
||||
"bg": "Конфигуриране на защита на клона {branch}...",
|
||||
"de": "Konfiguriere Branch-Schutz für {branch}...",
|
||||
"ru": "Настройка защиты ветки {branch}...",
|
||||
"zh": "正在配置 {branch} 的分支保护...",
|
||||
},
|
||||
" - Direct pushes: BLOCKED (require PR)": {
|
||||
"en": " - Direct pushes: BLOCKED (require PR)",
|
||||
"bg": " - Директни push-ове: БЛОКИРАНИ (изисква PR)",
|
||||
"de": " - Direkte Pushes: BLOCKIERT (PR erforderlich)",
|
||||
"ru": " - Прямые push: ЗАБЛОКИРОВАНЫ (требуется PR)",
|
||||
"zh": " - 直接推送:已阻止(需要 PR)",
|
||||
},
|
||||
" - Required approvals: {count}": {
|
||||
"en": " - Required approvals: {count}",
|
||||
"bg": " - Необходими одобрения: {count}",
|
||||
"de": " - Erforderliche Genehmigungen: {count}",
|
||||
"ru": " - Требуемые одобрения: {count}",
|
||||
"zh": " - 必需审批数: {count}",
|
||||
},
|
||||
" - Dismiss stale approvals: yes": {
|
||||
"en": " - Dismiss stale approvals: yes",
|
||||
"bg": " - Анулиране на остарели одобрения: да",
|
||||
"de": " - Veraltete Genehmigungen ablehnen: ja",
|
||||
"ru": " - Отклонять устаревшие одобрения: да",
|
||||
"zh": " - 忽略过时审批: 是",
|
||||
},
|
||||
" - Block outdated branches: yes": {
|
||||
"en": " - Block outdated branches: yes",
|
||||
"bg": " - Блокиране на остарели клонове: да",
|
||||
"de": " - Veraltete Branches blockieren: ja",
|
||||
"ru": " - Блокировать устаревшие ветки: да",
|
||||
"zh": " - 阻止过时分支: 是",
|
||||
},
|
||||
" - Block rejected reviews: yes": {
|
||||
"en": " - Block rejected reviews: yes",
|
||||
"bg": " - Блокиране на отхвърлени рецензии: да",
|
||||
"de": " - Abgelehnte Reviews blockieren: ja",
|
||||
"ru": " - Блокировать отклонённые ревью: да",
|
||||
"zh": " - 阻止被拒绝的审查: 是",
|
||||
},
|
||||
" - Required status checks: {checks}": {
|
||||
"en": " - Required status checks: {checks}",
|
||||
"bg": " - Необходими проверки на състоянието: {checks}",
|
||||
"de": " - Erforderliche Status-Checks: {checks}",
|
||||
"ru": " - Требуемые проверки статуса: {checks}",
|
||||
"zh": " - 必需状态检查: {checks}",
|
||||
},
|
||||
"Creating {label} label...": {
|
||||
"en": "Creating {label} label...",
|
||||
"bg": "Създаване на етикет {label}...",
|
||||
"de": "Erstelle Label {label}...",
|
||||
"ru": "Создание метки {label}...",
|
||||
"zh": "正在创建标签 {label}...",
|
||||
},
|
||||
" Label '{label}' already exists.": {
|
||||
"en": " Label '{label}' already exists.",
|
||||
"bg": " Етикетът '{label}' вече съществува.",
|
||||
"de": " Label '{label}' existiert bereits.",
|
||||
"ru": " Метка '{label}' уже существует.",
|
||||
"zh": " 标签 '{label}' 已存在。",
|
||||
},
|
||||
" Label '{label}' created.": {
|
||||
"en": " Label '{label}' created.",
|
||||
"bg": " Етикетът '{label}' е създаден.",
|
||||
"de": " Label '{label}' erstellt.",
|
||||
"ru": " Метка '{label}' создана.",
|
||||
"zh": " 标签 '{label}' 已创建。",
|
||||
},
|
||||
"Repository configuration complete.": {
|
||||
"en": "Repository configuration complete.",
|
||||
"bg": "Конфигурирането на хранилището е завършено.",
|
||||
"de": "Repository-Konfiguration abgeschlossen.",
|
||||
"ru": "Конфигурация репозитория завершена.",
|
||||
"zh": "仓库配置完成。",
|
||||
},
|
||||
"Configuring repository settings...": {
|
||||
"en": "Configuring repository settings...",
|
||||
"bg": "Конфигуриране на настройките на хранилището...",
|
||||
"de": "Repository-Einstellungen konfigurieren...",
|
||||
"ru": "Настройка параметров репозитория...",
|
||||
"zh": "正在配置仓库设置...",
|
||||
},
|
||||
" - Auto-delete branch after merge: yes": {
|
||||
"en": " - Auto-delete branch after merge: yes",
|
||||
"bg": " - Автоматично изтриване на клон след сливане: да",
|
||||
"de": " - Branch nach Merge automatisch löschen: ja",
|
||||
"ru": " - Автоудаление ветки после слияния: да",
|
||||
"zh": " - 合并后自动删除分支: 是",
|
||||
},
|
||||
"HTTP {status} Forbidden — your token lacks admin rights.\nMake sure the token belongs to a repo owner or organisation admin.\nAlternatively, configure branch protection manually in Settings → Branches.": { # noqa: E501
|
||||
"en": "HTTP {status} Forbidden — your token lacks admin rights.\nMake sure the token belongs to a repo owner or organisation admin.\nAlternatively, configure branch protection manually in Settings → Branches.", # noqa: E501
|
||||
"bg": "HTTP {status} Забранено — вашият токен няма администраторски права.\nУверете се, че токенът принадлежи на собственик на хранилище или администратор на организация.\nАлтернативно, конфигурирайте защитата на клона ръчно в Настройки → Клонове.", # noqa: E501
|
||||
"de": "HTTP {status} Verboten — Ihr Token hat keine Admin-Rechte.\nStellen Sie sicher, dass das Token einem Repository-Besitzer oder Organisations-Admin gehört.\nAlternativ können Sie den Branch-Schutz manuell unter Einstellungen → Branches konfigurieren.", # noqa: E501
|
||||
"ru": "HTTP {status} Запрещено — у вашего токена нет прав администратора.\nУбедитесь, что токен принадлежит владельцу репозитория или администратору организации.\nЛибо настройте защиту ветки вручную в разделе Настройки → Ветки.", # noqa: E501
|
||||
"zh": "HTTP {status} 禁止访问 — 您的令牌缺少管理员权限。\n请确保令牌属于仓库所有者或组织管理员。\n或者,您可以在 设置 → 分支 中手动配置分支保护。", # noqa: E501
|
||||
},
|
||||
"HTTP error: {status} — {message}": {
|
||||
"en": "HTTP error: {status} — {message}",
|
||||
"bg": "HTTP грешка: {status} — {message}",
|
||||
"de": "HTTP-Fehler: {status} — {message}",
|
||||
"ru": "Ошибка HTTP: {status} — {message}",
|
||||
"zh": "HTTP 错误: {status} — {message}",
|
||||
},
|
||||
"ERROR: VIKUNJA_TOKEN is not set.": {
|
||||
"en": "ERROR: VIKUNJA_TOKEN is not set.",
|
||||
"bg": "ГРЕШКА: VIKUNJA_TOKEN не е зададен.",
|
||||
"de": "FEHLER: VIKUNJA_TOKEN ist nicht gesetzt.",
|
||||
"ru": "ОШИБКА: VIKUNJA_TOKEN не задан.",
|
||||
"zh": "错误:未设置 VIKUNJA_TOKEN。",
|
||||
},
|
||||
"Oops! PR title must follow conventional commit format.\n Expected: <type>: <description>\n Got: {pr_title}": { # noqa: E501
|
||||
"en": "Oops! PR title must follow conventional commit format.\n Expected: <type>: <description>\n Got: {pr_title}", # noqa: E501
|
||||
"bg": "Опа! Заглавието на PR трябва да следва конвенционален формат.\n Очаква се: <type>: <description>\n Получено: {pr_title}", # noqa: E501
|
||||
"de": "Ups! PR-Titel muss dem konventionellen Commit-Format folgen.\n Erwartet: <type>: <description>\n Erhalten: {pr_title}", # noqa: E501
|
||||
"ru": "Ой! Заголовок PR должен соответствовать формату conventional commit.\n Ожидается: <type>: <description>\n Получено: {pr_title}", # noqa: E501
|
||||
"zh": "哎呀!PR 标题必须遵循 conventional commit 格式。\n 预期格式: <type>: <description>\n 实际: {pr_title}",
|
||||
},
|
||||
"Oops! No task ID (GRM-N) found in branch name '{branch}'.": {
|
||||
"en": "Oops! No task ID (GRM-N) found in branch name '{branch}'.",
|
||||
"bg": "Опа! Не е намерен идентификатор на задача (GRM-N) в името на клона '{branch}'.",
|
||||
"de": "Ups! Keine Task-ID (GRM-N) im Branch-Namen '{branch}' gefunden.",
|
||||
"ru": "Ой! В названии ветки '{branch}' не найден идентификатор задачи (GRM-N).",
|
||||
"zh": "哎呀!在分支名 '{branch}' 中未找到任务 ID (GRM-N)。",
|
||||
},
|
||||
"Merge failed with HTTP {status}: {message}\nPlease check the PR is ready and you have merge rights.": { # noqa: E501
|
||||
"en": "Merge failed with HTTP {status}: {message}\nPlease check the PR is ready and you have merge rights.", # noqa: E501
|
||||
"bg": "Сливането неуспешно с HTTP {status}: {message}\nПроверете дали PR е готов и имате права за сливане.", # noqa: E501
|
||||
"de": "Merge fehlgeschlagen mit HTTP {status}: {message}\nBitte prüfen Sie, ob der PR bereit ist und Sie Merge-Rechte haben.", # noqa: E501
|
||||
"ru": "Слияние не удалось: HTTP {status}: {message}\nПроверьте, что PR готов и у вас есть права на слияние.", # noqa: E501
|
||||
"zh": "合并失败: HTTP {status}: {message}\n请检查 PR 是否准备就绪且您具有合并权限。", # noqa: E501
|
||||
},
|
||||
"Nice! PR #{pr_number} squash-merged with title: {merge_title}": {
|
||||
"en": "Nice! PR #{pr_number} squash-merged with title: {merge_title}",
|
||||
"bg": "Отлично! PR #{pr_number} е squash-merge-нат със заглавие: {merge_title}",
|
||||
"de": "Prima! PR #{pr_number} wurde mit Titel {merge_title} squash-gemergt.",
|
||||
"ru": "Отлично! PR #{pr_number} squash-merge с заголовком: {merge_title}",
|
||||
"zh": "不错!PR #{pr_number} 已 squash 合并,标题: {merge_title}",
|
||||
},
|
||||
"No task ID in commit message, skipping Vikunja update. All good — nothing to do here!": { # noqa: E501
|
||||
"en": "No task ID in commit message, skipping Vikunja update. All good — nothing to do here!", # noqa: E501
|
||||
"bg": "Няма идентификатор на задача в съобщението за commit, пропускаме обновяването на Vikunja. Всичко е наред — няма какво да правим!", # noqa: E501
|
||||
"de": "Keine Task-ID in der Commit-Nachricht, Vikunja-Update wird übersprungen. Alles gut — nichts zu tun!", # noqa: E501
|
||||
"ru": "В сообщении коммита нет ID задачи, пропускаем обновление Vikunja. Всё в порядке — делать нечего!", # noqa: E501
|
||||
"zh": "提交消息中没有任务 ID,跳过 Vikunja 更新。一切正常 — 无需操作!", # noqa: E501
|
||||
},
|
||||
"Could not find Vikunja task for {task_id} in project {project_id}.": {
|
||||
"en": "Could not find Vikunja task for {task_id} in project {project_id}.",
|
||||
"bg": "Не е намерена задача Vikunja за {task_id} в проект {project_id}.",
|
||||
"de": "Keine Vikunja-Aufgabe für {task_id} in Projekt {project_id} gefunden.",
|
||||
"ru": "Не удалось найти задачу Vikunja для {task_id} в проекте {project_id}.",
|
||||
"zh": "在项目 {project_id} 中找不到 Vikunja 任务 {task_id}。",
|
||||
},
|
||||
"Vikunja API error: HTTP {status} — {message}": {
|
||||
"en": "Vikunja API error: HTTP {status} — {message}",
|
||||
"bg": "Грешка в API на Vikunja: HTTP {status} — {message}",
|
||||
"de": "Vikunja API-Fehler: HTTP {status} — {message}",
|
||||
"ru": "Ошибка API Vikunja: HTTP {status} — {message}",
|
||||
"zh": "Vikunja API 错误: HTTP {status} — {message}",
|
||||
},
|
||||
"Nice! Vikunja task {task_id} (ID {vikunja_id}) updated and marked done.": {
|
||||
"en": "Nice! Vikunja task {task_id} (ID {vikunja_id}) updated and marked done.",
|
||||
"bg": "Отлично! Задача Vikunja {task_id} (ID {vikunja_id}) е обновена и маркирана като готова.",
|
||||
"de": "Prima! Vikunja-Aufgabe {task_id} (ID {vikunja_id}) aktualisiert und als erledigt markiert.",
|
||||
"ru": "Отлично! Задача Vikunja {task_id} (ID {vikunja_id}) обновлена и отмечена как выполненная.",
|
||||
"zh": "不错!Vikunja 任务 {task_id} (ID {vikunja_id}) 已更新并标记为完成。",
|
||||
},
|
||||
"Oops! Package build failed:\n{stderr}": {
|
||||
"en": "Oops! Package build failed:\n{stderr}",
|
||||
"bg": "Опа! Сборката на пакета неуспешна:\n{stderr}",
|
||||
"de": "Ups! Paket-Build fehlgeschlagen:\n{stderr}",
|
||||
"ru": "Ой! Сборка пакета не удалась:\n{stderr}",
|
||||
"zh": "哎呀!包构建失败:\n{stderr}",
|
||||
},
|
||||
"Oops! PyPI publish failed:\n{stderr}": {
|
||||
"en": "Oops! PyPI publish failed:\n{stderr}",
|
||||
"bg": "Опа! Публикуването в PyPI неуспешно:\n{stderr}",
|
||||
"de": "Ups! PyPI-Veröffentlichung fehlgeschlagen:\n{stderr}",
|
||||
"ru": "Ой! Публикация в PyPI не удалась:\n{stderr}",
|
||||
"zh": "哎呀!PyPI 发布失败:\n{stderr}",
|
||||
},
|
||||
"Published to PyPI.": {
|
||||
"en": "Published to PyPI.",
|
||||
"bg": "Публикувано в PyPI.",
|
||||
"de": "In PyPI veröffentlicht.",
|
||||
"ru": "Опубликовано в PyPI.",
|
||||
"zh": "已发布到 PyPI。",
|
||||
},
|
||||
"PYPI_TOKEN not set — skipping PyPI publish. No worries, we'll just create the Gitea release.": { # noqa: E501
|
||||
"en": "PYPI_TOKEN not set — skipping PyPI publish. No worries, we'll just create the Gitea release.", # noqa: E501
|
||||
"bg": "PYPI_TOKEN не е зададен — пропускаме публикуването в PyPI. Без притеснения, просто ще създадем Gitea release.", # noqa: E501
|
||||
"de": "PYPI_TOKEN nicht gesetzt — PyPI-Veröffentlichung wird übersprungen. Keine Sorge, wir erstellen einfach das Gitea-Release.", # noqa: E501
|
||||
"ru": "PYPI_TOKEN не задан — пропускаем публикацию в PyPI. Не беспокойтесь, мы просто создадим Gitea release.", # noqa: E501
|
||||
"zh": "未设置 PYPI_TOKEN — 跳过 PyPI 发布。别担心,我们直接创建 Gitea release。", # noqa: E501
|
||||
},
|
||||
"Release creation failed with HTTP {status}: {message}": {
|
||||
"en": "Release creation failed with HTTP {status}: {message}",
|
||||
"bg": "Създаването на release неуспешно с HTTP {status}: {message}",
|
||||
"de": "Release-Erstellung fehlgeschlagen mit HTTP {status}: {message}",
|
||||
"ru": "Создание release не удалось: HTTP {status}: {message}",
|
||||
"zh": "Release 创建失败: HTTP {status}: {message}",
|
||||
},
|
||||
"Nice! Gitea release {tag} created.": {
|
||||
"en": "Nice! Gitea release {tag} created.",
|
||||
"bg": "Отлично! Gitea release {tag} е създаден.",
|
||||
"de": "Prima! Gitea-Release {tag} erstellt.",
|
||||
"ru": "Отлично! Gitea release {tag} создан.",
|
||||
"zh": "不错!Gitea release {tag} 已创建。",
|
||||
},
|
||||
"Oops! Master branch commits must start with a task ID.\n Expected: GRM-N: <conventional commit message>\n Got: {subject}": { # noqa: E501
|
||||
"en": "Oops! Master branch commits must start with a task ID.\n Expected: GRM-N: <conventional commit message>\n Got: {subject}", # noqa: E501
|
||||
"bg": "Опа! Commit-ите в клона master трябва да започват с идентификатор на задача.\n Очаква се: GRM-N: <conventional commit message>\n Получено: {subject}", # noqa: E501
|
||||
"de": "Ups! Master-Branch-Commits müssen mit einer Task-ID beginnen.\n Erwartet: GRM-N: <conventional commit message>\n Erhalten: {subject}", # noqa: E501
|
||||
"ru": "Ой! Коммиты в ветку master должны начинаться с ID задачи.\n Ожидается: GRM-N: <conventional commit message>\n Получено: {subject}", # noqa: E501
|
||||
"zh": "哎呀!master 分支的提交必须以任务 ID 开头。\n 预期格式: GRM-N: <conventional commit message>\n 实际: {subject}", # noqa: E501
|
||||
},
|
||||
"Oops! Master branch commit must follow conventional format after task ID.\n Expected: GRM-N: <type>: <description>\n Got: {subject}": { # noqa: E501
|
||||
"en": "Oops! Master branch commit must follow conventional format after task ID.\n Expected: GRM-N: <type>: <description>\n Got: {subject}", # noqa: E501
|
||||
"bg": "Опа! Commit-ът в клона master трябва да следва конвенционален формат след идентификатора.\n Очаква се: GRM-N: <type>: <description>\n Получено: {subject}", # noqa: E501
|
||||
"de": "Ups! Master-Branch-Commit muss nach der Task-ID dem konventionellen Format folgen.\n Erwartet: GRM-N: <type>: <description>\n Erhalten: {subject}", # noqa: E501
|
||||
"ru": "Ой! Коммит в ветку master после ID задачи должен соответствовать conventional формату.\n Ожидается: GRM-N: <type>: <description>\n Получено: {subject}", # noqa: E501
|
||||
"zh": "哎呀!master 分支提交在任务 ID 后必须遵循 conventional commit 格式。\n 预期格式: GRM-N: <type>: <description>\n 实际: {subject}", # noqa: E501
|
||||
},
|
||||
"Oops! Do not include task ID (GRM-N) in feature branch commits.\n The task ID will be added automatically on merge via CI.": { # noqa: E501
|
||||
"en": "Oops! Do not include task ID (GRM-N) in feature branch commits.\n The task ID will be added automatically on merge via CI.", # noqa: E501
|
||||
"bg": "Опа! Не включвайте идентификатор на задача (GRM-N) в commit-и от feature клонове.\n Идентификаторът ще бъде добавен автоматично при сливане чрез CI.", # noqa: E501
|
||||
"de": "Ups! Keine Task-ID (GRM-N) in Feature-Branch-Commits einfügen.\n Die Task-ID wird beim Merge automatisch über CI hinzugefügt.", # noqa: E501
|
||||
"ru": "Ой! Не включайте ID задачи (GRM-N) в коммиты feature-веток.\n ID задачи будет добавлен автоматически при слиянии через CI.", # noqa: E501
|
||||
"zh": "哎呀!不要在 feature 分支的提交中包含任务 ID (GRM-N)。\n 任务 ID 将在通过 CI 合并时自动添加。", # noqa: E501
|
||||
},
|
||||
"Oops! Commit message must follow conventional commit format.\n Expected: <type>: <description>\n Got: {subject}\n Allowed types: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE": { # noqa: E501
|
||||
"en": "Oops! Commit message must follow conventional commit format.\n Expected: <type>: <description>\n Got: {subject}\n Allowed types: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE", # noqa: E501
|
||||
"bg": "Опа! Съобщението за commit трябва да следва конвенционален формат.\n Очаква се: <type>: <description>\n Получено: {subject}\n Разрешени типове: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE", # noqa: E501
|
||||
"de": "Ups! Commit-Nachricht muss dem konventionellen Commit-Format folgen.\n Erwartet: <type>: <description>\n Erhalten: {subject}\n Erlaubte Typen: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE", # noqa: E501
|
||||
"ru": "Ой! Сообщение коммита должно соответствовать формату conventional commit.\n Ожидается: <type>: <description>\n Получено: {subject}\n Допустимые типы: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE", # noqa: E501
|
||||
"zh": "哎呀!提交消息必须遵循 conventional commit 格式。\n 预期格式: <type>: <description>\n 实际: {subject}\n 允许的类型: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE", # noqa: E501
|
||||
},
|
||||
"exit code {code}": {
|
||||
"en": "exit code {code}",
|
||||
"bg": "код за изход {code}",
|
||||
"de": "Exit-Code {code}",
|
||||
"ru": "код выхода {code}",
|
||||
"zh": "退出代码 {code}",
|
||||
},
|
||||
"Molecule directory not found: {path}": {
|
||||
"en": "Molecule directory not found: {path}",
|
||||
"bg": "Директорията на molecule не е намерена: {path}",
|
||||
"de": "Molecule-Verzeichnis nicht gefunden: {path}",
|
||||
"ru": "Директория molecule не найдена: {path}",
|
||||
"zh": "未找到 molecule 目录: {path}",
|
||||
},
|
||||
"Runner index {index} out of range (0..{max})": {
|
||||
"en": "Runner index {index} out of range (0..{max})",
|
||||
"bg": "Индексът на runner {index} е извън диапазона (0..{max})",
|
||||
"de": "Runner-Index {index} außerhalb des Bereichs (0..{max})",
|
||||
"ru": "Индекс runner {index} вне диапазона (0..{max})",
|
||||
"zh": "Runner 索引 {index} 超出范围 (0..{max})",
|
||||
},
|
||||
}
|
||||
TRANSLATIONS: dict[str, dict[str, str]] = json.loads(
|
||||
(Path(__file__).parent / "translations.json").read_text(encoding="utf-8")
|
||||
)
|
||||
|
||||
|
||||
def _(key: str, **kwargs: object) -> str:
|
||||
|
||||
@@ -46,6 +46,7 @@ class RunnerRegistry:
|
||||
key: str | None = None,
|
||||
mode: str = "docker",
|
||||
gitea_url: str = "",
|
||||
labels: str | None = None,
|
||||
) -> None:
|
||||
"""Register a runner in the local database."""
|
||||
self._data[name] = {
|
||||
@@ -54,6 +55,7 @@ class RunnerRegistry:
|
||||
"key": key,
|
||||
"mode": mode,
|
||||
"gitea_url": gitea_url,
|
||||
"labels": labels,
|
||||
"created_at": datetime.now(UTC).isoformat(),
|
||||
}
|
||||
self._save()
|
||||
|
||||
@@ -35,6 +35,7 @@ class RunnerManager:
|
||||
admin_token: str | None = None,
|
||||
integration_retries: int = 3,
|
||||
ask_become_pass: bool = False,
|
||||
labels: str | None = None,
|
||||
) -> None:
|
||||
"""Install a runner on a remote host using Ansible."""
|
||||
if not name:
|
||||
@@ -51,6 +52,8 @@ class RunnerManager:
|
||||
)
|
||||
if admin_token:
|
||||
extra_vars += f" gitea_admin_token={admin_token}"
|
||||
if labels:
|
||||
extra_vars += f" runner_labels={labels}"
|
||||
|
||||
with track_steps() as tracker:
|
||||
tracker.begin(_("Installing Gitea Runner on {host}", host=host))
|
||||
@@ -66,6 +69,7 @@ class RunnerManager:
|
||||
key=key,
|
||||
mode=mode,
|
||||
gitea_url=gitea_url,
|
||||
labels=labels,
|
||||
)
|
||||
tracker.done()
|
||||
|
||||
@@ -378,6 +382,7 @@ class RunnerManager:
|
||||
"host": host,
|
||||
"user": user,
|
||||
"mode": mode,
|
||||
"labels": info.get("labels", ""),
|
||||
"status": translated_status,
|
||||
}
|
||||
)
|
||||
|
||||
@@ -0,0 +1,772 @@
|
||||
{
|
||||
"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 URL (env: GITEA_URL)": {
|
||||
"en": "Gitea URL (env: GITEA_URL)",
|
||||
"bg": "Gitea URL (env: GITEA_URL)",
|
||||
"de": "Gitea-URL (env: GITEA_URL)",
|
||||
"ru": "URL Gitea (env: GITEA_URL)",
|
||||
"zh": "Gitea URL(环境变量: GITEA_URL)"
|
||||
},
|
||||
"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: REPO_TOKEN)": {
|
||||
"en": "Gitea admin API token for integration test (env: REPO_TOKEN)",
|
||||
"bg": "Gitea admin API токен за интеграционен тест (env: REPO_TOKEN)",
|
||||
"de": "Gitea-Admin-API-Token für Integrationstest (env: REPO_TOKEN)",
|
||||
"ru": "Токен админ API Gitea для интеграционного теста (env: REPO_TOKEN)",
|
||||
"zh": "Gitea 管理员 API 令牌,用于集成测试(环境变量: REPO_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)"
|
||||
},
|
||||
"Runner labels for Gitea Actions (env: GITEA_RUNNER_LABELS). Example: docker:docker://alpine:latest": {
|
||||
"en": "Runner labels for Gitea Actions (env: GITEA_RUNNER_LABELS). Example: docker:docker://alpine:latest",
|
||||
"bg": "Етикети на runner за Gitea Actions (env: GITEA_RUNNER_LABELS). Пример: docker:docker://alpine:latest",
|
||||
"de": "Runner-Labels für Gitea Actions (env: GITEA_RUNNER_LABELS). Beispiel: docker:docker://alpine:latest",
|
||||
"ru": "Метки runner для Gitea Actions (env: GITEA_RUNNER_LABELS). Пример: docker:docker://alpine:latest",
|
||||
"zh": "Gitea Actions 的 runner 标签(环境变量: GITEA_RUNNER_LABELS)。示例: docker:docker://alpine:latest"
|
||||
},
|
||||
"Prompt for sudo password (default)": {
|
||||
"en": "Prompt for sudo password (default)",
|
||||
"bg": "Подканване за sudo парола (по подразбиране)",
|
||||
"de": "Nach sudo-Passwort fragen (Standard)",
|
||||
"ru": "Запросить пароль sudo (по умолчанию)",
|
||||
"zh": "提示输入 sudo 密码(默认)"
|
||||
},
|
||||
"Do not prompt for sudo password": {
|
||||
"en": "Do not prompt for sudo password",
|
||||
"bg": "Без подканване за sudo парола",
|
||||
"de": "Nicht 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 二进制文件。"
|
||||
},
|
||||
"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} 的状态"
|
||||
},
|
||||
"Checking status of Gitea Runner {name} on {host} as {user} (sudo required)": {
|
||||
"en": "Checking status of Gitea Runner {name} on {host} as {user} (sudo required)",
|
||||
"bg": "Проверка на състоянието на Gitea Runner {name} на {host} като {user} (необходим е sudo)",
|
||||
"de": "Prüfe Status von Gitea Runner {name} auf {host} als {user} (sudo erforderlich)",
|
||||
"ru": "Проверка состояния Gitea Runner {name} на {host} как {user} (требуется sudo)",
|
||||
"zh": "正在检查 {host} 上 Gitea Runner {name} 的状态(用户 {user},需要 sudo)"
|
||||
},
|
||||
"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}"
|
||||
},
|
||||
"Start a registered Gitea Runner.": {
|
||||
"en": "Start a registered Gitea Runner.",
|
||||
"bg": "Стартиране на регистриран Gitea Runner.",
|
||||
"de": "Einen registrierten Gitea Runner starten.",
|
||||
"ru": "Запустить зарегистрированный Gitea Runner.",
|
||||
"zh": "启动已注册的 Gitea Runner。"
|
||||
},
|
||||
"Stop a registered Gitea Runner.": {
|
||||
"en": "Stop a registered Gitea Runner.",
|
||||
"bg": "Спиране на регистриран Gitea Runner.",
|
||||
"de": "Einen registrierten Gitea Runner stoppen.",
|
||||
"ru": "Остановить зарегистрированный Gitea Runner.",
|
||||
"zh": "停止已注册的 Gitea Runner。"
|
||||
},
|
||||
"Enable a registered Gitea Runner to start on boot.": {
|
||||
"en": "Enable a registered Gitea Runner to start on boot.",
|
||||
"bg": "Разрешаване на регистриран Gitea Runner да стартира при зареждане.",
|
||||
"de": "Einen registrierten Gitea Runner für den Autostart aktivieren.",
|
||||
"ru": "Включить автозапуск зарегистрированного Gitea Runner.",
|
||||
"zh": "启用已注册的 Gitea Runner 开机自启。"
|
||||
},
|
||||
"Disable a registered Gitea Runner and deregister it.": {
|
||||
"en": "Disable a registered Gitea Runner and deregister it.",
|
||||
"bg": "Деактивиране на регистриран Gitea Runner и дерегистриране.",
|
||||
"de": "Einen registrierten Gitea Runner deaktivieren und abmelden.",
|
||||
"ru": "Отключить и дерегистрировать зарегистрированный Gitea Runner.",
|
||||
"zh": "禁用并注销已注册的 Gitea Runner。"
|
||||
},
|
||||
"Check the status of a registered Gitea Runner.": {
|
||||
"en": "Check the status of a registered Gitea Runner.",
|
||||
"bg": "Проверка на състоянието на регистриран Gitea Runner.",
|
||||
"de": "Status eines registrierten Gitea Runners prüfen.",
|
||||
"ru": "Проверить состояние зарегистрированного Gitea Runner.",
|
||||
"zh": "检查已注册的 Gitea Runner 状态。"
|
||||
},
|
||||
"Remove a registered Gitea Runner completely.": {
|
||||
"en": "Remove a registered Gitea Runner completely.",
|
||||
"bg": "Пълно премахване на регистриран Gitea Runner.",
|
||||
"de": "Einen registrierten Gitea Runner vollständig entfernen.",
|
||||
"ru": "Полностью удалить зарегистрированный Gitea Runner.",
|
||||
"zh": "完全移除已注册的 Gitea Runner。"
|
||||
},
|
||||
"Override host from registry": {
|
||||
"en": "Override host from registry",
|
||||
"bg": "Замяна на хоста от регистъра",
|
||||
"de": "Host aus Registrierung überschreiben",
|
||||
"ru": "Переопределить хост из реестра",
|
||||
"zh": "覆盖注册表中的主机"
|
||||
},
|
||||
"Override user from registry": {
|
||||
"en": "Override user from registry",
|
||||
"bg": "Замяна на потребителя от регистъра",
|
||||
"de": "Benutzer aus Registrierung überschreiben",
|
||||
"ru": "Переопределить пользователя из реестра",
|
||||
"zh": "覆盖注册表中的用户"
|
||||
},
|
||||
"Override SSH key from registry": {
|
||||
"en": "Override SSH key from registry",
|
||||
"bg": "Замяна на SSH ключа от регистъра",
|
||||
"de": "SSH-Schlüssel aus Registrierung überschreiben",
|
||||
"ru": "Переопределить SSH ключ из реестра",
|
||||
"zh": "覆盖注册表中的 SSH 密钥"
|
||||
},
|
||||
"Override deployment mode from registry": {
|
||||
"en": "Override deployment mode from registry",
|
||||
"bg": "Замяна на режима на внедряване от регистъра",
|
||||
"de": "Bereitstellungsmodus aus Registrierung überschreiben",
|
||||
"ru": "Переопределить режим развертывания из реестра",
|
||||
"zh": "覆盖注册表中的部署模式"
|
||||
},
|
||||
"Runner '{name}' not found in registry. Use 'grm install' first or provide --host and --user.": {
|
||||
"en": "Runner '{name}' not found in registry. Use 'grm install' first or provide --host and --user.",
|
||||
"bg": "Runner '{name}' не е намерен в регистъра. Използвайте 'grm install' първо или подайте --host и --user.",
|
||||
"de": "Runner '{name}' nicht in Registrierung gefunden. Verwenden Sie zuerst 'grm install' oder geben Sie --host und --user an.",
|
||||
"ru": "Runner '{name}' не найден в реестре. Сначала используйте 'grm install' или укажите --host и --user.",
|
||||
"zh": "注册表中未找到 Runner '{name}'。请先使用 'grm install' 或提供 --host 和 --user。"
|
||||
},
|
||||
"List all registered runners with live status.": {
|
||||
"en": "List all registered runners with live status.",
|
||||
"bg": "Списък на всички регистрирани runners с актуално състояние.",
|
||||
"de": "Alle registrierten Runner mit Live-Status auflisten.",
|
||||
"ru": "Список всех зарегистрированных runners с текущим статусом.",
|
||||
"zh": "列出所有已注册 runners 的实时状态。"
|
||||
},
|
||||
"No runners registered. Use 'grm install' to add one.": {
|
||||
"en": "No runners registered. Use 'grm install' to add one.",
|
||||
"bg": "Няма регистрирани runners. Използвайте 'grm install', за да добавите.",
|
||||
"de": "Keine Runner registriert. Verwenden Sie 'grm install', um einen hinzuzufügen.",
|
||||
"ru": "Нет зарегистрированных runners. Используйте 'grm install' чтобы добавить.",
|
||||
"zh": "没有已注册的 runners。使用 'grm install' 添加一个。"
|
||||
},
|
||||
"List failed: {error}": {
|
||||
"en": "List failed: {error}",
|
||||
"bg": "Списъкът неуспешен: {error}",
|
||||
"de": "Auflistung fehlgeschlagen: {error}",
|
||||
"ru": "Ошибка списка: {error}",
|
||||
"zh": "列表失败: {error}"
|
||||
},
|
||||
"NAME": {
|
||||
"en": "NAME",
|
||||
"bg": "ИМЕ",
|
||||
"de": "NAME",
|
||||
"ru": "ИМЯ",
|
||||
"zh": "名称"
|
||||
},
|
||||
"HOST": {
|
||||
"en": "HOST",
|
||||
"bg": "ХОСТ",
|
||||
"de": "HOST",
|
||||
"ru": "ХОСТ",
|
||||
"zh": "主机"
|
||||
},
|
||||
"USER": {
|
||||
"en": "USER",
|
||||
"bg": "ПОТРЕБИТЕЛ",
|
||||
"de": "BENUTZER",
|
||||
"ru": "ПОЛЬЗОВАТЕЛЬ",
|
||||
"zh": "用户"
|
||||
},
|
||||
"MODE": {
|
||||
"en": "MODE",
|
||||
"bg": "РЕЖИМ",
|
||||
"de": "MODUS",
|
||||
"ru": "РЕЖИМ",
|
||||
"zh": "模式"
|
||||
},
|
||||
"LABELS": {
|
||||
"en": "LABELS",
|
||||
"bg": "ЕТИКЕТИ",
|
||||
"de": "LABELS",
|
||||
"ru": "МЕТКИ",
|
||||
"zh": "标签"
|
||||
},
|
||||
"STATUS": {
|
||||
"en": "STATUS",
|
||||
"bg": "СТАТУС",
|
||||
"de": "STATUS",
|
||||
"ru": "СТАТУС",
|
||||
"zh": "状态"
|
||||
},
|
||||
"active": {
|
||||
"en": "active",
|
||||
"bg": "активен",
|
||||
"de": "aktiv",
|
||||
"ru": "активен",
|
||||
"zh": "活跃"
|
||||
},
|
||||
"inactive": {
|
||||
"en": "inactive",
|
||||
"bg": "неактивен",
|
||||
"de": "inaktiv",
|
||||
"ru": "неактивен",
|
||||
"zh": "不活跃"
|
||||
},
|
||||
"failed": {
|
||||
"en": "failed",
|
||||
"bg": "неуспешен",
|
||||
"de": "fehlgeschlagen",
|
||||
"ru": "сбой",
|
||||
"zh": "失败"
|
||||
},
|
||||
"unknown": {
|
||||
"en": "unknown",
|
||||
"bg": "неизвестен",
|
||||
"de": "unbekannt",
|
||||
"ru": "неизвестно",
|
||||
"zh": "未知"
|
||||
},
|
||||
"=== Operation Report ===": {
|
||||
"en": "=== Operation Report ===",
|
||||
"bg": "=== Отчет за операцията ===",
|
||||
"de": "=== Operationsbericht ===",
|
||||
"ru": "=== Отчет об операции ===",
|
||||
"zh": "=== 操作报告 ==="
|
||||
},
|
||||
"completed": {
|
||||
"en": "completed",
|
||||
"bg": "завършено",
|
||||
"de": "abgeschlossen",
|
||||
"ru": "завершено",
|
||||
"zh": "已完成"
|
||||
},
|
||||
"pending": {
|
||||
"en": "pending",
|
||||
"bg": "чакащо",
|
||||
"de": "ausstehend",
|
||||
"ru": "в ожидании",
|
||||
"zh": "待处理"
|
||||
},
|
||||
"in_progress": {
|
||||
"en": "in progress",
|
||||
"bg": "в процес",
|
||||
"de": "in Bearbeitung",
|
||||
"ru": "в процессе",
|
||||
"zh": "进行中"
|
||||
},
|
||||
"Save runner '{name}' to local registry": {
|
||||
"en": "Save runner '{name}' to local registry",
|
||||
"bg": "Запазване на runner '{name}' в локалния регистър",
|
||||
"de": "Runner '{name}' in lokaler Registrierung speichern",
|
||||
"ru": "Сохранить runner '{name}' в локальном реестре",
|
||||
"zh": "将 runner '{name}' 保存到本地注册表"
|
||||
},
|
||||
"Remove runner '{name}' from local registry": {
|
||||
"en": "Remove runner '{name}' from local registry",
|
||||
"bg": "Премахване на runner '{name}' от локалния регистър",
|
||||
"de": "Runner '{name}' aus lokaler Registrierung entfernen",
|
||||
"ru": "Удалить runner '{name}' из локального реестра",
|
||||
"zh": "从本地注册表移除 runner '{name}'"
|
||||
},
|
||||
"Skip remote cleanup and only remove the local registry entry": {
|
||||
"en": "Skip remote cleanup and only remove the local registry entry",
|
||||
"bg": "Пропуснете отдалеченото почистване и премахнете само локалния запис",
|
||||
"de": "Remote-Bereinigung überspringen und nur den lokalen Registrierungseintrag entfernen",
|
||||
"ru": "Пропустить удаленную очистку и удалить только локальную запись реестра",
|
||||
"zh": "跳过远程清理,仅删除本地注册表条目"
|
||||
},
|
||||
"Ad-hoc command failed on {host}: {stderr}": {
|
||||
"en": "Ad-hoc command failed on {host}: {stderr}",
|
||||
"bg": "Ad-hoc командата неуспешна на {host}: {stderr}",
|
||||
"de": "Ad-hoc-Befehl auf {host} fehlgeschlagen: {stderr}",
|
||||
"ru": "Ad-hoc команда не удалась на {host}: {stderr}",
|
||||
"zh": "Ad-hoc 命令在 {host} 上失败: {stderr}"
|
||||
},
|
||||
"ERROR: REPO_TOKEN is not set.": {
|
||||
"en": "ERROR: REPO_TOKEN is not set.",
|
||||
"bg": "ГРЕШКА: REPO_TOKEN не е зададен.",
|
||||
"de": "FEHLER: REPO_TOKEN ist nicht gesetzt.",
|
||||
"ru": "ОШИБКА: REPO_TOKEN не задан.",
|
||||
"zh": "错误:未设置 REPO_TOKEN。"
|
||||
},
|
||||
"Configuring branch protection for {branch}...": {
|
||||
"en": "Configuring branch protection for {branch}...",
|
||||
"bg": "Конфигуриране на защита на клона {branch}...",
|
||||
"de": "Konfiguriere Branch-Schutz für {branch}...",
|
||||
"ru": "Настройка защиты ветки {branch}...",
|
||||
"zh": "正在配置 {branch} 的分支保护..."
|
||||
},
|
||||
" - Direct pushes: BLOCKED (require PR)": {
|
||||
"en": " - Direct pushes: BLOCKED (require PR)",
|
||||
"bg": " - Директни push-ове: БЛОКИРАНИ (изисква PR)",
|
||||
"de": " - Direkte Pushes: BLOCKIERT (PR erforderlich)",
|
||||
"ru": " - Прямые push: ЗАБЛОКИРОВАНЫ (требуется PR)",
|
||||
"zh": " - 直接推送:已阻止(需要 PR)"
|
||||
},
|
||||
" - Required approvals: {count}": {
|
||||
"en": " - Required approvals: {count}",
|
||||
"bg": " - Необходими одобрения: {count}",
|
||||
"de": " - Erforderliche Genehmigungen: {count}",
|
||||
"ru": " - Требуемые одобрения: {count}",
|
||||
"zh": " - 必需审批数: {count}"
|
||||
},
|
||||
" - Dismiss stale approvals: yes": {
|
||||
"en": " - Dismiss stale approvals: yes",
|
||||
"bg": " - Анулиране на остарели одобрения: да",
|
||||
"de": " - Veraltete Genehmigungen ablehnen: ja",
|
||||
"ru": " - Отклонять устаревшие одобрения: да",
|
||||
"zh": " - 忽略过时审批: 是"
|
||||
},
|
||||
" - Block outdated branches: yes": {
|
||||
"en": " - Block outdated branches: yes",
|
||||
"bg": " - Блокиране на остарели клонове: да",
|
||||
"de": " - Veraltete Branches blockieren: ja",
|
||||
"ru": " - Блокировать устаревшие ветки: да",
|
||||
"zh": " - 阻止过时分支: 是"
|
||||
},
|
||||
" - Block rejected reviews: yes": {
|
||||
"en": " - Block rejected reviews: yes",
|
||||
"bg": " - Блокиране на отхвърлени рецензии: да",
|
||||
"de": " - Abgelehnte Reviews blockieren: ja",
|
||||
"ru": " - Блокировать отклонённые ревью: да",
|
||||
"zh": " - 阻止被拒绝的审查: 是"
|
||||
},
|
||||
" - Required status checks: {checks}": {
|
||||
"en": " - Required status checks: {checks}",
|
||||
"bg": " - Необходими проверки на състоянието: {checks}",
|
||||
"de": " - Erforderliche Status-Checks: {checks}",
|
||||
"ru": " - Требуемые проверки статуса: {checks}",
|
||||
"zh": " - 必需状态检查: {checks}"
|
||||
},
|
||||
"Creating {label} label...": {
|
||||
"en": "Creating {label} label...",
|
||||
"bg": "Създаване на етикет {label}...",
|
||||
"de": "Erstelle Label {label}...",
|
||||
"ru": "Создание метки {label}...",
|
||||
"zh": "正在创建标签 {label}..."
|
||||
},
|
||||
" Label '{label}' already exists.": {
|
||||
"en": " Label '{label}' already exists.",
|
||||
"bg": " Етикетът '{label}' вече съществува.",
|
||||
"de": " Label '{label}' existiert bereits.",
|
||||
"ru": " Метка '{label}' уже существует.",
|
||||
"zh": " 标签 '{label}' 已存在。"
|
||||
},
|
||||
" Label '{label}' created.": {
|
||||
"en": " Label '{label}' created.",
|
||||
"bg": " Етикетът '{label}' е създаден.",
|
||||
"de": " Label '{label}' erstellt.",
|
||||
"ru": " Метка '{label}' создана.",
|
||||
"zh": " 标签 '{label}' 已创建。"
|
||||
},
|
||||
"Repository configuration complete.": {
|
||||
"en": "Repository configuration complete.",
|
||||
"bg": "Конфигурирането на хранилището е завършено.",
|
||||
"de": "Repository-Konfiguration abgeschlossen.",
|
||||
"ru": "Конфигурация репозитория завершена.",
|
||||
"zh": "仓库配置完成。"
|
||||
},
|
||||
"Configuring repository settings...": {
|
||||
"en": "Configuring repository settings...",
|
||||
"bg": "Конфигуриране на настройките на хранилището...",
|
||||
"de": "Repository-Einstellungen konfigurieren...",
|
||||
"ru": "Настройка параметров репозитория...",
|
||||
"zh": "正在配置仓库设置..."
|
||||
},
|
||||
" - Auto-delete branch after merge: yes": {
|
||||
"en": " - Auto-delete branch after merge: yes",
|
||||
"bg": " - Автоматично изтриване на клон след сливане: да",
|
||||
"de": " - Branch nach Merge automatisch löschen: ja",
|
||||
"ru": " - Автоудаление ветки после слияния: да",
|
||||
"zh": " - 合并后自动删除分支: 是"
|
||||
},
|
||||
"HTTP {status} Forbidden — your token lacks admin rights.\nMake sure the token belongs to a repo owner or organisation admin.\nAlternatively, configure branch protection manually in Settings → Branches.": {
|
||||
"en": "HTTP {status} Forbidden — your token lacks admin rights.\nMake sure the token belongs to a repo owner or organisation admin.\nAlternatively, configure branch protection manually in Settings → Branches.",
|
||||
"bg": "HTTP {status} Забранено — вашият токен няма администраторски права.\nУверете се, че токенът принадлежи на собственик на хранилище или администратор на организация.\nАлтернативно, конфигурирайте защитата на клона ръчно в Настройки → Клонове.",
|
||||
"de": "HTTP {status} Verboten — Ihr Token hat keine Admin-Rechte.\nStellen Sie sicher, dass das Token einem Repository-Besitzer oder Organisations-Admin gehört.\nAlternativ können Sie den Branch-Schutz manuell unter Einstellungen → Branches konfigurieren.",
|
||||
"ru": "HTTP {status} Запрещено — у вашего токена нет прав администратора.\nУбедитесь, что токен принадлежит владельцу репозитория или администратору организации.\nЛибо настройте защиту ветки вручную в разделе Настройки → Ветки.",
|
||||
"zh": "HTTP {status} 禁止访问 — 您的令牌缺少管理员权限。\n请确保令牌属于仓库所有者或组织管理员。\n或者,您可以在 设置 → 分支 中手动配置分支保护。"
|
||||
},
|
||||
"HTTP error: {status} — {message}": {
|
||||
"en": "HTTP error: {status} — {message}",
|
||||
"bg": "HTTP грешка: {status} — {message}",
|
||||
"de": "HTTP-Fehler: {status} — {message}",
|
||||
"ru": "Ошибка HTTP: {status} — {message}",
|
||||
"zh": "HTTP 错误: {status} — {message}"
|
||||
},
|
||||
"ERROR: VIKUNJA_TOKEN is not set.": {
|
||||
"en": "ERROR: VIKUNJA_TOKEN is not set.",
|
||||
"bg": "ГРЕШКА: VIKUNJA_TOKEN не е зададен.",
|
||||
"de": "FEHLER: VIKUNJA_TOKEN ist nicht gesetzt.",
|
||||
"ru": "ОШИБКА: VIKUNJA_TOKEN не задан.",
|
||||
"zh": "错误:未设置 VIKUNJA_TOKEN。"
|
||||
},
|
||||
"Oops! PR title must follow conventional commit format.\n Expected: <type>: <description>\n Got: {pr_title}": {
|
||||
"en": "Oops! PR title must follow conventional commit format.\n Expected: <type>: <description>\n Got: {pr_title}",
|
||||
"bg": "Опа! Заглавието на PR трябва да следва конвенционален формат.\n Очаква се: <type>: <description>\n Получено: {pr_title}",
|
||||
"de": "Ups! PR-Titel muss dem konventionellen Commit-Format folgen.\n Erwartet: <type>: <description>\n Erhalten: {pr_title}",
|
||||
"ru": "Ой! Заголовок PR должен соответствовать формату conventional commit.\n Ожидается: <type>: <description>\n Получено: {pr_title}",
|
||||
"zh": "哎呀!PR 标题必须遵循 conventional commit 格式。\n 预期格式: <type>: <description>\n 实际: {pr_title}"
|
||||
},
|
||||
"Oops! No task ID (GRM-N) found in branch name '{branch}'.": {
|
||||
"en": "Oops! No task ID (GRM-N) found in branch name '{branch}'.",
|
||||
"bg": "Опа! Не е намерен идентификатор на задача (GRM-N) в името на клона '{branch}'.",
|
||||
"de": "Ups! Keine Task-ID (GRM-N) im Branch-Namen '{branch}' gefunden.",
|
||||
"ru": "Ой! В названии ветки '{branch}' не найден идентификатор задачи (GRM-N).",
|
||||
"zh": "哎呀!在分支名 '{branch}' 中未找到任务 ID (GRM-N)。"
|
||||
},
|
||||
"Merge failed with HTTP {status}: {message}\nPlease check the PR is ready and you have merge rights.": {
|
||||
"en": "Merge failed with HTTP {status}: {message}\nPlease check the PR is ready and you have merge rights.",
|
||||
"bg": "Сливането неуспешно с HTTP {status}: {message}\nПроверете дали PR е готов и имате права за сливане.",
|
||||
"de": "Merge fehlgeschlagen mit HTTP {status}: {message}\nBitte prüfen Sie, ob der PR bereit ist und Sie Merge-Rechte haben.",
|
||||
"ru": "Слияние не удалось: HTTP {status}: {message}\nПроверьте, что PR готов и у вас есть права на слияние.",
|
||||
"zh": "合并失败: HTTP {status}: {message}\n请检查 PR 是否准备就绪且您具有合并权限。"
|
||||
},
|
||||
"Nice! PR #{pr_number} squash-merged with title: {merge_title}": {
|
||||
"en": "Nice! PR #{pr_number} squash-merged with title: {merge_title}",
|
||||
"bg": "Отлично! PR #{pr_number} е squash-merge-нат със заглавие: {merge_title}",
|
||||
"de": "Prima! PR #{pr_number} wurde mit Titel {merge_title} squash-gemergt.",
|
||||
"ru": "Отлично! PR #{pr_number} squash-merge с заголовком: {merge_title}",
|
||||
"zh": "不错!PR #{pr_number} 已 squash 合并,标题: {merge_title}"
|
||||
},
|
||||
"No task ID in commit message, skipping Vikunja update. All good — nothing to do here!": {
|
||||
"en": "No task ID in commit message, skipping Vikunja update. All good — nothing to do here!",
|
||||
"bg": "Няма идентификатор на задача в съобщението за commit, пропускаме обновяването на Vikunja. Всичко е наред — няма какво да правим!",
|
||||
"de": "Keine Task-ID in der Commit-Nachricht, Vikunja-Update wird übersprungen. Alles gut — nichts zu tun!",
|
||||
"ru": "В сообщении коммита нет ID задачи, пропускаем обновление Vikunja. Всё в порядке — делать нечего!",
|
||||
"zh": "提交消息中没有任务 ID,跳过 Vikunja 更新。一切正常 — 无需操作!"
|
||||
},
|
||||
"Could not find Vikunja task for {task_id} in project {project_id}.": {
|
||||
"en": "Could not find Vikunja task for {task_id} in project {project_id}.",
|
||||
"bg": "Не е намерена задача Vikunja за {task_id} в проект {project_id}.",
|
||||
"de": "Keine Vikunja-Aufgabe für {task_id} in Projekt {project_id} gefunden.",
|
||||
"ru": "Не удалось найти задачу Vikunja для {task_id} в проекте {project_id}.",
|
||||
"zh": "在项目 {project_id} 中找不到 Vikunja 任务 {task_id}。"
|
||||
},
|
||||
"Vikunja API error: HTTP {status} — {message}": {
|
||||
"en": "Vikunja API error: HTTP {status} — {message}",
|
||||
"bg": "Грешка в API на Vikunja: HTTP {status} — {message}",
|
||||
"de": "Vikunja API-Fehler: HTTP {status} — {message}",
|
||||
"ru": "Ошибка API Vikunja: HTTP {status} — {message}",
|
||||
"zh": "Vikunja API 错误: HTTP {status} — {message}"
|
||||
},
|
||||
"Nice! Vikunja task {task_id} (ID {vikunja_id}) updated and marked done.": {
|
||||
"en": "Nice! Vikunja task {task_id} (ID {vikunja_id}) updated and marked done.",
|
||||
"bg": "Отлично! Задача Vikunja {task_id} (ID {vikunja_id}) е обновена и маркирана като готова.",
|
||||
"de": "Prima! Vikunja-Aufgabe {task_id} (ID {vikunja_id}) aktualisiert und als erledigt markiert.",
|
||||
"ru": "Отлично! Задача Vikunja {task_id} (ID {vikunja_id}) обновлена и отмечена как выполненная.",
|
||||
"zh": "不错!Vikunja 任务 {task_id} (ID {vikunja_id}) 已更新并标记为完成。"
|
||||
},
|
||||
"Oops! Package build failed:\n{stderr}": {
|
||||
"en": "Oops! Package build failed:\n{stderr}",
|
||||
"bg": "Опа! Сборката на пакета неуспешна:\n{stderr}",
|
||||
"de": "Ups! Paket-Build fehlgeschlagen:\n{stderr}",
|
||||
"ru": "Ой! Сборка пакета не удалась:\n{stderr}",
|
||||
"zh": "哎呀!包构建失败:\n{stderr}"
|
||||
},
|
||||
"Oops! PyPI publish failed:\n{stderr}": {
|
||||
"en": "Oops! PyPI publish failed:\n{stderr}",
|
||||
"bg": "Опа! Публикуването в PyPI неуспешно:\n{stderr}",
|
||||
"de": "Ups! PyPI-Veröffentlichung fehlgeschlagen:\n{stderr}",
|
||||
"ru": "Ой! Публикация в PyPI не удалась:\n{stderr}",
|
||||
"zh": "哎呀!PyPI 发布失败:\n{stderr}"
|
||||
},
|
||||
"Published to PyPI.": {
|
||||
"en": "Published to PyPI.",
|
||||
"bg": "Публикувано в PyPI.",
|
||||
"de": "In PyPI veröffentlicht.",
|
||||
"ru": "Опубликовано в PyPI.",
|
||||
"zh": "已发布到 PyPI。"
|
||||
},
|
||||
"PYPI_TOKEN not set — skipping PyPI publish. No worries, we'll just create the Gitea release.": {
|
||||
"en": "PYPI_TOKEN not set — skipping PyPI publish. No worries, we'll just create the Gitea release.",
|
||||
"bg": "PYPI_TOKEN не е зададен — пропускаме публикуването в PyPI. Без притеснения, просто ще създадем Gitea release.",
|
||||
"de": "PYPI_TOKEN nicht gesetzt — PyPI-Veröffentlichung wird übersprungen. Keine Sorge, wir erstellen einfach das Gitea-Release.",
|
||||
"ru": "PYPI_TOKEN не задан — пропускаем публикацию в PyPI. Не беспокойтесь, мы просто создадим Gitea release.",
|
||||
"zh": "未设置 PYPI_TOKEN — 跳过 PyPI 发布。别担心,我们直接创建 Gitea release。"
|
||||
},
|
||||
"Release creation failed with HTTP {status}: {message}": {
|
||||
"en": "Release creation failed with HTTP {status}: {message}",
|
||||
"bg": "Създаването на release неуспешно с HTTP {status}: {message}",
|
||||
"de": "Release-Erstellung fehlgeschlagen mit HTTP {status}: {message}",
|
||||
"ru": "Создание release не удалось: HTTP {status}: {message}",
|
||||
"zh": "Release 创建失败: HTTP {status}: {message}"
|
||||
},
|
||||
"Nice! Gitea release {tag} created.": {
|
||||
"en": "Nice! Gitea release {tag} created.",
|
||||
"bg": "Отлично! Gitea release {tag} е създаден.",
|
||||
"de": "Prima! Gitea-Release {tag} erstellt.",
|
||||
"ru": "Отлично! Gitea release {tag} создан.",
|
||||
"zh": "不错!Gitea release {tag} 已创建。"
|
||||
},
|
||||
"Oops! Master branch commits must start with a task ID.\n Expected: GRM-N: <conventional commit message>\n Got: {subject}": {
|
||||
"en": "Oops! Master branch commits must start with a task ID.\n Expected: GRM-N: <conventional commit message>\n Got: {subject}",
|
||||
"bg": "Опа! Commit-ите в клона master трябва да започват с идентификатор на задача.\n Очаква се: GRM-N: <conventional commit message>\n Получено: {subject}",
|
||||
"de": "Ups! Master-Branch-Commits müssen mit einer Task-ID beginnen.\n Erwartet: GRM-N: <conventional commit message>\n Erhalten: {subject}",
|
||||
"ru": "Ой! Коммиты в ветку master должны начинаться с ID задачи.\n Ожидается: GRM-N: <conventional commit message>\n Получено: {subject}",
|
||||
"zh": "哎呀!master 分支的提交必须以任务 ID 开头。\n 预期格式: GRM-N: <conventional commit message>\n 实际: {subject}"
|
||||
},
|
||||
"Oops! Master branch commit must follow conventional format after task ID.\n Expected: GRM-N: <type>: <description>\n Got: {subject}": {
|
||||
"en": "Oops! Master branch commit must follow conventional format after task ID.\n Expected: GRM-N: <type>: <description>\n Got: {subject}",
|
||||
"bg": "Опа! Commit-ът в клона master трябва да следва конвенционален формат след идентификатора.\n Очаква се: GRM-N: <type>: <description>\n Получено: {subject}",
|
||||
"de": "Ups! Master-Branch-Commit muss nach der Task-ID dem konventionellen Format folgen.\n Erwartet: GRM-N: <type>: <description>\n Erhalten: {subject}",
|
||||
"ru": "Ой! Коммит в ветку master после ID задачи должен соответствовать conventional формату.\n Ожидается: GRM-N: <type>: <description>\n Получено: {subject}",
|
||||
"zh": "哎呀!master 分支提交在任务 ID 后必须遵循 conventional commit 格式。\n 预期格式: GRM-N: <type>: <description>\n 实际: {subject}"
|
||||
},
|
||||
"Oops! Do not include task ID (GRM-N) in feature branch commits.\n The task ID will be added automatically on merge via CI.": {
|
||||
"en": "Oops! Do not include task ID (GRM-N) in feature branch commits.\n The task ID will be added automatically on merge via CI.",
|
||||
"bg": "Опа! Не включвайте идентификатор на задача (GRM-N) в commit-и от feature клонове.\n Идентификаторът ще бъде добавен автоматично при сливане чрез CI.",
|
||||
"de": "Ups! Keine Task-ID (GRM-N) in Feature-Branch-Commits einfügen.\n Die Task-ID wird beim Merge automatisch über CI hinzugefügt.",
|
||||
"ru": "Ой! Не включайте ID задачи (GRM-N) в коммиты feature-веток.\n ID задачи будет добавлен автоматически при слиянии через CI.",
|
||||
"zh": "哎呀!不要在 feature 分支的提交中包含任务 ID (GRM-N)。\n 任务 ID 将在通过 CI 合并时自动添加。"
|
||||
},
|
||||
"Oops! Commit message must follow conventional commit format.\n Expected: <type>: <description>\n Got: {subject}\n Allowed types: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE": {
|
||||
"en": "Oops! Commit message must follow conventional commit format.\n Expected: <type>: <description>\n Got: {subject}\n Allowed types: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE",
|
||||
"bg": "Опа! Съобщението за commit трябва да следва конвенционален формат.\n Очаква се: <type>: <description>\n Получено: {subject}\n Разрешени типове: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE",
|
||||
"de": "Ups! Commit-Nachricht muss dem konventionellen Commit-Format folgen.\n Erwartet: <type>: <description>\n Erhalten: {subject}\n Erlaubte Typen: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE",
|
||||
"ru": "Ой! Сообщение коммита должно соответствовать формату conventional commit.\n Ожидается: <type>: <description>\n Получено: {subject}\n Допустимые типы: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE",
|
||||
"zh": "哎呀!提交消息必须遵循 conventional commit 格式。\n 预期格式: <type>: <description>\n 实际: {subject}\n 允许的类型: feat, fix, chore, docs, style, refactor,\n perf, test, ci, build, revert, BREAKING CHANGE"
|
||||
},
|
||||
"exit code {code}": {
|
||||
"en": "exit code {code}",
|
||||
"bg": "код за изход {code}",
|
||||
"de": "Exit-Code {code}",
|
||||
"ru": "код выхода {code}",
|
||||
"zh": "退出代码 {code}"
|
||||
},
|
||||
"Molecule directory not found: {path}": {
|
||||
"en": "Molecule directory not found: {path}",
|
||||
"bg": "Директорията на molecule не е намерена: {path}",
|
||||
"de": "Molecule-Verzeichnis nicht gefunden: {path}",
|
||||
"ru": "Директория molecule не найдена: {path}",
|
||||
"zh": "未找到 molecule 目录: {path}"
|
||||
},
|
||||
"Runner index {index} out of range (0..{max})": {
|
||||
"en": "Runner index {index} out of range (0..{max})",
|
||||
"bg": "Индексът на runner {index} е извън диапазона (0..{max})",
|
||||
"de": "Runner-Index {index} außerhalb des Bereichs (0..{max})",
|
||||
"ru": "Индекс runner {index} вне диапазона (0..{max})",
|
||||
"zh": "Runner 索引 {index} 超出范围 (0..{max})"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user