Java 国际化 i18n
国际化信息也成为本地化信息,一般需要2个条件才能确定一个特定的国际化信息,分别是:“语言类型” 和 “国家/地区信息”,Java 为国际化提供了一系列类支持;
常用的
“语言类型” 和 “国家/地区信息”代码如下:
语言类型代码:
中文 | zh |
英语 | en |
日语 | ja |
法语 | fr |
国家/地区代码:
中国大陆 | CN |
中国香港 | HK |
美国 | US |
英国 | EN |
完整语言代码可以参见:
http://www.lingoes.cn/zh/translator/langcode.htm
完整国家/地区代码可以参见:
http://www.loc.gov/standards/iso639-2/php/English_list.php
以下示例代码的完整代码地址:
https://gitee.com/assad/springframework-test-i18n
Locale
java.util.Locale 是表示“语言”和“国家/地区”的本地化类,是 Java 创建国际化应用的基础,以下是一些示例使用:
//带有语言和国际地区信息的 Locale
Locale local1 = new Locale("zh","CN");
//带有语言信息的 Locale
Locale local2 = new Locale("zh");
//等同于 Locale("zh","CN");
Locale locale3 = Locale.CHINA;
//等同于 Locale("zh");
Locale locale4 = Locale.CHINESE;
//获取默认Locale
Locale defaultLocale = Locale.getDefault();
如果在测试时需要改变系统默认的本地化设置,可以在启动JVM时通过命令参数指定:
java -Duser.language=zh -Duser.region=CN MainClass
本地化工具类
Java 的 java.text 包提供了一系列支持本地化格式化操作的工具类,如:
NumberFormat,DateFormat,MessageFormat;
DateFormat
java.text.DateFormat 用于对日期时间进行本地化格式化操作,本身实现为一个工厂类,可以通过 DataFormat.getXxxInstance() 获取实例;
① 格式化日期
Date date = new Date();
Locale locale = new Locale("en","US");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM,locale);
String fmtStr = dateFormat.format(date); //fmtStr = "Dec 1, 2017"
② 格式化时间
Date date = new Date();
Locale locale = new Locale("en","U