知识点
JAVA中ResourceBundle
这个类主要用来解决国际化和本地化问题。国际化和本地化可不是两个概念,两者都是一起出现的。可以说,国际化的目的就是为了实现本地化。比如对于“取消”,中文中我们使用“取消”来表示,而英文中我们使用“cancel”。若我们的程序是面向国际的(这也是软件发展的一个趋势),那么使用的人群必然是多语言环境的,实现国际化就非常有必要。而ResourceBundle可以帮助我们轻松完成这个任务:当程序需要一个特定于语言环境的资源时(如 String),程序可以从适合当前用户语言环境的资源包(大多数情况下也就是.properties文件)中加载它。这样可以编写很大程度上独立于用户语言环境的程序代码,它将资源包中大部分(即便不是全部)特定于语言环境的信息隔离开来。
这使编写的程序可以:
- 轻松地本地化或翻译成不同的语言
- 一次处理多个语言环境
- 以后可以轻松进行修改,以便支持更多的语言环境
说的简单点,这个类的作用就是读取资源属性文件(properties),然后根据.properties文件的名称信息(本地化信息),匹配当前系统的国别语言信息(也可以程序指定),然后获取相应的properties文件的内容。
使用这个类,properties需要遵循一定的命名规范,一般的命名规范是: 自定义名语言代码国别代码.properties,如果是默认的,直接写为:自定义名.properties。
比如:
myres_en_US.properties
myres_zh_CN.properties
myres.properties
当在中文操作系统下,如果myres_zh_CN.properties、myres.properties两个文件都存在,则优先会使用myres_zh_CN.properties,当myres_zh_CN.properties不存在时候,会使用默认的myres.properties。
没有提供语言和地区的资源文件是系统默认的资源文件。
操作
思路:1.添加属性文件 2. 添加配置信息 3.添加国际化的cookie和拦截器 注入到bean中 4.编写页面 添加中英文转换按钮 5 添加 controller跳转相关页面
代码
前提:在pom.xml添加上thymeleaf的相关依赖 配置文件中做好相关配置
1.添加属性文件 我的是test做的demo
resources下添加文件夹i18n(i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称)
添加resources bundle属性文件 注意命名规范 可以发现创建的三个文件会自动归为一组
一共三个文件 默认的test 中文状态的test_zh_CN 英文状态的 test_en_US
在访问时 会根据浏览器的默认语言 加载对应的属性文件 当没有匹配的值 会使用默认属性文件
添加key value值 打开默认的test文件 点击左下角切换到resource bundle更方便编辑
2. 添加配置信息
在总配置文件中指定国际化文件的位置
#配置自己的国际化文件位置
spring.messages.basename=i18n/test
3.添加国际化的cookie和拦截器 注入到bean中
@Bean
public LocaleResolver localeResolver() {
CookieLocaleResolver slr = new CookieLocaleResolver();
slr.setCookieMaxAge(3600);
slr.setCookieName("Language");
return slr;
}
@Bean
public WebMvcConfigurer webMvcConfigurer() {
return new WebMvcConfigurer() {
//拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LocaleChangeInterceptor()).addPathPatterns("/**");
}
};
}
4.编写页面 添加中英文转换按钮
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<!--使用thymeleaf标签 添加上对应网址使之生效-->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>hello</title>
<link rel="stylesheet" href="https://apps.bdimg.com/libs/bootstrap/3.3.4/css/bootstrap.css">
</head>
<body>
<h1>hello springboot demo!</h1>
<label th:text="#{test.username}">用户名</label>
<input type="text" name="username" class="form-control" placeholder="Username"
th:placeholder="#{test.username}" required="" autofocus="">
<a class="btn btn-sm" th:href="@{/hi(locale='zh_CN')}">中文</a>
<a class="btn btn-sm" th:href="@{/hi(locale='en_US')}">English</a>
<script src="https://s1.pstatp.com/cdn/expire-1-M/jquery/1.10.2/jquery.min.js"></script>
</body>
</html>
5 添加 controller跳转相关页面
@Controller
public class Demo {
@RequestMapping("/hi")
public String sayHello(){
return "test";
}
}
启动运行
可以看到点击下面切换英文 页面刷新后显示英文 并且网址中附带了相应的参数