一:国际化
1.国际化的概念:一款软件希望不同的国家和地区的使用者都可以使用,这个时候软件中的一些内容和数据需要根据用户地区信息不同而展示成不同的样子。
2.国际化的组成部分:
(1)页面中固定文本元素的国际化
ResourceBundle 资源包
<fmt>
示例代码:框架截图:
java代码:
package com.dzq.i18n; import java.util.Locale; import java.util.ResourceBundle; public class ResourceBundleDemo { public static void main(String[] args) { //根据你的地区,调用不同资源文件 /** * resourcebundle ,查找资源文件,首先找指定的,没有,就找操作系统的,还找不到就找默认的 */ ResourceBundle bundle= ResourceBundle.getBundle("resource",Locale.ENGLISH);//Locale.CHINA读取指定资源文件 String value=bundle.getString("username"); System.out.println(value); } }
配置文件:
username=username
password=password
submit=sunbmit
username=u7528u6237u540D
password=u5BC6u7801
submit=u63D0u4EA4
username=defaultusername
password=defaultpassword
submit=defaultsunbmit
jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>java方式实现页面国际化</h1><hr> <% Locale local=request.getLocale(); ResourceBundle bundle=ResourceBundle.getBundle("resource",local); %> <form action="#"> <%=bundle.getString("username") %><input type="text" /> <%=bundle.getString("password") %>:<input type="text" /> <input type="submit" value="<%=bundle.getString("submit") %>" /> </form> <h1>fmt标签方式实现页面国际化</h1><hr> <fmt:setBundle basename="resource" var="bundle" scope="page"/> <form action="#"> <fmt:message bundle="${bundle }" key="username"/><input type="text" /> <fmt:message bundle="${bundle }" key="password"/><input type="text" /> <input type="submit" value="<fmt:message bundle="${bundle }" key="submit"/>" /> </form> </body> </html>
效果截图:
(2)对程序动态产生的数据的国际化 -- 日期时间/货币
~1.日期时间DateFormat -- SimpleDateFormat
static DateFormat getDateInstance()
获取日期格式器,该格式器具有默认语言环境的默认格式化风格。
static DateFormat getDateInstance(int style)
获取日期格式器,该格式器具有默认语言环境的给定格式化风格。
static DateFormat getDateInstance(int style, Locale aLocale)
获取日期格式器,该格式器具有给定语言环境的给定格式化风格。
static DateFormat getTimeInstance()
获取时间格式器,该格式器具有默认语言环境的默认格式化风格。
static DateFormat getTimeInstance(int style)
获取时间格式器,该格式器具有默认语言环境的给定格式化风格。
static DateFormat getTimeInstance(int style, Locale aLocale)
获取时间格式器,该格式器具有给定语言环境的给定格式化风格。
static DateFormat getDateTimeInstance()
获取日期/时间格式器,该格式器具有默认语言环境的默认格式化风格。
static DateFormat getDateTimeInstance(int dateStyle, int timeStyle)
获取日期/时间格式器,该格式器具有默认语言环境的给定日期和时间格式化风格。
static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale)
获取日期/时间格式器,该格式器具有给定语言环境的给定格式化风格。
String format(Date date)
示例代码:
package com.dzq.dateformat; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import org.junit.Test; public class DateFormatDemo { /** * 将日期对象转换成字符串表示形式,此时根据地区语言环境不同,转成不同的字符串形式 */ @Test public void test1(){ Date date=new Date(); DateFormat format = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, Locale.CHINA); String datestr=format.format(date); System.out.println(datestr); } /** * 将字符串转换成日期 * @throws ParseException */ @Test public void test2() throws ParseException{ String datestr="2016年4月17日 星期日 上午09时31分40秒 CST"; DateFormat format=DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, Locale.CHINA); Date date=format.parse(datestr); System.out.println(date.toLocaleString()); } @Test public void test3() throws ParseException{ String datestr="09月~24日##2016年**21时%53分%59秒"; SimpleDateFormat format=new SimpleDateFormat("MM月~dd日##yyyy年**HH时%mm分%ss秒"); Date date=format.parse(datestr); System.out.println(date.toLocaleString()); } @Test public void test4(){ Date date=new Date(); SimpleDateFormat format=new SimpleDateFormat("MM月~dd日##yyyy年**HH时%mm分%ss秒"); String datestr=format.format(date); System.out.println(datestr); } }
~2.货币
static NumberFormat getCurrencyInstance()
返回当前默认语言环境的货币格式。
static NumberFormat getCurrencyInstance(Locale inLocale)
返回指定语言环境的货币格式。
1000 -- > $1000.00 ¥1000.00
package com.dzq.numberformat; import java.text.NumberFormat; import java.text.ParseException; import java.util.Locale; import org.junit.Test; public class NumberFormatDemo { /** * 将数字表示成字符串,根据地区转换 */ @Test public void test1(){ double money=10000.00; NumberFormat format=NumberFormat.getCurrencyInstance(Locale.CHINA); String moneystr=format.format(money); System.out.println(moneystr); } @Test public void test2() throws ParseException{ String moneystr="¥10,000.00"; NumberFormat format=NumberFormat.getCurrencyInstance(Locale.CHINA); double money=format.parse(moneystr).doubleValue(); System.out.println(money); } }
~3.消息国际化
示例代码:
package com.dzq.messageformat; import java.text.MessageFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; public class MSGFormatDemo { //At 12:30 pm on jul 3,1998, a hurricance destroyed 99 houses and caused $1000000 of damage //当一个语句中有多个和国际化相关的内容时,需要先切割字符串将和国际化相关的数据国际化后再拼接字符串. public static void main(String[] args) { String str = "At {0,time,full} on {1,date,full}, a hurricance destroyed {2,number} houses and caused {3,number,currency} of damage"; MessageFormat format = new MessageFormat(str,Locale.CHINA); Calendar c = Calendar.getInstance(); c.set(1998, 6, 3, 12, 30, 0); Date date = c.getTime(); str = format.format(new Object[]{date,date,99,1000000}); System.out.println(str); } }