zoukankan      html  css  js  c++  java
  • Spring MVC国际化配置

    Spring MVC国际化配置

    前言

    项目开发中要考虑支持国际化,框架选用的是Spring MVC框架,那么问题来了Spring MVC如何配置并实现国际化。
    

    实现过程(Maven项目)

    对于Spring MVC的国际化这里我是基于session来实现的,具体实现过程如下:

    1、首先我们需要在XML配置文件中进行如下配置:

    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <!-- 国际化信息所在的文件名 -->                     
    <property name="basename" value="language.messages" />   
    <!-- 如果在国际化资源文件中找不到对应代码的信息,就用这个代码作为名称  -->               
    <property name="useCodeAsDefaultMessage" value="true" />           
    </bean>
    

    这里核心的配置是配置资源文件路径"language.messages".

    2. 基于session或cookies的要进行拦截配置,具体实现过程如下:

    <mvc:interceptors>  
    <!-- 国际化操作拦截器 如果采用基于(请求/Session/Cookie)则必需配置 --> 
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />  
    </mvc:interceptors>  
    <!--local解析器-->
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
    

    3、编写Controller代码用于切换语言。

    @RequestMapping("/language")
    @ResponseBody
    public String lang(HttpServletRequest request){
        String langType = request.getParameter("languageType");
            if(langType.equals("zh")){
                Locale locale = new Locale("zh", "CN"); 
                request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale); 
            }
            else if(langType.equals("en")){
                Locale locale = new Locale("en", "US"); 
                request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale);
            }
            else 
                request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,LocaleContextHolder.getLocale());
            return null;
    }
    

    能够知道的是,通过前端传递的语言类型,设置相应的语言环境Locale,之后Spring MVC内部根据Locale动态的选择去加载指定语言的.porperties文件,前端通过特定的表达式进行调用显示。

    3.准备语言文件,这里举例中文、English: messages_en.properties 和 messages_zh.properties

    里面的内容已键值对的形式存储了前端界面需要的信息(各种语言),简单的看下英文文件里面的内容。

    ms.sysName=Manager System
    ms.copyRight=CopyRight@2019 MrZhangxd
    ms.languageEN=English
    ms.languageZH=Chinese
    

    4.前端界面调用

    项目使用的是Velocity模板引擎构建页面,在.vm文件中的调用方式为如下形式:

    #springMessage("ms.copyRight")
  • 相关阅读:
    axios实现跨域及突破host和referer的限制
    视频测试URL地址
    微信小程序 自定义导航栏 自动获取高度 写法
    解决flex布局宽度超出时,子元素被压缩的问题
    子组件向父组件通信与父组件向子组件通信
    时间截止器
    arguments
    改变this指向&闭包特性
    ES6扩展——箭头函数
    ES6扩展——函数扩展之剩余函数
  • 原文地址:https://www.cnblogs.com/MrZhangxd/p/11376740.html
Copyright © 2011-2022 走看看