Yaze's desktop UI uses a lightweight runtime translation layer in src/util/i18n/. User-facing text should stay in source as English and be wrapped with tr("English text"). English is the identity locale, so missing translations fall back to the source string.
Translation catalogs live in assets/i18n/<locale>.json as flat JSON maps:
The app discovers available locales from this directory and exposes them from Help → Language. The selected locale is persisted in user settings as language_locale.
assets/i18n/<locale>.json.For small edits, wrap strings manually with tr("...") and include util/i18n/tr.h. For broader UI updates, run the codemod on the touched files:
wrap.py writes ambiguous candidates to assets/i18n/wrap.review.txt; inspect that file before deciding whether any remaining literals should be wrapped by hand.