我想在两种语言(PL 和 EN)之间切换我在 MVC 3 中的视图。我在 Views-EN 和 PL 中创建了两个文件夹。因此,在任何站点上单击适当的语言链接后,我希望我的路线更改为:
routes.MapRoute(
"pl", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "PL", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
到:
routes.MapRoute(
"en", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "EN", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
当我单击适当的链接(语言切换器)时,它会更改对所有线程都持久的 CultureInfo。_带有切换器的布局视图:
<ul>
<li>@Html.ActionLink("En", "ChangeCulture", null, new { lang = "en"}, null)</li>
<li>@Html.ActionLink("Pl", "ChangeCulture", null, new { lang = "pl"}, null)</li>
</ul>
和控制器(它还设置静态变量 lang 可以在每个控制器的方法中看到并且在请求之间保持不变):
public ActionResult ChangeCulture(string lang)
{
PLController.lang = lang;
CultureSettings setCulture = new CultureSettings();
setCulture.InitializeCulture(lang);
cookie.Value = CultureInfo.CurrentCulture.Name;
this.ControllerContext.HttpContext.Response.Cookies.Add(cookie);
return View("Index");
}
从 Page 类重写 InitializeCulture 方法,如下所示:
public class CultureSettings : Page{
public void InitializeCulture(string culture)
{
String selectedLanguage;
if(culture == null)
{
selectedLanguage = "pl";
}
else
{
selectedLanguage = culture;
}
UICulture = selectedLanguage;
Culture = selectedLanguage;
Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new
CultureInfo(selectedLanguage);
base.InitializeCulture();
}
}
它正确设置 CultureInfo。现在我想(根据当前的 CultureInfo)为每个导航链接切换路线,并将路线模式从 mysite.com/PL/{controller}/{action} 更改为 mysite.com/EN/{controller}/{action}。
有没有人对这个问题有任何想法或更好的方法?但条件是地址必须看起来像这个 mysite.com/EN 或 mysite.com/PL - 没有不同(即 en.mysite.com)