2011-01-20 7 views
0

영어와 포르투갈어 지원이있는이 웹 사이트가 있습니다. localhost에서 모든 것이 잘 작동하고 내용은 "lang"이라는 쿼리 문자열 매개 변수를 기반으로 변환됩니다.로컬 리 제이션은 로컬 호스트에서 작동하지만 프로덕션 환경에서는 작동하지 않습니다.

이 코드 덩어리는 모든 페이지에 트릭을 만드는 :이 방법은 두 경우 모두 (생산 및 로컬 호스트)에서 호출되는 것을 확실히 말할 수있는 로거

protected override void InitializeCulture() 
{ 
    SetCulture(); 
} 

private void SetCulture() 
{ 
    var logger = Util.GetLogger(); 

    string lang = Request.QueryString["lang"]; 
    if (string.IsNullOrEmpty(lang)) { lang = "pt-br"; } 

    string sessionLang = (string)Session["lang"]; 


    if (sessionLang != lang) 
    { 
     Session["lang"] = lang; 
    } 

    logger.Log(string.Format("Culture {0} found",lang)); 

    UICulture = lang; 
    Culture = lang; 

    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang); 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang); 

    logger.Log(string.Format("Cultura {0} set", lang)); 

    base.InitializeCulture(); 
} 

감사합니다.

두 개의 리소스 파일이 App_GlobalResources 폴더에 있습니다. -WebSitemapGlobal.en-us.resx; -WebSitemapGlobal.resx;

단서가 있습니까?

미리 감사드립니다.

답변

0

.NET에서 현지화에 대해 혼란스러워하는 경우가 있습니다. WebSiteMapGlobal.resx는 포르투갈어 (브라질)에있는 경우 문화가 아마 중립

때문에

먼저, 문제가 언어를 설정 한 후 base.InitializeCulture()를 호출하기 때문이다, 문화 pt-br을 지정할 필요가 없습니다. 또한 페이지 실행에 대한 약간의 로그를 게시해야합니다.

또한 소프트웨어 엔지니어링 팁 : SetCulture() 이후에 InitializeCulture()에서 base.InitializeCulture()으로 전화해야합니다. 결과는 동일합니다 (어쨌든 호출을 제거하도록 요청했습니다). 그러나 오버라이드에서 기본 메서드를 호출하는 것이 좋습니다.

관련 문제