Application Internationalization 简:I18N
1、什么是I18N?
同一套程序代码可以在不同语言环境下进行使用。在不同语言环境下,程序里的语言显示不同。
2、在Java中,要实现多语言环境
1)使用Locale类创建一个地区语言环境对象
2)创建不同语言的资源文件(<基本名>_<语言代码>_<国家/地区代码>.properties) 不同语言属性文件,基本名要相同。
3)使用ResourceBundle类绑定不同的资源文件 (资源文件的包名.基本名,语言环境对象)
4)通过ResourceBundle类对象,获取不同语言环境下的Key-Value值,从而在程序中显示不同的语言
5)如果在语言属性文件中,使用通配符或占位符,{0},{1}等,则使用动态文本处理类java.text.MessageFormat类,处理动态文本。
3、代码举例
1)
package MultiLanguage;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Scanner;
public class LocaleDemo {
public static void main(String[] args) {
//创建一个本地语言环境对象(中文)
Locale locale = new Locale("zh", "CN");
Locale locale1 = Locale.US;
Locale locale2 = Locale.getDefault();
//通过ResourceBundle工具类绑定资源文件(包名.文件名(基本名称不包括语言部分和后缀部分))
ResourceBundle res = ResourceBundle.getBundle("MultiLanguage.info", locale);
//模拟用户登陆
Scanner in = new Scanner(System.in);
//从属性文件中根据key获取value值
String input = res.getString("input");
String username = res.getString("username");
String passwd = res.getString("passwd");
String infoSuccess = res.getString("info.success");
String infoError = res.getString("info.error");
System.out.println(input + username);
String userName = in.next();
System.out.println(input + passwd) ;
String password = in.next();
if("admin".equals(userName) && "123".equals(password)){
//处理动态文本(模式, 要替换的值……)
String success = MessageFormat.format(infoSuccess, userName);
System.out.println(success);
}else {
System.out.println(infoError);
}
}
}
2)语言属性文件
info_zh_CN.properties
username=\u7528\u6237\u540d
passwd=\u5BC6\u7801
input=\u8BF7\u8F93\u5165
info.success=\u6B22\u8FCE\uff0c{0}
info.error=\u767B\u5f55
info_en_US.properties
username=username
passwd=passwd
input=input
info.success=welcome,{0}
info.error=error

1、什么是I18N?
同一套程序代码可以在不同语言环境下进行使用。在不同语言环境下,程序里的语言显示不同。
2、在Java中,要实现多语言环境
1)使用Locale类创建一个地区语言环境对象
2)创建不同语言的资源文件(<基本名>_<语言代码>_<国家/地区代码>.properties) 不同语言属性文件,基本名要相同。
3)使用ResourceBundle类绑定不同的资源文件 (资源文件的包名.基本名,语言环境对象)
4)通过ResourceBundle类对象,获取不同语言环境下的Key-Value值,从而在程序中显示不同的语言
5)如果在语言属性文件中,使用通配符或占位符,{0},{1}等,则使用动态文本处理类java.text.MessageFormat类,处理动态文本。
3、代码举例
1)
package MultiLanguage;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Scanner;
public class LocaleDemo {
public static void main(String[] args) {
//创建一个本地语言环境对象(中文)
Locale locale = new Locale("zh", "CN");
Locale locale1 = Locale.US;
Locale locale2 = Locale.getDefault();
//通过ResourceBundle工具类绑定资源文件(包名.文件名(基本名称不包括语言部分和后缀部分))
ResourceBundle res = ResourceBundle.getBundle("MultiLanguage.info", locale);
//模拟用户登陆
Scanner in = new Scanner(System.in);
//从属性文件中根据key获取value值
String input = res.getString("input");
String username = res.getString("username");
String passwd = res.getString("passwd");
String infoSuccess = res.getString("info.success");
String infoError = res.getString("info.error");
System.out.println(input + username);
String userName = in.next();
System.out.println(input + passwd) ;
String password = in.next();
if("admin".equals(userName) && "123".equals(password)){
//处理动态文本(模式, 要替换的值……)
String success = MessageFormat.format(infoSuccess, userName);
System.out.println(success);
}else {
System.out.println(infoError);
}
}
}
2)语言属性文件
info_zh_CN.properties
username=\u7528\u6237\u540d
passwd=\u5BC6\u7801
input=\u8BF7\u8F93\u5165
info.success=\u6B22\u8FCE\uff0c{0}
info.error=\u767B\u5f55
info_en_US.properties
username=username
passwd=passwd
input=input
info.success=welcome,{0}
info.error=error