mirror of
https://github.com/storytold/effectcraft.git
synced 2026-10-28 03:57:44 -06:00
i18n: add Brazilian Portuguese (pt-br) UI translation
This commit is contained in:
@@ -44,7 +44,7 @@ macro_rules! page {
|
||||
}
|
||||
|
||||
page!(General {
|
||||
/// Interface language (`en` or `ja`).
|
||||
/// Interface language (`en`, `ja` or `pt-br`).
|
||||
language: String = "en".into(),
|
||||
/// Levels of Undo (1–99).
|
||||
undo_levels: u32 = 32,
|
||||
@@ -417,7 +417,7 @@ impl Prefs {
|
||||
pub fn normalize(&mut self) {
|
||||
self.version = PREFS_VERSION;
|
||||
let g = &mut self.general;
|
||||
if !matches!(g.language.as_str(), "en" | "ja") {
|
||||
if !matches!(g.language.as_str(), "en" | "ja" | "pt-br") {
|
||||
g.language = "en".into();
|
||||
}
|
||||
g.undo_levels = g.undo_levels.clamp(1, 99);
|
||||
@@ -458,8 +458,8 @@ impl Prefs {
|
||||
|
||||
/// Set the value at a dotted key. The key must exist and the value must have its type.
|
||||
pub fn set(&mut self, key: &str, value: Value) -> Result<(), String> {
|
||||
if key == "general.language" && !matches!(value.as_str(), Some("en" | "ja")) {
|
||||
return Err("`general.language` expects `en` or `ja`".into());
|
||||
if key == "general.language" && !matches!(value.as_str(), Some("en" | "ja" | "pt-br")) {
|
||||
return Err("`general.language` expects `en`, `ja` or `pt-br`".into());
|
||||
}
|
||||
let mut v = serde_json::to_value(&*self).map_err(|e| e.to_string())?;
|
||||
let ptr = format!("/{}", key.replace('.', "/"));
|
||||
@@ -885,7 +885,7 @@ pub fn pages() -> Vec<Page> {
|
||||
id: "general",
|
||||
title: "General",
|
||||
items: vec![
|
||||
s("general.language", "Language", Kind::Choice(&[("English", "en"), ("日本語", "ja")]), true),
|
||||
s("general.language", "Language", Kind::Choice(&[("English", "en"), ("日本語", "ja"), ("Português (Brasil)", "pt-br")]), true),
|
||||
s("general.undoLevels", "Levels of Undo", Kind::Int(1, 99, ""), true),
|
||||
s("general.pathPointSize", "Path Point and Handle Size", Kind::Int(3, 20, "px"), true),
|
||||
s("general.recentItems", "Recent Projects Shown", Kind::Int(1, 30, ""), true),
|
||||
|
||||
@@ -494,6 +494,10 @@ fn interface_language_is_validated_persisted_and_backward_compatible() {
|
||||
assert_eq!(s.prefs.general.language, "en");
|
||||
s.execute("prefs.set", json!({"key": "general.language", "value": "ja"})).unwrap();
|
||||
assert_eq!(s.execute("prefs.get", json!({"key": "general.language"})).unwrap(), json!("ja"));
|
||||
// pt-br is registered alongside en and ja, and round-trips through the file like any other.
|
||||
s.execute("prefs.set", json!({"key": "general.language", "value": "pt-br"})).unwrap();
|
||||
assert_eq!(s.execute("prefs.get", json!({"key": "general.language"})).unwrap(), json!("pt-br"));
|
||||
s.execute("prefs.set", json!({"key": "general.language", "value": "ja"})).unwrap();
|
||||
let saved = store.read(PREFS_FILE).unwrap();
|
||||
for bad in [json!("fr"), json!(""), json!(17), json!(null)] {
|
||||
assert!(s.execute("prefs.set", json!({"key": "general.language", "value": bad})).is_err());
|
||||
|
||||
Reference in New Issue
Block a user