Язык интерфейса ASP.NET MVC, как реализовать?
Я начал конвертировать мой простой сайт в ASP.NET MVC, просто чтобы пообщаться с ним. У меня есть функция языка переключения, которая в основном устанавливает Session [ "language" ] на другой язык и обновляет страницу. Пожалуйста, поправьте меня, если это может быть сделано лучше, но я сделал для этого два контроллера и установил там сессию. Проблема заключается в маршрутизации в конце. Могу ли я обновить страницу каким-то аккуратным способом, или я могу получить текущее действие и перенаправить его на это? Или это скорее сценарий для Ajax?
Спасибо за советы!
Ответы
Ответ 1
есть ли причина, по которой вы используете переменную сеанса? более распространенным решением является включение кода языка в маршрут, то есть blah.com/en/info или blah.com/jp/info (для английского и японского).
если вы сделали это, каждая страница на сайте может содержать ссылки на каждый язык. если вы пишете общедоступный сайт, это также облегчило бы Google индексировать весь ваш контент.
В этой статье объясняется, как включить язык в домен, т.е. ru.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>
Они будут отображаться как ссылки на страницу, на которой вы находитесь, - только с измененным языком.
Ответ 2
Следующий подход работает хорошо для меня:
Я использую файлы 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("/");
}
}
}
Если вы заинтересованы в этом движке, дайте мне знать.
Ответ 3
Вот простое решение, как включить выбор по URL-адресу.
Ответ 4
есть контроллер для управления языками
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");