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:
parent
510e4845f3
commit
71c078f24c
@ -93,10 +93,14 @@ class LayoutType(Enum):
|
|||||||
return cls.Eckhart
|
return cls.Eckhart
|
||||||
if model in (models.T1B1,):
|
if model in (models.T1B1,):
|
||||||
return cls.T1
|
return cls.T1
|
||||||
if model in (models.T3W1,):
|
|
||||||
return cls.Eckhart
|
|
||||||
raise ValueError(f"Unknown model: {model}")
|
raise ValueError(f"Unknown model: {model}")
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
def __repr__(self) -> str:
|
||||||
|
return f"LayoutType.{self.name}"
|
||||||
|
|
||||||
|
|
||||||
class UnstructuredJSONReader:
|
class UnstructuredJSONReader:
|
||||||
"""Contains data-parsing helpers for JSON data that have unknown structure."""
|
"""Contains data-parsing helpers for JSON data that have unknown structure."""
|
||||||
|
@ -8,6 +8,7 @@ from pathlib import Path
|
|||||||
|
|
||||||
from trezorlib import cosi, device, models
|
from trezorlib import cosi, device, models
|
||||||
from trezorlib._internal import translations
|
from trezorlib._internal import translations
|
||||||
|
from trezorlib.debuglink import LayoutType
|
||||||
from trezorlib.debuglink import TrezorClientDebugLink as Client
|
from trezorlib.debuglink import TrezorClientDebugLink as Client
|
||||||
|
|
||||||
from . import common
|
from . import common
|
||||||
@ -72,6 +73,11 @@ def set_language(client: Client, lang: str):
|
|||||||
with client:
|
with client:
|
||||||
device.change_language(client, language_data) # type: ignore
|
device.change_language(client, language_data) # type: ignore
|
||||||
_CURRENT_TRANSLATION.TR = TRANSLATIONS[lang]
|
_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:
|
def get_lang_json(lang: str) -> translations.JsonDef:
|
||||||
@ -91,13 +97,24 @@ class Translation:
|
|||||||
self.lang_json = get_lang_json(lang)
|
self.lang_json = get_lang_json(lang)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def translations(self) -> dict[str, str]:
|
def translations(self) -> dict[str, str | dict[str, str]]:
|
||||||
return self.lang_json["translations"]
|
return self.lang_json["translations"]
|
||||||
|
|
||||||
def _translate_raw(self, key: str, _stacklevel: int = 0) -> str:
|
def _translate_raw(self, key: str, _stacklevel: int = 0) -> str:
|
||||||
tr = self.translations.get(key)
|
tr = self.translations.get(key)
|
||||||
if tr is not None:
|
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":
|
if self.lang != "en":
|
||||||
# check if the key exists in English first
|
# check if the key exists in English first
|
||||||
retval = TRANSLATIONS["en"]._translate_raw(key)
|
retval = TRANSLATIONS["en"]._translate_raw(key)
|
||||||
@ -122,6 +139,7 @@ class Translation:
|
|||||||
|
|
||||||
TRANSLATIONS = {lang: Translation(lang) for lang in LANGUAGES}
|
TRANSLATIONS = {lang: Translation(lang) for lang in LANGUAGES}
|
||||||
_CURRENT_TRANSLATION.TR = TRANSLATIONS["en"]
|
_CURRENT_TRANSLATION.TR = TRANSLATIONS["en"]
|
||||||
|
_CURRENT_TRANSLATION.LAYOUT = LayoutType.Bolt
|
||||||
|
|
||||||
|
|
||||||
def translate(key: str, _stacklevel: int = 0) -> str:
|
def translate(key: str, _stacklevel: int = 0) -> str:
|
||||||
|
Loading…
Reference in New Issue
Block a user