我正在尝试为我的Java Web应用程序进行本地化,但是我收到了一个错误。我正在使用Maven进行依赖,我正在使用Google应用引擎(Jetty Web服务器)。该应用程序使用spring框架。以下是我到目前为止的情况:
项目结构:
messages_en_US.properties
label.firstname=First Name
label.lastname=Last Name
的index.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="t" tagdir="/WEB-INF/tags"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<t:genericpage>
<jsp:attribute name="title">
Welcome
</jsp:attribute>
<jsp:body>
<script type="text/javascript" src="../static/js/index.js"></script>
<div class="flex_container_column">
<spring:message code="label.firstname" />
<br>
<spring:message code="label.lastname" />
<br>
</div>
</jsp:body>
</t:genericpage>
弹簧MVC-servlet.xml中
<mvc:resources mapping="/static/**" location="/static/" />
<mvc:annotation-driven />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- Resource bundle message: Start -->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="messages" />
<property name="defaultEncoding" value="UTF-8" />
</bean>
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang" />
</bean>
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="defaultLocale" value="en" />
</bean>
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<ref bean="localeChangeInterceptor" />
</property>
</bean>
<!-- Resource bundle message: End -->
错误
WARNING: Nested in javax.servlet.ServletException: javax.servlet.jsp.JspException: javax.servlet.jsp.JspTagException: No message found under code 'label.firstname' for locale 'en_US'.:
javax.servlet.jsp.JspTagException: No message found under code 'label.firstname' for locale 'en_US'.
at org.springframework.web.servlet.tags.MessageTag.doEndTag(MessageTag.java:200)
at org.apache.jsp.index_jsp._jspx_meth_spring_005fmessage_005f0(index_jsp.java:110)
at org.apache.jsp.index_jsp.access$0(index_jsp.java:97)
at org.apache.jsp.index_jsp$Helper.invoke1(index_jsp.java:176)
at org.apache.jsp.index_jsp$Helper.invoke(index_jsp.java:205)
的pom.xml
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
我尝试了一些事情:
/WEB-INF
但我更改了<property name="basename" value="/WEB-INF/messages" />
时收到了同样的错误。但根据我的理解,如果我这样做,那么我可能无法在代码中访问它。这就是我最初把它放入资源的原因。感谢您关于在何处以及如何设置项目属性文件+ text.properties的帮助。
答案 0 :(得分:0)
我最终将messages.properties
放在/WebContent/WEB-INF/messages/messages.properties
中,而我收到错误的原因是因为我定义了2个上下文:
我将配置放在spring-mvc-servlet.xml
,这不是正确的地方。相反,它应该在applicationContext.xml
(父上下文)中。我解决了这个问题,但后来遇到了另一个问题,LocaleChangeInterceptor
没有拦截,所以语言无法改变!但问题已解决。