如何在mvc5中将文化设置为全局
Posted
技术标签:
【中文标题】如何在mvc5中将文化设置为全局【英文标题】:How to set culture as globally in mvc5 【发布时间】:2014-06-05 12:25:11 【问题描述】:我在使用 mvc5 构建的 Web 应用程序中使用资源文件来切换语言
在索引文件中它读取我设置的文化值。
我从 layout.cshtml 调用 setculture 方法,并使用以下代码调用它的值。
@
Layout = "~/Views/Shared/_Layout.cshtml";
if (!Request["dropdown"].IsEmpty())
Culture = UICulture = Request["dropdown"];
在索引页面中,语言正在正确加载,但是当我从那里转到下一页时,它会加载默认语言德语,但仅从英语资源文件中读取资源。
请帮帮我..任何人
【问题讨论】:
【参考方案1】:对于全局设置,我建议您在 global.asax.cs 文件中添加以下行:(在此示例中,文化设置为以色列希伯来语)
protected void Application_Start()
//The culture value determines the results of culture-dependent functions, such as the date, number, and currency (NIS symbol)
System.Globalization.CultureInfo.DefaultThreadCurrentCulture = new System.Globalization.CultureInfo("he-il");
//System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = new System.Globalization.CultureInfo("he-il");
【讨论】:
这就是我想要的。对于多线程 Web 应用,CurrentThread 解决方案不起作用。它只会改变主线程的文化。【参考方案2】:在web.config
中,我在里面评论了以下行,对我来说效果很好。
<configuration>
<system.web>
<globalization culture="en-US" uiCulture="en-US" /> <!-- this only -->
</system.web>
</configuration>
【讨论】:
【参考方案3】:您必须在某处保留有关当前文化的信息(我推荐 cookie)并将线程文化设置为此 cookie 值(如果存在) - 最好在您的 Global.asax
的 Application_BeginRequest
中。
public ActionResult ChangeCulture(string value)
Response.Cookies.Add(new HttpCookie("culture", value));
return View();
public class MvcApplication : HttpApplication
protected void Application_BeginRequest()
var cookie = Context.Request.Cookies["culture"];
if (cookie != null && !string.IsNullOrEmpty(cookie.Value))
var culture = new CultureInfo(cookie.Value);
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
【讨论】:
Uiculture 和 Thread 文化的用途不同。检查这个:***.com/questions/9507582/… @Zekth - 我知道 :) 但 Sajna Ali 首先将它们设置为相同的值;所以我想这就是他想要的。 将测试放在 Application_BeginRequest() 中有点繁重。每次您提出请求时,您都会进行测试。 :// 首先我只像这样设置应用程序。语言正在从主页更改。然后它工作正常。但是当我进入第二页或任何其他页面时,我没有使用以下代码获取语言 varculture = System.Globalization.CultureInfo.DefaultThreadCurrentUICulture;但代码 @Resources.FirstName 仍然加载为英语而不是德语 @Zeth - 这是在每个请求启动一个新线程并且您想为每个请求设置正确的文化时实现它的唯一方法;) Sajna Ali - 请详细说明,这感觉像是不同的问题.以上是关于如何在mvc5中将文化设置为全局的主要内容,如果未能解决你的问题,请参考以下文章
如何在中间件中将 bodyParser 上传限制设置为特定路由而不是全局?
如何在flutter中将token设置为全局变量?所以我可以随时随地访问令牌