1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-02-03 03:11:17 +00:00

refactor(core): use layout name for translation font keys

It would simplify `TranslationsDir.load_lang` method.

[no changelog]
This commit is contained in:
Roman Zeyde 2025-01-14 18:30:38 +02:00 committed by Roman Zeyde
parent e9aca68612
commit 7ee1259aaa
10 changed files with 37 additions and 40 deletions

View File

@ -124,14 +124,8 @@ class TranslationsDir:
def _lang_path(self, lang: str) -> Path: def _lang_path(self, lang: str) -> Path:
return self.path / f"{lang}.json" return self.path / f"{lang}.json"
def load_lang(self, lang: str, model_groups: bool = True) -> translations.JsonDef: def load_lang(self, lang: str) -> translations.JsonDef:
json_def = json.loads(self._lang_path(lang).read_text()) return json.loads(self._lang_path(lang).read_text())
# special-case for T2B1 and T3B1, so that we keep the info in one place instead
# of duplicating it in two entries, risking a desync
if model_groups and (fonts_safe3 := json_def.get("fonts", {}).get("##Safe3")) is not None:
json_def["fonts"]["T2B1"] = fonts_safe3
json_def["fonts"]["T3B1"] = fonts_safe3
return json_def
def save_lang(self, lang: str, data: translations.JsonDef) -> None: def save_lang(self, lang: str, data: translations.JsonDef) -> None:
self._lang_path(lang).write_text( self._lang_path(lang).write_text(
@ -150,7 +144,7 @@ class TranslationsDir:
def update_version_from_h(self, check: bool = False) -> VersionTuple: def update_version_from_h(self, check: bool = False) -> VersionTuple:
version = _version_from_version_h() version = _version_from_version_h()
for lang in self.all_languages(): for lang in self.all_languages():
blob_json = self.load_lang(lang, model_groups=False) blob_json = self.load_lang(lang)
blob_version = translations.version_from_json( blob_version = translations.version_from_json(
blob_json["header"]["version"] blob_json["header"]["version"]
) )

View File

@ -1,6 +1,6 @@
{ {
"fonts": { "fonts": {
"##Safe3": { "Caesar": {
"1_FONT_NORMAL": "font_pixeloperator_regular_8_cs.json", "1_FONT_NORMAL": "font_pixeloperator_regular_8_cs.json",
"2_FONT_BOLD": "font_pixeloperator_bold_8_cs.json", "2_FONT_BOLD": "font_pixeloperator_bold_8_cs.json",
"3_FONT_MONO": "font_pixeloperatormono_regular_8_cs.json", "3_FONT_MONO": "font_pixeloperatormono_regular_8_cs.json",
@ -10,7 +10,7 @@
"7_FONT_BOLD_UPPER": "font_pixeloperator_bold_8_upper_cs.json", "7_FONT_BOLD_UPPER": "font_pixeloperator_bold_8_upper_cs.json",
"8_FONT_SUB": null "8_FONT_SUB": null
}, },
"T2T1": { "Bolt": {
"1_FONT_NORMAL": "font_tthoves_regular_21_cs.json", "1_FONT_NORMAL": "font_tthoves_regular_21_cs.json",
"2_FONT_BOLD": null, "2_FONT_BOLD": null,
"3_FONT_MONO": "font_robotomono_medium_20_cs.json", "3_FONT_MONO": "font_robotomono_medium_20_cs.json",
@ -20,7 +20,7 @@
"7_FONT_BOLD_UPPER": "font_tthoves_bold_17_upper_cs.json", "7_FONT_BOLD_UPPER": "font_tthoves_bold_17_upper_cs.json",
"8_FONT_SUB": null "8_FONT_SUB": null
}, },
"T3T1": { "Delizia": {
"1_FONT_NORMAL": "font_ttsatoshi_demibold_21_cs.json", "1_FONT_NORMAL": "font_ttsatoshi_demibold_21_cs.json",
"2_FONT_BOLD": "font_ttsatoshi_demibold_21_cs.json", "2_FONT_BOLD": "font_ttsatoshi_demibold_21_cs.json",
"3_FONT_MONO": "font_robotomono_medium_21_cs.json", "3_FONT_MONO": "font_robotomono_medium_21_cs.json",
@ -30,7 +30,7 @@
"7_FONT_BOLD_UPPER": null, "7_FONT_BOLD_UPPER": null,
"8_FONT_SUB": "font_ttsatoshi_demibold_18_cs.json" "8_FONT_SUB": "font_ttsatoshi_demibold_18_cs.json"
}, },
"T3W1": { "Eckhart": {
"1_FONT_NORMAL": "font_ttsatoshi_demibold_21_cs.json", "1_FONT_NORMAL": "font_ttsatoshi_demibold_21_cs.json",
"2_FONT_BOLD": "font_ttsatoshi_demibold_21_cs.json", "2_FONT_BOLD": "font_ttsatoshi_demibold_21_cs.json",
"3_FONT_MONO": "font_robotomono_medium_21_cs.json", "3_FONT_MONO": "font_robotomono_medium_21_cs.json",

View File

@ -1,6 +1,6 @@
{ {
"fonts": { "fonts": {
"##Safe3": { "Caesar": {
"1_FONT_NORMAL": "font_pixeloperator_regular_8_de.json", "1_FONT_NORMAL": "font_pixeloperator_regular_8_de.json",
"2_FONT_BOLD": "font_pixeloperator_bold_8_de.json", "2_FONT_BOLD": "font_pixeloperator_bold_8_de.json",
"3_FONT_MONO": "font_pixeloperatormono_regular_8_de.json", "3_FONT_MONO": "font_pixeloperatormono_regular_8_de.json",
@ -10,7 +10,7 @@
"7_FONT_BOLD_UPPER": "font_pixeloperator_bold_8_upper_de.json", "7_FONT_BOLD_UPPER": "font_pixeloperator_bold_8_upper_de.json",
"8_FONT_SUB": null "8_FONT_SUB": null
}, },
"T2T1": { "Bolt": {
"1_FONT_NORMAL": "font_tthoves_regular_21_de.json", "1_FONT_NORMAL": "font_tthoves_regular_21_de.json",
"2_FONT_BOLD": null, "2_FONT_BOLD": null,
"3_FONT_MONO": "font_robotomono_medium_20_de.json", "3_FONT_MONO": "font_robotomono_medium_20_de.json",
@ -20,7 +20,7 @@
"7_FONT_BOLD_UPPER": "font_tthoves_bold_17_upper_de.json", "7_FONT_BOLD_UPPER": "font_tthoves_bold_17_upper_de.json",
"8_FONT_SUB": null "8_FONT_SUB": null
}, },
"T3T1": { "Delizia": {
"1_FONT_NORMAL": "font_ttsatoshi_demibold_21_de.json", "1_FONT_NORMAL": "font_ttsatoshi_demibold_21_de.json",
"2_FONT_BOLD": "font_ttsatoshi_demibold_21_de.json", "2_FONT_BOLD": "font_ttsatoshi_demibold_21_de.json",
"3_FONT_MONO": "font_robotomono_medium_21_de.json", "3_FONT_MONO": "font_robotomono_medium_21_de.json",
@ -30,7 +30,7 @@
"7_FONT_BOLD_UPPER": null, "7_FONT_BOLD_UPPER": null,
"8_FONT_SUB": "font_ttsatoshi_demibold_18_de.json" "8_FONT_SUB": "font_ttsatoshi_demibold_18_de.json"
}, },
"T3W1": { "Eckhart": {
"1_FONT_NORMAL": "font_ttsatoshi_demibold_21_de.json", "1_FONT_NORMAL": "font_ttsatoshi_demibold_21_de.json",
"2_FONT_BOLD": "font_ttsatoshi_demibold_21_de.json", "2_FONT_BOLD": "font_ttsatoshi_demibold_21_de.json",
"3_FONT_MONO": "font_robotomono_medium_21_de.json", "3_FONT_MONO": "font_robotomono_medium_21_de.json",

View File

@ -1,6 +1,6 @@
{ {
"fonts": { "fonts": {
"##Safe3": { "Caesar": {
"1_FONT_NORMAL": "font_pixeloperator_regular_8_es.json", "1_FONT_NORMAL": "font_pixeloperator_regular_8_es.json",
"2_FONT_BOLD": "font_pixeloperator_bold_8_es.json", "2_FONT_BOLD": "font_pixeloperator_bold_8_es.json",
"3_FONT_MONO": "font_pixeloperatormono_regular_8_es.json", "3_FONT_MONO": "font_pixeloperatormono_regular_8_es.json",
@ -10,7 +10,7 @@
"7_FONT_BOLD_UPPER": "font_pixeloperator_bold_8_upper_es.json", "7_FONT_BOLD_UPPER": "font_pixeloperator_bold_8_upper_es.json",
"8_FONT_SUB": null "8_FONT_SUB": null
}, },
"T2T1": { "Bolt": {
"1_FONT_NORMAL": "font_tthoves_regular_21_es.json", "1_FONT_NORMAL": "font_tthoves_regular_21_es.json",
"2_FONT_BOLD": null, "2_FONT_BOLD": null,
"3_FONT_MONO": "font_robotomono_medium_20_es.json", "3_FONT_MONO": "font_robotomono_medium_20_es.json",
@ -20,7 +20,7 @@
"7_FONT_BOLD_UPPER": "font_tthoves_bold_17_upper_es.json", "7_FONT_BOLD_UPPER": "font_tthoves_bold_17_upper_es.json",
"8_FONT_SUB": null "8_FONT_SUB": null
}, },
"T3T1": { "Delizia": {
"1_FONT_NORMAL": "font_ttsatoshi_demibold_21_es.json", "1_FONT_NORMAL": "font_ttsatoshi_demibold_21_es.json",
"2_FONT_BOLD": "font_ttsatoshi_demibold_21_es.json", "2_FONT_BOLD": "font_ttsatoshi_demibold_21_es.json",
"3_FONT_MONO": "font_robotomono_medium_21_es.json", "3_FONT_MONO": "font_robotomono_medium_21_es.json",
@ -30,7 +30,7 @@
"7_FONT_BOLD_UPPER": null, "7_FONT_BOLD_UPPER": null,
"8_FONT_SUB": "font_ttsatoshi_demibold_18_es.json" "8_FONT_SUB": "font_ttsatoshi_demibold_18_es.json"
}, },
"T3W1": { "Eckhart": {
"1_FONT_NORMAL": "font_ttsatoshi_demibold_21_es.json", "1_FONT_NORMAL": "font_ttsatoshi_demibold_21_es.json",
"2_FONT_BOLD": "font_ttsatoshi_demibold_21_es.json", "2_FONT_BOLD": "font_ttsatoshi_demibold_21_es.json",
"3_FONT_MONO": "font_robotomono_medium_21_es.json", "3_FONT_MONO": "font_robotomono_medium_21_es.json",

View File

@ -1,6 +1,6 @@
{ {
"fonts": { "fonts": {
"##Safe3": { "Caesar": {
"1_FONT_NORMAL": "font_pixeloperator_regular_8_fr.json", "1_FONT_NORMAL": "font_pixeloperator_regular_8_fr.json",
"2_FONT_BOLD": "font_pixeloperator_bold_8_fr.json", "2_FONT_BOLD": "font_pixeloperator_bold_8_fr.json",
"3_FONT_MONO": "font_pixeloperatormono_regular_8_fr.json", "3_FONT_MONO": "font_pixeloperatormono_regular_8_fr.json",
@ -10,7 +10,7 @@
"7_FONT_BOLD_UPPER": "font_pixeloperator_bold_8_upper_fr.json", "7_FONT_BOLD_UPPER": "font_pixeloperator_bold_8_upper_fr.json",
"8_FONT_SUB": null "8_FONT_SUB": null
}, },
"T2T1": { "Bolt": {
"1_FONT_NORMAL": "font_tthoves_regular_21_fr.json", "1_FONT_NORMAL": "font_tthoves_regular_21_fr.json",
"2_FONT_BOLD": null, "2_FONT_BOLD": null,
"3_FONT_MONO": "font_robotomono_medium_20_fr.json", "3_FONT_MONO": "font_robotomono_medium_20_fr.json",
@ -20,7 +20,7 @@
"7_FONT_BOLD_UPPER": "font_tthoves_bold_17_upper_fr.json", "7_FONT_BOLD_UPPER": "font_tthoves_bold_17_upper_fr.json",
"8_FONT_SUB": null "8_FONT_SUB": null
}, },
"T3T1": { "Delizia": {
"1_FONT_NORMAL": "font_ttsatoshi_demibold_21_fr.json", "1_FONT_NORMAL": "font_ttsatoshi_demibold_21_fr.json",
"2_FONT_BOLD": "font_ttsatoshi_demibold_21_fr.json", "2_FONT_BOLD": "font_ttsatoshi_demibold_21_fr.json",
"3_FONT_MONO": "font_robotomono_medium_21_fr.json", "3_FONT_MONO": "font_robotomono_medium_21_fr.json",
@ -30,7 +30,7 @@
"7_FONT_BOLD_UPPER": null, "7_FONT_BOLD_UPPER": null,
"8_FONT_SUB": "font_ttsatoshi_demibold_18_fr.json" "8_FONT_SUB": "font_ttsatoshi_demibold_18_fr.json"
}, },
"T3W1": { "Eckhart": {
"1_FONT_NORMAL": "font_ttsatoshi_demibold_21_fr.json", "1_FONT_NORMAL": "font_ttsatoshi_demibold_21_fr.json",
"2_FONT_BOLD": "font_ttsatoshi_demibold_21_fr.json", "2_FONT_BOLD": "font_ttsatoshi_demibold_21_fr.json",
"3_FONT_MONO": "font_robotomono_medium_21_fr.json", "3_FONT_MONO": "font_robotomono_medium_21_fr.json",

View File

@ -1,6 +1,6 @@
{ {
"fonts": { "fonts": {
"##Safe3": { "Caesar": {
"1_FONT_NORMAL": "font_pixeloperator_regular_8_it.json", "1_FONT_NORMAL": "font_pixeloperator_regular_8_it.json",
"2_FONT_BOLD": "font_pixeloperator_bold_8_it.json", "2_FONT_BOLD": "font_pixeloperator_bold_8_it.json",
"3_FONT_MONO": "font_pixeloperatormono_regular_8_it.json", "3_FONT_MONO": "font_pixeloperatormono_regular_8_it.json",
@ -10,7 +10,7 @@
"7_FONT_BOLD_UPPER": "font_pixeloperator_bold_8_upper_it.json", "7_FONT_BOLD_UPPER": "font_pixeloperator_bold_8_upper_it.json",
"8_FONT_SUB": null "8_FONT_SUB": null
}, },
"T2T1": { "Bolt": {
"1_FONT_NORMAL": "font_tthoves_regular_21_it.json", "1_FONT_NORMAL": "font_tthoves_regular_21_it.json",
"2_FONT_BOLD": null, "2_FONT_BOLD": null,
"3_FONT_MONO": "font_robotomono_medium_20_it.json", "3_FONT_MONO": "font_robotomono_medium_20_it.json",
@ -20,7 +20,7 @@
"7_FONT_BOLD_UPPER": "font_tthoves_bold_17_upper_it.json", "7_FONT_BOLD_UPPER": "font_tthoves_bold_17_upper_it.json",
"8_FONT_SUB": null "8_FONT_SUB": null
}, },
"T3T1": { "Delizia": {
"1_FONT_NORMAL": "font_ttsatoshi_demibold_21_it.json", "1_FONT_NORMAL": "font_ttsatoshi_demibold_21_it.json",
"2_FONT_BOLD": "font_ttsatoshi_demibold_21_it.json", "2_FONT_BOLD": "font_ttsatoshi_demibold_21_it.json",
"3_FONT_MONO": "font_robotomono_medium_21_it.json", "3_FONT_MONO": "font_robotomono_medium_21_it.json",
@ -30,7 +30,7 @@
"7_FONT_BOLD_UPPER": null, "7_FONT_BOLD_UPPER": null,
"8_FONT_SUB": "font_ttsatoshi_demibold_18_it.json" "8_FONT_SUB": "font_ttsatoshi_demibold_18_it.json"
}, },
"T3W1": { "Eckhart": {
"1_FONT_NORMAL": "font_ttsatoshi_demibold_21_it.json", "1_FONT_NORMAL": "font_ttsatoshi_demibold_21_it.json",
"2_FONT_BOLD": "font_ttsatoshi_demibold_21_it.json", "2_FONT_BOLD": "font_ttsatoshi_demibold_21_it.json",
"3_FONT_MONO": "font_robotomono_medium_21_it.json", "3_FONT_MONO": "font_robotomono_medium_21_it.json",

View File

@ -1,6 +1,6 @@
{ {
"fonts": { "fonts": {
"##Safe3": { "Caesar": {
"1_FONT_NORMAL": "font_pixeloperator_regular_8_pt.json", "1_FONT_NORMAL": "font_pixeloperator_regular_8_pt.json",
"2_FONT_BOLD": "font_pixeloperator_bold_8_pt.json", "2_FONT_BOLD": "font_pixeloperator_bold_8_pt.json",
"3_FONT_MONO": "font_pixeloperatormono_regular_8_pt.json", "3_FONT_MONO": "font_pixeloperatormono_regular_8_pt.json",
@ -10,7 +10,7 @@
"7_FONT_BOLD_UPPER": "font_pixeloperator_bold_8_upper_pt.json", "7_FONT_BOLD_UPPER": "font_pixeloperator_bold_8_upper_pt.json",
"8_FONT_SUB": null "8_FONT_SUB": null
}, },
"T2T1": { "Bolt": {
"1_FONT_NORMAL": "font_tthoves_regular_21_pt.json", "1_FONT_NORMAL": "font_tthoves_regular_21_pt.json",
"2_FONT_BOLD": null, "2_FONT_BOLD": null,
"3_FONT_MONO": "font_robotomono_medium_20_pt.json", "3_FONT_MONO": "font_robotomono_medium_20_pt.json",
@ -20,7 +20,7 @@
"7_FONT_BOLD_UPPER": "font_tthoves_bold_17_upper_pt.json", "7_FONT_BOLD_UPPER": "font_tthoves_bold_17_upper_pt.json",
"8_FONT_SUB": null "8_FONT_SUB": null
}, },
"T3T1": { "Delizia": {
"1_FONT_NORMAL": "font_ttsatoshi_demibold_21_pt.json", "1_FONT_NORMAL": "font_ttsatoshi_demibold_21_pt.json",
"2_FONT_BOLD": "font_ttsatoshi_demibold_21_pt.json", "2_FONT_BOLD": "font_ttsatoshi_demibold_21_pt.json",
"3_FONT_MONO": "font_robotomono_medium_21_pt.json", "3_FONT_MONO": "font_robotomono_medium_21_pt.json",
@ -30,7 +30,7 @@
"7_FONT_BOLD_UPPER": null, "7_FONT_BOLD_UPPER": null,
"8_FONT_SUB": "font_ttsatoshi_demibold_18_pt.json" "8_FONT_SUB": "font_ttsatoshi_demibold_18_pt.json"
}, },
"T3W1": { "Eckhart": {
"1_FONT_NORMAL": "font_ttsatoshi_demibold_21_pt.json", "1_FONT_NORMAL": "font_ttsatoshi_demibold_21_pt.json",
"2_FONT_BOLD": "font_ttsatoshi_demibold_21_pt.json", "2_FONT_BOLD": "font_ttsatoshi_demibold_21_pt.json",
"3_FONT_MONO": "font_robotomono_medium_21_pt.json", "3_FONT_MONO": "font_robotomono_medium_21_pt.json",

View File

@ -1,6 +1,6 @@
{ {
"fonts": { "fonts": {
"##Safe3": { "Caesar": {
"1_FONT_NORMAL": "font_pixeloperator_regular_8_tr.json", "1_FONT_NORMAL": "font_pixeloperator_regular_8_tr.json",
"2_FONT_BOLD": "font_pixeloperator_bold_8_tr.json", "2_FONT_BOLD": "font_pixeloperator_bold_8_tr.json",
"3_FONT_MONO": "font_pixeloperatormono_regular_8_tr.json", "3_FONT_MONO": "font_pixeloperatormono_regular_8_tr.json",
@ -10,7 +10,7 @@
"7_FONT_BOLD_UPPER": "font_pixeloperator_bold_8_upper_tr.json", "7_FONT_BOLD_UPPER": "font_pixeloperator_bold_8_upper_tr.json",
"8_FONT_SUB": null "8_FONT_SUB": null
}, },
"T2T1": { "Bolt": {
"1_FONT_NORMAL": "font_tthoves_regular_21_tr.json", "1_FONT_NORMAL": "font_tthoves_regular_21_tr.json",
"2_FONT_BOLD": null, "2_FONT_BOLD": null,
"3_FONT_MONO": "font_robotomono_medium_20_tr.json", "3_FONT_MONO": "font_robotomono_medium_20_tr.json",
@ -20,7 +20,7 @@
"7_FONT_BOLD_UPPER": "font_tthoves_bold_17_upper_tr.json", "7_FONT_BOLD_UPPER": "font_tthoves_bold_17_upper_tr.json",
"8_FONT_SUB": null "8_FONT_SUB": null
}, },
"T3T1": { "Delizia": {
"1_FONT_NORMAL": "font_ttsatoshi_demibold_21_tr.json", "1_FONT_NORMAL": "font_ttsatoshi_demibold_21_tr.json",
"2_FONT_BOLD": "font_ttsatoshi_demibold_21_tr.json", "2_FONT_BOLD": "font_ttsatoshi_demibold_21_tr.json",
"3_FONT_MONO": "font_robotomono_medium_21_tr.json", "3_FONT_MONO": "font_robotomono_medium_21_tr.json",
@ -30,7 +30,7 @@
"7_FONT_BOLD_UPPER": null, "7_FONT_BOLD_UPPER": null,
"8_FONT_SUB": "font_ttsatoshi_demibold_18_tr.json" "8_FONT_SUB": "font_ttsatoshi_demibold_18_tr.json"
}, },
"T3W1": { "Eckhart": {
"1_FONT_NORMAL": "font_ttsatoshi_demibold_21_tr.json", "1_FONT_NORMAL": "font_ttsatoshi_demibold_21_tr.json",
"2_FONT_BOLD": "font_ttsatoshi_demibold_21_tr.json", "2_FONT_BOLD": "font_ttsatoshi_demibold_21_tr.json",
"3_FONT_MONO": "font_robotomono_medium_21_tr.json", "3_FONT_MONO": "font_robotomono_medium_21_tr.json",

View File

@ -313,12 +313,12 @@ def blob_from_defs(
translations = TranslatedStrings.from_items(translations_ordered) translations = TranslatedStrings.from_items(translations_ordered)
if model.internal_name not in lang_data["fonts"]: if layout_type.name not in lang_data["fonts"]:
raise ValueError( raise ValueError(
f"Model {model.internal_name} not found in header for {json_header['language']} v{json_header['version']}" f"Layout {layout_type.name} not found in header for {json_header['language']} v{json_header['version']}"
) )
model_fonts = lang_data["fonts"][model.internal_name] model_fonts = lang_data["fonts"][layout_type.name]
fonts = FontsTable.from_dir(model_fonts, fonts_dir) fonts = FontsTable.from_dir(model_fonts, fonts_dir)
translations_bytes = translations.build() translations_bytes = translations.build()

View File

@ -80,6 +80,7 @@ class LayoutType(Enum):
Bolt = auto() Bolt = auto()
Caesar = auto() Caesar = auto()
Delizia = auto() Delizia = auto()
Eckhart = auto()
@classmethod @classmethod
def from_model(cls, model: models.TrezorModel) -> "LayoutType": def from_model(cls, model: models.TrezorModel) -> "LayoutType":
@ -89,6 +90,8 @@ class LayoutType(Enum):
return cls.Caesar return cls.Caesar
if model in (models.T3T1,): if model in (models.T3T1,):
return cls.Delizia return cls.Delizia
if model in (models.T3W1,):
return cls.Eckhart
if model in (models.T1B1,): if model in (models.T1B1,):
return cls.T1 return cls.T1
raise ValueError(f"Unknown model: {model}") raise ValueError(f"Unknown model: {model}")