Sco*_*ion 0 asp.net-mvc razor asp.net-mvc-3
我正在尝试使用Select语言功能开发MVC3(razor)应用程序.
使用以下视图作为_SelectCulture上的部分视图_Layout.cshtml
<text>
@Html.ActionLink("English", "SetCulture", new { controller = "Culture", culture = "en-GB" })
|
@Html.ActionLink("Welsh", "SetCulture", new { controller = "Culture", culture = "cy-GB" })
</text>
<div>
@System.Threading.Thread.CurrentThread.CurrentUICulture.ToString()
</div>
Run Code Online (Sandbox Code Playgroud)
CultureController
public ActionResult SetCulture(string culture)
{
System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo(culture);
System.Threading.Thread.CurrentThread.CurrentCulture = ci;
System.Threading.Thread.CurrentThread.CurrentUICulture = ci;
return RedirectToAction("Index", "Home");
}
Run Code Online (Sandbox Code Playgroud)
但它仍然没有改变语言.
请帮忙.
谢谢
好吧,你正在改变当前线程的语言.当前线程以当前请求结束,稍后在执行控制器操作之后.然后,您将重定向到其他控制器操作.然后ASP.NET生成一个新线程来提供这个请求,显然没有文化集.
所以你必须在某个地方坚持这种变化.基本上有3种不同的方法:
我把它们按照优先顺序排列.第一种方法包括{culture}在所有路线中集成令牌.恕我直言,这也是SEO方面的最佳方法.因此,/fr/home/index如果您想用法语获取您的网站,您将重定向到例如.然后,您可以使用将在每个操作之前运行的自定义操作过滤器属性,检查区域性路径参数并设置当前线程区域性(此时间为当前操作).
Cookie和会话还涉及在请求之间保持当前语言.在第一个示例中,这是在客户端上完成的,而在第二个示例中,它是在服务器中完成的.再一次,可以使用自定义操作过滤器在每个操作之前读取语言的值,并反映当前的线程文化.
您可以查看以下指南,该指南使用Session来保留当前语言.
| 归档时间: |
|
| 查看次数: |
5552 次 |
| 最近记录: |