ASP.NET MVC切换语言,如何实现?

时间:2009-05-29 20:45:35

标签: asp.net-mvc asp.net-mvc-routing

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

感谢您的建议!

4 个答案:

答案 0 :(得分:19)

你有没有理由使用会话变量?更常见的解决方案是在路线中包含语言代码,即blah.com/en/info或blah.com/jp/info(英语和日语)

如果您这样做,网站上的每个页面都可以包含指向每种语言的链接。如果您正在撰写可公开访问的网站,这也可以让Google更轻松地为您的所有内容编制索引。

本文解释了如何在域中包含该语言,即。 en.blah.com或jp.blah.com: http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx

更新:这是在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>    

这些链接将呈现为您所在页面的链接 - 只有更改语言。

答案 1 :(得分:7)

以下方法对我有用:

我正在使用Cookie和我自己的引擎进行本地化 所有你需要在页面上放置一些链接,重定向到这样的东西:

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("/");
    }

}

}

如果您对此引擎感兴趣,请与我们联系。

答案 2 :(得分:1)

Here is简单的解决方案如何启用在URL中选择不同的内容。

答案 3 :(得分:0)

有用于语言管理的控制器

    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");