Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NETMVC4全球化_Asp.net Mvc_Asp.net Mvc Routing_Multilingual - Fatal编程技术网

Asp.net mvc ASP.NETMVC4全球化

Asp.net mvc ASP.NETMVC4全球化,asp.net-mvc,asp.net-mvc-routing,multilingual,Asp.net Mvc,Asp.net Mvc Routing,Multilingual,我是ASP.NET新手,我想设计一个多语言网站。 我想让用户从主页顶部的菜单栏中选择他们的语言,并让他们在web浏览器的地址栏上看到它。 为此,我在RouteConfig类中添加了以下代码: 首先,我不能在CurrentThread中设置CultureInfo。我创建了CultureControl,并在其中根据用户的选择设置语言。它不会在其他视图和控制器中更改。我听说每个用户进入网站时都会得到一个线程 public ActionResult ChangeLanguage ( st

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

首先,我不能在CurrentThread中设置CultureInfo。我创建了CultureControl,并在其中根据用户的选择设置语言。它不会在其他视图和控制器中更改。我听说每个用户进入网站时都会得到一个线程

        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填充lang参数。我目前正在使用会话。有可能吗??!! 谢谢你的帮助

创建一个操作来更改您所使用的语言 从列表中选择一种语言或默认语言,不要抛出 例外 把它放在饼干里 使重定向到referer站点不需要传递它 通过一个参数 在控制器初始化方法中设置线程的语言 通过读取cookie创建一个基本控制器类来完成此操作 如果不存在或设置默认值无效,则发送cookie 再一次
非常感谢您的回复!但是我还有一个问题。你说把重定向传递到referer站点。我该怎么做?假设我有link/Home/About,它应该根据用户选择的语言显示。访问者应该看到的URL是en/Home/About,但我想在代码中使用@Html.ActionLinkAbout,About,Home,并让lang参数根据线程的语言自动附加到URL,反之亦然。基于语言更新原因是,当你共享一个法语URL时,你不希望其他人看到英文链接和搜索引擎。还有一件事,如果它有帮助的话,我的数据库中每种语言有3列。例如,我有3个标题栏TitleAR、TitleEN、TitleFR。我想将Title属性添加到我的模型中,该属性将根据所选语言返回正确的语言。现在线程的语言在整个代码中都不一样了,我想我应该从cookies中读取该语言。在控制器的init方法中设置线程的lang是否可以解决此问题?您需要创建包含参数的路由,将其称为lang。例如,路由模式将如下所示:{lang}/{Controller}/{action}。在routes的数据集合中有一个lang参数,因此在选择语言时,请更改此参数,然后使用HttpResponse.RedirectToRoutestring、RouteValueDictionary进行重定向。是的,它将解决产权问题。
@Html.ActionLink("About", "About", "Home")