Spaces:
Sleeping
Sleeping
| # msdl/translations/i18n.py | |
| import os | |
| import i18n | |
| import locale | |
| from dotenv import load_dotenv, set_key, find_dotenv | |
| from msdl.config import TRANSLATIONS_DIR, ENV_FILE_PATH | |
| from pathlib import Path | |
| # Load environment variables at module level | |
| load_dotenv(ENV_FILE_PATH) | |
| def get_env_variable(var_name, default=None): | |
| return os.getenv(var_name, default) | |
| def set_env_variable(var_name, value): | |
| dotenv_file = find_dotenv(ENV_FILE_PATH) | |
| set_key(dotenv_file, var_name, value) | |
| # Reload environment variables after setting | |
| os.environ[var_name] = value | |
| def get_system_language(): | |
| try: | |
| return locale.getlocale()[0].split("_")[0] | |
| except: | |
| return "en" | |
| def get_available_languages(): | |
| """Get list of available language codes from translation files""" | |
| translations_path = Path(TRANSLATIONS_DIR) | |
| if not translations_path.exists(): | |
| return ["en"] | |
| return [f.stem for f in translations_path.glob("*.yaml")] | |
| def set_language(language_code): | |
| """Set the interaction language and persist it to .env file""" | |
| available_langs = get_available_languages() | |
| if language_code not in available_langs: | |
| print(f"Warning: Language '{language_code}' not available. Using 'en' instead.") | |
| language_code = "en" | |
| set_env_variable("LAUNCHER_INTERACTION_LANGUAGE", language_code) | |
| i18n.set("locale", language_code) | |
| def setup_i18n(): | |
| # Initialize i18n settings | |
| i18n.load_path.append(TRANSLATIONS_DIR) | |
| i18n.set("filename_format", "{locale}.{format}") | |
| i18n.set("file_format", "yaml") | |
| # Get language from environment | |
| env_language = get_env_variable("LAUNCHER_INTERACTION_LANGUAGE") | |
| if not env_language: | |
| # If no language is set, use English as default without saving to .env | |
| env_language = "en" | |
| # Force reload translations | |
| i18n.set("locale", None) # Clear current locale | |
| i18n.set("locale", env_language) # Set new locale | |
| def t(key, **kwargs): | |
| return i18n.t(key, **kwargs) | |