Ответ 1
Вы можете создать маршрут, в который встроена культура, подобная этому...
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{culture}/{controller}/{action}/{id}", // URL with parameters
new { culture="en-US", controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
Вы можете получить культуру, добавив параметр культуры ко всем вашим действиям, подобным этому...
public ActionResult Index(string culture)
{
ViewData["Message"] = "Welcome to ASP.NET MVC! (" + culture + ")";
return View();
}
Вы также можете проанализировать URL-адрес в методе Application_BeginRequest в Global.asax и установить там культуру потоков (пример кода ниже показывает, как установить культуру, синтаксический разбор, который я вам предоставляю).
Если вы это сделаете, вы, вероятно, не сможете использовать методы RedirectToAction и HTML.ActionLink, поскольку они ничего не знают о культурах. Конечно, вы всегда можете написать свой собственный.
Недостатком использования URL-адреса для хранения культуры является то, что если вы пропустите ссылку где-нибудь на своем веб-сайте или пользователь покинет веб-сайт, а затем вернется, вы можете потерять культуру пользователей, и им придется снова установить ее ( а не конец света, но раздражает. Возможно, хорошая сторона использования URL-адреса для хранения культуры заключается в том, что Google будет индексировать все разные языки.
Если вас больше волнует пользовательский опыт или простота разработки, поскольку Google индексирует разные культуры (действительно зависит от того, какой сайт вы строите), я бы предложил сохранить культуру в состоянии cookie или сеанса.
Проверьте Как локализовать приложение ASP.Net MVC?. Принятый ответ указывает на сообщение , в котором показано, как вы можете локализовать приложение ASP.Net.
Если вы сохраняете культуру, которую пользователь выбирает в файле cookie, состоянии сеанса или параметре запроса, а затем задайте культуру потоков в методе BeginRequest в файле Global.asax. Затем локализация выполняется с использованием стандартных локализаций Microsoft.
Следующий код позволит вам изменить культуру в любое время, просто добавив культуру =?? к строке запроса (MyPage? culture = es-MX). Затем он будет добавлен в файл cookie, так что вам не нужно добавлять его в конец каждой ссылки в вашей системе.
protected void Application_BeginRequest()
{
var culture = Request["culture"] ?? Request.Cookies["culture"]?.Name;
if (culture == null) culture = "en-US";
var ci = CultureInfo.GetCultureInfo(culture);
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
var cookie = new HttpCookie("culture", ci.Name);
Response.Cookies.Add(cookie);
}