git:https://github.com/xiaozhuanfeng/demoProj

代码结构:

application.properties:
spring.messages.basename=i18n/sprMesgs

说明:默认情况下,国际化资源文件的基础名为messages,且存放在classpath根路径下,即messages.properties、messages_zh_CN.properties、messages_en_US.properties等等,这样就无需在配置文件中设置spring.messages.basename=...了,但是如果基础名不为messages或者不在classpath根路径下,则需要手动添加spring.messages.basename=文件名.自定义的基础名,如果有多个就用逗号分隔。例如:spring.messages.basename=i18n/sprMesgs。

本例就是不用messages.XXX开头,上述具体可参照源码文件:MessageSourceAutoConfiguration.class。

Spring 采用的默认区域解析器是AcceptHeaderLocaleResolver。它通过检验HTTP请求的头部信息accept-language来解析区域。这个头部是由用户的wb浏览器底层根据底层操作系统的区域设置进行设定的。请注意,这个区域解析器无法改变用户的区域,因为它无法修改用户操作系统的区域设置。

代码获取国际化信息:
org.springframework.context.MessageSource
方法:messageSource.getMessage("welcome", null,locale);
获取locale两种方法:
Locale locale = LocaleContextHolder.getLocale();//建议
Locale locale1= RequestContextUtils.getLocale(request);
例如:
 //代码中获取国际化信息
Locale locale = LocaleContextHolder.getLocale();
String msg = messageSource.getMessage("welcome.backhome", null,locale);
System.out.println("获取国际化信息"+msg);
下面看切换国际化:
在Spring MVC应用程序中,用户的区域是通过区域解析器来识别的,它必须是实现LocaleResolver接口。Spring MVC提供了几个LocaleResolver实现,让你可以按照不同的条件来解析区域。Spring采用的默认区域解析器是AcceptHeaderLocaleResolver。它通过检验HTTP请求的accept-language头部来解析区域。这个头部是由用户的web浏览器根据底层操作系统的区域设置进行设定。请注意,这个区域解析器无法改变用户的区域,因为它无法修改用户操作系统的区域设置。这里采用SessionLocaleResolver实现页面切换国际化。
 
新增一个加载类:
package com.example.demo.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.SessionLocaleResolver; import java.util.Locale; @Configuration
public class MvcConfig {
private final Logger log = LoggerFactory.getLogger(getClass());
@Bean
public LocaleResolver localeResolver() {
log.info("SessionLocaleResolver is start.... ");
//会话区域解析器也就是说,你设置完只针对当前的会话有效,session失效,还原为默认状态
SessionLocaleResolver srl = new SessionLocaleResolver();
//设置默认区域
srl.setDefaultLocale(Locale.CHINA);
return srl;
}
}

html页面:

<div>
<span>3、文字国际化表达式</span><br/>
<form action="/changeLanguage2" method="get">
<!-- <span th:text="'语言 '+${lang}"></span><br/>--> <select name="lang">
<option value=""></option>
<option th:selected="${lang=='zh'}" value="zh">中文</option>
<option th:selected="${lang=='en'}" value="en">English</option>
</select> <button>切换语言</button>
</form> <br/>
<span th:text="#{welcome.backhome}"></span><br/>
</div>

Controller:

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.springframework.web.servlet.support.RequestContextUtils; import javax.servlet.http.HttpServletRequest;
import java.util.Locale;
@Controller
public class I18nController { @RequestMapping(value = "changeLanguage1")
public String changeLan1(HttpServletRequest req, String lang) { if ("en".equals(lang)) {
req.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, Locale.US);
} else {
req.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, Locale.CHINA);
}
return "redirect:/demo/example1";
} @RequestMapping(value = "changeLanguage2")
public String changeLan2(HttpServletRequest req, String lang) {
LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(req);
if ("en".equals(lang)) {
localeResolver.setLocale(req, null, Locale.US);
} else {
localeResolver.setLocale(req, null, Locale.CHINA);
}
return "redirect:/demo/example1";
}
}

跳转页面Controller:

package com.example.demo.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest;
import java.util.Locale;
import java.util.Map; @Controller
@RequestMapping(value = "/demo")
public class DemoController {
private final Logger log = LoggerFactory.getLogger(getClass()); @RequestMapping("/example1")
private String example1(HttpServletRequest request, Map<String, Object> map) { //.....省略
//1、代码中获取国际化信息
Locale locale = LocaleContextHolder.getLocale();
//2、从Session中获取语言环境
//locale = (Locale)req.getSession().getAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME);
//System.out.println("当前语言环境:"+locale.getLanguage());
map.put("lang",locale.getLanguage()); return "web_demo1";
}
}

测试:

最新文章

  1. JS判断是否是微信页面,判断手机操作系统(ios或android)并跳转到不同下载页面
  2. iOS中的__typeof与typeof
  3. Oracle 数据库特殊查询总结
  4. 零值初始化&amp;字符串常数作为函数模板参数
  5. 会员管理系统的设计和开发(2)-- RDLC报表的设计及动态加载
  6. 关于iphone、安卓手机VPN全面解析
  7. web快速开发c/s软件构架
  8. JQuery控制input的readonly和disabled属性
  9. python 字典有序无序及查找效率,hash表
  10. poj 1604 Just the Facts
  11. CodeForces 614B Gena&#39;s Code
  12. java201521123118《java程序设计》第3周总结
  13. DOM操作中,getElementByXXXX 和 querySelector 的区别
  14. Python自动化中的鼠标事件
  15. Linux库多重依赖
  16. AngularJS学习之旅—AngularJS 过滤器(七)
  17. hadoop家族技能图谱
  18. 浅谈 WebDriver如何应对不同浏览器
  19. 一篇好文之Android数据库 GreenDao的完全解析
  20. CEdit控件[转]

热门文章

  1. mongoose 数据库操作2
  2. spring boot 枚举使用的坑3
  3. jquery 关于load()加载页面遇见的坑(js代码使用不了)
  4. 出现( linker command failed with exit code 1)错误总结(http://blog.csdn.net/hengshujiyi/article/details/21182813)
  5. nice - 改变执行程序的优先级
  6. centos 7 安装 nginx 或 apache,及其比较
  7. 图像语义分割出的json文件和原图,用plt绘制图像mask
  8. 写了一个简单的 Mybatis
  9. thinkphp5.0.19 表单令牌
  10. Top 8 Diagrams for Understanding Java