2011-02-24 55 views
0

我想使用Spring框架(WebFlow)访问资源包。 messages.properties文件和相应的messages_ar_AE.properties文件保存在Spring Framework访问资源包的类路径中。在Spring框架中访问适当的资源包

使用JSTL resourceBundle属性从xhtml文件调用的代码。

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

但无论语言环境中,"#{resourceBundle['jboss.version.error']}"总是取默认的文本,即;来自英文;

正如我从一些论坛了解到的,我得到了一个暗示,我需要使用LocaleChangeInterceptor或其他预定义的类来处理这个问题。一旦设置了Spring Locale,默认情况下会加载正确的资源包,从而解决我的问题。

我需要一种方法来以编程方式更改Spring框架区域设置来设置区域设置。我如何实现这个编程?

谢谢。

回答

1

达到了该问题的解决方案。

继续我的问题,当Spring Framework默认遇到类似"#{resourceBundle['jboss.version.error']}"的JSTL表达式时,它会在类路径中查找message.properties文件,除非显式定义了资源包。

当试图获取适当的资源包时,框架将查看它所设置的语言环境。由于Spring框架的语言环境并未在我的情况下设置,因此它不会提取我预期的资源包。我选择了Spring LocaleResolver中的可用选项

我在我的应用程序中修改了现有的JSF Custom ViewHandler,其中添加了用于设置Spring框架的代码。

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配置文件中。

现在设置了Spring Framework所需的语言环境。

有可能比我做的更好的解决方案。人们也可以建议他们的解决方案。

谢谢。

0

您可以按照文档中概述的here所示的多种方式执行此操作。

+0

Raghuram,谢谢你的建议。我已经阅读了文档,但不太清楚如何实现它,因为我是这个框架的新手。 – Abdul 2011-03-01 10:46:50