diff options
author | metamuffin <metamuffin@disroot.org> | 2024-09-17 21:33:08 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-09-17 21:33:08 +0200 |
commit | 976e2fc3e25bfd08c755aa222a45c42a53b0b8e0 (patch) | |
tree | e73b304827d149770a94b533569b08aa35ac4cad /locale/tools | |
parent | 666adbf669afc06d87aa28f1a8ca120c5612d3a4 (diff) | |
download | hurrycurry-976e2fc3e25bfd08c755aa222a45c42a53b0b8e0.tar hurrycurry-976e2fc3e25bfd08c755aa222a45c42a53b0b8e0.tar.bz2 hurrycurry-976e2fc3e25bfd08c755aa222a45c42a53b0b8e0.tar.zst |
tc: localization
Diffstat (limited to 'locale/tools')
-rw-r--r-- | locale/tools/src/main.rs | 50 |
1 files changed, 34 insertions, 16 deletions
diff --git a/locale/tools/src/main.rs b/locale/tools/src/main.rs index 19f58b39..56b81f86 100644 --- a/locale/tools/src/main.rs +++ b/locale/tools/src/main.rs @@ -20,6 +20,12 @@ enum Args { input: PathBuf, output: PathBuf, }, + ExportJson { + #[arg(long)] + fallback: Option<PathBuf>, + input: PathBuf, + output: PathBuf, + }, ExportGodotCsv { input_dir: PathBuf, output: PathBuf, @@ -52,32 +58,44 @@ static NATIVE_LANGUAGE_NAMES: &[(&str, &str)] = &[ ("pt", "Português"), ]; +fn export_load(input: &Path, fallback: Option<PathBuf>) -> Result<BTreeMap<String, String>> { + let mut ini = load_ini(&input)?; + if let Some(fallback) = fallback { + let f = load_ini(&fallback)?; + for (k, v) in f { + #[allow(clippy::map_entry)] + 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()); + } + Ok(ini) +} + fn main() -> Result<()> { let args = Args::parse(); match args { + Args::ExportJson { + fallback, + input, + output, + } => { + let ini = export_load(&input, fallback)?; + File::create(output)?.write_all(serde_json::to_string(&ini)?.as_bytes())?; + Ok(()) + } Args::ExportPo { remap_ids: id_map, input, output, fallback, } => { - let mut ini = load_ini(&input)?; + let ini = export_load(&input, fallback)?; 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 { - #[allow(clippy::map_entry)] - 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!( r#" |