Vous pouvez créer un itinéraire qui a la culture construit en elle comme ça ...
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
);
}
Vous pouvez obtenir la culture en ajoutant un paramètre de culture à toutes vos actions comme celle-ci ...
public ActionResult Index(string culture)
{
ViewData["Message"] = "Welcome to ASP.NET MVC! (" + culture + ")";
return View();
}
Vous pouvez également probablement analyser l'URL dans la méthode Application_BeginRequest dans Global.asax et y définir la culture des threads (l'exemple de code ci-dessous montre comment définir la culture, l'analyse que je vous laisse).
Si vous faites cela, vous ne pourrez probablement pas utiliser les méthodes de type RedirectToAction et HTML.ActionLink car ceux-ci ne connaissent rien aux cultures. Bien sûr, vous pouvez toujours écrire le vôtre. L'inconvénient de l'utilisation de l'URL pour stocker la culture est que si vous manquez un lien quelque part sur votre site Web ou que l'utilisateur quitte le site Web, puis revient, vous pourriez perdre la culture des utilisateurs et ils devront le redéfinir (pas la fin du monde, mais ennuyeux.Peut-être un bon côté de l'utilisation de l'URL pour stocker la culture est que Google va indexer toutes les différentes langues
Si vous êtes plus préoccupé par l'expérience utilisateur ou la facilité de développement sur Google indexant les différentes cultures (dépend vraiment du type de site que vous construisez), je suggérerais de stocker la culture dans un cookie ou un état de session
How to localize ASP .Net MVC application?. La réponse acceptée pointe vers un blog post qui montre comment vous pouvez localiser une application ASP.Net.
Si vous stockez la culture que l'utilisateur sélectionne dans un cookie, un état de session ou un paramètre de requête, puis définissez la culture de threads dans la méthode BeginRequest du fichier Global.asax. La localisation est ensuite effectuée à l'aide des assemblys de localisation Microsoft standard.
Le code suivant vous permettra de changer la culture à tout moment en ajoutant simplement culture = ?? à la chaîne de requête (MyPage? culture = es-MX). Il sera ensuite ajouté à un cookie afin que vous n'ayez pas besoin de l'ajouter à la fin de chaque lien de votre système.
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);
}
Il demande pour un moyen d'ajouter de la culture et de la langue dans toutes les routes. –
Je l'ai compris. Ce que j'ai suggéré était un moyen de le faire sans l'ajouter aux routes. L'ajouter aux routes complique inutilement l'application. – Brian
S'il y avait une réponse à ma question, pourriez-vous préciser ce qui pourrait compliquer la situation? – Ropstah