java 国际化 demo_详解SpringMVC学习系列之国际化

在系列(7)中我们讲了数据的格式化显示,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视图,内容如下:

pageEncoding="UTF-8"%>

Insert title here

下面展示的是后台获取的国际化信息:

${money}

${date}

下面展示的是视图中直接绑定的国际化信息:

:

:

运行测试:

953f0bcc2ea1548819d1b568d008c192.png

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

1feb41f6072c23312ac4d1f58f69908c.png

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

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

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

pageEncoding="UTF-8"%>

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

}

}

运行测试:

528cead544879deae2f9327a96da0418.png

6ae368be6848a76a8efb605582cf3a7f.png

三.基于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";

}

}

运行测试:

977fe6a03f93ce1ef667a8e6ebc9f75b.png

a1d8e7d4a24c6e7c51a4bace49a805cb.png

关于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 来改变语言了,具体这里不再做演示了。

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值