slm-code-engine / backend /app /utils /localization.py
vienoux's picture
Upload folder using huggingface_hub
f9adcbf verified
import json
from pathlib import Path
from typing import Dict, Any
from app.config import settings
from app.storage.logger import get_logger
logger = get_logger(__name__)
_translations: Dict[str, str] = {}
def load_translations():
"""
Loads the translation file corresponding to the language specified in the settings.
"""
global _translations
lang = settings.language
locales_dir = Path(__file__).parent.parent / "locales"
file_path = locales_dir / f"{lang}.json"
if not file_path.exists():
logger.warning(
f"Translation file not found for language '{lang}'. Falling back to 'en'."
)
file_path = locales_dir / "en.json"
if not file_path.exists():
logger.error(
"Default translation file 'en.json' not found. Localization will not work."
)
_translations = {}
return
try:
with open(file_path, "r", encoding="utf-8") as f:
_translations = json.load(f)
logger.info(f"Successfully loaded translations for language: '{lang}'")
except (json.JSONDecodeError, IOError) as e:
logger.error(f"Failed to load or parse translation file {file_path}: {e}")
_translations = {}
def get_string(key: str, **kwargs: Any) -> str:
"""
Retrieves a translated string by its key and formats it with the given arguments.
Args:
key: The key of the string to retrieve (e.g., "cli_ready").
**kwargs: Keyword arguments to format the string with.
Returns:
The translated and formatted string, or the key itself if not found.
"""
if not _translations:
# This might happen if loading failed. We return the key as a fallback.
return key
template = _translations.get(key, key)
try:
return template.format(**kwargs)
except KeyError as e:
logger.warning(
f"Placeholder {{{e.args[0]}}} missing for localization key '{key}'"
)
return template
# Load translations when the module is imported.
# In a FastAPI context, this will happen at application startup.
load_translations()