IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 4.4 spring boot 国际化 -> 正文阅读

[Java知识库]4.4 spring boot 国际化

1)、编写国际化配置文件;
2)、使用ResourceBundleMessageSource管理国际化资源文件
3)、在页面使用fmt:message取出国际化内容

步骤:
1)、编写国际化配置文件,抽取页面需要显示的国际化消息

2)、SpringBoot自动配置好了管理国际化资源文件的组件;

@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)、去页面获取国际化的值;

<!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(获取区域信息对象);

@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)、点击链接切换国际化

/**
?*?可以在连接上携带区域信息
?*/
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();
????}
}

?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:35:37  更:2022-03-21 20:38:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:33:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码