/**
* ResourceBundle: 資源包類.
*
* 1. 在類路徑下需要有對(duì)應(yīng)的資源文件: baseName.properties. 其中 baseName 是基名.
* 2. 可以使用 基名_語(yǔ)言代碼_國(guó)家代碼.properties 來添加不同國(guó)家或地區(qū)的資源文件. i18n_zh_CN.properties
* 3. 要求所有基名相同的資源文件的 key 必須完全一致.
* 4. 可以使用 native2ascii 命令來得到 漢字 對(duì)一個(gè)的 asc 碼. Eclipse 內(nèi)置了工具
* 5. 可以調(diào)用 ResourceBundle 的 getBundle(基名, Locale 實(shí)例) 獲取獲取 ResourceBundle 對(duì)象
* 6. 可以調(diào)用 ResourceBundle 的 getString(key) 來獲取資源文件的 value 字符串的值.
* 7. 結(jié)合 DateFormat, NumberFormat, MessageFormat 即可實(shí)現(xiàn)國(guó)際化.
*
*/
@Test
public void testResourceBundle(){
Locale locale = Locale.CHINA;
ResourceBundle resourceBundle = ResourceBundle.getBundle("i18n", locale);
System.out.println(resourceBundle.getString("date"));
System.out.println(resourceBundle.getString("salary"));
String dateLabel = resourceBundle.getString("date");
String salLabel = resourceBundle.getString("salary");
String str = "{0}:{1}, {2}:{3}";
Date date = new Date();
double sal = 12345.12;
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
String dateStr = dateFormat.format(date);
NumberFormat numberFormat = NumberFormat.getCurrencyInstance(locale);
String salStr = numberFormat.format(sal);
String result = MessageFormat.format(str, dateLabel, dateStr, salLabel, salStr);
System.out.println(result);
}
/**
* MessageFormat: 可以格式化模式字符串
* 模式字符串: 帶占位符的字符串: "Date: {0}, Salary: {1}"
* 可以通過 format 方法會(huì)模式字符串進(jìn)行格式化
*/
@Test
public void testMessageFormat(){
String str = "Date: {0}, Salary: {1}";
Locale locale = Locale.CHINA;
Date date = new Date();
double sal = 12345.12;
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
String dateStr = dateFormat.format(date);
NumberFormat numberFormat = NumberFormat.getCurrencyInstance(locale);
String salStr = numberFormat.format(sal);
String result = MessageFormat.format(str, dateStr, salStr);
System.out.println(result);
}
/**
* NumberFormat: 格式化數(shù)字到數(shù)字字符串, 或貨幣字符串的工具類
* 1. 通過工廠方法獲取 NumberFormat 對(duì)象
* NumberFormat.getNumberInstance(locale); //僅格式化為數(shù)字的字符串
* NumberFormat.getCurrencyInstance(locale); //格式為貨幣的字符串
*
* 2. 通過 format 方法來進(jìn)行格式化
* 3. 通過 parse 方法把一個(gè)字符串解析為一個(gè) Number 類型.
*/
@Test
public void testNumberFormat() throws ParseException{
double d = 123456789.123d;
Locale locale = Locale.FRANCE;
//
NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
String str = numberFormat.format(d);
System.out.println(str);
NumberFormat numberFormat2 = NumberFormat.getCurrencyInstance(locale);
str = numberFormat2.format(d);
System.out.println(str);
str = "123?456?789,123";
d = (Double) numberFormat.parse(str);
System.out.println(d);
str = "123?456?789,12 €";
d = (Double) numberFormat2.parse(str);
System.out.println(d);
}
<%@page import="java.util.Locale"%><%@page import="java.util.Date"%><%@ page language="java" contentType="text/html; charset=UTF-8"? ? pageEncoding="UTF-8"%><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>? ? <% Date date = new Date();request.setAttribute("date", date);request.setAttribute("salary", 12345.67);%><%--:,:
--%><% String code = request.getParameter("code");if(code != null){if("en".equals(code)){session.setAttribute("locale", Locale.US);}else if("zh".equals(code)){session.setAttribute("locale", Locale.CHINA);}}%>:,: