目录
什么是国际化?
国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有地域语言,国家/地区和文化相关的元素。换言之,应用程序的功能和代码设计考虑在不同地区运行的需要,其代码简化了不同本地版本的生产。开发这样的程序的过程,就称为国际化。
1.创建一个springboot工程
加入依赖
<!--thymeleaf依赖-->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-java8time</artifactId>
</dependency>
创建完成后打开设置
确保图片中的都是UTF-8
2.创建存放文字的文件
在resources文件夹下创建i18n的包,然后在i18n的包下创建login.propertis与login_zh_CN.properties文件(代表中文的意思),在创建login_zh_CN.properties文件时会发现他们合并成了一个文件:Resources Bundle 'login'。
Resources Bundle 'login'可以右键创建文件。
接着在创建一个en_US文件,他会自动识别为英语。
3.编辑文件
文件打开后,点击左下角有的可视化编辑。
右键login点击New Property
添加login.tip
然后如图所示进行补充
然后在多添加几条。
文本模式如下:
4.编写页面代码
在 application.properties中添加如下代码:
# 文件的真实位置
spring.messages.basename=i18n.login
然后在templates文件夹下面创建index.html文件,代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录界面</title>
</head>
<body>
<div style="background-color: bisque">
<center>
<h1 >Please Sign in</h1>
<input type="text" placeholder="Username" />
<br/><br/>
<input type="password" placeholder="Passwrod" />
<br/><br/>
<button>Sign</button>
<br/>
<a href="#">中文</a>
<a href="#">English</a>
</center>
</div>
</body>
</html>
运行后输入地址:http://localhost:8080/
可以看到显示的文字是英文的。
然后改造成如下代码:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>登录界面</title>
</head>
<body>
<div style="background-color: bisque">
<center>
<h1 th:text="#{login.tip}">Please Sign in</h1>
<input type="text" th:placeholder="#{login.username}" />
<br/><br/>
<input type="password" th:placeholder="#{login.password}" />
<br/><br/>
<button>[[#{login.btn}]]</button>
<br/>
<a th:href="@{index.html(l='zh_CN')}">中文</a>
<a th:href="@{index.html(l='en_US')}">English</a>
</center>
</div>
</body>
</html>
运行后界面:
发现英文变成了中文。
5.实现中英文的切换
在创建config文件夹--->创建MyLocalResolver代码如下:
package com.li.config;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
public class MyLocalResolver implements LocaleResolver {
//解析请求
@Override
public Locale resolveLocale(HttpServletRequest request) {
//获取请求参数
String lang = request.getParameter("l");
Locale locale = Locale.getDefault();//如果没有就用默认的
//如果请求链接携带了国际化的参数
if (!StringUtils.isEmpty(lang)){
//zh_CN
String[] split = lang.split("_");
//国家,地区
locale= new Locale(split[0], split[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
}
}
MyLocalResolver类创建好后需要将他放到spring中,在config中创建MyConfig类
代码如下:
package com.li.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.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
registry.addViewController("/index.html").setViewName("index");
}
//自定义国际化主键就生效了
@Bean
public LocaleResolver localeResolver(){
return new MyLocalResolver();
}
}
然后运行,此时点击a标签就可以实现中英文的切换了。
总结:
国际化可以切换文字,在创建properties文件的时候需要注意命名,Thymeleaf中#{}可以获取文件中的值,@{}里面放的是路径,@{index.html(l='zh_CN')}其中括号里面的是传递的参数,要想传递多个参数就在后面加上逗号即可,例如:@{index.html(l='zh_CN',username=${username},password='123456')}。
编写MyConfig类时配置视图解析器,addViewControllers()不然路径错误无法访问。