this should be the flow?

pull/36410/head
Shane Smiskol 5 days ago
parent c32ef451e7
commit 45c4ffb1b6
  1. 2
      selfdrive/ui/layouts/home.py
  2. 2
      system/ui/lib/application.py
  3. 83
      system/ui/lib/multilang.py

@ -166,7 +166,7 @@ class HomeLayout(Widget):
highlight_color = rl.Color(255, 70, 70, 255) if self.current_state == HomeLayoutState.ALERTS else rl.Color(226, 44, 44, 255)
rl.draw_rectangle_rounded(self.alert_notif_rect, 0.3, 10, highlight_color)
alert_text = trn("{n} ALERT", "{n} ALERTS", self.alert_count).format(self.alert_count)
alert_text = trn("{} ALERT", "{} ALERTS", self.alert_count).format(self.alert_count)
text_size = measure_text_cached(font, alert_text, HEAD_BUTTON_FONT_SIZE)
text_x = self.alert_notif_rect.x + (self.alert_notif_rect.width - text_size.x) // 2
text_y = self.alert_notif_rect.y + (self.alert_notif_rect.height - text_size.y) // 2

@ -14,7 +14,6 @@ from typing import NamedTuple
from importlib.resources import as_file, files
from openpilot.common.swaglog import cloudlog
from openpilot.system.hardware import HARDWARE, PC, TICI
from openpilot.system.ui.lib.multilang import Multilang
from openpilot.common.realtime import Ratekeeper
_DEFAULT_FPS = int(os.getenv("FPS", 20 if TICI else 60))
@ -142,7 +141,6 @@ class GuiApplication:
self._window_close_requested = False
self._trace_log_callback = None
self._modal_overlay = ModalOverlay()
self._multilang = Multilang()
self._mouse = MouseState(self._scale)
self._mouse_events: list[MouseEvent] = []

@ -1,7 +1,5 @@
import os
import gettext
import pyray as rl
from typing import Union
from openpilot.common.params import Params
from openpilot.common.basedir import BASEDIR
@ -13,52 +11,51 @@ LANGUAGES_FILE = os.path.join(TRANSLATIONS_DIR, "languages.json")
class Multilang:
def __init__(self):
self._language: str = "en"
self._translations: dict[str, dict[str, str]] = {}
self._params = Params()
self._language: str = self._params.get("LanguageSetting").strip("main_")
print(f"Multilang initialized with language: {self._language}")
self._load_languages()
self._hook_draw_text()
# self._translations: dict[str, dict[str, str]] = {}
def translate(self, text: str) -> str:
if self._language not in self._translations:
return text
return self._translations[self._language].get(text, text)
# self._load_languages()
def _load_languages(self):
self._language = Params().get("LanguageSetting")
def setup(self):
# global tr, trn
try:
with open(os.path.join(TRANSLATIONS_DIR, f'app_{self._language}.mo'), 'rb') as fh:
translation = gettext.GNUTranslations(fh)
translation.install()
tr = translation.gettext
trn = translation.ngettext
print(f"Loaded translations for language: {self._language}")
except FileNotFoundError:
print(f"No translation file found for language: {self._language}, using default.")
gettext.install('app')
tr = gettext.gettext
trn = gettext.ngettext
LANGUAGE_DIR = os.path.join(BASEDIR, "selfdrive", "ui", "translations")
for file in os.listdir(LANGUAGE_DIR):
if file.endswith(".ts"):
pass
return tr, trn
def _get_translated_text(self, text: str) -> str:
# print("Translating:", text, "to", self._language, self._translations.keys())
if self._language not in self._translations:
return text
return self._translations[self._language].get(text, text)
def install_language(self, language: str):
# install and set globals
global tr, trn
self._language = language
tr, trn = self.setup()
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 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 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
# multilang = Multilang()
# # l = gettext.translation('app_de', localedir=TRANSLATIONS_DIR, languages=['de'])
# with open(os.path.join(TRANSLATIONS_DIR, 'app_de.mo'), 'rb') as fh:
# l = gettext.GNUTranslations(fh)
@ -67,3 +64,9 @@ class Multilang:
# # tr = gettext.gettext
# tr = l.gettext
# trn = l.ngettext
# tr, trn = None, None
# multilang = Multilang()
multilang = Multilang()
tr, trn = multilang.setup()

Loading…
Cancel
Save