本地化
Java提供了一个本地化的对象!封装当前语言、国家、环境等特征!所在包:java.util.Locale。
代码示例
1 import java.util.Locale;View Code
2
3 import org.junit.Test;
4
5 public class App {
6
7 @Test
8 //1. 本地化对象:Locale
9 // 封装语言、国家信息的对象,有java.util提供
10 public void testLocale() throws Exception {
11 // 模拟中国语言等环境
12 //Locale locale = Locale.CHINA;
13 Locale locale = Locale.getDefault(); // 当前系统默认的语言环境
14 System.out.println(locale.getCountry()); // CN 国家的简称
15 System.out.println(locale.getDisplayCountry()); // 国家名称
16 System.out.println(locale.getLanguage()); // zh 语言简称
17
18 // 模拟美国国家
19 Locale l_us = Locale.US;
20 System.out.println(l_us.getCountry());
21 System.out.println(l_us.getDisplayCountry());
22 }
23 }
国际化
静态数据国际化
1、使用场景
网站中显示的固定文本的国际化,如:用户名和密码等固定文本。
2、操作步骤
(1)使用properties文件存储所有国家显示的文本字符串。properties文件的命名规则:基础名_语言简称_国家简称.properties。例如:msg_zh_CN.properties、 Msg_en_US.properties。
(2)使用ResourceBundle类,读取国际化资源文件。
3、代码示例
1 public void testI18N() throws Exception {View Code
2
3 // 中文语言环境
4 Locale locale = Locale.US;
5
6 // 创建工具类对象ResourceBundle
7 ResourceBundle bundle = ResourceBundle.getBundle("cn.itcast.f_i18n.msg", locale);
8 // 根据key获取配置文件中的值
9 System.out.println(bundle.getString("hello"));
10 System.out.println(bundle.getString("username"));
11 System.out.println(bundle.getString("pwd"));
12
13 }
动态国际化文本
1、使用场景及解决方法
数值,货币,时间,日期等数据由于可能在程序运行时动态产生,所以无法像文字一样简单地将它们从应用程序中分离出来,而是需要特殊处理。Java 中提供了解决这些问题的 API 类(位于 java.util 包和 java.text 包中)。
2、代码示例
2.1、常用类示例
1 public void testI18N2() throws Exception {View Code
2 // 国际化货币
3 NumberFormat.getCurrencyInstance();
4 // 国际化数字
5 NumberFormat.getNumberInstance();
6 // 国际化百分比
7 NumberFormat.getPercentInstance();
8 // 国际化日期
9 // DateFormat.getDateTimeInstance(dateStyle, timeStyle, aLocale)
10 }
2.2、国际化货币
1 public void testI18N3() throws Exception {View Code
2 // 模拟语言环境
3 Locale locale = Locale.CHINA;
4 // 数据准备
5 double number = 100;
6 // 工具类
7 NumberFormat nf = NumberFormat.getCurrencyInstance(locale);
8 // 国际化货币
9 String m = nf.format(number);
10 // 测试
11 System.out.println(m);
12 }
2.3、面试题:代码计算: $100 * 10
1 public void eg() throws Exception {View Code
2 String str = "$100";
3 int num = 10;
4
5 // 1. 分析str值是哪一国家的货币
6 Locale us = Locale.US;
7 // 2. 国际化工具类
8 NumberFormat nf = NumberFormat.getCurrencyInstance(us);
9 // 3. 解析str国币
10 Number n = nf.parse(str);
11
12 System.out.println(n.intValue() * num);
13 }
2.4、国际化数值
1 public void testI18N4() throws Exception {View Code
2 // 模拟语言环境
3 Locale locale = Locale.CHINA;
4 NumberFormat nf = NumberFormat.getNumberInstance(Locale.US);
5 String str = nf.format(1000000000);
6 System.out.println(str);
7 }
2.5、国际化日期
1 // 国际化 - 动态文本 - 3. 国际化日期View Code
2 /*
3 * 日期
4 * FULL 2015年3月4日 星期三
5 * LONG 2015年3月4日
6 * FULL 2015年3月4日 星期三
7 * MEDIUM 2015-3-4
8 * SHORT 15-3-4
9 *
10 * 时间
11 * FULL 下午04时31分59秒 CST
12 * LONG 下午04时32分37秒
13 * MEDIUM 16:33:00
14 * SHORT 下午4:33
15 *
16 *
17 */
18 @Test
19 public void testI18N5() throws Exception {
20
21 // 日期格式
22 int dateStyle = DateFormat.SHORT;
23 // 时间格式
24 int timeStyle = DateFormat.SHORT;
25
26 // 工具类
27 DateFormat df =
28 DateFormat.getDateTimeInstance(dateStyle, timeStyle, Locale.CHINA);
29 String date = df.format(new Date());
30
31 System.out.println(date);
32 }
2.6、面试题: 请将时间值:09-11-28 上午10时25分39秒 CST,反向解析成一个date对象。
1 public void eg2() throws Exception {View Code
2 String str = "09-11-28 上午10时25分39秒 CST";
3 // 创建DateFormat工具类,国际化日期
4 DateFormat df = DateFormat.getDateTimeInstance(
5 DateFormat.SHORT, DateFormat.FULL, Locale.getDefault());
6 Date d = df.parse(str);
7
8 System.out.println(d);
9 }
页面国际化
页面国际化采用JSTL标签:核心标签库,国际化与格式化标签库。
常用代码:
1 <fmt:setLocale value=""/> 设置本地化对象
2 <fmt:setBundle basename=""/> 设置工具类
3 <fmt:message></fmt:message> 显示国际化文本
4 格式化数值
5 <fmt:formatNumber pattern="#.##" value="100.99"></fmt:formatNumber>
6 格式化日期:
7 <fmt:formatDate pattern="yyyy-MM-dd" value="${date}"/>
代码示例
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>View Code
2 <%--引入jstl国际化与格式化标签库 --%>
3 <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
4
5 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
6 <html>
7 <head>
8 <!-- 一、设置本地化对象 -->
9 <fmt:setLocale value="${pageContext.request.locale}"/>
10 <!-- 二、设置工具类 -->
11 <fmt:setBundle basename="cn.itcast.f_i18n.msg" var="bundle"/>
12
13 <title><fmt:message key="title" bundle="${bundle}"></fmt:message></title>
14 <meta http-equiv="pragma" content="no-cache">
15 <meta http-equiv="cache-control" content="no-cache">
16 <meta http-equiv="expires" content="0">
17 </head>
18
19 <body>
20 <form name="frmLogin" action="${pageContext.request.contextPath }/admin?method=login" method="post">
21 <table align="center" border="1">
22 <tr>
23 <td><fmt:message key="username" bundle="${bundle}"></fmt:message></td>
24 <td>
25 <input type="text" name="userName">
26 </td>
27 </tr>
28 <tr>
29 <td><fmt:message key="pwd" bundle="${bundle}"></fmt:message></td>
30 <td>
31 <input type="password" name="pwd">
32 </td>
33 </tr>
34 <tr>
35 <td>
36 <input type="submit" value="<fmt:message key="submit" bundle="${bundle}"/>">
37 </td>
38 </tr>
39 </table>
40 </form>
41 </body>
42 </html>