我们正在建立一个支持多种语言的网站。我们创建了支持 fr、de 和 en-US 的资源,默认使用 en-US。我已经添加了:
<system.web>
<globalization
uiCulture="auto" culture="auto"
requestEncoding="utf-8"
responseEncoding="utf-8"
enableClientBasedCulture="true" />
...
</system.web>
到我的web.config
档案。如果我在 IE 或 Chrome 中将语言设置为 fr、de 或 en-US,我会得到预期的语言。如果我将语言设置为 ar-EG,我会得到 en-US,也如预期的那样。
如果我将我的语言设置为 fr-FR,但在接受的语言列表中不包括 fr,则站点返回 fr 页面,即使我告诉浏览器我更喜欢接受 de 而不是通用 fr(而不是 fr-FR )。这似乎违反了 RFC,但并不奇怪,因为 IE 在法国默认为 fr-FR,在德国默认为 de-DE,并且不适用于不会自动概括文化的站点。
但是,如果我告诉浏览器我接受 ar-EG 和 fr,则站点默认为 en-US——即使 Accept-Language 标头指定我将接受具有更高优先级的 fr。我在浏览器中捕获了请求标头,以确保我请求的所有语言都以正确的优先级发送。
似乎 ASP.NET 只查看 Accept-Language 标头中指定的第一种语言。是否在任何地方指定了 ASP.NET 语言匹配算法?有没有办法指定 ASP.NET/MVC 应检查 Accept-Language 列表中的所有语言以确定最佳语言?还是我必须编写自己的语言匹配代码?