2011-02-24 4 views
0

Spring 프레임 워크 (WebFlow)를 사용하여 리소스 번들에 액세스하려고합니다. messages.properties 파일과 이에 따른 messages_ar_AE.properties 파일은 Spring Framework가 리소스 번들에 접근하는 곳의 클래스 경로에 보관됩니다.Spring Framework에서 적절한 리소스 번들에 액세스하기

JSTL resourceBundle 속성을 사용하여 xhtml 파일에서 호출 한 코드입니다.

<myCustom:includedInSetValidator set="5.0, 5.0.1, 5.1" 
          validationMessage="#{resourceBundle['jboss.version.error']}" /> 

그러나 상관없이 로케일의, "#{resourceBundle['jboss.version.error']}"는 항상 기본 텍스트, 즉를 가져옵니다; 영어로부터;

일부 포럼에서 배운 것처럼 LocaleChangeInterceptor 또는 다른 미리 정의 된 클래스를 사용하여이 문제를 처리해야한다는 힌트를 얻었습니다. 일단 Spring 로케일이 설정되면, 적절한 자원 번들이 기본적으로로드되어 내 문제를 해결합니다.

로캘을 설정하려면 프로그래밍 방식으로 스프링 프레임 워크 로캘을 변경해야합니다. 이것을 어떻게 프로그램 적으로 달성 할 수 있습니까?

감사합니다.

답변

1

문제가 해결되었습니다.

스프링 프레임 워크에서 "#{resourceBundle['jboss.version.error']}"과 같은 JSTL 표현식을 발견하면 기본적으로 자원 번들이 명시 적으로 정의되어 있지 않으면 클래스 경로에서 message.properties 파일을 찾습니다.

프레임 워크는 적절한 자원 번들을 가져 오려고 시도 할 때 프레임 워크가 설정 한 로케일에서 찾습니다. 필자의 경우 Spring Framework의 로케일이 설정되지 않았으므로 예상되는 리소스 번들을 가져 오지 못했습니다. 사용 가능한 옵션 중에서 Spring LocaleResolver를 선택했습니다.

Spring Framework의 로케일을 설정하는 코드를 추가 한 응용 프로그램에서 기존 JSF Custom ViewHandler를 수정했습니다.

public Locale calculateLocale(FacesContext arg0) { 

HttpServletRequest request = (HttpServletRequest)arg0.getExternalContext().getRequest(); 
     HttpServletResponse response = (HttpServletResponse)arg0.getExternalContext().getResponse(); 

LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request); 

localeResolver.setLocale(request, response, **setYourLocaleHere**); 

} 

이야기는 단지 오류를 슬로우 로케일 결정자에이 방법을 로케일을 설정, 여기에서 끝나지 않는다 :

Cannot change HTTP accept header – use a different locale resolution strategy 

Cannot change HTTP accept header error

이를 극복하기 위해, 하나는

을 포함해야 참조
<bean id="localeResolver" 
     class="org.springframework.web.servlet.i18n.SessionLocaleResolver"> 
     <property name="defaultLocale" value="en" /> 
    </bean> 

(스프링 구성 파일).

이제 Spring Framework의 원하는 로케일이 설정됩니다.

아마도 내가 한 것보다 더 나은 해결책이 될 수 있습니다. 만약 있다면 솔루션을 제안 할 수도 있습니다.

감사합니다.

0

문서에 here의 설명에 따라 여러 가지 방법을 사용할 수 있습니다.

+0

Raghuram, 귀하의 제안에 감사드립니다. 나는 이미이 문서를 읽었지만이 프레임 워크를 처음 접했을 때 구현 방법을 잘 모르고있었습니다. – Abdul

관련 문제