**1)、编写国际化配置文件;**
2)、使用ResourceBundleMessageSource管理国际化资源文件
3)、在页面使用fmt:message取出国际化内容
步骤:
1)、编写国际化配置文件,抽取页面需要显示的国际化消息
![](images/搜狗截图20180211130721.png)
2)、SpringBoot自动配置好了管理国际化资源文件的组件;
```java
@ConfigurationProperties(prefix = "spring.messages")
public class MessageSourceAutoConfiguration {
/**
* Comma-separated list of basenames (essentially a fully-qualified classpath
* location), each following the ResourceBundle convention with relaxed support for
* slash based locations. If it doesn't contain a package qualifier (such as
* "org.mypackage"), it will be resolved from the classpath root.
*/
private String basename = "messages";
//我们的配置文件可以直接放在类路径下叫messages.properties;
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
if (StringUtils.hasText(this.basename)) {
//设置国际化资源文件的基础名(去掉语言国家代码的)
messageSource.setBasenames(StringUtils.commaDelimitedListToStringArray(
StringUtils.trimAllWhitespace(this.basename)));
}
if (this.encoding != null) {
messageSource.setDefaultEncoding(this.encoding.name());
}
messageSource.setFallbackToSystemLocale(this.fallbackToSystemLocale);
messageSource.setCacheSeconds(this.cacheSeconds);
messageSource.setAlwaysUseMessageFormat(this.alwaysUseMessageFormat);
return messageSource;
}
```
3)、去页面获取国际化的值;
![](images/搜狗截图20180211134506.png)
```html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<title>Signin Template for Bootstrap</title>
<!-- Bootstrap core CSS -->
<link href="asserts/css/bootstrap.min.css" th:href="@{/webjars/bootstrap/4.0.0/css/bootstrap.css}" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="asserts/css/signin.css" th:href="@{/asserts/css/signin.css}" rel="stylesheet">
</head>
<body class="text-center">
<form class="form-signin" action="dashboard.html">
<img class="mb-4" th:src="@{/asserts/img/bootstrap-solid.svg}" src="asserts/img/bootstrap-solid.svg" alt="" width="72" height="72">
<h1 class="h3 mb-3 font-weight-normal" th:text="#{login.tip}">Please sign in</h1>
<label class="sr-only" th:text="#{login.username}">Username</label>
<input type="text" class="form-control" placeholder="Username" th:placeholder="#{login.username}" required="" autofocus="">
<label class="sr-only" th:text="#{login.password}">Password</label>
<input type="password" class="form-control" placeholder="Password" th:placeholder="#{login.password}" required="">
<div class="checkbox mb-3">
<label>
<input type="checkbox" value="remember-me"/> [[#{login.remember}]]
</label>
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit" th:text="#{login.btn}">Sign in</button>
<p class="mt-5 mb-3 text-muted">© 2017-2018</p>
<a class="btn btn-sm">中文</a>
<a class="btn btn-sm">English</a>
</form>
</body>
</html>
```
效果:根据浏览器语言设置的信息切换了国际化;
原理:
国际化Locale(区域信息对象);LocaleResolver(获取区域信息对象);
```java
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix = "spring.mvc", name = "locale")
public LocaleResolver localeResolver() {
if (this.mvcProperties
.getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) {
return new FixedLocaleResolver(this.mvcProperties.getLocale());
}
AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
localeResolver.setDefaultLocale(this.mvcProperties.getLocale());
return localeResolver;
}
默认的就是根据请求头带来的区域信息获取Locale进行国际化
```
4)、点击链接切换国际化
```java
/**
* 可以在连接上携带区域信息
*/
public class MyLocaleResolver implements LocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest request) {
String l = request.getParameter("l");
Locale locale = Locale.getDefault();
if(!StringUtils.isEmpty(l)){
String[] split = l.split("_");
locale = new Locale(split[0],split[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
}
}
@Bean
public LocaleResolver localeResolver(){
return new MyLocaleResolver();
}
}
```
- Spring Boot 入门
- Spring Boot 简介
- 微服务
- 环境准备
- MAVEN设置
- IDEA设置
- Spring Boot HelloWorld
- 创建一个maven工程;(jar)
- 导入spring boot相关的依赖
- 编写一个主程序;启动Spring Boot应用
- 编写相关的Controller、Service
- 运行主程序测试
- 简化部署
- Hello World探究
- POM文件
- 父项目
- 启动器
- 主程序类,主入口类
- 使用Spring Initializer
- IDEA使用 Spring Initializer
- STS使用 Spring Starter Project快速创建项目
- 配置文件
- 配置文件
- YAML语法
- 基本语法
- 值的写法
- 普通的值(数字,字符串,布尔)
- 对象、Map(属性和值)(键值对)
- 数组(List、Set)
- 配置文件值注入
- 其他问题
- properties配置文件在idea中默认utf-8可能会乱码
- @Value获取值和@ConfigurationProperties获取值比较
- 配置文件注入值数据校验
- @PropertySource&@ImportResource&@Bean
- 配置文件占位符
- 随机数
- 占位符获取之前配置的值
- Profile
- 多Profile文件
- yml支持多文档块方式
- 激活指定profile
- 配置文件加载位置
- 外部配置加载顺序
- 自动配置原理
- 自动配置原理
- 细节
- @Conditional派生注解(Spring注解版原生的@Conditional作用)
- 日志
- 日志框架
- SLF4j使用
- 如何在系统中使用SLF4j
- 遗留问题
- SpringBoot日志关系
- 日志使用
- 默认配置
- 指定配置
- 切换日志框架
- Web开发
- 简介
- SpringBoot对静态资源的映射规则
- 模板引擎
- 引入thymeleaf
- Thymeleaf使用
- 语法规则
- SpringMVC自动配置
- Spring MVC auto-configuration
- 扩展SpringMVC
- 全面接管SpringMVC
- 如何修改SpringBoot的默认配置
- RestfulCRUD
- 默认访问首页
- 国际化
- 登陆
- 拦截器进行登陆检查
- CRUD-员工列表
- thymeleaf公共页面元素抽取
- CRUD-员工添加
- CRUD-员工修改
- CRUD-员工删除
- 错误处理机制
- SpringBoot默认的错误处理机制
- 如果定制错误响应
- 如何定制错误的页面
- 如何定制错误的json数据
- 将我们的定制数据携带出去
- 配置嵌入式Servlet容器
- 如何定制和修改Servlet容器的相关配置
- 注册Servlet三大组件【Servlet、Filter、Listener】
- 替换为其他嵌入式Servlet容器
- 嵌入式Servlet容器自动配置原理
- 嵌入式Servlet容器启动原理
- 使用外置的Servlet容器
- 步骤
- 原理
- Docker
- 简介
- 核心概念
- 安装Docker
- 安装linux虚拟机
- 在linux虚拟机上安装docker
- Docker常用命令&操作
- 镜像操作
- 容器操作
- 安装MySQL示例
- SpringBoot与数据访问
- JDBC
- 整合Druid数据源
- 整合MyBatis
- 注解版
- 配置文件版
- 整合SpringData JPA
- SpringData简介
- 整合SpringData JPA
- 启动配置原理
- 创建SpringApplication对象
- 运行run方法
- 事件监听机制
- 自定义starter