Skip to content

Localization Coverage

Taiizor edited this page Jun 5, 2026 · 2 revisions

Localization Coverage

Audience: users, translators. Sucrose is translated on two separate surfaces that do not share the same language set or tooling: the application (WPF runtime, currently 23 languages) and the project website (.pages/, currently 28 locales). This page lists exactly which languages each surface ships, explains why the two sets differ, and points to how each is maintained. To actually add or update a translation in the app, see Translating with the Localizer.

Contents


Two translation surfaces

Surface Count Format Tooling Location
Application (WPF runtime) 23 languages XAML ResourceDictionary Sucrose.Localizer (XAML ⇄ CSV ⇄ POEditor) src/Library/Sucrose.Resources/Locales/
Website (.pages/, Nuxt) 28 locales i18n JSON Nuxt i18n (separate, not the Localizer) .pages/i18n/locales/*.json

The installer (Sucrose.Bundle) is a third, separate surface: it ships 48 Resources_<LANG>.xaml files, and its checksum-error page has 30 inline UI translations. The installer's localization is independent of both the app's 23 and the website's 28 sets.


Application languages (23)

The runtime app ships these 23 languages. The display-name and maturity-version registry lives in src/Library/Sucrose.Resources/Locales/Locale.xaml (singular), which records each language's two-letter code, display name, and a translation-maturity version number. The per-language Locale.<CODE>.xaml files are merge dictionaries that aggregate each language's area-specific resource files. (The Localizer's working CSV registry is the tooling artifact .localize/Locale.csv, not a file under Sucrose.Resources.)

Code Display name
CS Čeština
DA Dansk
DE Deutsch
EL Ελληνική
EN English
ES Español
FR Français
HI हिन्दी
ID Indonesia
IT Italiano
JA 日本語
KO 한국어
MS Melayu
NB Norsk
NL Nederlands
PL Polski
PT Português
RO Română
RU Русский
SV Svenska
TR Türkçe
UK Українська
ZH 中文

Maturity notes: EN and TR are the most complete (v1.4 in the registry, e.g. Locale.EN = "English (v1.4)"). ID, MS, and PT trail at around v0.9. Newly created languages start at v0.1 (see Translating with the Localizer).


Website locales (28)

The marketing website in .pages/ (Nuxt + Tailwind, built with bun, deployed to GitHub Pages by nuxt-deploy.yml) ships 28 locale JSON files under .pages/i18n/locales/*.json:

bg, cs, da, de, el, en, es, fi, fr, hi, hu, id, it, ja, ko,
nl, no, pl, pt, ro, ru, sk, sv, th, tr, uk, vi, zh

Why the two sets differ

The website set is a superset of the app set, plus one code difference:

  • The website adds six locales the app does not have: bg (Bulgarian), fi (Finnish), hu (Hungarian), sk (Slovak), th (Thai), vi (Vietnamese).
  • For Norwegian, the website uses no while the app uses NB.

These are separate translation surfaces: the website's i18n JSON is maintained inside the Nuxt project and is not produced by the Sucrose.Localizer tool, which targets only the app's XAML resources. Updating one does not update the other.


Runtime locale files

At runtime the app loads one XAML ResourceDictionary per language from src/Library/Sucrose.Resources/Locales/:

  • Locale.xaml — top-level language registry entries (display names + maturity versions); Locale.<CODE>.xaml — per-language merge dictionaries aggregating that language's area-specific resource files.
  • Grouped, area-specific files such as Portal.<area>.<CODE>.xaml (including Portal.Enum.<CODE>.xaml, which localizes enum display names like StoreServerType, ReportThemeType, and CompatibilityType (the Category enum is not among the localized enums)), plus Launcher and Discord groups.
  • Locale.xaml — the runtime locale registry mapping each code to its display name and maturity version. (The Localizer's .localize/Locale.csv is a tooling artifact, not a runtime locale file in this folder.)

The active language is chosen by the Culture setting (see Settings — General). Strings are resolved at runtime with segment keys via Sucrose.Resources.Extension.Resources.GetValue(...).


How each surface is maintained

  • Application — maintained with Sucrose.Localizer, which round-trips between the runtime XAML, the working CSVs in .localize/, and POEditor CSVs in .localize/POEditor/. Adding a language is menu option 9 of the tool. Full pipeline: Translating with the Localizer.
  • Website — maintained directly as Nuxt i18n JSON in .pages/i18n/locales/, independent of the app and the Localizer.
  • Installer — its ~70 Resources_<LANG>.xaml files and the error-page translations are maintained within the Sucrose.Bundle project (see Bundle Installer Internals).

Contributions to app translations are welcome — open an issue or PR per the Contributing guidelines.


See also

Home

Getting Started

Wallpaper Types

Using Sucrose

Settings Reference

Creating Wallpapers

Engine Reference

Automation & Command Line

Architecture & Internals

Data, Files & Diagnostics

Building & Contributing

Help & Support

Clone this wiki locally