【Java学习笔记】本地化
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
先介绍几个术语:
- i18n: 就是internationalization, 国际化,由于首字母"i"和末尾字母"n"间有18个字符,所以简称i18n. internationalization指为了使应用程序能适应不同的语言和地区间的变化而不作系统性的变化所采取的设计措施。
- l10n: 就是localization, 本地化,由于首字母"l"和末尾字母"n"间有10个字母,所以简称l10n. localization指为了使应用软件能够在某一特定语言环境或地区使用而加入本地特殊化部件和翻译后文本的过程。
- locale: 简单来说是指语言和区域进行特殊组合的一个标志。
1.文字的本地化
import java.util.ResourceBundle;
import java.util.Locale;
public class I18nDemo1 {
static public void main(String arg[]) {
Locale loc;
ResourceBundle bundle;
/* File: Demo1_en_US.properties */
loc = new Locale("en","US");
bundle = ResourceBundle.getBundle("Demo1 ",loc);
System.out.println(bundle.getString("greeting"));
System.out.println(bundle.getString("question"));
System.out.println(bundle.getString("farewell"));
System.out.println("--------------------------");
/* File: Demo1_en_US_TX.properties */
loc = new Locale("en","US","TX ");
bundle = ResourceBundle.getBundle("Demo1 ",loc);
System.out.println(bundle.getString("greeting"));
System.out.println(bundle.getString("question"));
System.out.println(bundle.getString("farewell"));
}
}
而本地化配置文件如下:
Demo1_en_US.properties:
greeting = Hello.
farewell = Goodbye.
question = Are you ready?
Demo1_en_US_TX.properties:
greeting = Howdy.
farewell = S'long.
question = Is your gun loaded?
国际化资源文件的命名规范规定资源名称采用以下的方式进行命名:<资源名>_<语言代码>_<国家/地区代码>.properties
其中,语言代码和国家/地区代码都是可选的。
2.数字的本地化:
import java.util.Locale;
import java.util.Date;
import java.text.NumberFormat;
import java.text.DateFormat;
public class I18nDemo2 {
static public void main(String arg[]) {
I18nDemo2 demo = new I18nDemo2();
demo.showLoc(new Locale("en","US"));
System.out.println("-----------");
demo.showLoc(new Locale("fr","FR"));
System.out.println("-----------");
demo.showLoc(new Locale("de","DE"));
}
public void showLoc(Locale loc) {
NumberFormat nfmt;
DateFormat dfmt;
System.out.println(loc);
nfmt = NumberFormat.getNumberInstance(loc);
System.out.println(nfmt.format(123456));
System.out.println(nfmt.format(123456.78));
nfmt = NumberFormat.getCurrencyInstance(loc);
System.out.println(nfmt.format(123456.78));
nfmt = NumberFormat.getPercentInstance(loc);
System.out.println(nfmt.format(.78));
dfmt = DateFormat.getDateInstance(DateFormat.DEFAULT,loc);
System.out.println(dfmt.format(new Date()));
}
}
3.看看到底支持什么本地化:
import java.util.Locale;
import java.text.NumberFormat;
public class I18nDemo3 {
static public void main(String arg[]) {
Locale loc[] = NumberFormat.getAvailableLocales();
for(int i=0; i<loc.length; i++)
System.out.println(loc[i]);
}
}