You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.6 KiB
46 lines
1.6 KiB
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
|
|
|