有趣的问题。让我试着回答…
是否可以在此处使用比较字符串(检查“en”是否作为子字符串存在)?
你可以这样做。注意,我只是提供了一种不使用字符串的方法,但是,我认为在这种情况下,子字符串方法也可以工作,因为它更简单。
CultureInfo enCulture = new CultureInfo("en"); // use "de"
var langPref = Request.UserLanguages[0];
var userCulture = CultureInfo.GetCultureInfo(langPref);
var baseCulture = CultureInfo.GetCultureInfo(cult.TwoLetterISOLanguageName); // get the base culture
var isSame = baseCulture.Equals(enCulture);
用这个怎么样
Headers["Accept-Language"]
.
Section 14.4 Accept-Language
RFC 2616。使用它可能会涉及到更多的工作,但目前看来,它可以保存更多有价值的信息。
我们是必须考虑订单,还是你会无视订单?
这个
UserLanguages
数组按首选项排序(
MSDN
)我已经说过了,我假设每个浏览器都有自己的特定方法来创建语言字符串(我接受纠正,但我认为ff4正在考虑删除用户代理字符串的这一部分)。您可以检查每种语言,并使用上面描述的方法决定何时找到正确的语言。
我是不是太复杂了?但问题是,IE和火狐(以及其他浏览器)对于区域设置有不同的字符串(例如,火狐中的“sl”和IE8中的“sl-si”)。
对我来说,本地化很棘手。我建议你通读一下
RFC 1766
和
RFC 2616 (HTTP Protocol, Section 3.10
.
我希望这有帮助。