私はMVCの文化の変化に関係する好奇心があります。私は2つの方法で試しましたが、明らかにどこかで間違っていました。リンクに基づいて文化を変えるMVC4
私が持っている私のWeb.configファイルで:
<globalization uiCulture="auto" culture="auto" />
これは私がスレッドの文化を変更しようとした方法である:
<li>@Html.ActionLink("Eng", "ChangeCulture", "Home", new { lang="en-US"}, new { @class = "languageSelectorEnglish" })</li>
まず方法
私は、次のコントローラを持っています:
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());
}
私は間違っ
第二の方法
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());
}
?ありがとうございました。
あなたが直面している問題は何ですか? – ssilas777
スレッドの現在の文化を変更しても文化は変わりたくありませんでした。私はクッキーを設定せずにそれを行う方法を見つけるので、私はすぐに私の答えを投稿します。 – Kosmog