在C#中如何区分简体和繁体中文?

4
我的应用程序已经被翻译成多种语言,包括法语、繁体中文和简体中文。现在,当应用程序首次启动时,我想根据用户的地区设置自动选择正确的翻译。
对于法语,评估“InstalledUiCulture”的“TwoLettersIsoLanguageName”属性效果很好,但是对于中文,ISO代码不足够。我考虑采用“Name”属性,它将“zh-Hans”和“zh-Hant”分开,但这会破坏法语,因为它在某些系统上给出“fr-FR”,在其他系统上给出“fr-CA”。
是否有一种简单的方法来获取当前文化的两个字母语言代码(如果它不是中文),否则获取“zh-Hans” / “zh-Hant”?
我正在寻找一种优雅的解决方案;当然我已经考虑过解析文化的“Name”属性并特殊处理中文,但那不算非常美观:/。
简而言之,我认为我正在寻找一种从当前文化检索“中性”文化的方法:从“fr-Fr”获取“fr”,从“zh-TW”获取“zh-Hant”,并从“zh-CN”获取“zh-Hans”。有什么建议吗?
谢谢!

你为什么不使用卫星程序集? - Hans Passant
因为我正在修复一个相当老的代码库 :/ - Clément
不要忘记挪威语和葡萄牙语,它们也有多种方言。如果你的公司决定创建一个特殊的加拿大法语翻译,会发生什么? - Raymond Chen
@RaymondChen:没错。那么我会加载特定的翻译。 - Clément
那么问题实际上不是“我想要一个函数,如果次文化是中文,就返回该次文化;否则返回中性文化”。而应该是“我想要一个函数,如果我有该次文化的翻译,就返回该次文化;否则返回中性文化”。当然,操作系统没有此功能的内置函数,因为操作系统不知道您已经翻译成了哪些语言。 - Raymond Chen
@RaymondChen:不完全是。我只需要检查是否有当前特定文化的翻译。如果没有,我需要检索相应的中性文化,这就是问题所在。Parent 对此非常完美。 - Clément
1个回答

3
似乎CultureInfo类的Parent属性是您要查找的内容。似乎从一开始就支持该属性。
顺便说一句,如果需要翻译,则应使用CurrentUICulture而不是CurrentCulture(后者用于格式化),或者InstalledUiCulture,它是操作系统语言版本,而不是用户偏好。

1
太好了,谢谢!顺便提醒一下,如果将IsNeutral属性放在前面使用,则可以确保您不会获取已经是中性的文化的父级。还值得一提的是:InvariantCulture.Parent == InvariantCulture - Clément

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接