我是 ASP.NET 的新手,我想设计一个多语言网站。
我想让用户从主页顶部的菜单栏中选择他们的语言,并让他们也可以在网络浏览器的地址栏上看到它。
为此,我将以下代码添加到RouteConfig
Class :
routes.MapRoute(
name; "Default",
url: "{lang}/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
)
首先我不能设置CultureInfo
。CurrentThread
我创建CultureController
并在那里根据用户的选择设置语言。它不会在其他视图和控制器中改变。(我听说每个用户在进入网站时都会得到一个线程)
public ActionResult ChangeLanguage ( string lang, String returnUrl = null )
{
if ( !new[] { "en", "fr", "ar" }.Contains( lang ) )
throw new ArgumentException( "Language not supported." );
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo( lang );
if ( returnUrl == null )
return RedirectToAction( "Index", "Home" );
return Redirect( returnUrl );
}
第二个问题:现在我也应该在我的链接中传递 lang 而我不想这样做。例如:
@Html.ActionLink("About", "About", "Home")
不再起作用了。我希望根据CultureInfo
存储在CurrentThread
或会话中填充 lang 参数。(我目前使用 Session )。(这甚至可能吗??!!)
我很感激任何帮助。