1.对国际化程序的理解
Internationalization:国际化程序可以这样理解:
同一套程序代码可以在各个语言环境下进行使用。
各个语言环境下,只是语言显示的不同,那么具体的程序操作本身都是一样的,那么国家化程序完成的就是那样的一个功能。
2.Locale类
Locale对象表示了特定的地理、政治和文化地区。需要Locale来执行其任务的操作称为语言环境敏感的操作,它使用Locale为用户量身定制信息。例如,显示一个数值就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗传统来格式化该数值。
使用此类中的构造方法来创建Locale:
Locale(String language)
Locale(String language,String country)
通过静态方法创建Locale:
getDefault()
3.ResourcBundle类
国际化的实现核心在于显示的语言上,通常的做法是将其定义成若干个属性文件(文件后缀是*.properties),属性文件中的格式采用“key=value”的格式进行操作。
ResourceBundle类表示的是一个资源文件的读取操作,所有的资源文件需要使用
ResourceBundle进行读取,读取的时候不需要加上文件的后缀。
getBundle(String baseName)
getBundle(String baseName,Locale locale)
getString(String key)
4.处理动态文本
前面的实例读取的内容都是固定的,如果现在假设要想打印这样的信息“欢迎你,XXX”,具体的名字不是固定的,那么就要使用动态文本进行程序的处理。
进行动态的文本处理,必须使用java.text.MessageFormat类完成。这个类是java.text.Format的子类。
package com.vince.i18n;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Scanner;
/**
* 程序国际化
* @author lamp
*
*/
public class I18nDemo {
public static void main(String[] args) {
//创建一个本地语言环境对象()
Locale locale = new Locale("zh", "CN");
Locale locale2 = Locale.US;
Locale locale3 = Locale.getDefault();
//模拟用户登录功能
//通过ResourceBundle工具类绑定资源文件(包名.文件名的基本名称)
ResourceBundle res = ResourceBundle.getBundle("com.vince.i18n.info",locale2);
Scanner input = new Scanner(System.in);
//从绑定的资源文件(属性文件)中根据key获取对应的value
String inputKey = res.getString("input");
String usernameKey = res.getString("username");
String passwordKey = res.getString("password");
String infoSuccessKey = res.getString("info.success");
String infoErrorKey = res.getString("info.error");
System.out.println(inputKey+usernameKey);
String username = input.next();
System.out.println(inputKey+passwordKey);
String password = input.next();
if("admin".equals(username) && "123".equals(password)){
//处理动态文本(模式,真正要替换的值)
String success = MessageFormat.format(infoSuccessKey, username);
System.out.println(success);
}else{
System.out.println(infoErrorKey);
}
}
}
info_en_US.properties
username=UserName
password=Password
input=please input
info.success=welcome to login QVOD,{0}
info.error=login fail
info_zh_CN.properties
username=\u7528\u6237\u540D
password=\u5BC6\u7801
input=\u8BF7\u8F93\u5165
info.success=\u6B22\u8FCE\u767B\u5F55\u5FEB\u64AD\uFF0C{0}
info.error=\u767B\u5F55\u5931\u8D25