4

사이트를 다국어로 만들고 싶습니다. Struts2에서 i18n 인터셉터 사용

나는

<interceptor-ref name="i18n" /> 

변경 로케일에 대한 일반적인 JSP가 포함 된 일반 인터셉터 스택이 : 위의 시나리오에서

<s:a action="locale-manager" namespace="/common"> 
    <s:param name="request_locale">fa_IR</s:param> 
    فارسی 
</s:a> 

<s:a action="locale-manager" namespace="/common"> 
    <s:param name="request_locale">en_US</s:param> 
    English 
</s:a> 

그리고 간단한 LocaleManager 액션

public class LocaleManager extends ActionSupport{ 
    private static final Logger log = LoggerFactory.getLogger(LocaleManager.class); 

    public String execute() { 
     log.debug("Change the local to {}", getLocale()); 
     return "homepage"; 
    } 

} 

을 i18n 인터셉터는 항상 모든 작업에 대해 실행됩니다. 로켈은 사용자가 로켈 관리자 작업을 클릭 할 때만 변경되기 때문에

나는 인터셉터 스택을 제거하고

@InterceptorRefs({ @InterceptorRef("i18n") }) 
public class LocaleManager extends ActionSupport{ 
    ......... 

다음과 같이 만 LocaleManager에 국제화 인터셉터를 추가하려고하지만 그것은 작동하지 않았다?! 나는 뭔가를 놓치고 있습니까, 아니면 제 자신의 인터셉터를 써야합니까?

+0

당신이 뭘 하려는지? 로켈을 변경하려면 변경 작업이 필요하지 않습니다. –

답변

4

모든 액션에 대해 항상 I18nInterceptor 인터셉터를 실행하십시오 ... struts-default.xml에 구성된 defaultStack의 일부이므로 여기에는 이유가 있습니다.

간단한 방법으로 작동합니다. request_locale이라는 요청 매개 변수가 있으면 새 로캘을 세션으로 설정합니다. 이 값은 getText() 또는 이와 유사한 함수를 호출하여 현지화 된 번들에서 적절한 메시지를 가져올 때 읽혀집니다. the official documentation 가입일

:

현재 작업 요청 로케일로 세션 지정된 로케일 설정 처리 인터셉터. 또한이 인터셉터는 특정 HTTP 요청 매개 변수를 찾고 어떤 값으로 로케일을 으로 설정합니다. 즉,이 인터셉터를 사용하여 응용 프로그램이 동적으로 사용자 세션의 로케일을 변경하거나 (XWork 2.1.3 이후)에만 동적으로 변경할 수 있습니다. 이는 다국어 지원이 필요한 응용 프로그램에 매우 유용하며 사용자가 의 언어 환경 설정을 언제든지 설정할 수 있도록하려는 것입니다. 이 인터셉터를 실행하는 동안 로케일 매개 변수가 제거되어 작업에서 작업의 일반적인 해당 설정자가없는 작업 (예 : request_locale)에 속성이 설정되지 않도록합니다. 기본 매개 변수 이름, foo.action을? request_locale에 요청을 사용하여 예를 들어

= ko 페이지은, 다음 영어 (미국) 로케일은 사용자의 세션에 저장 이며, 향후 모든 요청에 ​​사용됩니다.

로케일 세트가없는 경우 (예 : 첫 번째 방문시) 인터셉터는 브라우저 로켈을 사용합니다.


일부 사용 예 :