首先,介绍一下国际化英文为Internationalization,由于太长了,所以它又称为i18n(英文单词 internationalization的首末字符i和n,18为中间的字符数)。
除了i18n还有l10n(localization),g11n(globalization),还有m17n(multilingualization)
- i18n支持多种语言,但是同一时间只能是英文和一种选定的语言,例如英文+中文、英文+德文、英文+韩文等等;
- l10n(localization),支持2种语言,英文和另外一种语言(例如中文);
- g11n(globalization),简单的理解可以认为g11n = i18n + L10n。
- m17n(multilingualization)可以在同一时间支持多种语言,例如你可以在一个页面里看到中文、英文、德文和韩文。
国际化的实现只需要三步:
1、设置本地的语言环境:Locale 类
Locale locale = new Locale("zh", "CN");
Locale locale1 = Locale.US;
Locale locale2 = Locale.getDefault();
这三种方式都可以设置,locale2是自动获取当前的系统语言环境
2、配置国际化资源文件: 划重点
首先资源文件 BaseName[_language][_country][_variant].properties
先讲解一下资源文件的加载顺序,这个顺序一定要了解!
baseName _ 指定的language _ 指定的country_ 指定的variant
baseName _ 指定的language _ 指定的country
baseName _ 指定的language
baseName _默认的language _默认的country_默认的variant
baseName _默认的language _默认的country
baseName_默认的language
baseName
什么意思?就是首先加载指定的资源文件,再加载当前语言环境默认的资源文件,再加载顶级的资源文件。
3、通过ResourceBundle工具类绑定资源文件
ResourceBundle res = ResourceBundle.getBundle("com.zuobar.locale.error.localeStrings", locale);
最后你就可以使用了!怎么用?
String zuobar = res.getString("zuobar");
号外!资源化文件可以使用通配符{0}, 怎么使用呢?
String info = MessageFormat.format(info, userName);