I18N 国际化
文章目录
Tips
-
国际化(Internationalization)指的是同一个网站可以支持多种不同的语言,以方便不同国家,不同语种的用户访问
-
方法一:为不同的国家创建不同的网站,比如苹果公司
方法二:国际化,是同一个网站不同国家的人来访问可以显示出不同的语言
但实际上这种需求并不强烈,一般真的有国际化需求的公司,主流采用的依然是苹果公司的那种方案
-
国际化的英文 Internationalization,但是由于拼写过长,老外想了一个简单的写法叫做 I18N
意思是 Internationalization ,I 开头,N 结尾,中间 18 个字母,所以简写为 I18N
要素
-
Locale对象:Locale表示不同的时区,位置,语言,其中常用的国家可以直接 Locale.国家 获取
public void testLocale(){ // 获取你系统默认的语言。国家信息 Locale locale = Locale.getDefault(); // 获取中文,中文的常量的 Locale 对象 System.out.println(Locale.CHINA); // 获取英文,美国的常量的 Locale 对象 System.out.println(Locale.US); }
-
Properties属性配置文件
命名规则:baseName + _ + Locale.properties
例如:baseName 是 i18n (可以自行设置)
则中文的配置文件名是:i18n_zh_CN.properties
英文的配置文件名是:i18n_en_US.properties
-
ResourceBundle资源包
ResourceBundle类:
ResourceBundle.getBundle("baseName ",Locale )
:根据给定的 baseName 和 Locale 读取相应的配置文件,得到 properties 里的文字信息;ResourceBundle.getString ( key )
:得到该国家的 properties 里的语言信息
properties
i18n_en_US.properties 英文
username=username
password=password
submit=submit
i18n_zh_CN.properties 中文
username=用户名
password=密码
submit=提交
实现方式
导包
<%@ page import="java.util.Locale" %>
<%@ page import="java.util.ResourceBundle" %>
方式一
通过 accept-Language 请求头设置国家,在浏览器设置中可以设置语言
<%
// 从请求头中获取 Locale 信息(语言)
Locale locale = request.getLocale();
System.out.println(locale);
// 获取读取包(根据 指定的 baseName 和 Locale 读取 语言信息)
ResourceBundle i18n = ResourceBundle.getBundle("i18n", locale);
%>
<form>
<%=i18n.getString("username")%><input name="username" type="text" />
<%=i18n.getString("password")%></td><input type="password" />
<input type="submit" value="<%=i18n.getString("submit")%>" />
</form>
方式二
链接传参,手动切换中英文
<%
// 从请求头中获取 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);
%>
<a href="i18n.jsp?country=cn">中文</a>|
<a href="i18n.jsp?country=usa">english</a>
<form>
<%=i18n.getString("username")%><input name="username" type="text" />
<%=i18n.getString("password")%></td><input type="password" />
<input type="submit" value="<%=i18n.getString("submit")%>" />
</form>
方式三
JSTL 实现方式二
<%--1 使用标签设置 Locale 信息--%>
<fmt:setLocale value="${param.locale}" />
<%--2 使用标签设置 baseName--%>
<fmt:setBundle basename="i18n"/>
<form>
<%--3 输出指定 key 的国际化信息--%>
<fmt:message key="username" /><input name="username" type="text" />
<fmt:message key="password" /></td><input type="password" />
<input type="submit" value="<fmt:message key='submit'/>" />
</form>