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

4
我需要一种方法来检测Thread.CurrentThread.CurrentCulture是否使用特定语言。
具体而言,我需要检测CurrentCultureCultureInfo对象是否支持/使用/为"英语",而不考虑国家/地区——但是,我可能还想检查其他语言。
我知道任何英语语言的CultureInfo对象的Name将以en-为前缀,然后是地区(USGB等) - 根据MSDN的语言区域名称和代码表
因此,我可以简单地检查当前文化名称是否以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语�是最好的方法?

��感谢您的帮助和建议🙂


@CharithJ--我必须指出,这与本地化字符串无关(我正在使用特定语言的.resx文件)。我为每个客户版本的应用程序拥有一个配置文件,其中包含应用程序特定设置。特别是,此配置文件中有一个字符串(称为WelcomeText)-因此,某些客户可能希望使用“Hello”或“Welcome”(所有英文)等。但是,有一个特定的客户希望以不同的语言提供该应用程序,因此我想在代码中检查他们的语言是否是“非英语”,然后根据该语言使用本地化版本。 - Geoff James
你们支持多少种不同的编程语言? - CharithJ
目前有2个 - 一个支持另一个的愿景正在路上。虽然可能是无限期的。 - Geoff James
2
我猜你可以看一下 CultureInfo.TwoLetterISOLanguageName(对于“en-US”,“en-GB”等将是“en”)。 - Evk
1
谢谢,@Evk - 我已经考虑过这个问题了。我猜我仍然会处于上述情况中(我会更新我的答案来澄清你的建议)。你认为我现在的做法足够吗? - Geoff James
显示剩余3条评论
1个回答

4

没有一种非常优雅的解决方案,你提出的方法对于一些语言来说还不错。你可以使用 CultureInfo.Parent Property 获取中性文化。

当存在多个父语言可用的层次结构时(例如:一些繁体中文,台湾),会有一些复杂情况。但是这对于德语、法语和英语应该没问题。

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
}

谢谢您的回答。您能否解释一下,相比于我的建议,我如何从您的建议中受益 - 从我所看到的使用了 CurrentCulture.Parent.Name 和一些额外的 else if 语句? - Geoff James
谢谢您的建议。您能告诉我这两者之间的区别以及CurrentCulture.Parent的优势是什么吗? - Geoff James
1
CurrentCulture.Name 返回特定的文化(例如:en-us),而CurrentCulture.Parent.Name返回父/中性文化(例如:en)。 - CharithJ
1
当存在多个父语言的层次结构时(例如:一些繁体中文,台湾),会出现一些复杂情况。但对于德语、法语和英语来说应该没有问题。 - CharithJ
1
@Evk:是的,这对于他所需的语言也可以。只是另一种类似的方法。有趣的是,它为某些文化返回3个字母;-) https://msdn.microsoft.com/zh-cn/library/system.globalization.cultureinfo.twoletterisolanguagename(v=vs.110).aspx - CharithJ
显示剩余5条评论

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