4.5 KiB
UI Localization Plan
Historical Note:
This document records an earlier implementation plan and is no longer the current normative design source.
For the current localization contract, see docs/specification/LOCALIZATION_SPEC.md,
For the pack/runtime mechanism description, see docs/specification/LOCALE_PACKS.md.
It is particularly important to note that historical concepts such as display_language are still retained in this plan.
They have been replaced by the current locale-pack architecture.
Goal
Add UI localization capabilities that can be switched at runtime to the LVGL-based Trail Mate interface, supporting English and Chinese.
- Default language: English
- Supported languages: English / Chinese
- Language switching entrance:
Settings > System > Display Language - Switch behavior: effective immediately, no restart required
Scope
This task covers user-facing UI text generated by the device firmware itself, including:
- Main menu application name
- Shared LVGL page under
modules/ui_shared - ESP-specific LVGL page under
platform/esp/arduino_common/src/ui - Shared notifications, prompt boxes, and modal box labels
- The category name, project name, enumeration label, action label, and verification message of the settings page
- Menu dashboard component
- Screen saver prompts and device-side status notifications
This task does not translate the following content:
- Received user messages
- User-generated content such as contact name, node name, call sign, channel name, etc.
Meshtastic,MeshCore,LXMF,RNodeand other protocol brand names- README/Documentation/Release Notes
Design
1. Translation dictionary
Use shared localization modules in modules/ui_shared, including:
ui::i18n::Language- Persistent current language status
- Use
ui::i18n::tr(const char* english)as the canonical dictionary search entry
The dictionary uses the existing English source text as the canonical search key and returns:
- When the language is English, the original English string is returned
- When the language is Chinese and a translation exists, return the corresponding Chinese translation
- When no translation entry is found, fall back to the original English string
This method can complete localization access with lower risk when facing a large number of UI code libraries with hard-coded text.
2. Persistence
Persistence of the current UI language to the settings namespace:
- key:
display_language - value:
0 = English,1 = Chinese
3. Runtime refresh
When switching languages, you should:
- Persistence of the new language value
- Refresh the main menu label
- Rebuild the currently active application page asynchronously
This avoids requiring each control to subscribe to the language change event separately.
4. Font handling
When the translated text contains non-ASCII characters, the localized label should automatically switch to CJK fonts.
Shared font accessibility tools should be used to ensure:
- ASCII labels continue to use the original UI font -Chinese labels switch to Noto CJK fonts when available -Boards without compiled CJK glyph support can still safely fall back to the existing font configuration
Implementation steps
- Added shared localization module and persistence auxiliary functions.
- Add menu/application refresh support so that language switching takes effect immediately.
- Add
Display LanguageinSettings > System. - Integrate shared setting item labels, options, prompts and verification messages into localization.
- Localize menu titles, dashboard labels, shared components, modal buttons and notifications.
- Localize fixed text in Contacts / Chat / GPS / Tracker / PC Link / USB / SSTV / GNSS / Walkie Talkie / placeholder pages.
- Localized screensaver text, battery notifications, event notifications and other ESP-specific prompts.
- Run formatted and CI equivalent builds and fix regression issues.
Acceptance Criteria
- English is the default UI language on fresh start.
- The language can be switched in
Settings > System > Display Language. - The current page is updated immediately after switching the language.
- Return to the main menu to see the localized application name.
Back,Save,Cancel,Loading..., system toast, page title and other sharing prompts have been localized.- On supported targets, Chinese text can be displayed normally with CJK glyph overlay.
- Existing PlatformIO CI builds will still pass.