Files
Meck/examples
pelgraine 4e47eb48be French UI stage 1 (Experimental > Language, home screen) + accented 7pt Noto/Montserrat and 12pt Noto Bold fonts
Settings > Experimental Features
- SettingsScreen.h: "Experimental Features >>" moved from the end of the
  top-level list to directly under "Rx Log >>".
- New Language row (all T-Deck builds), first in the Experimental
  sub-screen. It shows the action: "Language: Change to French" in
  English, "Langue : Passer a l'anglais" (with the accent) in French.
  Enter toggles and saves.
- Choosing French swaps the Classic font style to Noto Sans (Classic has
  no accents); the text size is left alone. While French is on, the Font
  picker skips Classic. Switching back to English leaves the font as is.
- NodePrefs.h, DataStore.cpp: new pref ui_lang at byte 1523
  (0 = English, 1 = French). The prefs file grows to 1524 bytes; older
  files load as English.

Translation framework
- MeckLang.h (new): MECK_TR("English", "French") picks the string for
  the current language; meckUiLang() in main.cpp reads ui_lang. French
  strings are UTF-8, written as \x escapes so source files stay ASCII.

French translations (UITask.cpp)
- Home tiles, Phone tile and the status strip.
- First view of each home page: Recent heard, Radio, Bluetooth, WiFi,
  Advert, GPS, Battery gauge, Hibernate/power off options, Timezones.
- Start-up key hint box.
- Not yet translated: Settings and every other screen, and the home
  pages' sub-states (GPS UTC editor, power-off confirmation, Timezones
  editor hints).

Fonts
- New Adafruit GFX fonts covering U+0020-U+017F (ASCII, Latin-1
  Supplement, Latin Extended-A: French, Czech and other European
  accents), generated with stock fontconvert from the same sources as the
  fonts they replace. Their ASCII glyphs are byte-identical, so English
  text is unchanged:
  - fonts/NotoSans7pt8b.h (Noto Sans Tiny), from Google Fonts'
    NotoSans[wdth,wght].ttf
  - fonts/Montserrat7pt8b.h (Montserrat Tiny), from Google Fonts' static
    Montserrat Regular (npm @expo-google-fonts/montserrat 0.4.2)
  - fonts/NotoSansBold12pt8b.h (Noto titles and clock face), from Google
    Fonts' static Noto Sans Bold (npm @expo-google-fonts/noto-sans 0.4.2)
- MeckFonts.h: Noto size 0 -> NotoSans_Regular7pt8b, Noto sizes 3 and 5
  -> NotoSans_Bold12pt8b, Montserrat size 0 -> Montserrat_Regular7pt8b.
- Removed the replaced fonts: NotoSans7pt7b.h, Montserrat7pt7b.h,
  NotoSansBold12pt7b.h.
- Effect for all users: accented letters in names and messages now show
  at Tiny size with Noto Sans and Montserrat, instead of being reduced to
  plain letters. Classic is unchanged.
- Still without accents: Montserrat at Larger (Montserrat9pt7b).

Display driver
- GxEPDDisplay.cpp: measureTextRawStyled() and drawTextRawStyled() (home
  tiles and status strip) now decode UTF-8 when the font has accented
  glyphs: ASCII through Adafruit GFX as before, other characters from the
  font's glyph table, as print() does. Plain ASCII labels take the old
  path unchanged.

Tested on device (7 Oct 2026): Classic + Tiny -> Change to French swaps
to Noto Sans automatically; the home tiles and translated home pages
display correctly in Noto Sans Tiny. Not yet tested: French at Larger,
French with Montserrat, accented 12pt bold titles (accented capitals are
6 px taller than English ones), English screens for regressions.
2026-10-07 19:07:02 +11:00
..