Asp.net mvc NET MVC切换语言,如何实现?

Asp.net mvc NET MVC切换语言,如何实现?,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我已经开始将我的简单网站转换成ASP.NETMVC,只是为了搞乱它。我在那里有一个切换语言功能,它基本上将会话[“语言”]设置为另一种语言并刷新页面。请纠正我,如果这可以做得更好,但我已经为此制作了两个控制器,并在其中设置会话。问题在于最后的路线。我可以用一些整洁的方式刷新页面吗,或者我可以获取当前操作并将其重新路由到该页面吗?或者这更像是Ajax的一个场景 感谢你的建议 使用session变量有什么原因吗?更常见的解决方案是在路由中包含语言代码,即blah.com/en/info或blah.c

我已经开始将我的简单网站转换成ASP.NETMVC,只是为了搞乱它。我在那里有一个切换语言功能,它基本上将会话[“语言”]设置为另一种语言并刷新页面。请纠正我,如果这可以做得更好,但我已经为此制作了两个控制器,并在其中设置会话。问题在于最后的路线。我可以用一些整洁的方式刷新页面吗,或者我可以获取当前操作并将其重新路由到该页面吗?或者这更像是Ajax的一个场景


感谢你的建议

使用session变量有什么原因吗?更常见的解决方案是在路由中包含语言代码,即blah.com/en/info或blah.com/jp/info(适用于英语和日语)

如果您这样做,网站上的每个页面都可能包含指向每种语言的链接。如果你正在写一个可公开访问的网站,这也会让谷歌更容易索引你的所有内容

本文介绍了如何在域中包括该语言,即en.blah.com或jp.blah.com:

更新:下面是一个在URL路由中包含语言代码的简单示例

将默认路由更改为包含语言参数:

routes.MapRoute(
"Default", 
"{language}/{controller}/{action}/{id}", 
new { language = "en", controller = "Home", action = "Index", id = "" }
);
将每种语言的链接添加到母版页:

<li><%= Html.ActionLink(
    "Spanish", 
    ViewContext.RouteData.Values["action"].ToString(), 
    new { language = "es" })%></li>
<li><%= Html.ActionLink(
    "French", 
    ViewContext.RouteData.Values["action"].ToString(), 
    new { language = "fr" })%></li>
<li><%= Html.ActionLink(
    "English", 
    ViewContext.RouteData.Values["action"].ToString(), 
    new { language = "en" })%></li>    

  • 这些将作为链接呈现回您所在的页面-仅在语言更改的情况下。

    以下方法对我很有用:

    我正在使用cookies和我自己的引擎进行本地化 您只需在页面上添加一些链接即可重定向到以下内容:

    public class LanguageController : Controller
    {
        //
        // GET: /Language/
    
        public void Change(string id)
        {
            var cuka = new HttpCookie("lang", id + "");
            cuka.Expires = DateTime.Now.AddYears(10);
            System.Web.HttpContext.Current.Response.Cookies.Add(cuka);
    
            if (Request.UrlReferrer.IsNotNull())
                Response.Redirect(Request.UrlReferrer.AbsoluteUri);
            else
                Response.Redirect("/");
        }
    
    }
    
    }


    如果您对这个引擎感兴趣,请告诉我。

    有一个用于语言管理的控制器

        public class LocalesController : Controller
    {
    
        public ActionResult Index(string lang = "en_US")
        {
            Response.Cookies["CacheLang"].Value = lang;
    
            if (Request.UrlReferrer != null)
                Response.Redirect(Request.UrlReferrer.ToString());
    
            var message = Localization.Get("changedlng");
    
            return Content(message);
        }
    
    }
    
    你可以单独叫它

    new LocalesController().Index("fa");
    

    我这样做是因为简单。我只需要写一些类似PageText.GetOneForMe(“textKey”)的东西,然后PageText根据会话决定它是哪种语言。你在这里有一些观点,我稍后会进行试验,别担心,我稍后会检查,如果有效的话,会给你信用证:)谢谢你!嗯,又回来了。我的意思是,我在理论上理解这一点,只是,我如何以一种聪明的方式改变链接?我的意思是,它们是相同的链接,但一旦我单击一个链接,它就必须将其url切换到另一种语言。问题还在于,如果我在“关于”页面上,我想刷新该页面,只需要切换语言,就像我猜的某种反射一样。在我的例子中,语句ViewContext.RouteData.Values[“action”]。ToString()不会生成。VisualStudio说:“无法将'System.Web.Routing.RouteValueDictionary'类型的值转换为'String'”为什么?这很好。我有一个问题:在这里,我们使用
    ActionLink
    helper生成传出链接。假设我们的链接有多个路由值,如:
    poo/bar/cat1/subcat2/producttype/product
    。在这里,我们也可以将这些参数放到链接中。是因为
    ActionLink
    helper继承了当前线程的路由值吗?这个解决方案对我很有效。但是它只工作一次。如果我点击法语,我会得到法语页面(在控制器中经过一些逻辑之后)。但是页面上的其他链接仍然使用默认的EN。当我点击ActionLink时,如何永久更改默认语言?这基本上就是我正在做的,只使用会话。但我想你基本上回答了我在刷新当前路线时提出的问题。我今晚或明天试试,然后回来。谢谢
    .IsNotNull()
    似乎是一个扩展方法。您能提供代码吗?请参阅