소스 검색

LibUnicode: Perform complex Unicode locale alias substitution

Timothy Flynn 3 년 전
부모
커밋
72f49e42b4
2개의 변경된 파일20개의 추가작업 그리고 0개의 파일을 삭제
  1. 16 0
      Tests/LibUnicode/TestUnicodeLocale.cpp
  2. 4 0
      Userland/Libraries/LibUnicode/Locale.cpp

+ 16 - 0
Tests/LibUnicode/TestUnicodeLocale.cpp

@@ -410,4 +410,20 @@ TEST_CASE(canonicalize_unicode_locale_id)
     test("EN-U-RG-CN12"sv, "en-u-rg-cntj"sv);
     test("en-u-aa-cn11"sv, "en-u-aa-cn11"sv);
     test("EN-U-AA-CN11"sv, "en-u-aa-cn11"sv);
+
+    // Complex aliases.
+    test("en-lojban"sv, "en"sv);
+    test("EN-LOJBAN"sv, "en"sv);
+    test("art-lojban"sv, "jbo"sv);
+    test("ART-LOJBAN"sv, "jbo"sv);
+    test("cel-gaulish"sv, "xtg"sv);
+    test("CEL-GAULISH"sv, "xtg"sv);
+    test("zh-guoyu"sv, "zh"sv);
+    test("ZH-GUOYU"sv, "zh"sv);
+    test("zh-hakka"sv, "hak"sv);
+    test("ZH-HAKKA"sv, "hak"sv);
+    test("zh-xiang"sv, "hsn"sv);
+    test("ZH-XIANG"sv, "hsn"sv);
+    test("ja-latn-hepburn-heploc"sv, "ja-Latn-alalc97"sv);
+    test("JA-LATN-HEPBURN-HEPLOC"sv, "ja-Latn-alalc97"sv);
 }

+ 4 - 0
Userland/Libraries/LibUnicode/Locale.cpp

@@ -568,6 +568,10 @@ static void transform_unicode_locale_id_to_canonical_syntax(LocaleID& locale_id)
         for (auto& variant : language_id.variants)
             variant = variant.to_lowercase();
 
+#if ENABLE_UNICODE_DATA
+        Detail::resolve_complex_language_aliases(language_id);
+#endif
+
         if (auto alias = resolve_language_alias(*language_id.language); alias.has_value()) {
             auto language_alias = parse_unicode_language_id(*alias);
             VERIFY(language_alias.has_value());