Spring MVC i18n无法正常工作

时间:2014-04-22 12:58:20

标签: java spring spring-mvc internationalization

我无法在我的项目中实现国际化 我已经尝试了几个stackoverflow解决方案和在线教程但没有成功。 无法找到我想要获取的消息密钥,并且无法切换locale / lang。

这是我的servlet-context.xml的i18n部分:

<beans:bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
  <beans:property name="basename" value="classpath:messages" />
  <beans:property name="defaultEncoding" value="UTF-8"/>
</beans:bean>

<beans:bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
  <beans:property name="paramName" value="lang" />
</beans:bean>
<beans:bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    <beans:property name="defaultLocale" value="en"/>
</beans:bean>

 <beans:bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" >  
    <beans:property name="interceptors">  
        <beans:ref bean="localeChangeInterceptor"/>  
    </beans:property>  
</beans:bean>

handlerMapping被标记为已弃用。

这是我获取消息的jsp的一部分(spring namspace:http://www.springframework.org/tags):

<spring:message code="btn.ok"/>

我的消息属性文件位于src / main / resources

它是使用Spring Tool Suite创建的Spring Maven项目。

有谁知道问题出在哪里以及如何添加其他名称而不是messages_en,例如labels_en.properties等等??

看起来我无法在spring中定义:message标签要选择哪一个(标签或消息)。

编辑:
这是我得到的例外:

SEVERE: Servlet.service() for servlet [appServlet] in context with path [/myapp] threw exception [javax.servlet.ServletException: javax.servlet.jsp.JspTagException: No message found under code 'btn.ok' for locale 'en'.] with root cause
at org.springframework.web.servlet.tags.MessageTag.doStartTagInternal(MessageTag.java:184)...

EDIT2:
如果我想将我的属性键分成多个文件,一个用于标签的消息,那该怎么办? 像(捆绑attr不存在)

之类的东西
<spring:message bundle="messages" code="btn.ok"> and <spring:message bundle="labels" code="lbl.ok">

在同一视图中/ jsp。

EDIT3:
我终于搞定了:

<bean id="messageSource"
    class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="messages" />
    <property name="defaultEncoding" value="ISO-8859-2"/>
</bean>

<mvc:interceptors>
    <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
      <property name="paramName" value="lang" />
    </bean>
</mvc:interceptors>

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    <property name="defaultLocale" value="en"/>
</bean>

3 个答案:

答案 0 :(得分:1)

你确定你有&#34; btn.ok&#34;消息属性中的消息?

  

有谁知道问题出在哪里以及如何添加其他问题   名称与messages_en不同的属性,例如   labels_en.properties等......?

您应该更改您的basename属性。 E.g:

<beans:property name="basename" value="classpath:labels" />

答案 1 :(得分:0)

对于第二个问题,您可以使用basenames属性。

看起来像这样:

<beans:bean id="messageSource"
  class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
  <beans:property name="basenames">
    <beans:list>
      <beans:value>classpath:messages</beans:value>
      <beans:value>classpath:labels</beans:value>
    </beans:list>
  </beans:property>
</beans:bean>

答案 2 :(得分:0)

您必须设置jvm init参数

-Duser.language = pt_BR -Duser.region = BR

https://docs.oracle.com/cd/E23095_01/Platform.93/ATGProgGuide/html/s1809settingthejavavirtualmachineloca01.html