Bugfix: PreloadSupplier drops language tags when building index.

TBR=rouslan@chromium.org
BUG=

Review URL: https://codereview.appspot.com/101350044
diff --git a/cpp/src/preload_supplier.cc b/cpp/src/preload_supplier.cc
index 1a1ecf6..cf9ed80 100644
--- a/cpp/src/preload_supplier.cc
+++ b/cpp/src/preload_supplier.cc
@@ -214,6 +214,15 @@
         }
       }
 
+      // If the ID has a language tag, copy it.
+      {
+        const std::string& id = (*it)->GetId();
+        std::string::size_type pos = id.rfind("--");
+        if (pos != std::string::npos) {
+          human_id.append(id, pos, id.size() - pos);
+        }
+      }
+
       rule_index_->insert(std::make_pair(human_id, *it));
 
       // Add the Latin script ID, if a Latin script name could be found for
diff --git a/cpp/test/address_validator_test.cc b/cpp/test/address_validator_test.cc
index 5703a37..79195e3 100644
--- a/cpp/test/address_validator_test.cc
+++ b/cpp/test/address_validator_test.cc
@@ -381,4 +381,38 @@
   EXPECT_EQ(expected_, problems_);
 }
 
+TEST_P(AddressValidatorTest, ValidAddressCA_en) {
+  // Skip this test case when using the OndemandSupplier, which depends on the
+  // address metadata server to map natural language names to metadata IDs.
+  if (GetParam() == &OndemandValidatorWrapper::Build) return;
+
+  address_.region_code = "CA";
+  address_.administrative_area = "New Brunswick";
+  address_.locality = "Saint John County";
+  address_.postal_code = "E2L 4Z6";
+  address_.address_line.push_back("...");
+  address_.language_code = "en";
+
+  ASSERT_NO_FATAL_FAILURE(Validate());
+  ASSERT_TRUE(called_);
+  EXPECT_EQ(expected_, problems_);
+}
+
+TEST_P(AddressValidatorTest, ValidAddressCA_fr) {
+  // Skip this test case when using the OndemandSupplier, which depends on the
+  // address metadata server to map natural language names to metadata IDs.
+  if (GetParam() == &OndemandValidatorWrapper::Build) return;
+
+  address_.region_code = "CA";
+  address_.administrative_area = "Nouveau-Brunswick";
+  address_.locality = "Comt\xC3\xA9 de Saint-Jean";  /* Comté de Saint-Jean */
+  address_.postal_code = "E2L 4Z6";
+  address_.address_line.push_back("...");
+  address_.language_code = "fr";
+
+  ASSERT_NO_FATAL_FAILURE(Validate());
+  ASSERT_TRUE(called_);
+  EXPECT_EQ(expected_, problems_);
+}
+
 }  // namespace