import os import pyray as rl from typing import Union from openpilot.common.params import Params from openpilot.common.basedir import BASEDIR class Multilang: def __init__(self): self._language: str = "main_en" self._translations: dict[str, dict[str, str]] = {} self._load_languages() self._hook_draw_text() def translate(self, text: str) -> str: if self._language not in self._translations: return text return self._translations[self._language].get(text, text) def _load_languages(self): self._language = Params().get("LanguageSetting") LANGUAGE_DIR = os.path.join(BASEDIR, "selfdrive", "ui", "translations") for file in os.listdir(LANGUAGE_DIR): if file.endswith(".ts"): pass def _hook_draw_text(self): # hook rl.draw_text* to get text for multilang # TODO: and measure text original_draw_text = rl.draw_text original_draw_text_ex = rl.draw_text_ex def draw_text_wrapper(text: str, posX: int, posY: int, fontSize: int, color: Union[rl.Color, list, tuple]) -> None: assert False text = self._get_translated_text(text) return original_draw_text(text, posX, posY, fontSize, color) def draw_text_ex_wrapper(font: Union[rl.Font, list, tuple], text: str, position: Union[rl.Vector2, list, tuple], fontSize: float, spacing: float, tint: Union[rl.Color, list, tuple]) -> None: text = self._get_translated_text(text) return original_draw_text_ex(font, text, position, fontSize, spacing, tint) rl.draw_text = draw_text_wrapper rl.draw_text_ex = draw_text_ex_wrapper