this should be the flow?

pull/36410/head
Shane Smiskol 1 week 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) 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) 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_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_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 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 importlib.resources import as_file, files
from openpilot.common.swaglog import cloudlog from openpilot.common.swaglog import cloudlog
from openpilot.system.hardware import HARDWARE, PC, TICI from openpilot.system.hardware import HARDWARE, PC, TICI
from openpilot.system.ui.lib.multilang import Multilang
from openpilot.common.realtime import Ratekeeper from openpilot.common.realtime import Ratekeeper
_DEFAULT_FPS = int(os.getenv("FPS", 20 if TICI else 60)) _DEFAULT_FPS = int(os.getenv("FPS", 20 if TICI else 60))
@ -142,7 +141,6 @@ class GuiApplication:
self._window_close_requested = False self._window_close_requested = False
self._trace_log_callback = None self._trace_log_callback = None
self._modal_overlay = ModalOverlay() self._modal_overlay = ModalOverlay()
self._multilang = Multilang()
self._mouse = MouseState(self._scale) self._mouse = MouseState(self._scale)
self._mouse_events: list[MouseEvent] = [] self._mouse_events: list[MouseEvent] = []

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

Loading…
Cancel
Save