简体   繁体   English

国际化问题

[英]Internationalization issues

Hi all i am working on internationalization using spring mcv. 大家好,我正在使用Spring MCV进行国际化。 But i am not able to perform language change. 但是我无法执行语言更改。 please help in that. 请帮助。 here is my servlet.xml 这是我的servlet.xml

<bean id="messageSource"
    class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="classpath:messages" />
    <!-- <property name="defaultEncoding" value="UTF-8" /> -->
</bean>


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

<bean id="localeResolver"
    class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
    <property name="defaultLocale" value="en" />
</bean>

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" >
    <property name="interceptors">
       <list>
        <ref bean="localeChangeInterceptor" />
       </list>
    </property>
</bean>

and this is my file directory structure : 这是我的文件目录结构: 在此处输入图片说明

and this is language selection menu : 这是语言选择菜单:

 <span style="float: right"> <a href="?language=en">en</a> | <a href="?language=ge">ge</a> | <a href="?language=it">it</a> </span> 

please help me to solve the language selection issues why its not working to me ? 请帮助我解决语言选择问题,为什么对我不起作用? please provide the suggestion. 请提供建议。

New edited Servlet.xml 新编辑的Servlet.xml

--> - >

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

<bean id="localeResolver"
    class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
    <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>

Couple of things, 几件事,

Please use ReloadableResourceBundleMessageSource instead of ResourceBundleMessageSource 请使用ReloadableResourceBundleMessageSource而不是ResourceBundleMessageSource

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource "> 
   <property name="basename" value="/WEB-INF/messages"></property>
</bean>

then you have to move your resource bundle files from current src/main/resources to your WEB-INF. 那么您必须将资源包文件从当前src / main / resources移至WEB-INF。

Also add relevant bundles as per your requirements like, 还可以根据您的要求添加相关的捆绑包,例如,

messages_en, messages_gt, messages_it in your WEB-INF. 您的WEB-INF中的messages_en,messages_gt,messages_it。

EDIT : 编辑:

Also I suspect that you need following, 另外我怀疑您需要关注,

<bean id="handlerMapping"
        class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="interceptors">
            <ref bean="localeChangeInterceptor" />
        </property>
    </bean>

Instead of, 代替,

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" >
    <property name="interceptors">
       <list>
        <ref bean="localeChangeInterceptor" />
       </list>
    </property>
</bean>

This is because while changing the language you are not invoking any Controller mapping. 这是因为在更改语言时,您不会调用任何Controller映射。 Hence it is not getting intercepted by the interceptor and your language is not getting changed. 因此,它不会被拦截器拦截,您的语言也不会改变。

Register the SessionLocaleResolver 注册SessionLocaleResolver

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
        <property name="defaultLocale" value="en" />
    </bean>

Register " LocaleChangeInterceptor " interceptor, and invoke it to the handler mappings that need to support those languages 注册“ LocaleChangeInterceptor ”拦截器,然后将其调用到需要支持这些语言的处理程序映射中

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

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" >
        <property name="interceptors">
            <list>
                <ref bean="localeChangeInterceptor" />
            </list>
        </property>
    </bean>

And (this is what you're missing) 并且(这就是您所缺少的)

<!-- Register the messages_.properties -->
    <bean id="messageSource"
              class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="messages" /><!-- value="messages" as the prefix is messages_.properties -->
    </bean>

Also it's not magically translating any texts on the page you'll still need to reference the text in the .properties files, as they're the ones that will be translated: 同样,它并不是神奇地翻译页面上的任何文本,您仍然需要引用.properties文件中的文本,因为它们将被翻译:

For eg : 例如:

messages_en.properties contains : messages_en.properties包含:

messages.text = My name

messages_ge.properties contains messages_ge.properties包含

messages.text = Ich heise

Then you output this text on the target page 然后在目标页面上输出此文本

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
 ...
 ...
  <h3> your message : <spring:message code="messages.text" text="default text" /> </h3>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM