asp.net-mvc - 我的应用程序没有记住设置 CurrentUICulture

标签 asp.net-mvc globalization

我有一个 asp.net mvc 应用程序,我希望用户能够更改语言。我提供了一系列带有小标志的链接,让用户选择语言。所有这些链接的目标是我的“仪表板”页面,其中 Controller 我有以下代码:

[HttpGet]
[Authorize]
public ViewResult Dashboard(string id)
{
  if (!string.IsNullOrEmpty(id))
  {
    System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(id);
  }
}

“仪表板”页面按其应有的方式以所选语言显示。但是当我浏览我的网站时,文化会变回英语(默认)......我错过了什么吗?更改 CurrentUICulture 是否应该将整个应用程序更改为其他语言?

最佳答案

System.Threading.Thread.CurrentThread.CurrentUICulture中,这种方式仅为用户当前请求设置区域性,并且在后续用户请求时将重置为默认语言。

您需要在要显示基于语言的数据(本地化数据)的每个 View 上设置 ui 区域性。

提示:将用户选择的区域性 ID 保存在 session 中,并在每个 View 上使用它来指定 uiculture

像这样,

// save users selected culture id in session
Session["SelectedCultureId"] = id;

在每个 View 上设置当前线程 ui 区域性 id

if (Session["SelectedCultureId"] != null)
{
    System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(Session["SelectedCultureId"]);
}

关于asp.net-mvc - 我的应用程序没有记住设置 CurrentUICulture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5015525/

相关文章:

.net - 我可以创建非基于语言的全局 .resx 吗?

javascript - 如何在 JavaScript 中使用全局化?

c# - 对 ASP.NET MVC Controller 的 Ajax POST 调用给出 net::ERR_CONNECTION_RESET

jquery - 在 asp.net mvc 元素上实现移动滚动

c# - 如何为电子邮件消息中的占位符编码?

c# - 如何将资源语言传递到不同的页面

c# - 如何为此 ActionLink 创建正确的路由值?

xml - 在保持默认 JSON 的同时强制 xml 在某些 Web API Controller 上返回

c# - 全局化架构

c# - 无论当前文化如何,如何在 MonthCalendar 控件中显示泰国日历