Ste*_*ano 5 .net winapi cultureinfo
我依靠 .NET CultureInfo 对象来获取某些自定义文化的父文化(自定义是指它们代表与非官方语言配对的国家,例如:\'en-IT\' 或 \'fr-DE\') 。
\n\n一切工作正常,但当繁体中文(zh-Hant)与中国(通常应该与香港)配对时,我遇到了问题。
\n\n问题是:在我的开发计算机 (Windows 10) 中,对于特定区域性的“Parent”属性,我的输出与临时服务器 (Windows Server 2008R2) 上的输出不同。
\n\n在此页面中,每个“传统”文化都将“CHT”(LCID 0x7C04) 作为其父文化。\n https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.parent(v=vs .110).aspx
\n\n这是我正在运行的控制台应用程序:
\n\nclass Program\n{\n static void Main(string[] args)\n {\n System.Console.WriteLine(System.Environment.Version.ToString());\n System.Console.WriteLine("zh-Hant-CN");\n System.Console.WriteLine("Parent Name is: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hant-CN").Parent.Name);\n System.Console.WriteLine("Parent LCID is: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hant-CN").Parent.EnglishName);\n System.Console.WriteLine("Parent LCID is: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hant-CN").Parent.LCID);\n System.Console.WriteLine("zh-Hans-CN");\n System.Console.WriteLine("Parent Name is: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hans-CN").Parent.Name);\n System.Console.WriteLine("Parent Name is: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hans-CN").Parent.EnglishName);\n System.Console.WriteLine("Parent LCID is: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hans-CN").Parent.LCID);\n\n System.Console.WriteLine("Same culture: " + System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hant-CN")\n .Equals(System.Globalization.CultureInfo.CreateSpecificCulture("zh-Hans-CN")).ToString()\n );\n System.Console.ReadKey();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我的机器(Windows 10)上的输出是:
\n\n4.0.30319.42000\nzh-Hant-CN\nParent Name is: zh-CHT\nParent LCID is: Chinese (Traditional) Legacy\nParent LCID is: 31748\nzh-Hans-CN\nParent Name is: zh-CHS\nParent Name is: Chinese (Simplified) Legacy\nParent LCID is: 4\nSame culture: False\nRun Code Online (Sandbox Code Playgroud)\n\n输出:Win Server 2008R2、Win Server 2012R2、Win 8、Win 7。是:
\n\n4.0.30319.42000\nzh-Hant-CN\nParent Name is: zh-CHS\nParent LCID is: Chinese (Simplified) Legacy\nParent LCID is: 4\nzh-Hans-CN\nParent Name is: zh-CHS\nParent Name is: Chinese (Simplified) Legacy\nParent LCID is: 4\nSame culture: True\nRun Code Online (Sandbox Code Playgroud)\n\n知道原因是什么,或者文化的存储位置(.Net / Windows)吗?
\n\n谢谢。
\n\nPS:请原谅我糟糕的英语。
\n\n我确实在兔子洞中挖得更深......\n从框架的源代码(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 来检索父区域性名称。 。
\n\n做了更多的测试,我发现,用 \'zh-Han?-*\' 调用该 Api 会导致ERROR_INVALID_PARAMETER,但显然仅在非 Windows 10 计算机上...
所以我将为这个问题添加更多标签。
\n\n不仅繁体中文有一个简体中文作为父级,甚至使用“zh-Hans-CN”创建的简体中文也有错误的 DateTimeFormat 关联:例如月份名称以繁体中文表示(\xe4\xb8\x80\xe6 \x9c\x88) 而不是简化版本 (1\xe6\x9c\x88)
\n\n即此代码仅在 Windows < 10 上输出“同月:true”:
\n\nConsole.WriteLine("Same month: " + CultureInfo.CreateSpecificCulture("zh-Hant-TW").DateTimeFormat.AbbreviatedMonthNames[0].Equals(CultureInfo.CreateSpecificCulture("zh-Hans-CN").DateTimeFormat.AbbreviatedMonthNames[0]).ToString());
| 归档时间: |
|
| 查看次数: |
509 次 |
| 最近记录: |