【问题标题】:Spring MVC i18n not workingSpring MVC i18n 不工作
【发布时间】:2014-04-22 12:58:19
【问题描述】:

我无法在我的项目中运行国际化。
我尝试了几种 stackoverflow 解决方案和在线教程,但均未成功。 我要获取的message-key找不到,无法切换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:
如果我想将我的属性键拆分为多个文件,一个用于消息,一个用于标签..?
类似(bundle 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>

【问题讨论】:

  • 您遇到的错误是什么

标签: java spring spring-mvc internationalization


【解决方案1】:

您确定您的消息属性中有“btn.ok”消息吗?

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

您应该更改您的 basename 属性。例如:

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

【讨论】:

  • btn.ok 在属性文件中/消息和标签呢
【解决方案2】:

对于第二个问题,您可以使用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>

【讨论】:

    【解决方案3】:

    你必须设置 jvm 初始化参数

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 2012-05-06
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多