簡體   English   中英

使用OSGi作為服務更改語言環境的JSP Spring國際化無法正常工作

[英]JSP Spring internationalization using OSGi as service changing locale not working properly

首先! 不要判斷我將MessageSource用作服務的原因。 由於我處於學習OSGi和Spring的階段。

因為我正在對其進行國際化,所以我的項目中的頁面中包含許多模塊。 我看到他們使用相同的消息,因此我將代碼放在每個模塊都使用的通用模塊中。 我將消息共享為服務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"/>

並在module-context.xml中添加bean:

<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"/>

它不會改變! 但與此同時,我使用Controller將一些翻譯傳遞給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頁面中卻不能。

有人知道我在想什么嗎? 或如何解決?

感謝您閱讀到這里為止,並很抱歉提出這個問題。

通過刪除服務解決了該問題:

module-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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM