diff options
-rw-r--r-- | native/utils/resources.cc | 16 | ||||
-rw-r--r-- | native/utils/resources_test.cc | 13 |
2 files changed, 27 insertions, 2 deletions
diff --git a/native/utils/resources.cc b/native/utils/resources.cc index 24b3a6f..0c3ace0 100644 --- a/native/utils/resources.cc +++ b/native/utils/resources.cc @@ -33,12 +33,26 @@ bool isExactMatch(const flatbuffers::String* left, const std::string& right) { return left->str() == right; } +std::string NormalizeLanguageCode(const std::string& language_code) { + if (language_code == "id") { + return "in"; + } else if (language_code == "iw") { + return "he"; + } else if (language_code == "no") { + return "nb"; + } else if (language_code == "tl") { + return "fil"; + } + return language_code; +} + } // namespace int Resources::LocaleMatch(const Locale& locale, const LanguageTag* entry_locale) const { int match = LOCALE_NO_MATCH; - if (isExactMatch(entry_locale->language(), locale.Language())) { + if (isExactMatch(entry_locale->language(), + NormalizeLanguageCode(locale.Language()))) { match |= LOCALE_LANGUAGE_MATCH; } else if (isWildcardMatch(entry_locale->language(), locale.Language())) { match |= LOCALE_LANGUAGE_WILDCARD_MATCH; diff --git a/native/utils/resources_test.cc b/native/utils/resources_test.cc index 6e3d0a1..82eec30 100644 --- a/native/utils/resources_test.cc +++ b/native/utils/resources_test.cc @@ -58,6 +58,8 @@ class ResourcesTest : public testing::Test { test_resources.locale.emplace_back(new LanguageTagT); test_resources.locale.back()->language = "fr"; test_resources.locale.back()->region = "CA"; + test_resources.locale.emplace_back(new LanguageTagT); + test_resources.locale.back()->language = "in"; if (add_default_language) { test_resources.locale.emplace_back(new LanguageTagT); // default } @@ -72,7 +74,7 @@ class ResourcesTest : public testing::Test { test_resources.resource_entry.back()->resource.back()->locale.push_back(0); if (add_default_language) { test_resources.resource_entry.back()->resource.back()->locale.push_back( - 9); + 10); } // en-GB @@ -115,6 +117,12 @@ class ResourcesTest : public testing::Test { test_resources.resource_entry.back()->resource.back()->content = "龍"; test_resources.resource_entry.back()->resource.back()->locale.push_back(7); + // in + test_resources.resource_entry.back()->resource.emplace_back(new ResourceT); + test_resources.resource_entry.back()->resource.back()->content = + "Apa kabar"; + test_resources.resource_entry.back()->resource.back()->locale.push_back(9); + flatbuffers::FlatBufferBuilder builder; builder.Finish(ResourcePool::Pack(builder, &test_resources)); @@ -147,6 +155,9 @@ TEST_F(ResourcesTest, CorrectlyHandlesExactMatch) { EXPECT_TRUE(resources.GetResourceContent({Locale::FromBCP47("fr-CA")}, /*resource_name=*/"A", &content)); EXPECT_EQ("localiser", content); + EXPECT_TRUE(resources.GetResourceContent({Locale::FromBCP47("id")}, + /*resource_name=*/"A", &content)); + EXPECT_EQ("Apa kabar", content); } TEST_F(ResourcesTest, CorrectlyHandlesTie) { |