Multi-Language & Unicode Support for Embedded GUI

Deploy your embedded GUI in any language — from Arabic RTL to CJK to Cyrillic. Sparklet's Unicode font engine, design-time Arabic shaping in Flint, and runtime locale switching enable global HMI deployments from a single firmware build — no per-language firmware variant required.

What Is Embedded GUI Multi-Language Support?

Embedded GUI multi-language support enables a single display application to render text in multiple languages — including scripts with complex requirements such as Arabic (right-to-left), CJK (Chinese, Japanese, Korean), and Cyrillic — without requiring separate firmware builds per language. A locale switch at runtime updates all text across all screens via a string table lookup, with no screen rebuild or re-render of static assets required.

Multi-language support in embedded GUI is more complex than it appears. Beyond storing translated strings, the framework must handle: different character encodings (UTF-8, UTF-16), right-to-left text layout and bidirectional text in mixed content, language-specific glyph shapes (Arabic letter forms differ depending on word position), large character sets (CJK has 20,000+ glyphs), and variable text length (German strings are typically 30% longer than English equivalents — layout must accommodate this).

Sparklet addresses all of these requirements through three integrated mechanisms: the Unicode font engine, RTL text rendering with design-time Arabic shaping in Flint, and runtime locale switching via string table APIs. For Arabic-specific implementation details, see the Arabic RTL embedded GUI page. For a full overview of Sparklet's feature set across all rendering capabilities.

Multi-Language Engine — Four Capabilities

How Sparklet handles Unicode, RTL, runtime locale switching, and variable-length text across all supported MCU and MPU platforms.

Full Script Support on Flash-Constrained MCUs

Sparklet's font engine handles Unicode code points across all major scripts: Latin (U+0000–U+024F), Cyrillic (U+0400–U+04FF), Greek (U+0370–U+03FF), Arabic (U+0600–U+06FF and Presentation Forms U+FE70–U+FEFF), Hebrew (U+0590–U+05FF), and CJK Unified Ideographs (U+4E00–U+9FFF). Fonts are compiled from standard TrueType or OpenType files into Sparklet's compressed glyph table format using Flint UI Designer.

Selective glyph compilation

Rather than embedding a complete Unicode font (which would require several megabytes of Flash for a CJK font), Sparklet uses selective glyph compilation. Flint analyses all string table entries across all locales in the project and compiles only the glyphs actually referenced by those strings into the embedded font binary. For a Japanese product with 300 unique kanji in its UI strings, only those 300 glyphs are compiled — not the full JIS set of 6,000+ characters. A full UTF-16 CJK font file is typically 10–30 MB; a Sparklet selective glyph set for a typical Japanese HMI is approximately 300–800 KB — a reduction of over 95%.

Multi-size and anti-aliased rendering

The font binary can include multiple point sizes of the same typeface — for example, 12px body text, 24px headings, and 48px large numeric readouts. All glyphs are rendered with anti-aliasing using Sparklet's AA font renderer (sfont_aa). On platforms with hardware acceleration (DMA2D, D/AVE2D), glyph compositing is offloaded to the accelerator automatically.

Language and Script Support Matrix

Script / LanguageDirectionShaping RequirementSparklet SupportPlatform Requirement
Latin (all variants)LTRNoneFullAll MCU/MPU platforms
CyrillicLTRNoneFullAll MCU/MPU platforms
GreekLTRNoneFullAll MCU/MPU platforms
Arabic (static text)RTLDesign-time (Flint)FullAll MCU/MPU platforms
Arabic (dynamic text)RTLRuntime shaping moduleFullCortex-M4 and above
HebrewRTLMinimal (vowel marks)FullAll MCU/MPU platforms
Farsi / PersianRTLSame as ArabicFullAll MCU/MPU platforms
CJK (Chinese/Japanese/Korean)LTR/TTBSelective glyph compileFull (selective)All MCU/MPU platforms
ThaiLTRBasic (no ligature)BasicAll MCU/MPU platforms
DevanagariLTRFull ligature (planned)Basic (current)All MCU/MPU platforms
BiDi (mixed Arabic+Latin)MixedFull BiDi algorithmVia SheenBidiMPU + Embedded Linux

Designing Multilingual UIs in Flint — The End-to-End Workflow

Multi-language UI design in Flint UI Designer follows a structured workflow that eliminates the error-prone manual steps that cause localisation defects in embedded HMI projects.

Step 1 — Define all text using string table keys

In Flint, all widget text properties are assigned a string table key rather than a literal string. The key is a language-neutral identifier — for example, LABEL_SPEED_UNIT, MSG_ENGINE_FAULT, BTN_CONFIRM. Flint enforces this convention: the designer cannot accidentally hardcode a literal string into a widget that should be localised.

Step 2 — Create locale entries and enter translations

In Flint's locale manager, the designer creates one locale entry per supported language (e.g., en_US, de_DE, ar_SA, ja_JP). For each locale, the translator enters the string table values. Flint provides a side-by-side view of source and translated strings. For Arabic and Farsi locales, the designer enters standard Unicode Arabic (U+0600–U+06FF); Flint displays the correctly shaped Arabic text in its live preview using the Presentation Form shaping engine.

Step 3 — Assign fonts per locale (optional)

For locales requiring different fonts or font sizes — for example, a CJK locale using a slightly larger point size for readability — Flint allows per-locale font overrides. The override replaces the font for all widgets in that locale without requiring screen layout duplication.

Step 4 — Export — one C codebase, all locales

Flint exports all locale string tables as C constant arrays alongside the screen layout data. The selective glyph compiler runs at export time: for each locale, only the glyphs referenced by that locale's strings are compiled into the per-locale font binary. For Arabic locales, Flint runs the Presentation Form shaping pass and stores the pre-shaped glyph sequences in the exported string table.

The result is a single firmware image that contains all locales. The locale switch API at runtime is a pointer reassignment — no additional memory allocation, no firmware variant per language.

Multi-Language Support at a Glance

Five properties that make Sparklet the practical choice for global embedded HMI deployments targeting Arabic, CJK, or multi-locale markets.
Unicode Font

Unicode Font Engine

Handles Latin, Cyrillic, Greek, Arabic, Hebrew, and CJK code points. Glyph tables compiled from standard TrueType/OTF fonts — no proprietary font format conversion required.

RTL Support

RTL Arabic and Hebrew

Full right-to-left rendering. Arabic Presentation Form shaping produces correct connected letter forms at all word positions — essential for readable Arabic UI text on any MCU class.

Design Time

Design-Time Shaping in Flint

Flint pre-shapes Arabic strings at design time — zero runtime shaping code on the MCU. Suitable for any Cortex-M platform. Dynamic runtime shaping available for live Arabic string data on M4+.

CJK Glyph

CJK Selective Glyph Inclusion

Only glyphs actually used in the UI string tables are compiled into the font binary. Reduces Japanese or Chinese font Flash from 10–30 MB to 300–800 KB — viable on MCU-class devices.

Frequently Asked Questions

Sparklet uses a string table model where every UI text string is referenced by a key. Each locale provides a complete string table mapping those keys to translated strings. At runtime, a single API call switches the active locale, and Sparklet updates all widget text via dirty-region rendering without screen rebuild. All locales are compiled into the same firmware image — no per-language firmware variant is required.

Deploy Your Embedded GUI Globally

Download Sparklet and Flint UI Designer. Define your locales, import your translated strings, and see multi-language rendering — including Arabic RTL — in the Windows simulator before touching your target hardware.