博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC 之 国际化
阅读量:5894 次
发布时间:2019-06-19

本文共 9179 字,大约阅读时间需要 30 分钟。

hot3.png

Spring在做格式化展示的时候已经做了国际化处理,那么如何将我们网站的其它内容(如菜单、标题等)做国际化处理呢?这就是本篇要将的内容—>国际化。

一.基于浏览器请求的国际化实现:

首先配置我们项目的springservlet-config.xml文件添加的内容如下:

    
                         
       
                   
           

在com.demo.web.controllers包中添加GlobalController.java内容如下:

package com.demo.web.controllers;import java.util.Date;import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.servlet.support.RequestContext;import com.demo.web.models.FormatModel;@Controller@RequestMapping(value = "/global")public class GlobalController {        @RequestMapping(value="/test", method = {RequestMethod.GET})    public String test(HttpServletRequest request,Model model){        if(!model.containsAttribute("contentModel")){                        //从后台代码获取国际化信息            RequestContext requestContext = new RequestContext(request);            model.addAttribute("money", requestContext.getMessage("money"));            model.addAttribute("date", requestContext.getMessage("date"));                        FormatModel formatModel=new FormatModel();            formatModel.setMoney(12345.678);            formatModel.setDate(new Date());                        model.addAttribute("contentModel", formatModel);        }        return "globaltest";    }    }

这里展示模型还用系列(7)中的作为演示。

在项目中的源文件夹resources中添加messages.properties、messages_zh_CN.properties、messages_en_US.properties三个文件,其中messages.properties、messages_zh_CN.properties里面的"money", "date",为中文,messages_en_US.properties里面的为英文。

在views文件夹中添加globaltest.jsp视图,内容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>
Insert title here    下面展示的是后台获取的国际化信息:
    ${money}
    ${date}
    下面展示的是视图中直接绑定的国际化信息:
    
:
    
    
:
    
    

运行测试:

更改浏览器语言顺序,刷新页面:

 

二.基于Session的国际化实现:

在项目的springservlet-config.xml文件添加的内容如下(第一种时添加的内容要保留):

      
     
  
  

更改globaltest.jsp视图为如下内容:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>
Insert title here    
中文 | 
英文
    下面展示的是后台获取的国际化信息:
    ${money}
    ${date}
    下面展示的是视图中直接绑定的国际化信息:
    
:
    
    
:
    
    

更改GlobalController.java为如下内容:

package com.demo.web.controllers;import java.util.Date;import java.util.Locale;import javax.servlet.http.HttpServletRequest;import org.springframework.context.i18n.LocaleContextHolder;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.servlet.i18n.SessionLocaleResolver;import org.springframework.web.servlet.support.RequestContext;import com.demo.web.models.FormatModel;@Controller@RequestMapping(value = "/global")public class GlobalController {        @RequestMapping(value="/test", method = {RequestMethod.GET})    public String test(HttpServletRequest request,Model model, @RequestParam(value="langType", defaultValue="zh") String langType){        if(!model.containsAttribute("contentModel")){                        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());                        //从后台代码获取国际化信息            RequestContext requestContext = new RequestContext(request);            model.addAttribute("money", requestContext.getMessage("money"));            model.addAttribute("date", requestContext.getMessage("date"));                        FormatModel formatModel=new FormatModel();            formatModel.setMoney(12345.678);            formatModel.setDate(new Date());                        model.addAttribute("contentModel", formatModel);        }        return "globaltest";    }    }

运行测试:

 

三.基于Cookie的国际化实现:

把实现第二种方法时在项目的springservlet-config.xml文件中添加的

注释掉,并添加以下内容:

更改GlobalController.java为如下内容:

package com.demo.web.controllers;import java.util.Date;import java.util.Locale;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.context.i18n.LocaleContextHolder;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.servlet.i18n.CookieLocaleResolver;//import org.springframework.web.servlet.i18n.SessionLocaleResolver;import org.springframework.web.servlet.support.RequestContext;import com.demo.web.models.FormatModel;@Controller@RequestMapping(value = "/global")public class GlobalController {        @RequestMapping(value="/test", method = {RequestMethod.GET})    public String test(HttpServletRequest request, HttpServletResponse response, Model model, @RequestParam(value="langType", defaultValue="zh") String langType){        if(!model.containsAttribute("contentModel")){                        /*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());*/                        if(langType.equals("zh")){                Locale locale = new Locale("zh", "CN");                 //request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale);                (new CookieLocaleResolver()).setLocale (request, response, locale);            }            else if(langType.equals("en")){                Locale locale = new Locale("en", "US");                 //request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,locale);                (new CookieLocaleResolver()).setLocale (request, response, locale);            }            else                 //request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME,LocaleContextHolder.getLocale());                (new CookieLocaleResolver()).setLocale (request, response, LocaleContextHolder.getLocale());                        //从后台代码获取国际化信息            RequestContext requestContext = new RequestContext(request);            model.addAttribute("money", requestContext.getMessage("money"));            model.addAttribute("date", requestContext.getMessage("date"));                        FormatModel formatModel=new FormatModel();            formatModel.setMoney(12345.678);            formatModel.setDate(new Date());                        model.addAttribute("contentModel", formatModel);        }        return "globaltest";    }    }

运行测试:

关于<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />3个属性的说明(可以都不设置而用其默认值):

    
    
    
    
    
    

四.基于URL请求的国际化的实现:

首先添加一个类,内容如下:

import java.util.Locale;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.DispatcherServlet;import org.springframework.web.servlet.LocaleResolver;public class MyAcceptHeaderLocaleResolver extends AcceptHeaderLocaleResolver {    private Locale myLocal;    public Locale resolveLocale(HttpServletRequest request) {        return myLocal;    }     public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {        myLocal = locale;    }  }

然后把实现第二种方法时在项目的springservlet-config.xml文件中添加的

注释掉,并添加以下内容:

“xx.xxx.xxx”是刚才添加的MyAcceptHeaderLocaleResolver 类所在的包名。

保存之后就可以在请求的URL后附上 locale=zh_CN 或 locale=en_US 如 http://xxxxxxxx?locale=zh_CN 来改变语言了,具体这里不再做演示了。

 

国际化部分的内容到此结束。

 

代码下载:

 

转载于:https://my.oschina.net/ydsakyclguozi/blog/601382

你可能感兴趣的文章
代码混淆proguard技术介绍
查看>>
SQL添加数据时返回ID
查看>>
RequireJS + AngularJS Seed 06 _Enviroment
查看>>
在SSM框架中配置定时任务
查看>>
git使用操作(初学及深入)
查看>>
哈希切片(Hashed Sharding)
查看>>
Android基础:翻页控件Viewpager的使用方法,viewpager+fragment混合使
查看>>
工厂模式学习心得
查看>>
JAVA对象实例化过程研究笔记(二)
查看>>
ModelState验证部分属性
查看>>
xcode 插件失效 解决办法
查看>>
可见面判别算法---区域细分算法
查看>>
ansible安装配置
查看>>
清理恢复文本框的默认值
查看>>
【原创】如何在vim中使用tab进行python代码补全
查看>>
Struts秘籍之起式:第1.3式:迁移至Struts 1.1
查看>>
绿色PLSQL/Developer搭配Oracle精简客户端使用
查看>>
ViewPager Banner(广告墙)
查看>>
程序员是如何一步步走向平庸的?
查看>>
Spring Cloud 入门教程(二): 服务消费者(rest+ribbon)(Greenwich.RELEASE)
查看>>