2014-07-15 3 views
0

여러 개의 다른 지역 URL을 통해 액세스되는 단일 MVC5 사이트가 있습니다. 내 경우에는 .co.uk (영국), .de (독일) 및 .fr (프랑스).MVC5 최상위 도메인을 기반으로 언어를 설정하는 방법

사이트 콘텐츠는 RESX 파일을 사용하여 지역화되었으며 사용자는 지속성을 위해 쿠키를 통해 언어를 전환 할 수 있으며 HttpModule은 쿠키 (예 : this approach)를 기반으로 asp.net 스레드 로캘을 설정합니다.

사용자가 사이트에 액세스하는 최상위 도메인과 관련된 기본 언어를 원합니다. 예를 들어 사용자가 .de를 사용하는 경우 기본 언어는 de-DE 여야합니다. 사용자가 언어를 변경하여 기본값을 덮어 쓰도록 선택할 수 있지만 기본 언어가 사용자 및 검색 엔진의 최상위 도메인에 적합해야합니다.

MVC5에서 어떻게 구현할 수 있습니까? 지금까지 내가 가진 최선의 방법은 JavaScript를 사용하여 URL을 확인하고 쿠키를 설정하고 페이지를 새로 고치는 것입니다.하지만이 방법이 더 좋고 더 좋은 방법이 있어야한다는 것을 알고 있습니다.

추신 : 내가 운전하고 싶은 최상위 도메인입니다. 지역 라우팅을 사용하지 않습니다. 예 : http://whatever.com/DE 또는 http://whatever.com/EN

PPS : 브라우저 언어 감지 기능을 사용하지 않는 이유는 검색 엔진에 문제가 있기 때문입니다. 즉, 검색 엔진이 사용하는 (또는 검색 엔진에 언어가 없으므로) 기본 사이트 인 .de 사이트가 en-GB에 표시 될 수 있습니다. 그것이 .de 사이트가 서재응을 위해 절대적이지 않은 .co.uk 사이트의 중복으로 취급 될 경우

+1

작동/미래 참조. 그런 다음 자신의 대답을 수락 할 수 있습니다. – Charleh

+0

완료, thanks :) –

답변

2

나는 이것을하는 방법을 알아 냈습니다. 이것이 내가 Global.asax에 페르시아어 cluture을 설정 내 경우

protected void Application_AcquireRequestState(object sender, EventArgs e) 
{ 
    if (Request.Cookies[Constants.LanguageCookieName] == null) 
    { 
     var culture = GetCultureFromHost(); 
     Thread.CurrentThread.CurrentUICulture = culture; 
     Thread.CurrentThread.CurrentCulture = culture; 
    } 
} 

private CultureInfo GetCultureFromHost() 
{ 
    //set default culture of en-GB 
    CultureInfo ci = new CultureInfo("en-GB"); 

    //get top level domain 
    string host = Request.Url.Host.ToLower(); 

    //check for other known domains and set culture accordingly 
    if (host.Contains("whatever.de")) 
    { 
     ci = new CultureInfo("de-DE"); 
    } 

    return ci; 
} 
0

을 Global.asax에 추가하고 다른 사용자 당신은 (자신의 질문에) 대답으로 솔루션을 추가해야 잘

 protected void Application_BeginRequest(object sender, EventArgs e) 
    { 
     var persianCulture = new PersianCulture(); 
     persianCulture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd"; 
     persianCulture.DateTimeFormat.LongDatePattern = "dddd d MMMM yyyy"; 
     persianCulture.DateTimeFormat.AMDesignator = "صبح"; 
     persianCulture.DateTimeFormat.PMDesignator = "عصر"; 
     Thread.CurrentThread.CurrentCulture = persianCulture; 
     Thread.CurrentThread.CurrentUICulture = persianCulture; 


    } 
관련 문제