diff options
-rw-r--r-- | client/makefile | 2 | ||||
-rw-r--r-- | client/project.godot | 1 | ||||
-rw-r--r-- | locale/tools/src/main.rs | 45 |
3 files changed, 36 insertions, 12 deletions
diff --git a/client/makefile b/client/makefile index 71a4fb38..2f17bee1 100644 --- a/client/makefile +++ b/client/makefile @@ -37,4 +37,4 @@ po/locales.csv: $(LT) po/%.po: ../locale/%.ini $(LT) @mkdir -p po - $(LT) export-po $< $@ + $(LT) export-po $< $@ --remap-ids ../locale/en.ini diff --git a/client/project.godot b/client/project.godot index 56715d1f..65ff288c 100644 --- a/client/project.godot +++ b/client/project.godot @@ -195,6 +195,7 @@ scroll_up={ [internationalization] +locale/translations=PackedStringArray("res://po/ar.po", "res://po/de.po", "res://po/en.po", "res://po/es.po", "res://po/eu.po", "res://po/fi.po", "res://po/fr.po", "res://po/he.po", "res://po/ja.po", "res://po/pl.po", "res://po/pt.po", "res://po/tr.po", "res://po/zh_Hans.po", "res://po/zh_Hant.po") locale/translations_pot_files=PackedStringArray("res://global.gd", "res://menu/overlay.tscn", "res://menu/setup.tscn", "res://menu/character.tscn", "res://menu/error.tscn", "res://menu/ingame.tscn", "res://menu/lobby.tscn", "res://menu/main.tscn", "res://menu/settings.tscn", "res://menu/ingame.gd", "res://menu/lobby.gd", "res://menu/popup_message.gd", "res://multiplayer.gd", "res://menu/hairstyle_preview.gd", "res://menu/credits.tscn", "res://menu/credits.gd", "res://menu/rating/rating.gd", "res://menu/warning_popup.tscn", "res://menu/play.tscn", "res://menu/settings/input/input_value_node.gd", "res://menu/settings/input/input_value_node.tscn", "res://menu/settings/input/input_manager.gd") [rendering] 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(()) } |