i18n 国际化
什么是 i18n
国际化(Internationalization)指的是同一个网站可以支持多种不同的语言,以方便不同国家,不同语种的用户访问。
希望相同的一个网站,不同人访问的时候可以根据用户所在的区域显示
不同的语言文字,但是网站的布局样式等不发生改变。
相关要素
国际化三要素:
Local 对象 表示不同的时区,位置,语言
zh_CN 中国 中文
en_US 美国 英文
Properties 属性配置文件 配置文件命名规则为:baseName_local.properties,例如
中文的配置文件名是:i18n_zh_CN.properties
英文的配置文件名是:i18n_en_US.properties
ResourceBundle 资源包
ResourceBundle.getBundle() 根据给定的 baseName 和 Local 读取相应的配置文件,得到文件内容信息
ResourceBundle.getString(key) 得到不同国家的语言信息
国际化资源使用
i18n_en_US.properties 文件
username=username
password=password
sex=sex
age=age
regist=regist
boy=boy
email=email
girl=girl
reset=reset
submit=submit
i18n_zh_CN.properties 文件
username=用户名
password=密码
sex=性别
age=年龄
regist=注册
boy=男
girl=女
email=邮箱
reset=重置
submit=提交
public class I18nTest {
@Test
public void testLocale(){
// 获取你系统默认的语言。国家信息
// Locale locale = Locale.getDefault();
// System.out.println(locale);
// for (Locale availableLocale : Locale.getAvailableLocales()) {
// System.out.println(availableLocale);
// }
// 获取中文,中文的常量的 Locale 对象
System.out.println(Locale.CHINA);
// 获取英文,美国的常量的 Locale 对象
System.out.println(Locale.US);
}
@Test
public void testI18n(){
// 得到我们需要的 Locale 对象
Locale locale = Locale.CHINA;
// 通过指定的 basename 和 Locale 对象,读取 相应的配置文件
ResourceBundle bundle = ResourceBundle.getBundle("i18n", locale);
System.out.println("username:" + bundle.getString("username"));
System.out.println("password:" + bundle.getString("password"));
System.out.println("Sex:" + bundle.getString("sex"));
System.out.println("age:" + bundle.getString("age"));
}
}
通过请求头国际化页面
pageEncoding="UTF-8"%>
Insert title here// 从请求头中获取 Locale 信息(语言)
Locale locale = request.getLocale();
System.out.println(locale);
// 获取读取包(根据 指定的 baseName 和 Locale 读取 语言信息)
ResourceBundle i18n = ResourceBundle.getBundle("i18n", locale);
%>
中文|
" /> " /> |
国际化测试:
1、访问页面,通过浏览器设置,请求头信息确定国际化语言。
2、通过左上角,手动切换语言
通过显示的选择语言类型进行国际化
pageEncoding="UTF-8"%>
Insert title here// 通过显示的选择语言类型进行国际化
// 从请求头中获取 Locale 信息(语言)
Locale locale = null;
String country = request.getParameter("country");
if ("cn".equals(country)) {
locale = Locale.CHINA;
} else if ("usa".equals(country)) {
locale = Locale.US;
} else {
locale = request.getLocale();
}
System.out.println(locale);
// 获取读取包(根据 指定的 baseName 和 Locale 读取 语言信息)
ResourceBundle i18n = ResourceBundle.getBundle("i18n", locale);
%>
中文|
" /> " /> |
国际化测试:
1、访问页面,通过浏览器设置,请求头信息确定国际化语言。
2、通过左上角,手动切换语言
JSTL 标签库实现国际化
pageEncoding="UTF-8"%>
Insert title here中文|
>
> | |
" /> " /> |
练习和总结