2014-01-16 2 views
1

특정 규칙에 따라 현재 언어를 설정해야합니다. 결정을 내릴 때 현재 페이지와 현재 사용자에 대한 액세스 권한이 필요합니다. 설명서 및 it said을 통해 PageBase에서 InitializeCulture 메서드를 사용했습니다. 내 프로젝트 MVC를 WebForms 아닌 MVC InitializeCulture 무엇입니까 사용 무엇입니까?사용자 지정 언어 처리 EPiServer

답변

4

IAuthorizationFilter를 구현하고 OnAuthorization에서 검사를 수행 할 수 있습니다. IActionFilter에서도이를 수행 할 수 있지만 OnAuthorization은 일찍 호출됩니다. 현재 HttpContext에 대한 액세스 권한을 가지며 거기에서 현재 페이지 데이터를 가져올 수 있습니다.

public class LanguageSelectionFilter : IAuthorizationFilter 
{ 
    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     // access to HttpContext 
     var httpContext = filterContext.HttpContext; 

     // the request's current page 
     var currentPage = filterContext.RequestContext.GetRoutedData<PageData>(); 

     // TODO: decide which language to use and set them like below 
     ContentLanguage.Instance.SetCulture("en"); 
     UserInterfaceLanguage.Instance.SetCulture("en"); 
    } 
} 

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     // register the filter in your FilterConfig file. 
     filters.Add(new LanguageSelectionFilter()); 
    } 
} 
+1

고맙습니다! 이것은 내가 한 것 같이 보인다. 우리는 EPiServer에서 일반적인 폴백 (fallback) 동작을 없앨 수 있었고 문제는 EPiServer의 버그 때문이었습니다. 내가 프랑스어 페이지에 있었고 다음과 같은 @ Url.PageUrl (page.LinkURL)과 같이 내보기에서 스웨덴어 페이지에 대한 호출이 있었다면. 페이지가 스웨덴어 일지라도 "LinkURL"은 실제로 "epslanguage = fr"을 포함합니다. 나는 URL을 위해 내 자신의 HtmlHelper를 사용하여 그것을 해결했다 : https://gist.github.com/anonymous/8565072 – Andreas

+0

감사하다는 것을 알아 두는 것이 좋다! – aolde

관련 문제