[corlib] Construct specific culture using most specific culture name region. Fixes...
authorMarek Safar <marek.safar@gmail.com>
Wed, 2 Sep 2015 08:54:04 +0000 (10:54 +0200)
committerMarek Safar <marek.safar@gmail.com>
Wed, 2 Sep 2015 08:57:02 +0000 (10:57 +0200)
mcs/class/corlib/System.Globalization/CultureInfo.cs
mcs/class/corlib/Test/System.Globalization/CultureInfoTest.cs

index c3fb0d2ccb73e953e46c11ecd0b86c286e13131c..a85039bfa3cf150aaee93726b218077b03561af9 100644 (file)
@@ -816,8 +816,15 @@ namespace System.Globalization
                        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);
                        }
 
index 32233f269db981b78c76b9dd72551f6667c63a71..23c4cd41cf91d9e4110a697e2b76304f029f53c8 100644 (file)
@@ -171,6 +171,21 @@ namespace MonoTests.System.Globalization
 
                        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]