国际化又简称为 i18n:internationalization
国际化的人:
人,英语,汉语; 可以说这个人是国际化的人;
软件的国际化:
软件
中国: 显示中文,以及服务符合中国习惯的文本字符串!
1999-09-09
美国: 显示英文,以及服务符合他国习惯的文本字符串!
这种软件,就叫国际化的软件!
如何做到国际化的软件,要求:
1. 软件中存储特定的字符串
2. 知道浏览器当前使用哪种语言(Locale)
Locale 本地化
Java提供了一个本地化的对象!封装当前语言、国家、环境等特征!
public class App {
@Test
public void testLocale() throws Exception {
Locale locale = Locale.getDefault();
System.out.println(locale.getCountry());
System.out.println(locale.getDisplayCountry());
System.out.println(locale.getLanguage());
Locale l_us = Locale.US;
System.out.println(l_us.getCountry());
System.out.println(l_us.getDisplayCountry());
}
}
国际化
静态数据国际化
网站中显示的固定文本的国际化: “用户名”“密码“
国际化的软件:
1. 存储所有国家显示的文本的字符串
a) 文件: properties
b) 命名: 基础名_语言简称_国家简称.properties
例如:msg_zh_CN.properties 存储所有中文
msg_en_US.properties 存储所有英文
2. 程序中获取
ResourceBundle类,可以读取国际化的资源文件!
@Test
public void testI18N() throws Exception {
Locale locale = Locale.US;
ResourceBundle bundle = ResourceBundle.getBundle("cn.itcast.f_i18n.msg", locale);
System.out.println(bundle.getString("hello"));
System.out.println(bundle.getString("username"));
System.out.println(bundle.getString("pwd"));
}
动态文本国际化
中文:1987-09-19 ¥1000
英文: Sep/09 1987 $100
数值,货币,时间,日期等数据由于可能在程序运行时动态产生,所以无法像文字一样简单地将它们从应用程序中分离出来,而是需要特殊处理。Java 中提供了解决这些问题的 API 类(位于 java.util 包和 java.text 包中)
@Test
public void testI18N2() throws Exception {
NumberFormat.getCurrencyInstance();
NumberFormat.getNumberInstance();
NumberFormat.getPercentInstance();
}
@Test
public void testI18N3() throws Exception {
Locale locale = Locale.CHINA;
double number = 100;
NumberFormat nf = NumberFormat.getCurrencyInstance(locale);
String m = nf.format(number);
System.out.println(m);
}
@Test
public void eg() throws Exception {
String str = "$100";
int num = 10;
Locale us = Locale.US;
NumberFormat nf = NumberFormat.getCurrencyInstance(us);
Number n = nf.parse(str);
System.out.println(n.intValue() * num);
}
@Test
public void testI18N4() throws Exception {
Locale locale = Locale.CHINA;
NumberFormat nf = NumberFormat.getNumberInstance(Locale.US);
String str = nf.format(1000000000);
System.out.println(str);
}
@Test
public void testI18N5() throws Exception {
int dateStyle = DateFormat.SHORT;
int timeStyle = DateFormat.SHORT;
DateFormat df =
DateFormat.getDateTimeInstance(dateStyle, timeStyle, Locale.CHINA);
String date = df.format(new Date());
System.out.println(date);
}
@Test
public void eg2() throws Exception {
String str = "09-11-28 上午10时25分39秒 CST";
DateFormat df = DateFormat.getDateTimeInstance(
DateFormat.SHORT, DateFormat.FULL, Locale.getDefault());
Date d = df.parse(str);
System.out.println(d);
}
Jsp页面国际化
<html>
<head>
<%
ResourceBundle bundle = ResourceBundle.getBundle("cn.itcast.f_i18n.msg",request.getLocale());
%>
<title><%=bundle.getString("title") %></title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<form name="frmLogin" action="${pageContext.request.contextPath }/admin?method=login" method="post">
<table align="center" border="1">
<tr>
<td><%=bundle.getString("username") %></td>
<td>
<input type="text" name="userName">
</td>
</tr>
<tr>
<td><%=bundle.getString("pwd") %></td>
<td>
<input type="password" name="pwd">
</td>
</tr>
<tr>
<td>
<input type="submit" value="<%=bundle.getString("submit") %>">
</td>
</tr>
</table>
</form>
</body>
</html>
Jsp页面国际化 – 使用jstl标签
JSTL标签:
核心标签库
国际化与格式化标签库
数据库标签库(没用)
函数库
<fmt:setLocale value=""/> 设置本地化对象
<fmt:setBundle basename=""/> 设置工具类
<fmt:message></fmt:message> 显示国际化文本
格式化数值
<fmt:formatNumber pattern="#.##" value="100.99"></fmt:formatNumber>
格式化日期:
<fmt:formatDate pattern="yyyy-MM-dd" value="${date}"/>
<html>
<head>
<fmt:setLocale value="${pageContext.request.locale}"/>
<fmt:setBundle basename="cn.itcast.f_i18n.msg" var="bundle"/>
<title><fmt:message key="title" bundle="${bundle}"></fmt:message></title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<form name="frmLogin" action="${pageContext.request.contextPath }/admin?method=login" method="post">
<table align="center" border="1">
<tr>
<td><fmt:message key="username" bundle="${bundle}"></fmt:message></td>
<td>
<input type="text" name="userName">
</td>
</tr>
<tr>
<td><fmt:message key="pwd" bundle="${bundle}"></fmt:message></td>
<td>
<input type="password" name="pwd">
</td>
</tr>
<tr>
<td>
<input type="submit" value="<fmt:message key="submit" bundle="${bundle}"/>">
</td>
</tr>
</table>
</form>
</body>
</html>