1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-02-24 05:12:02 +00:00

feat(python): support per-layout translated text strings

[no changelog]
This commit is contained in:
Roman Zeyde 2025-01-19 18:10:07 +02:00 committed by Roman Zeyde
parent 1dae795a94
commit 206119953d

View File

@ -10,6 +10,7 @@ import construct as c
from construct_classes import Struct, subcon from construct_classes import Struct, subcon
from typing_extensions import Self, TypedDict from typing_extensions import Self, TypedDict
from ..debuglink import LayoutType
from ..firmware.models import Model from ..firmware.models import Model
from ..models import TrezorModel from ..models import TrezorModel
from ..tools import EnumAdapter, TupleAdapter from ..tools import EnumAdapter, TupleAdapter
@ -39,7 +40,7 @@ class JsonHeader(TypedDict):
class JsonDef(TypedDict): class JsonDef(TypedDict):
header: JsonHeader header: JsonHeader
translations: dict[str, str] translations: dict[str, str | dict[str, str]]
fonts: dict[str, JsonFontInfo] fonts: dict[str, JsonFontInfo]
@ -297,6 +298,14 @@ def order_from_json(json_order: dict[str, str]) -> Order:
return {int(k): v for k, v in json_order.items()} return {int(k): v for k, v in json_order.items()}
def get_translation(lang_data: JsonDef, key: str, layout_type: LayoutType) -> str:
item = lang_data["translations"].get(key, "")
if isinstance(item, dict):
return item.get(layout_type.name, "")
return item # Same translation for all layouts
def blob_from_defs( def blob_from_defs(
lang_data: JsonDef, lang_data: JsonDef,
order: Order, order: Order,
@ -305,10 +314,11 @@ def blob_from_defs(
fonts_dir: Path, fonts_dir: Path,
) -> TranslationsBlob: ) -> TranslationsBlob:
json_header: JsonHeader = lang_data["header"] json_header: JsonHeader = lang_data["header"]
layout_type = LayoutType.from_model(model)
# order translations -- python dicts keep insertion order # order translations -- python dicts keep insertion order
translations_ordered: list[str] = [ translations_ordered: list[str] = [
lang_data["translations"].get(key, "") for _, key in sorted(order.items()) get_translation(lang_data, key, layout_type) for _, key in sorted(order.items())
] ]
translations = TranslatedStrings.from_items(translations_ordered) translations = TranslatedStrings.from_items(translations_ordered)