我无法在我的项目中实现国际化 我已经尝试了几个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>
答案 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