我正在尝试使用Spring框架(WebFlow)访问资源包。 messages.properties文件和相应的messages_ar_AE.properties文件保存在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 Locale,默认情况下将加载正确的资源包,从而解决我的问题。
我需要一种以编程方式更改Spring Framework Locale以设置Locale的方法。我如何以编程方式实现此目的?
感谢。
答案 0 :(得分:1)
达成了问题的解决方案。
继续我的问题,当Spring Framework默认遇到类似"#{resourceBundle['jboss.version.error']}"
的JSTL表达式时,它会在类路径中查找message.properties文件,除非明确定义了资源包。
当尝试获取正确的资源包时,框架会查看它所设置的语言环境。由于我的案例中没有设置Spring Framework的语言环境,因此它没有获取预期的资源包。在可用选项中,我选择了Spring LocaleResolver
我在我的应用程序中修改了现有的JSF Custom ViewHandler,在那里我添加了代码来设置Spring Framework的语言环境。
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的所需语言环境。
可能有比我更好的解决方案。如果有的话,也可以建议他们的解决方案。
感谢。
答案 1 :(得分:0)
您可以按照文档中的here概述的多种方式执行此操作。