确定CultureInfo是否使用特定语言的替代方法?

时间:2016-11-18 11:53:22

标签: c# .net localization cultureinfo

我需要一种方法来检测Unix OS是否使用特定语言。

特别是,我需要检测Thread.CurrentThread.CurrentCulture CurrentCulture对象是否支持/使用/是“英语”,无论国家/地区如何 - 但是,我有可能想要检查其他语言,也。

我知道任何英语语言CultureInfo对象'CultureInfo都会以Name为前缀,然后是区域(en-US等。 - 根据MSDN's Table of Language Culture Name and Codes

所以我可以简单地检查当前的文化名称是否以“{1}}前缀”

开头
GB

编辑:同样(如Evk指出的那样) - 如果我使用en-,我可能会得到相同的结果:

var currentCultureName = Thread.CurrentThread.CurrentCulture.Name;
if (currentCultureName.StartsWith("en-"))
{
    // We have an English language culture
}

是否有替代或更类型安全的检查方法,可能需要检测其他语言(例如法语,德语等)? - 为了节省必须写一个可能很大的TwoLetterISOLanguageName语句?

或者,我正在使用上面的内容 - 并使用var twoLetterISOLanguageName = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName; if (twoLetterISOLanguageName.Equals("en", StringComparison.InvariantCultureIgnoreCase)) { // We have an English language culture } 语句作为最佳方法?

提前感谢您的帮助和建议:)

1 个答案:

答案 0 :(得分:1)

没有一个非常优雅的解决方案,你所建议的对几种语言来说并不坏。您可以使用CultureInfo.Parent Property来返回中性文化。

当存在多种母语可用的层次结构时(例如:一些繁体中文,台湾),存在一些复杂性。但这对DE,FR和EN来说应该没问题。

var neutralCulture = Thread.CurrentThread.CurrentCulture.Parent.Name;

if (neutralCulture.Equals("en", StringComparison.OrdinalIgnoreCase))
{
    // We have an English language culture
}
else if (neutralCulture.Equals("fr", StringComparison.OrdinalIgnoreCase))
{
    // We have a French language culture
}
else if (neutralCulture.Equals("de", StringComparison.OrdinalIgnoreCase))
{
    // We have a German language culture
}