JAVA全系列 教程
3762个小节阅读:7088.6k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
i18n是internationalization(国际化)的缩写。因为单词比较长,取首字母i和末字母n,中间还有18个字母,所以叫做i18n。
国际化可以实现让同一个项目,在不同语言环境中显示不同语言文字。
就像我们人一样,在国内就说汉语,去美国就说英语
在JDK中提供ResourceBundle抽象类,可以实现国际化。类中有静态方法,可以通过getBundle()来通过属性文件进行实例化。String类型参数时basename(文件基础名称)
ResourceBundle加载属性文件时,会根据服务器语言环境,来判断到底加载哪个属性文件。
允许我们有多个相同basename的属性文件,然后根据不同语言,不同国家来定义多个属性文件。
xxxxxxxxxx
语法:basename_语言简写_国家简写.properties
语言简称:
zh 中文
en 英文
国家简称:
中国 CN
美国 US
默认情况下IDEA中.properties文件使用ISO-8859-1编码,我们的程序是UTF-8编码,获取中文会乱码。
设置IDEA,使用JDK自带的native-to-ascii工具把文件内容进行转码为UTF-8
在src/main/resouces中新建3个配置文件。
rb.properties
xxxxxxxxxx
name=默认名字
age=默认年龄
remark=默认介绍
rb_en_US.properties
xxxxxxxxxx
name=smallming
age=16
remark=smallming is handsome
rb_zh_CN.properties
xxxxxxxxxx
name=张佳明
age=16岁
remark=张佳明是帅哥
新建测试类com.bjsxt.test.ResourceBundleTest
xxxxxxxxxx
public class ResourceBundleTest {
@Test
void test() throws IOException {
// 第一个参数是属性文件的basename,不包含语言简称和国际简称的。
// 第二个参数可以省略。自动判断服务器语言环境。
// 如果第二个参数设定的国家不存在,使用服务器语言环境
// 如果第二个参数设定的国家存在,使用对应属性文件内容
ResourceBundle rb2 = ResourceBundle.getBundle("rb", Locale.US);
System.out.println(rb2.getString("name"));
System.out.println(rb2.getString("age"));
System.out.println(rb2.getString("remark"));
}
}
修改rb_zh_CN.propeties文件,添加占位符。占位符语法{索引}
xxxxxxxxxx
name=张佳明
age=16岁
remark=张佳明是帅哥,首先因为:{0},其实因为:{1}
在测试类,使用MessageFormat对占位符设置值。
xxxxxxxxxx
@Test
void test2() throws IOException {
ResourceBundle rb2 = ResourceBundle.getBundle("rb");
String remark = rb2.getString("remark");
System.out.println(remark);
String format = MessageFormat.format(remark, "帅", "还是帅");
System.out.println(format);
}