mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-11-26 09:28:13 +00:00
91 lines
3.1 KiB
Python
91 lines
3.1 KiB
Python
import json
|
|
from typing import Any, Dict
|
|
|
|
from googletrans import Translator
|
|
from helpers import FOREIGN_LANGUAGES, TRANSLATIONS_DIR
|
|
|
|
MISSING_VALUE = "TODO:missing"
|
|
|
|
|
|
def translate_dict(
|
|
d: Dict[str, Any], translator: Translator, from_lang: str, to_lang: str
|
|
) -> Dict[str, Any]:
|
|
new_dict: dict[str, Any] = {}
|
|
for key, value in d.items():
|
|
if isinstance(value, dict):
|
|
new_dict[key] = translate_dict(value, translator, from_lang, to_lang)
|
|
else:
|
|
try:
|
|
translated_text = translator.translate(
|
|
value, src=from_lang, dest=to_lang
|
|
).text
|
|
new_dict[key] = translated_text
|
|
except Exception as e:
|
|
print(f"Error translating {value}: {e}")
|
|
new_dict[key] = MISSING_VALUE
|
|
return new_dict
|
|
|
|
|
|
def update_nested_dict(target: dict, source: dict) -> None:
|
|
for key, value in target.items():
|
|
if key in source:
|
|
if isinstance(value, dict):
|
|
update_nested_dict(value, source[key])
|
|
else:
|
|
target[key] = source[key]
|
|
|
|
|
|
def extend_nested_dict(bigger: dict, smaller: dict) -> None:
|
|
for key, value in smaller.items():
|
|
if key in bigger:
|
|
if isinstance(value, dict) and isinstance(bigger[key], dict):
|
|
extend_nested_dict(bigger[key], value)
|
|
else:
|
|
bigger[key] = value
|
|
else:
|
|
bigger[key] = value
|
|
|
|
|
|
if __name__ == "__main__":
|
|
translator = Translator()
|
|
TRANSLATE = True
|
|
|
|
with open(TRANSLATIONS_DIR / "en.json", "r") as f:
|
|
en_dict = json.load(f)["translations"]
|
|
en_keys = set(en_dict.keys())
|
|
|
|
for language in FOREIGN_LANGUAGES:
|
|
lang_file = TRANSLATIONS_DIR / f"{language}.json"
|
|
lang_data = json.loads(lang_file.read_text())
|
|
translations = lang_data["translations"]
|
|
lang_keys = set(translations.keys())
|
|
|
|
print(f"Translating to {language}")
|
|
missing = en_keys - lang_keys
|
|
print("missing", missing)
|
|
missing_dict = {key: MISSING_VALUE for key in missing}
|
|
if TRANSLATE:
|
|
update_nested_dict(missing_dict, en_dict)
|
|
translated_dict = translate_dict(missing_dict, translator, "en", language)
|
|
else:
|
|
translated_dict = missing_dict
|
|
print("translated_dict", translated_dict)
|
|
extend_nested_dict(lang_data["translations"], translated_dict)
|
|
|
|
def remove_unmatched_items(
|
|
main_dict: Dict[Any, Any], secondary_dict: Dict[Any, Any]
|
|
) -> None:
|
|
keys_to_remove = [key for key in secondary_dict if key not in main_dict]
|
|
for key in keys_to_remove:
|
|
del secondary_dict[key]
|
|
|
|
for key, value in secondary_dict.items():
|
|
if isinstance(value, dict) and key in main_dict:
|
|
remove_unmatched_items(main_dict[key], value)
|
|
|
|
remove_unmatched_items(en_dict, lang_data["translations"])
|
|
|
|
lang_file.write_text(
|
|
json.dumps(lang_data, indent=2, sort_keys=True, ensure_ascii=False) + "\n"
|
|
)
|