ASP.NET MVC切换语言,如何实现?
-
06-09-2019 - |
题
我已经开始将我的简单网站转换为 ASP.NET MVC,只是为了搞乱它。我在那里有一个切换语言功能,基本上将会话[“语言”]设置为另一种语言并刷新页面。如果可以做得更好,请纠正我,但我为此制作了两个控制器并在那里设置会话。问题出在最后的路由上。我可以以某种简洁的方式刷新页面,或者我可以获取当前的操作并将其重新路由到该页面吗?或者这更像是 Ajax 的场景?
感谢您的建议!
解决方案
您使用会话变量有什么原因吗?更常见的解决方案是在路线中包含语言代码,即blah.com/en/info 或 blah.com/jp/info(英语和日语)
如果您这样做,网站上的每个页面都可以包含指向每种语言的链接。如果您正在编写一个可公开访问的网站,这也将使谷歌更容易索引您的所有内容。
本文解释了如何将语言包含在域中,即。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>
这些将呈现为返回您所在页面的链接 - 仅当语言发生更改时。
其他提示
下面的方法对我的作品好:
我用饼干和我自己的发动机本地化 所有你需要把页面上的一些链接将重定向到这样的:
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("/");
}
}
}
如果你有兴趣在这个引擎,让我知道。
这里是简单的解决方案如何启用URL选择不同的。
存在用于语言管理控制器
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");
不隶属于 StackOverflow