我需要一种检测Thread.CurrentThread.CurrentCulture是否使用特定语言的方法。

特别是,我需要检测CurrentCulture CultureInfo对象是否支持/使用/是否为“英语”,而与国家/地区无关,但是,我也可能想检查其他语言。

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

因此,我可以简单地检查当前区域性名称是否以“ en-”前缀“开头”:

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


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

var twoLetterISOLanguageName =
                          Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName;

if (twoLetterISOLanguageName.Equals("en", StringComparison.InvariantCultureIgnoreCase))
{
    // We have an English language culture
}




是否存在一种替代的或更安全的类型检查方式,并且可能需要检测其他语言(例如法语,德语等)? -为了省去编写可能很大的switch语句?

或者,我在上面使用的是-并使用switch语句是最佳方法吗?

在此先感谢您的帮助和建议:)

最佳答案

确实没有一个非常优雅的解决方案,您提出的建议对几种语言来说还不错。您可以使用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
}

10-08 01:29