我依靠.NET CultureInfo对象来获得一些自定义文化的母文化(从他们代表与非官方语言配对的国家的定制,例如:'en-IT'或'fr-DE')。
一切都运转良好,但我遇到的问题是传统中文(zh-Hant)与中国配对(通常应该与香港配对)。
问题是:在我的开发机器(Windows 10)中,我的输出与登台服务器(Windows Server 2008R2)上的输出不同,特定文化的“父”属性。
从这个页面,每个“传统”文化都有“CHT”(LCID 0x7C04)作为她的母文化。 https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.parent(v=vs.110).aspx
这是我正在运行的控制台应用程序:
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine(System.Environment.Version.ToString());
System.Console.WriteLine("zh-Hant-CN");
System.Console.WriteLine("Parent Name is: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hant-CN").Parent.Name);
System.Console.WriteLine("Parent LCID is: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hant-CN").Parent.EnglishName);
System.Console.WriteLine("Parent LCID is: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hant-CN").Parent.LCID);
System.Console.WriteLine("zh-Hans-CN");
System.Console.WriteLine("Parent Name is: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hans-CN").Parent.Name);
System.Console.WriteLine("Parent Name is: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hans-CN").Parent.EnglishName);
System.Console.WriteLine("Parent LCID is: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hans-CN").Parent.LCID);
System.Console.WriteLine("Same culture: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hant-CN")
.Equals(System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hans-CN")).ToString()
);
System.Console.ReadKey();
}
}
我的机器(Windows 10)上的输出是:
4.0.30319.42000
zh-Hant-CN
Parent Name is: zh-CHT
Parent LCID is: Chinese (Traditional) Legacy
Parent LCID is: 31748
zh-Hans-CN
Parent Name is: zh-CHS
Parent Name is: Chinese (Simplified) Legacy
Parent LCID is: 4
Same culture: False
输出:Win Server 2008R2,Win Server 2012R2,Win 8,Win 7.是:
4.0.30319.42000
zh-Hant-CN
Parent Name is: zh-CHS
Parent LCID is: Chinese (Simplified) Legacy
Parent LCID is: 4
zh-Hans-CN
Parent Name is: zh-CHS
Parent Name is: Chinese (Simplified) Legacy
Parent LCID is: 4
Same culture: True
知道可能是什么原因,或文化存储的位置(.Net / Windows)?
谢谢。
PS:请原谅我的坏英语。我确实在兔子洞里深挖了...... 从框架的源代码(http://referencesource.microsoft.com/#mscorlib/system/globalization/culturedata.cs,b7941d5fc1e6626d,references)我发现,在较低级别,调用 GetLocaleInfoEx (https://msdn.microsoft.com/en-us/library/windows/desktop/dd318103(v=vs.85).aspx)Windows API来检索父文化名称。
做更多测试我发现,用'zh-Han? - *'调用Api会产生ERROR_INVALID_PARAMETER
,但显然仅在非Windows 10机器上...
所以我要在问题中添加更多标签。
不仅繁体中文有简体中文作为Parent,即使用“zh-Hans-CN”创建的简体中文也有错误的DateTimeFormat关联:例如月份名称用繁体中文(一月)表示而不是简化版(1月)
即。此代码仅在Windows上输出“Same month:true”< 10:
Console.WriteLine("Same month: " + CultureInfo.CreateSpecificCulture("zh-Hant-TW").DateTimeFormat.AbbreviatedMonthNames[0].Equals(CultureInfo.CreateSpecificCulture("zh-Hans-CN").DateTimeFormat.AbbreviatedMonthNames[0]).ToString());