CultureInfo ci = new CultureInfo ();
if (!ci.construct_internal_locale_from_name (name)) {
- int idx = name.IndexOf ('-');
- if (idx < 1 || !ci.construct_internal_locale_from_name (name.Substring (0, idx)))
+ int idx = name.Length - 1;
+ if (idx > 0) {
+ while ((idx = name.LastIndexOf ('-', idx - 1)) > 0) {
+ if (ci.construct_internal_locale_from_name (name.Substring (0, idx)))
+ break;
+ }
+ }
+
+ if (idx <= 0)
throw CreateNotFoundException (src_name);
}
ci = CultureInfo.CreateSpecificCulture ("");
Assert.AreEqual (CultureInfo.InvariantCulture, ci, "#5");
+
+ ci = CultureInfo.CreateSpecificCulture ("zh-hant");
+ Assert.AreEqual ("zh-HK", ci.Name, "#6");
+
+ ci = CultureInfo.CreateSpecificCulture ("zh-hans");
+ Assert.AreEqual ("zh-CN", ci.Name, "#7");
+
+ ci = CultureInfo.CreateSpecificCulture ("zh-hans-CN");
+ Assert.AreEqual ("zh-CN", ci.Name, "#8");
+
+ ci = CultureInfo.CreateSpecificCulture ("zh-hant-US");
+ Assert.AreEqual ("zh-HK", ci.Name, "#9");
+
+ ci = CultureInfo.CreateSpecificCulture ("az-CyrlM-BR");
+ Assert.AreEqual ("az-Latn-AZ", ci.Name, "#10");
}
[Test]