feat(gui): let the UI language be chosen manually (#179)

The interface followed the system locale with no way to override it. Settings now
carry a language picker, stored as forced_lang in gui.json, with "System" listed
first so the choice stays undoable.

rust-i18n keeps the current locale in a process-wide atomic and t! reads it on
every lookup, so switching takes effect on the next frame without a restart.

Languages are listed by their own name rather than a translated one, since that
is what a reader looking for their language recognises. A test asserts every
shipped locale has such a name, so adding a translation without naming it fails
rather than silently showing a bare language code.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Tarasov Aleksandr
2026-07-26 21:24:54 +03:00
committed by GitHub
co-authored by Claude Opus 5
parent 7b87dc02dd
commit 389640ee0a
5 changed files with 116 additions and 4 deletions
+3
View File
@@ -85,6 +85,8 @@ pub struct GuiConfig {
pub dirs_settings: HashMap<PathBuf, DirSettings>,
pub preferred_theme: PreferredTheme,
/// UI language code, or `None` to follow the system locale.
pub forced_lang: Option<String>,
}
impl SortOrder {
@@ -130,6 +132,7 @@ impl Default for GuiConfig {
preferred_theme: PreferredTheme::System,
dirs_settings: HashMap::new(),
forced_lang: None,
}
}
}