From c4b287ba539de06f79b867319568a4aa8c02a5ac Mon Sep 17 00:00:00 2001 From: Oleksii Lisikh Date: Tue, 5 May 2026 17:44:43 +0200 Subject: [PATCH] feat(i18n): add Ukrainian locale --- agent/i18n.py | 5 +++-- hermes_cli/config.py | 2 +- locales/en.yaml | 2 +- locales/uk.yaml | 24 ++++++++++++++++++++++++ tests/agent/test_i18n.py | 4 ++++ website/docs/user-guide/configuration.md | 4 ++-- 6 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 locales/uk.yaml diff --git a/agent/i18n.py b/agent/i18n.py index c700491522..fff0577cc1 100644 --- a/agent/i18n.py +++ b/agent/i18n.py @@ -25,7 +25,7 @@ Language resolution order: 3. ``display.language`` from config.yaml 4. ``"en"`` (baseline) -Supported languages: en, zh, ja, de, es, fr. Unknown values fall back to en. +Supported languages: en, zh, ja, de, es, fr, uk. Unknown values fall back to en. """ from __future__ import annotations @@ -39,7 +39,7 @@ from typing import Any logger = logging.getLogger(__name__) -SUPPORTED_LANGUAGES: tuple[str, ...] = ("en", "zh", "ja", "de", "es", "fr") +SUPPORTED_LANGUAGES: tuple[str, ...] = ("en", "zh", "ja", "de", "es", "fr", "uk") DEFAULT_LANGUAGE = "en" # Accept a few natural aliases so users who type "chinese" / "zh-CN" / "jp" @@ -51,6 +51,7 @@ _LANGUAGE_ALIASES: dict[str, str] = { "german": "de", "deutsch": "de", "de-de": "de", "spanish": "es", "español": "es", "espanol": "es", "es-es": "es", "es-mx": "es", "french": "fr", "français": "fr", "france": "fr", "fr-fr": "fr", "fr-be": "fr", "fr-ca": "fr", "fr-ch": "fr", + "ukrainian": "uk", "ukrainisch": "uk", "українська": "uk", "uk-ua": "uk", "ua": "uk", } _catalog_cache: dict[str, dict[str, str]] = {} diff --git a/hermes_cli/config.py b/hermes_cli/config.py index 1ac9881d89..1d9f88e593 100644 --- a/hermes_cli/config.py +++ b/hermes_cli/config.py @@ -784,7 +784,7 @@ DEFAULT_CONFIG = { # UI language for static user-facing messages (approval prompts, a # handful of gateway slash-command replies). Does NOT affect agent # responses, log lines, tool outputs, or slash-command descriptions. - # Supported: en, zh, ja, de, es. Unknown values fall back to en. + # Supported: en, zh, ja, de, es, fr, uk. Unknown values fall back to en. "language": "en", # TUI busy indicator style: kaomoji (default), emoji, unicode (braille # spinner), or ascii. Live-swappable via `/indicator