zoukankan      html  css  js  c++  java
  • springmvc学习指南 之---第24篇 国际化问题

    writedby 张艳涛,今天一天就搞了一个这个问题,主要是下路,遇到springmvc-config.web的配置和拦截器的使用问题,

    看了几天的spring发现都没讲拦截器,之前看了两天springmvc的源码,现在感觉不要看源码了,还是看spring的使用,

    spring的拦截器都不会用,这可就不应该了,看来还是要买书学习springmvc.不能在看源码了,如何使用都不知道看源码有啥用?

    如果前端是vue,那么国际化问题相当简单,引入包,使用$t('预定义变量名') 就可以了, 真是看两分钟就能解决了,但是使用spring+jsp 或者是themleaf等后端传值的实现就非常费劲

    那么现在有一个非常常见简单的需求,

    点击English就设置语言为英文,如果点击Chinese,页面就显示的为中文

    基本方法就是点击按钮给url中传参数locale=zh_CN 

    http://localhost:8080/SpringMVC_war_exploded/welcome.htm?locale=zh_CN  ==>对应中文

    http://localhost:8080/SpringMVC_war_exploded/welcome.htm?language=en  ===>对应英文

    使用一个 LocaleChangeInterceptor拦截器,这个拦截器就是看你的locale=zh_CN 或language=en 如果你有这个参数就会被拦截器拦截下来,然后调用 localeResolver 解析器的  resolveLocale方法

    接着在跳转到jsp页面的时候.,locale已经变成了自己设定的 中国,或法国

    那么这个主要是记录一下,web.xml的配置文件

    mvc-dispatcher-servlet.xml

    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    
        <bean id="localeResolver"
            class="resolver.MyResolver">
    <!--        <property name="defaultLocale" value="en" />-->
        </bean>
    
        <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>
        
        <!-- Register the bean -->
        <bean class="com.mkyong.common.controller.WelcomeController" />
    
        <!-- Register the welcome.properties -->
        <bean id="messageSource"
            class="org.springframework.context.support.ResourceBundleMessageSource">
            <property name="basename" value="welcome" />
        </bean>
    
        <bean id="viewResolver"
            class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
            <property name="prefix">
                <value>/WEB-INF/pages/</value>
            </property>
            <property name="suffix">
                <value>.jsp</value>
            </property>
        </bean>
    
    </beans>

    这里着重说一下,自定义locale解析器

    package resolver;
    
    import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.Locale;
    
    public class MyResolver extends AcceptHeaderLocaleResolver {
        @Override
        public Locale resolveLocale(HttpServletRequest request) {
            return super.resolveLocale(request);
        }
    
        @Override
        public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
    
        }
    }

    这里要说的自定义解析器,如果继承 AcceptHeaderLocaleResolver 不能调用父类的setLocale方法,否则报异常

    可以直接继承 LocaleResolver,可是其实都没必要,直接使用spring给的cookie 和session就非常好,根本不用其他设置就直接实现

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

    还有

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

    项目的具体可以参考:https://mkyong.com/spring-mvc/spring-mvc-internationalization-example/

  • 相关阅读:
    python-进阶-优雅的python写法
    springMVC3学习(十一)--文件上传CommonsMultipartFile
    springMVC3学习(十)--注解式控制器
    CSS3/jQuery自定义弹出窗口
    window.open()详解及浏览器兼容性问题
    空格&nbsp在不同浏览器中显示距离不一致问题解决方法
    jQuery拖动调整表格列宽度-resizableColumns
    jQuery表格排序组件-tablesorter
    springMVC3学习(九)--redirect和forward跳转
    springMVC3学习(八)--全局的异常处理
  • 原文地址:https://www.cnblogs.com/zytcomeon/p/15072176.html
Copyright © 2011-2022 走看看