首先! 不要评判我,我使用的MessageSource作为服务的原因。 由于我是在阶段是学习OSGi和春季。
我有一个有很多模块,在他们的页面,因为我正在做国际为它的项目。 我看到,他们使用相同的消息,所以我把代码中的每一个模块使用它的通用模块。 和我分享的消息作为服务OSGi的context.xml中:
<osgi:service ref="messageSource" interface="org.springframework.context.support.ReloadableResourceBundleMessageSource"/>
<osgi:service ref="localeResolver" interface="org.springframework.web.servlet.i18n.CookieLocaleResolver"/>
<osgi:service ref="localeChangeInterceptor" interface="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
并在模块的context.xml豆:
<bean id="messageSource" scope="bundle" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:messages" />
<property name="defaultEncoding" value="UTF-8" />
</bean>
<bean id="localeResolver" scope="bundle"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="defaultLocale" value="et" />
</bean>
<bean id="localeChangeInterceptor" scope="bundle"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang" />
</bean>
使用该服务的模块中:
<osgi:reference id="messageSource" interface="org.springframework.context.support.ReloadableResourceBundleMessageSource"/>
<osgi:reference id="localeResolver" interface="org.springframework.web.servlet.i18n.CookieLocaleResolver"/>
<osgi:reference id="localeChangeInterceptor" interface="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
所以,国际化的工程! 但不完全...问题是当我试图改变区域,这部分工作。 在这里我使用标签消息像JSP页面:
<spring:message code="general.welcome"/>
它不会改变! 但在同一时间,我通过使用控制器到JavaScript变种希望有人能翻译:
//有些page.jsp
<script>
translations = ${translations == null? '{}' : translations};
</script>
由于控制器有线连接到为messageSource:
@Autowired
MessageSource messageSource;
...
//the way that the request is returned by a method
//A map in JSON using messageSource is return
model.addAttribute("translations", someJSONmap);
它的工作!
因此,在控制器的语言环境变化的工作,但在JSP页面事实并非如此。
不要任何人知道我缺少的是什么? 或如何解决呢?
感谢您阅读到这里和遗憾的长期问题。