summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--native/utils/resources.cc16
-rw-r--r--native/utils/resources_test.cc13
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) {