Проблема с i18n и пространством имен Spring 3 mvc
Я не выяснил, как получить сообщения, разрешенные при использовании mvc пространства имен Spring.
Например, JSP с этой строкой:
<fmt:message key="welcome.title"/>
шоу:
???welcome.title???
У меня есть каталог сообщений в соответствии с СЕТЬЮ-INF с messages.properties.
Вот web-servlet.xml (мой сервлет диспетчера называют сетью). Любая справка очень ценится.
<!-- Scans for @Controllers to deploy as beans -->
<context:component-scan base-package="com.mylittlecompany.web.controllers" />
<!-- Enable annotation driven controllers, validation etc... -->
<mvc:annotation-driven />
<!-- Configures Handler Interceptors -->
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />
</mvc:interceptors>
<!-- Application Message Bundle -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="/WEB-INF/messages/messages" />
<property name="cacheSeconds" value="1" />
</bean>
<!-- Saves a locale change using a cookie -->
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />
<!-- Resolves view names to protected .jsp resources within the /WEB-INF/views directory -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
Только соответствующая запись файла журнала:
DEBUG Thread-1 org.springframework.web.context.support.XmlWebApplicationContext - Using MessageSource [org.springframework.context.support.ReloadableResourceBundleMessageSource: basenames=[/WEB-INF/messages/messages]]
ResourceBundle теперь ищет ваши файлы в несуществующем пакете "/ WEB-INF / messages".
Попробуйте поместить свой каталог «messages» в WEB-INF / classes и заменить bean-компонент messageSource на:
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="messages/messages" />
<property name="cacheSeconds" value="1" />
</bean>
Поместите следующий код в applicationContext.xml
<beans:bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<beans:property name="basenames">
<beans:list>
<beans:value>messages</beans:value>
</beans:list>
</beans:property>
</beans:bean>
Поместите свои messages.properties в WEB-INF / classes
И в своем jsp вы можете ссылаться на такие сообщения, как
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<input name="reset" type="reset" value='<spring:message code="button.reset"/>' onclick="setLoginFocus()" />
И ваши сообщения .properties
button.reset=ResetFields
На самом деле проблема в том, что WEB-INF НЕ находится в пути к классам, поэтому ваши messages.properties не обрабатываются.
Поместите его в WEB-INF / classes или WEB-INF / lib (хотя это не лучшее место для размещения файлов .properties).
Я бы посоветовал вам поместить его в: -
src / main / resources / OR (src / main / resources / META-INF)
EDIT
<property name="basename" value="messages/messages" />
Недавно я завершил проект Spring 3 с обширной локализацией и использовал тег spring: message вместо fmt: message. Вы можете попробовать spring: message, чтобы увидеть, изменится ли поведение. Он должен найти ваш источник сообщения и разрешить ключ сообщения по текущему языку.