Newer
Older
hard-panel / panel / backend / app / locales.py
@Eugene Sukhodolskiy Eugene Sukhodolskiy 9 hours ago 1003 bytes feat: settings section + i18n (en/uk/ru) for the whole UI
"""Языковые теги панели: нормализация и выбор действующего языка.

Зеркало фронтовых i18n-слагов: override из настроек панели → язык аккаунта
gnexus-auth (users.profile.locale) → 'en'. Тего-нормализация одна и та же:
'en-US'/'en_US' → 'en', непонятное → None.
"""

SUPPORTED_LOCALES = ("en", "uk", "ru")


def normalize_locale(tag) -> str | None:
    """'en-US' -> 'en'; всё вне SUPPORTED_LOCALES -> None."""
    text = str(tag or "").strip().lower()
    prefix = text.split("-", 1)[0].split("_", 1)[0]
    return prefix if prefix in SUPPORTED_LOCALES else None


def effective_locale(override, profile) -> str:
    """override -> язык аккаунта -> 'en' (совпадает с фолбэком фронта)."""
    return (
        normalize_locale(override)
        or normalize_locale((profile or {}).get("locale"))
        or "en"
    )