1

OutputCache를 사용하여 페이지를 빠르게 열려고합니다. Layout.cshtml에서OutputCache가 사이트 언어를 변경하지 못하도록

public class HomeController : Controller 
{ 
[OutputCache(Duration=3600,VaryByParam="none", VaryByCustom="lang")] 
public ActionResult Index() 
{ 
    //........ 
} 

public ActionResult ChangeCulture(string lang, string returnUrl) 
{ 
    Session["Culture"] = new CultureInfo(lang); 
    return Redirect(returnUrl); 
} 
} 

:

<a href="@Url.Action("ChangeCulture", "Home", new { lang = "en", returnUrl = this.Request.RawUrl })">Eng</a> 
<a href="@Url.Action("ChangeCulture", "Home", new { lang = "az", returnUrl = this.Request.RawUrl })">Az</a> 

의 Global.asax에서 :

나는 컨트롤러에 쓴

protected void Application_AcquireRequestState(object sender, EventArgs e) 
{ 
//It's important to check whether session object is ready 
if (HttpContext.Current.Session != null) 
{ 
CultureInfo ci = (CultureInfo)this.Session["Culture"]; 

//Checking first if there is no value in session and set default language this can happen for first user's request 
if (ci == null) 
{ 
//Sets default culture to english invariant 
string langName = "az"; 

//Try to get values from Accept lang HTTP header 
if (HttpContext.Current.Request.UserLanguages != null && 
HttpContext.Current.Request.UserLanguages.Length != 0) 
{ 
//Gets accepted list 
langName = HttpContext.Current.Request.UserLanguages[0].Substring(0, 2); 
} 
ci = new CultureInfo(langName); 
this.Session["Culture"] = ci; 
} 
//Finally setting culture for each request 
Thread.CurrentThread.CurrentUICulture = ci; 
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name); 
} 
} 

public override string GetVaryByCustomString(HttpContext context, string value) 
{ 
if (value.ToLower() == "lang") 
{ 
return Thread.CurrentThread.CurrentUICulture.Name; 
} 
return base.GetVaryByCustomString(context, value); 
} 

하지만 사이트 언어를 변경할 수 없습니다. 예를 들어, 언어를 영어로 변경하면 변경되지만 아제르바이잔 언어를 반환하려는 경우에는 변경되지 않습니다. 내 실수는 무엇입니까? (나쁜 영어 죄송합니다)

+0

어떻게 언어를 구별합니까? 매개 변수? 예를 들어 (/ ko-us/controller/action) 또는 다른 방법이 있습니까? 이 ActionResult ChangeCulture (문자열 랭, 문자열 returnUrl가) { 세션 [ "문화"] 새로운 공공 = : (?) 기본적으로 당신은 내가 홈 컨트롤러에서이 작업을 사용 – Tommy

+0

을 서로 다른 언어를 캐시 할 OutputCache를의 VaryBy 속성을 사용할 필요가 CultureInfo (lang); return 리디렉션 (returnUrl); } 및 보호 공극 Application_AcquireRequestState (객체 송신자있는 EventArgs E)에서의 Global.asax {} 방법. VaryBy (?) 속성 사용에 대한 샘플 링크를 공유하십시오. OutputCache가 언어 리소스를 저장하지 않도록하고 싶습니다. –

+0

링크를 찾았습니다 http://adamyan.blogspot.com/2010/02/aspnet-mvc-2-localization-complete.html –

답변

1

나는 나 자신을 해결 설정 파일에

<globalization culture="auto" uiCulture="auto" /> 

<globalization culture="en" uiCulture="en" /> 

을 변경했습니다. 그런 다음 효과가있었습니다.

관련 문제