1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-03-12 14:16:06 +00:00

fix(tests): handle layout-specific translations

This commit is contained in:
obrusvit 2025-03-11 16:04:15 +01:00
parent 510e4845f3
commit 71c078f24c
2 changed files with 26 additions and 4 deletions

View File

@ -93,10 +93,14 @@ class LayoutType(Enum):
return cls.Eckhart
if model in (models.T1B1,):
return cls.T1
if model in (models.T3W1,):
return cls.Eckhart
raise ValueError(f"Unknown model: {model}")
def __str__(self) -> str:
return self.name
def __repr__(self) -> str:
return f"LayoutType.{self.name}"
class UnstructuredJSONReader:
"""Contains data-parsing helpers for JSON data that have unknown structure."""

View File

@ -8,6 +8,7 @@ from pathlib import Path
from trezorlib import cosi, device, models
from trezorlib._internal import translations
from trezorlib.debuglink import LayoutType
from trezorlib.debuglink import TrezorClientDebugLink as Client
from . import common
@ -72,6 +73,11 @@ def set_language(client: Client, lang: str):
with client:
device.change_language(client, language_data) # type: ignore
_CURRENT_TRANSLATION.TR = TRANSLATIONS[lang]
_CURRENT_TRANSLATION.LAYOUT = client.layout_type
def set_layout(client: Client):
_CURRENT_TRANSLATION.LAYOUT = client.layout_type
def get_lang_json(lang: str) -> translations.JsonDef:
@ -91,13 +97,24 @@ class Translation:
self.lang_json = get_lang_json(lang)
@property
def translations(self) -> dict[str, str]:
def translations(self) -> dict[str, str | dict[str, str]]:
return self.lang_json["translations"]
def _translate_raw(self, key: str, _stacklevel: int = 0) -> str:
tr = self.translations.get(key)
if tr is not None:
return tr
# Handle layout-specific translations
if isinstance(tr, dict) and hasattr(_CURRENT_TRANSLATION, "LAYOUT"):
# Try to get translation for current layout
layout_name = _CURRENT_TRANSLATION.LAYOUT.name
if layout_name in tr:
return tr[layout_name]
# Fall back to any available translation if no match for current layout
return next(iter(tr.values()))
elif isinstance(tr, str):
return tr
else:
raise ValueError(f"Invalid translation value for key '{key}'")
if self.lang != "en":
# check if the key exists in English first
retval = TRANSLATIONS["en"]._translate_raw(key)
@ -122,6 +139,7 @@ class Translation:
TRANSLATIONS = {lang: Translation(lang) for lang in LANGUAGES}
_CURRENT_TRANSLATION.TR = TRANSLATIONS["en"]
_CURRENT_TRANSLATION.LAYOUT = LayoutType.Bolt
def translate(key: str, _stacklevel: int = 0) -> str: