diff options
author | metamuffin <metamuffin@disroot.org> | 2024-09-03 18:46:56 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-09-03 18:46:56 +0200 |
commit | ac28cfd3085b4b1b87d5708084df3a1d08901a91 (patch) | |
tree | 6d796584cc5d64ebfb6f176ec9a2d730d651ac13 /locale/tools/src | |
parent | 5c1f99fe6c5286d9fad42fff6ae5849143c4b1e0 (diff) | |
download | hurrycurry-ac28cfd3085b4b1b87d5708084df3a1d08901a91.tar hurrycurry-ac28cfd3085b4b1b87d5708084df3a1d08901a91.tar.bz2 hurrycurry-ac28cfd3085b4b1b87d5708084df3a1d08901a91.tar.zst |
po export
Diffstat (limited to 'locale/tools/src')
-rw-r--r-- | locale/tools/src/main.rs | 45 |
1 files changed, 34 insertions, 11 deletions
diff --git a/locale/tools/src/main.rs b/locale/tools/src/main.rs index de11cd35..401fbc63 100644 --- a/locale/tools/src/main.rs +++ b/locale/tools/src/main.rs @@ -24,6 +24,8 @@ enum Args { output: PathBuf, }, ExportPo { + #[arg(long)] + remap_ids: Option<PathBuf>, input: PathBuf, output: PathBuf, }, @@ -32,20 +34,41 @@ enum Args { fn main() -> Result<()> { let args = Args::parse(); match args { - Args::ExportPo { input, output } => { + Args::ExportPo { + remap_ids: id_map, + input, + output, + } => { let ini = load_ini(&input)?; + let id_map = id_map.map(|path| load_ini(&path)).transpose()?; File::create(output)?.write_all( - ini.into_iter() - .map(|(key, value)| { - format!( - "msgid {}\nmsgstr{}\n", - serde_json::to_string(&key).unwrap(), - serde_json::to_string(&value).unwrap(), - ) - }) - .collect::<String>() - .as_bytes(), + format!( + r#" +msgid "" +msgstr "" +"Language: {}\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +{}"#, + input.file_stem().unwrap().to_string_lossy(), + ini.into_iter() + .map(|(mut key, value)| { + if let Some(id_map) = &id_map { + if let Some(new_id) = id_map.get(&key) { + key = new_id.to_owned() + } + } + format!( + "msgid {}\nmsgstr {}\n\n", + serde_json::to_string(&key).unwrap(), + serde_json::to_string(&value).unwrap(), + ) + }) + .collect::<String>() + ) + .as_bytes(), )?; Ok(()) } |