aboutsummaryrefslogtreecommitdiff
path: root/locale/tools/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-09-03 18:46:56 +0200
committermetamuffin <metamuffin@disroot.org>2024-09-03 18:46:56 +0200
commitac28cfd3085b4b1b87d5708084df3a1d08901a91 (patch)
tree6d796584cc5d64ebfb6f176ec9a2d730d651ac13 /locale/tools/src
parent5c1f99fe6c5286d9fad42fff6ae5849143c4b1e0 (diff)
downloadhurrycurry-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.rs45
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(())
}