diff options
Diffstat (limited to 'locale/tools/src')
-rw-r--r-- | locale/tools/src/main.rs | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/locale/tools/src/main.rs b/locale/tools/src/main.rs index 1ae59c83..68805b99 100644 --- a/locale/tools/src/main.rs +++ b/locale/tools/src/main.rs @@ -26,11 +26,30 @@ enum Args { ExportPo { #[arg(long)] remap_ids: Option<PathBuf>, + #[arg(long)] + fallback: Option<PathBuf>, input: PathBuf, output: PathBuf, }, } +static NATIVE_LANGUAGE_NAMES: &[(&'static str, &'static str)] = &[ + ("en", "English"), + ("de", "Deutsch"), + ("fr", "Français"), + ("es", "Español"), + ("eu", "euskara"), + ("ja", "日本語"), + ("he", "עִברִית"), + ("tr", "Türkçe"), + ("fi", "suomen"), + ("ar", "العربية"), + ("zh_Hans", "中文 (简化字)"), + ("zh_Hant", "中文 (繁體字)"), + ("pl", "Polski"), + ("pt", "Português"), +]; + fn main() -> Result<()> { let args = Args::parse(); match args { @@ -38,9 +57,23 @@ fn main() -> Result<()> { remap_ids: id_map, input, output, + fallback, } => { - let ini = load_ini(&input)?; + let mut ini = load_ini(&input)?; let id_map = id_map.map(|path| load_ini(&path)).transpose()?; + if let Some(fallback) = fallback { + let f = load_ini(&fallback)?; + for (k, v) in f { + if !ini.contains_key(&k) { + eprintln!("fallback: key {k:?} is missing"); + ini.insert(k, v); + } + } + } + + for &(code, name) in NATIVE_LANGUAGE_NAMES { + ini.insert(format!("c.settings.ui.language.{code}"), name.to_owned()); + } File::create(output)?.write_all( format!( |