gpt4 book ai didi

asp.net - Thread.CurrentThread.CurrentUICulture 与 ViewModel 中的接受语言

转载 作者:行者123 更新时间:2023-12-02 00:09:26 24 4
gpt4 key购买 nike

全局化:问这个问题的原因是为了更好地理解 Thread.CurrentThread.CurrentUICulture 与 ViewModel 和 Controller 中的属性和错误消息相关的工作原理

我已经设置了我的项目并覆盖了我的 Controller 的 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);
}

现在,在此之后,检查浏览器发送的 http 请求中的 Accept-Language header ,未反射(reflect)用户更改 - 值仍然是“en-US”。这让我觉得这两者并不依赖。

我也已将代码移至 Global.asax,但效果相同。从昨天开始。

Thread.CurrentThread.CurrentUICulture 设置会影响页面上的文本,但不会影响来自 ViewModel 注释的错误消息或属性。但是当浏览器更改 Accept-Language 时,错误消息将从正确的资源文件中选取。

  • 是否可以操纵 Accept-Language header ? - 这似乎是只读的
  • 主要问题:Thread.CurrentThread.CurrentUICulture 是如何工作的?这似乎是互联网上大多数示例/文章/博客等使用的内容。

最佳答案

为了使用 ASP.NET MVC 在公共(public)站点上获得正确的全局化,我建议如下:

  • 使用(片段)URL 来确定文化,而不是 cookie。否则将无法链接到预定义语言的页面,搜索引擎将无法为您的内容编制索引。
  • 浏览器首选项可用于在首次访问时重定向到适当的语言(例如,当调用主页时没有任何 URL 片段:www.mysite.com 重定向到 www.mysite.com/en-US/(对于在浏览器中使用 en-US 首选项的用户)
  • OnActionExecuting 对于区域性初始化来说太晚了。我推荐阅读 Alex Adamyan's article关于 ASP.NET MVC 中的本地化,并实现一个自定义路由处理程序来初始化 UiCulture/Culture。这也适用于模型绑定(bind)(例如,在 View 模型类上使用资源和属性时)。

关于您的其他问题:修改 Accept-Language header 并没有实际意义,因为客户端将它们发送到服务器。即使您可以修改它们,客户也永远不会知道。

关于asp.net - Thread.CurrentThread.CurrentUICulture 与 ViewModel 中的接受语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16218382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com