Swedish interface translation (sv)

Adds Swedish (Svenska) as an interface language in the menu, panel and
effect catalogs, written from the English source. The effect rows are
partial like Japanese and Georgian: an effect without a Swedish row draws
its English name, so a new effect does not block other PRs (#2244).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Patrik Lermon
2026-10-30 10:35:36 +01:00
co-authored by Claude Opus 5.5
parent 44f95f766c
commit 46881e0d5f
10 changed files with 2353 additions and 15 deletions
@@ -10,6 +10,7 @@ pub const LANGUAGES: &[(&str, &str)] = &[
("Français", "fr"),
("Polski", "pl"),
("Português (Brasil)", "pt-br"),
("Svenska", "sv"),
("Русский", "ru"),
("Українська", "uk"),
("ქართული", "ka"),
+17
View File
@@ -1123,6 +1123,23 @@ fn interface_language_is_validated_persisted_and_backward_compatible() {
assert_eq!(Prefs::from_json(r#"{"general":{"language":"en"}}"#).general.language, "en", "a chosen language stays");
}
/// Swedish is stored as `sv` rather than a locale tag, and persists like every other catalog.
#[test]
fn swedish_interface_language_is_validated_and_persisted() {
let store = Arc::new(MemoryConfig::default());
let mut s = Session { config: Some(store.clone()), ..Default::default() };
assert!(crate::prefs::LANGUAGES.contains(&("Svenska", "sv")));
for value in ["sv-SE", "sv_SE", "SV"] {
assert!(s.execute("prefs.set", json!({"key": "general.language", "value": value})).is_err(), "{value}");
}
s.execute("prefs.set", json!({"key": "general.language", "value": "sv"})).unwrap();
assert_eq!(s.execute("prefs.get", json!({"key": "general.language"})).unwrap(), json!("sv"));
let mut sv = Session { config: Some(store), ..Default::default() };
sv.load_settings();
assert_eq!(sv.prefs.general.language, "sv");
assert_eq!(Prefs::from_json(r#"{"general":{"language":"sv"}}"#).general.language, "sv");
}
#[test]
fn unicode_label_colors_fall_back_without_panicking() {
use effectcraft_color::Label;