我需要一种方法来检测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
}
语句作为最佳方法?
提前感谢您的帮助和建议:)
答案 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
}