国际化
来源:互联网 发布:淘宝如何刷层级 编辑:程序博客网 时间:2024/05/18 13:07
Javaweb增强:过滤器、监听器、国际化、文件上传下载、javaMail
l 国际化又简称为 i18n:internationalization
国际化的人:
人,英语,汉语; 可以说这个人是国际化的人;
软件的国际化:
软件
中国: 显示中文,以及服务符合中国习惯的文本字符串!
1999-09-09
美国: 显示英文,以及服务符合他国习惯的文本字符串!
这种软件,就叫国际化的软件!
如何做到国际化的软件,要求:
1. 软件中存储特定的字符串
2. 知道浏览器当前使用哪种语言(Locale )
Locale 本地化
Java提供了一个本地化的对象!封装当前语言、国家、环境等特征!
package cn.itcast.e_locale;import java.util.Locale;import org.junit.Test;public class App {@Test//1. 本地化对象:Locale// 封装语言、国家信息的对象,由java.util提供public void testLocale() throws Exception {// 模拟中国语言等环境//Locale locale = Locale.CHINA;Locale locale = Locale.getDefault();// 当前系统默认的语言环境System.out.println(locale.getCountry()); // CN 国家的简称System.out.println(locale.getDisplayCountry()); // 国家名称System.out.println(locale.getLanguage());// zh 语言简称// 模拟美国国家Locale l_us = Locale.US;System.out.println(l_us.getCountry());System.out.println(l_us.getDisplayCountry());}}/*CN中国zhUS美国*/
国际化
静态数据国际化
网站中显示的固定文本的国际化:“用户名”“密码“
国际化的软件:
1. 存储所有国家显示的文本的字符串
a) 文件: properties
b) 命名: 基础名_语言简称_国家简称.properties
例如:msg_zh_CN.properties 存储所有中文
Msg_en_US.properties 存储所有英文
2. 程序中获取
ResourceBundle类,可以读取国际化的资源文件!
动态文本国际化
中文:1987-09-19 ¥1000
英文: Sep/09 1987 $100
l 数值,货币,时间,日期等数据由于可能在程序运行时动态产生,所以无法像文字一样简单地将它们从应用程序中分离出来,而是需要特殊处理。Java 中提供了解决这些问题的API 类(位于java.util 包和java.text 包中)
App.javapackage cn.itcast.f_i18n;import java.text.DateFormat;import java.text.NumberFormat;import java.util.Date;import java.util.Locale;import java.util.ResourceBundle;import org.junit.Test;public class App {// 国际化 - 静态数据@Testpublic void testI18N() throws Exception {// 中文语言环境Locale locale = Locale.US;// 创建工具类对象ResourceBundleResourceBundle bundle = ResourceBundle.getBundle("cn.itcast.f_i18n.msg", locale);// 根据key获取配置文件中的值System.out.println(bundle.getString("hello"));System.out.println(bundle.getString("username"));System.out.println(bundle.getString("pwd"));}// 国际化 - 动态文本 - 0. 概述@Testpublic void testI18N2() throws Exception {// 国际化货币NumberFormat.getCurrencyInstance();// 国际化数字NumberFormat.getNumberInstance();// 国际化百分比NumberFormat.getPercentInstance(); // 国际化日期//DateFormat.getDateTimeInstance(dateStyle, timeStyle, aLocale)}// 国际化 - 动态文本 - 1. 国际化货币@Testpublic 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);}//面试题: 代码计算: $100 * 10 @Testpublic void eg() throws Exception {String str = "$100";int num = 10;// 1. 分析str值是哪一国家的货币Locale us = Locale.US;// 2. 国际化工具类NumberFormat nf = NumberFormat.getCurrencyInstance(us);// 3. 解析str国币Number n = nf.parse(str);System.out.println(n.intValue() * num);}// 国际化 - 动态文本 - 2. 国际化数值@Testpublic void testI18N4() throws Exception {// 模拟语言环境Locale locale = Locale.CHINA;NumberFormat nf = NumberFormat.getNumberInstance(Locale.US);String str = nf.format(1000000000);System.out.println(str);}// 国际化 - 动态文本 - 3. 国际化日期/* * 日期 * FULL 2015年3月4日 星期三 * LONG 2015年3月4日 * FULL 2015年3月4日 星期三 * MEDIUM 2015-3-4 * SHORT 15-3-4 * * 时间 * FULL 下午04时31分59秒 CST * LONG 下午04时32分37秒 * MEDIUM 16:33:00 * SHORT 下午4:33 * * */@Testpublic 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);}// 面试2: 请将时间值:09-11-28 上午10时25分39秒 CST,反向解析成一个date对象。@Testpublic void eg2() throws Exception {String str = "09-11-28 上午10时25分39秒 CST";// 创建DateFormat工具类,国际化日期DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.FULL, Locale.getDefault());Date d = df.parse(str);System.out.println(d);}}msg_en_US.properties
hello=Hellousername=User Namepwd=Passwordtitle=Login Pagesubmit=Submit \!msg.properties
hello=\u4F60\u597Dusername=\u7528\u6237\u540Dpwd=\u5BC6\u7801title=\u767B\u9646\u9875\u9762submit=\ \u767B\u9646
Jsp页面国际化
login.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><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:setBundlebasename=""/> 设置工具类
<fmt:message></fmt:message> 显示国际化文本
格式化数值
<fmt:formatNumberpattern="#.##" value="100.99"></fmt:formatNumber>
格式化日期:
<fmt:formatDatepattern="yyyy-MM-dd" value="${date}"/>
login_jstl.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%--引入jstl国际化与格式化标签库 --%><%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><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>index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%--引入jstl国际化与格式化标签库 --%><%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> </head> <% request.setAttribute("date",new Date()); %> <body> <!-- 格式化金额 格式: 0.00 保留2为小数,会自动补0 #.## 保留2为小数,不自动补0 --> <fmt:formatNumber pattern="#.##" value="100.99"></fmt:formatNumber> <!-- 格式化日期 --> <fmt:formatDate pattern="yyyy-MM-dd" value="${date}"/> </body></html>