Step By Step(Java 国际化篇)(一)

2014-11-24 02:47:47 · 作者: · 浏览: 0

Java编程语言是第一个设计成为全面支持国际化的语言。从一开始,它就具备了进行有效的国际化所必须的一个重要特征:使用Unicode来处理所有字符串。支持Unicode使得在Java编程语言中,编写程序来操作多种语言的字符串变得异常方便。多数程序员认为进行国际哈需要做的事情就是支持Unicode并在用户接口中对消息进行翻译。然而在实际的开发中,国际化一个程序所需要做的绝不仅仅是提供Unicode支持,它还包括日期、时间、货币和数字等格式上的差异。
1. Locales:
需要依赖国际化的两个主要格式化类为NumberFormat和DateFormat,它们在通过工厂方法获取其实现子类时,都会依赖参数Locale来决定最终被实例化的子类,见如下代码:
1 public static void main(String[] args) {
2 Locale loc = new Locale("de","DE");
3 NumberFormat currFmt = NumberFormat.getCurrencyInstance(loc);
4 double amt = 123456.78;
5 String result = currFmt.format(amt);
6 System.out.println("The result = " + result);
7 }
8 /* 输出结果如下:
9 The result = 123.456,78 */
从结果可以看出原有的货币格式被转换为德语的格式了。以上例子是从数字格式化为字符串,同样还可以通过字符串转换为数字,但是这要依赖parse方法,见如下代码:
1 public static void main(String[] args) throws ParseException {
2 Locale loc = new Locale("de","DE");
3 NumberFormat fmt = NumberFormat.getNumberInstance(loc);
4 String amt = "123.456,78";
5 double result = fmt.parse(amt).doubleva lue();
6 System.out.println("The result = " + result);
7 }
8 /* 输出结果如下:
9 The result = 123456.78 */
在上面的代码中都是通过直接给出ISO定义的语言和地区代码缩写的方式来构造Locale对象的,事实上Java中提供了一组预定义的Locale静态对象来表示不同的语言和地区的Locale实例,如:
Locale.CANADA
Locale.CANADA_FRENCH
Locale.CHINA
Locale.FRANCE
Locale.GERMANY
Locale.ITALY
Locale.JAPAN
Locale.KOREA
...
以下的仅设定了语言而没有设定位置:
Locale.CHINESE
Locale.ENGLISH
Locale.FRENCH
Locale.GERMAN
Locale.ITALIAN
...
以下再给出几个关于Locale的示例代码:

1 //设置缺省国际化Locale,注意:该操作只是修改当前应用程序的
2 //本地化,而不是修改当前操作系统的。
3 public static void main(String[] args) {
4 Locale.setDefault(Locale.FRANCE);
5 DateFormat df = DateFormat.getInstance();
6 NumberFormat nf = NumberFormat.getInstance();
7 System.out.println(df.format(new Date()));
8 System.out.println(nf.format(123.4567));
9 }
10 /* 输出结果如下:
11 26/08/11 23:28
12 123,457 */
13
14 //获取当前机器支持语言的列表
15 public static void main(String[] args) {
16 Locale[] locales = Locale.getAvailableLocales();
17 for (Locale loc : locales)
18 System.out.println(loc.getDisplayName());
19 }
2. 数字格式:
1 //将数组中的数字转换为指定的美国本地化显示格式
2 public static void main(String[] args) {
3 int data[] = { 100, 1000, 10000, 1000000 };
4 NumberFormat nf = NumberFormat.getInstance(Locale.US);
5 for (int i = 0; i < data.length; ++i) {
6 System.out.println(data[i] + "\t" + nf.format(data[i]));
7 }
8 }
9 //格式化BigDecimal
10 public static void main(String[] args) {
11 StringBuffer buffer = new StringBuffer();
12 Locale it = Locale.ITALY;
13 Locale.setDefault(it);
14 BigDecimal rate = new BigDecimal(".03250000");
15 BigDecimal months = new BigDecimal("12");
16 BigDecimal monthlyRate = rate.divide(months, BigDecimal.ROUND_HALF_DOWN);
17 NumberFormat pf = new DecimalFormat("#,##0.00000%");
18 buffer.append("Annual rate : " + pf.format(rate.doubleva lue()) + "\n");
19 buffer.append("Monthly rate: " + pf.format(monthlyRate.doubleva lue()) + "\n");
20 BigDecimal balance = new BigDecimal("10000.00