From 40bd433db5b4338671ae87112745360c100f12a0 Mon Sep 17 00:00:00 2001 From: TrueWarg Date: Tue, 2 Sep 2025 13:12:12 +0200 Subject: [PATCH] Add fix to merge chinese locales --- .gitignore | 1 + src/android_gen.rs | 19 ++++++++++++------- tests/cases/android/case14/input/src1.txt | 4 ++++ .../case14/output/values-ru-rRU/src1.xml | 5 +++++ .../case14/output/values-zh-rCN/src1.xml | 5 +++++ tests/test.rs | 5 +++++ 6 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 tests/cases/android/case14/input/src1.txt create mode 100644 tests/cases/android/case14/output/values-ru-rRU/src1.xml create mode 100644 tests/cases/android/case14/output/values-zh-rCN/src1.xml diff --git a/.gitignore b/.gitignore index ebf8b46..c01a420 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ .vscode .DS_Store +.idea diff --git a/src/android_gen.rs b/src/android_gen.rs index efc800c..f24a208 100644 --- a/src/android_gen.rs +++ b/src/android_gen.rs @@ -2,7 +2,7 @@ use anyhow::{anyhow, Ok, Result}; use lazy_static::lazy_static; use regex::{Captures, Match, Regex}; use std::{collections::HashMap, io::Write, path::Path}; - +use std::borrow::Cow; use std::fs; use crate::parse::{File, Key, LocalizedString, PluralValue, Section, StringValue}; @@ -50,9 +50,7 @@ impl GenResult { let lang = LANG_WITH_REGION_RE.replace_all(&locale.value, |caps: &Captures| { format!("-r{}", caps.get(1).unwrap().as_str()) }); - if !locale_code_supported_in_android(&lang) { - continue; - } + let lang = update_special_locales(&lang); let subpath = dir.as_ref().join(format!("values-{}", lang)); if !subpath.is_dir() { @@ -92,9 +90,16 @@ impl GenResult { } } -fn locale_code_supported_in_android(code: &str) -> bool { - // https://stackoverflow.com/questions/17275697/is-there-any-need-to-prepare-values-zh-and-values-zh-rhk/17276279 - return code != "zh-rHans" && code != "zh-rHant" && code != "zh-rPinyin"; +// https://stackoverflow.com/questions/17275697/is-there-any-need-to-prepare-values-zh-and-values-zh-rhk/17276279 +fn update_special_locales(code: &str) -> String { + return match code { + "zh-rHans" | "zh-rHant" | "zh-rPinyin" => { + "zh-rCN".to_string() + } + &_ => { + code.to_string() + } + }; } pub fn generate(source: &File) -> Result { diff --git a/tests/cases/android/case14/input/src1.txt b/tests/cases/android/case14/input/src1.txt new file mode 100644 index 0000000..a4013fa --- /dev/null +++ b/tests/cases/android/case14/input/src1.txt @@ -0,0 +1,4 @@ +[[Src1]] + [esim_plan] + ru-RU = План eSIM + zh-Hans = eSIM套餐 diff --git a/tests/cases/android/case14/output/values-ru-rRU/src1.xml b/tests/cases/android/case14/output/values-ru-rRU/src1.xml new file mode 100644 index 0000000..76fafc4 --- /dev/null +++ b/tests/cases/android/case14/output/values-ru-rRU/src1.xml @@ -0,0 +1,5 @@ + + + + План eSIM + diff --git a/tests/cases/android/case14/output/values-zh-rCN/src1.xml b/tests/cases/android/case14/output/values-zh-rCN/src1.xml new file mode 100644 index 0000000..79e3cc9 --- /dev/null +++ b/tests/cases/android/case14/output/values-zh-rCN/src1.xml @@ -0,0 +1,5 @@ + + + + eSIM套餐 + diff --git a/tests/test.rs b/tests/test.rs index 8d6650b..7442788 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -69,6 +69,11 @@ fn case_android_13() -> Result<(), Box> { basic_test_case("android", "case13", None) } +#[test] +fn case_android_14() -> Result<(), Box> { + basic_test_case("android", "case14", None) +} + fn basic_test_case( platform: &str, case_rel_path: &str,