【发布时间】:2013-04-05 21:14:23
【问题描述】:
我们正在构建一个支持多种语言的网站。我们创建了支持 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 列表中的所有语言以确定最佳语言?还是我必须自己编写语言匹配代码?
【问题讨论】:
-
“是否在任何地方指定了 ASP.NET 语言匹配算法?” - 是的,在 MSDN 中它声明“要让 ASP.NET 将 UI 文化和文化设置为在当前浏览器设置,将 UICulture 和 Culture 设置为 auto",正是您所看到的 - 请参阅 msdn.microsoft.com/en-us/library/bz9tc508(v=VS.100).aspx
标签: asp.net asp.net-mvc internationalization