diff options
Diffstat (limited to 'locale/tools')
-rw-r--r-- | locale/tools/src/main.rs | 43 |
1 files changed, 16 insertions, 27 deletions
diff --git a/locale/tools/src/main.rs b/locale/tools/src/main.rs index 9b39705b..0173138c 100644 --- a/locale/tools/src/main.rs +++ b/locale/tools/src/main.rs @@ -21,10 +21,8 @@ enum Args { output: PathBuf, }, ExportJson { - #[arg(long)] - fallback: Option<PathBuf>, - input: PathBuf, output: PathBuf, + inputs: Vec<PathBuf>, }, ExportGodotCsv { input_dir: PathBuf, @@ -33,10 +31,8 @@ enum Args { ExportPo { #[arg(long)] remap_ids: Option<PathBuf>, - #[arg(long)] - fallback: Option<PathBuf>, - input: PathBuf, output: PathBuf, + inputs: Vec<PathBuf>, }, } @@ -62,22 +58,15 @@ static NATIVE_LANGUAGE_NAMES: &[(&str, &str)] = &[ ("ru", "русский"), ]; -fn export_load(input: &Path, fallback: Option<PathBuf>) -> Result<BTreeMap<String, String>> { - let mut ini = load_ini(&input)?; - if let Some(fallback) = fallback { - let mut missing = 0; - let f = load_ini(&fallback)?; +fn export_load(inputs: &[PathBuf]) -> Result<BTreeMap<String, String>> { + let mut ini = BTreeMap::new(); + for path in inputs { + let f = load_ini(&path)?; for (k, v) in f { - #[allow(clippy::map_entry)] if !ini.contains_key(&k) { - if option_env!("SHOW_MISSING").is_some() { - eprintln!("fallback: key {k:?} is missing"); - } - missing += 1; ini.insert(k, v); } } - eprintln!("-- {missing} missing keys were substituted from fallback language") } for &(code, name) in NATIVE_LANGUAGE_NAMES { ini.insert(format!("c.settings.ui.language.{code}"), name.to_owned()); @@ -88,22 +77,17 @@ fn export_load(input: &Path, fallback: Option<PathBuf>) -> Result<BTreeMap<Strin fn main() -> Result<()> { let args = Args::parse(); match args { - Args::ExportJson { - fallback, - input, - output, - } => { - let ini = export_load(&input, fallback)?; + Args::ExportJson { inputs, output } => { + let ini = export_load(&inputs)?; File::create(output)?.write_all(serde_json::to_string(&ini)?.as_bytes())?; Ok(()) } Args::ExportPo { remap_ids: id_map, - input, output, - fallback, + inputs, } => { - let ini = export_load(&input, fallback)?; + let ini = export_load(&inputs)?; let id_map = id_map.map(|path| load_ini(&path)).transpose()?; File::create(output)?.write_all( format!( @@ -116,7 +100,12 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" {}"#, - input.file_stem().unwrap().to_string_lossy(), + inputs + .first() + .expect("at least one input required") + .file_stem() + .unwrap() + .to_string_lossy(), ini.into_iter() .fold(String::new(), |mut a, (mut key, value)| { if let Some(id_map) = &id_map { |