1、新建项目

第一步新建springboot项目,勾选web依赖,或者后面进入在pom.xml中加入也可以。

2、项目结构

项目pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.jf</groupId><artifactId>locale-lanuage</artifactId><version>0.0.1-SNAPSHOT</version><name>locale-lanuage</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

3、在templates中写入一个html页面,以login.html为例。
在Controller写入访问的控制器

package com.jf.Controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class UserController {@RequestMapping("/login")public String login(){return "login";}
}

启动项目保证login能访问.。

在pom.xml中要加上thymeleaf依赖,

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

4、在resources中新建文件夹i18n,在其中新建login.properties,在新建login_zh_CN.properties,

这时候目录会自动多一个Resource Bundle'login',说明IDEA识别了此配置文件

然后右键此文件夹,就可以有自动添加的窗口出来,当然也可以手动添加login_en_US.properties

然后要对每一个需要中英文转换的文字都要一一配置。这里有一个可视化的页面,点击左下角的Resource Bundle就可以。

添加要转换的属性的中英文对照
命名没有什么规范
例如下面的login.username,这里表示的是login页面的username的替换品,你也可以写为A.B都行,为了方便阅读而已。

将这些写好后,
在配置文件application.properties或yaml中加入

spring.messages.basename=i18n.login

5、进入login.html页面
修改一些内容
首先加入头文件
<html lang="en" xmlns:th="http://www.thymeleaf.org">
然后利用thymeleaf语法,添加中英文变化的属性,在属性前面加入th:,内容用#{}
例如:

<label for="username">用户名</label>
<label for="username" th:text="#{login.username}">用户名</label>


添加中英文切换的按钮,th:href="@{/login(language='zh_CN')},thymeleaf语法中,urk要用@{},所以以上语法的意思是访问login,并带上一个参数language='zh_CN'

完整的login.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div  id="login" ><form ><div ><label for="username" th:text="#{login.username}">用户名</label><input type="text"  name="username"   id="username" ></div><div ><label for="password" th:text="#{login.password}">密码</label><input type="password"  name="password"   id="password" ></div><div><button type="submit"   th:text="#{login.login}">登录</button></div><div><a href="register.html" th:text="#{register.register}">注册</a><a th:href="@{/login(language='zh_CN')}">中文</a><a th:href="@{/login(language='en_US')}">English</a></div></form>
</div></body>
</html>

6、现在情况下,启动项目,点击中文英文切换的时候,还是没有效果,只是浏览器地址栏上可以看到有参数传递了。

接下来自己写一个国际化解析器,实现LocaleResolver接口

package com.jf.config;import org.springframework.stereotype.Component;
import org.springframework.web.servlet.LocaleResolver;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;public class MyLocaleRelover implements LocaleResolver {@Overridepublic Locale resolveLocale(HttpServletRequest httpServletRequest) {String language = httpServletRequest.getParameter("language");Locale locale = Locale.getDefault();System.out.println(language);if (!(language==null||"".equals(language))){String[] split = language.split("_");locale = new Locale(split[0], split[1]);}return locale;}@Overridepublic void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {}
}

7、写好了国际化解析器后,现在需要将他加入到spring中

现在要自己扩展springMVC,
新建config包,新建MyMvcResolver实现WebMvcConfigurer接口,写上注解@Configuration

package com.jf.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;//扩展springMVC
@Configuration
public class MyMvcResolver implements WebMvcConfigurer {@Beanpublic LocaleResolver localeResolver(){return new MyLocaleRelover();}}

8、然后就ok了,启动项目访问一下。
默认的访问

点击中文后:可以看到地址栏有参数传递

点击英文后

9、源码扩展

首先找到这个类WebMvcAutoConfiguration(webmvc自动配置类)

在其中ctrl+f搜索localeRelover地区解析

此类实现了LocaleResolver接口

springboot国际化配置中英文切换相关推荐

  1. SpringBoot 国际化(中英文切换)

    中英文切换 一.新建文件夹及文件 二.进行可视化配置 三.配置 四.使用key来获取国际化内容 五.国际化解析器 六.将自定义的国际化组件注册到Bean 一.新建文件夹及文件 1.在resources ...

  2. SpringBoot国际化配置

    在resource文件下添加如下文件 在login.properties文件下添加键值对 因为国际化的相关类对应的properties对应的文件中 basename是国际化配置文件的真实位置 所以在a ...

  3. SpringBoot国际化配置(i8n配置)未生效(完美解决)

    最近在整理springBoot国际化时,发现国际化没有生效,通过报错提示在 MessageTag -> doEndTag处打断点 最后发现messageSource并不是ResourceBund ...

  4. 简单实现国际化(中英文切换)

    今天给大家简单介绍一下android中简单实现国际化 首先我们要在res下的values文件里找到我们本身自带的strings.xml,然后需要在建一个目录用来存储其他种类的语言: 在这里有两种方法: ...

  5. springboot实现网页中英文切换

    知识点 JAVA中ResourceBundle 这个类主要用来解决国际化和本地化问题.国际化和本地化可不是两个概念,两者都是一起出现的.可以说,国际化的目的就是为了实现本地化.比如对于"取消 ...

  6. springboot国际化实现中英文转换

    国际化即支持中英文转换功能,按照下面流程实现! 此时点击text切换就可以看到三份文件,默认语言,英文语言,中文语言. 在配置文件中添加上路径. 写一个国际化组件 package com.demo1. ...

  7. SpringBoot国际化(中英文转换)

    1.在resource下的i18n目录下新建一个Resource Bundle 2. 在上面的base name中输入messages后会生成三个文件 3.配置拦截器 设置默认语言类型是中文 并且在拦 ...

  8. 【vue 进阶指南 一】多语言国际化(中英文切换)

    vue + element-ui + vue-i18n 多语言国际化 1.element-ui 并不支持最新版的vue-i8n 插件,开发时注意i18n的版本,当然本示例成功解决版本不兼容的问题,详细 ...

  9. vue/uniapp实现语言国际化(中英文切换)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.vue-i18n是什么? 二.使用步骤 1.安装vue-i18n 2.新建文件夹 3.在main.js 中引入 4.在页 ...

最新文章

  1. QMetaObject::connectSlotsByName: No matching signal for问题的解决方法
  2. 华为应用锁退出立即锁_面试官:你说说互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景...
  3. SpringMVC学习日记 1.Spring框架
  4. linux make编译报错 mv,Linux下安装redis
  5. 这个AI狠!能互译C++、Java和Python,以后只学一种编程就行吗
  6. 视频超分中的自监督适应方案
  7. 核心期刊 计算机应用与软件,计算机应用与软件 统计源期刊北大核心期刊
  8. 1.7 单层卷积网络
  9. zabbix 通过 SNMP 监控 Windows主机
  10. 分布式事务解决方案 Seata 的原理个人理解以及 demo 配置
  11. 吴伯凡-认知方法论-认知中的信道与噪音
  12. 思科交换机配置试题_思科交换机基本配置
  13. 计算机等级考试四级网络工程师真题,计算机等级考试四级网络工程师试题
  14. Google DFP广告管理系统简介:开始与您的网站进行广告集成
  15. concat函数_《MySQL 入门教程》第15篇MySQL常用函数之字符函数
  16. 超微服务器双路主板系列,超微发布X12DPL系列服务器主板 支持双路10nm Ice Lake至强处理器...
  17. python接入支付宝
  18. Unreal中的Cross Product(向量积)方向定义
  19. 字节跳动/今日头条校招大礼包 2019年校招大礼包
  20. 计算机组成原理第二章笔记---计算机进化与性能

热门文章

  1. 电脑给山寨内存卡清理垃圾丢失了数据怎么恢复
  2. 由于oracle错误1400而拒绝行,请教各位大神一个在工作中遇到的问题。到现在还没有解决。 - Oracle论坛 - 51CTO技术论坛_中国领先的IT技术社区...
  3. 软件工程师的年终总结
  4. 一百种消灭无聊的方法
  5. left join 用法
  6. [易飞]批量导出易飞ERP系统目前所有BOM(含本币未税单位成本)
  7. U盘变成只读文件系统
  8. 计算机dj音乐,dj多多电脑版
  9. WiFi基本概念(三)帧格式
  10. c语言系统编程六:Linux进程间通信之无名管道