0

我是 ASP.NET 的新手,我想设计一个多语言网站。
我想让用户从主页顶部的菜单栏中选择他们的语言,并让他们也可以在网络浏览器的地址栏上看到它。
为此,我将以下代码添加到RouteConfigClass :

routes.MapRoute(
        name; "Default",
        url: "{lang}/{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    )

首先我不能设置CultureInfoCurrentThread我创建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 )。(这甚至可能吗??!!)
我很感激任何帮助。

4

1 回答 1

1
  1. 像您一样创建一个更改语言的操作
  2. 从您的列表中选择一种语言或默认语言(不要抛出异常!)
  3. 将其存储在 cookie 中
  4. 重定向到引用站点(不需要通过参数传递)
  5. 通过读取 cookie 在 Controller Initialize 方法中设置线程的语言(创建一个基本的 Controller 类来执行此操作)(如果不存在或无效设置默认值,再次发送 cookie)
于 2012-12-08T08:03:45.663 回答