使用OSGi作为服务变更区域不能正常工作JSP春季国际(JSP Spring internation

2019-10-29 01:56发布

首先! 不要评判我,我使用的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页面事实并非如此。

不要任何人知道我缺少的是什么? 或如何解决呢?

感谢您阅读到这里和遗憾的长期问题。

Answer 1:

问题解决了通过删除服务:

模块的context.xml:

<bean id="localeChangeInterceptor" scope="bundle"
      class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
    <property name="paramName" value="lang" />
</bean>

OSGi的context.xml中:

<osgi:service ref="localeChangeInterceptor" interface="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>

并把它放入模块,使用该服务,applicationContext.xml中:

<mvc:interceptors>
    ...
    <bean id="localeChangeInterceptor"
      class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <property name="paramName" value="lang" />
    </bean>
</mvc:interceptors>


文章来源: JSP Spring internationalization using OSGi as service changing locale not working properly