Ändern Sie die Kultur basierend auf einem Link MVC4
Ich habe eine Neugierde in Bezug auf Kulturwandel in MVC. Ich habe es auf zwei Arten versucht, aber anscheinend habe ich mich irgendwo geirrt.
In meiner Web.config habe ich:
<globalization uiCulture="auto" culture="auto" />
So habe ich versucht, die Threadkultur zu ändern:
<li>@Html.ActionLink("Eng", "ChangeCulture", "Home", new { lang="en-US"}, new { @class = "languageSelectorEnglish" })</li>
Erste Methode
Ich habe folgenden Controller:
public void ChangeCulture(string lang)
{
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(lang);
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang);
Response.Cookies.Remove("Language");
var langCookie = new HttpCookie("Language");
langCookie["Language"] = lang;
langCookie.Value = lang;
langCookie.Expires = System.DateTime.Now.AddDays(21);
Response.Cookies.Add(langCookie);
Response.Redirect(Request.UrlReferrer.ToString());
}
Zweite Methode
public ActionResult ChangeCulture(string lang)
{
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(lang);
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang);
// Split the url to url + query string
var fullUrl= Request.UrlReferrer.ToString();
var questionMarkIndex = fullUrl.IndexOf('?');
string queryString = null;
string url = fullUrl;
if (questionMarkIndex != -1) // There is a QueryString
{
url = fullUrl.Substring(0, questionMarkIndex);
queryString = fullUrl.Substring(questionMarkIndex + 1);
}
// Arranges
var request = new HttpRequest(null, url, queryString);
var response = new HttpResponse(new StringWriter());
var httpContext = new HttpContext(request, response);
var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext));
// Extract the data
var values = routeData.Values;
var controllerName = values["controller"];
var actionName = values["action"];
var areaName = values["area"];
return RedirectToAction(actionName.ToString());
}
Wo irre ich mich Vielen Dank.