diff options
Diffstat (limited to 'locale')
| -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(())          } | 
