全球化:提出这个问题的原因是为了更好地理解如何Thread.CurrentThread.CurrentUICulture
与 ViewModel 和控制器中的属性和错误消息相关的工作
我已经设置了我的项目并覆盖OnActionExecuting
我的控制器的方法我已经根据存储在 cookie 中的用户选择设置了语言。
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
HttpCookie cookie = Request.Cookies["lang"];
string lang = cookie != null ? cookie.Value : "en-US";
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang);
}
现在,在此之后,检查Accept-Language
浏览器发送的 http 请求中的标头,用户的更改没有反映出来 - 值仍然是“en-US”。这让我觉得这两者并不依赖。
我还将代码移至 Global.asax 但效果相同。从昨天就开始了
The Thread.CurrentThread.CurrentUICulture
设置影响页面上的文本,但不影响 ViewModel 注释中的错误消息或属性。但当Accept-Language
从浏览器更改,然后从正确的资源文件中选取错误消息。
- 是否可以操纵
Accept-Language
标题? - 这似乎是只读的
-
主要问题: 怎么样
Thread.CurrentThread.CurrentUICulture
作品?这似乎是互联网上大多数示例/文章/博客等使用的内容。
为了使用 ASP.NET MVC 在公共站点上实现全球化,我建议如下:
-
使用 URL(的片段)来确定文化,不是饼干。否则,将无法链接到预定义语言的页面,并且搜索引擎将无法索引您的内容。
- 浏览器首选项可用于redirect首次访问时使用适当的语言(例如,调用主页时without任何 URL 片段:对于浏览器中具有 en-US 首选项的用户,www.mysite.com 会重定向到 www.mysite.com/en-US/)
-
OnActionExecuting
is too late用于文化初始化。我推荐阅读亚历克斯·阿达米扬的文章 http://adamyan.blogspot.ch/2010/07/addition-to-aspnet-mvc-localization.html关于 ASP.NET MVC 中的本地化,并实现自定义路由处理程序初始化 UiCulture/Culture。这也可以与模型绑定一起正常工作(例如,在视图模型类上使用资源和属性时)。
至于你的其他问题:修改Accept-Language
标头,因为客户端将它们发送到服务器。即使您可以修改它们,客户也永远不会知道。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)