Spaces:
Sleeping
Sleeping
| """ | |
| Interface (UI) settings reader. | |
| This is the canonical backend source for user-selected UI language/theme stored in: | |
| data/user/settings/interface.json | |
| """ | |
| from __future__ import annotations | |
| import json | |
| from pathlib import Path | |
| from typing import Any | |
| from deeptutor.services.path_service import get_path_service | |
| _path_service = get_path_service() | |
| INTERFACE_SETTINGS_FILE = _path_service.get_settings_file("interface") | |
| DEFAULT_UI_SETTINGS: dict[str, Any] = { | |
| "theme": "light", | |
| "language": "en", | |
| } | |
| def _normalize_language(language: Any, default: str = "en") -> str: | |
| """ | |
| Normalize language codes: | |
| - en/english -> en | |
| - zh/chinese/cn -> zh | |
| """ | |
| if language is None or language == "": | |
| language = default | |
| if isinstance(language, str): | |
| s = language.lower().strip() | |
| if s in {"en", "english"}: | |
| return "en" | |
| if s in {"zh", "chinese", "cn"}: | |
| return "zh" | |
| # Fall back to default | |
| if isinstance(default, str): | |
| return _normalize_language(default, "en") | |
| return "en" | |
| def get_ui_settings() -> dict[str, Any]: | |
| """ | |
| Read UI settings from interface.json with defaults. | |
| Returns: | |
| dict containing at least: {"theme": "...", "language": "..."} | |
| """ | |
| if INTERFACE_SETTINGS_FILE.exists(): | |
| try: | |
| with open(INTERFACE_SETTINGS_FILE, encoding="utf-8") as f: | |
| saved = json.load(f) or {} | |
| merged = {**DEFAULT_UI_SETTINGS, **saved} | |
| merged["language"] = _normalize_language( | |
| merged.get("language"), DEFAULT_UI_SETTINGS["language"] | |
| ) | |
| return merged | |
| except Exception: | |
| # On any parse error, fall back to defaults (safe) | |
| return DEFAULT_UI_SETTINGS.copy() | |
| return DEFAULT_UI_SETTINGS.copy() | |
| def get_ui_language(default: str = "en") -> str: | |
| """ | |
| Get current UI language. | |
| Priority: | |
| 1) interface.json | |
| 2) provided default | |
| 3) 'en' | |
| """ | |
| settings = get_ui_settings() | |
| return _normalize_language(settings.get("language"), default) | |