程序国际化概述
Internationalization(可以简称为i18n):国际化程序可以这样理解,同一套程序代码可以在各个语言环境下进行使用。
各个语言环境下,只是语言显示的不同,那么具体的程序操作本身都是一样的,那么国际化程序完成的就是这样的一个功能。
Locale类
Locale对象表示了特定的地理、政治和文化地区。需要Locale来执行其任务的操作称为语言环境敏感的操作,它使用Locale为用户量身定制信息。例如,显示一个数值就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗/传统来格式化该数值。使用此类中的构造方法来创建Locale:
-
Locale(String language)
-
Locale(String language, String country)
通过静态方法创建Locale:getDefault()
ResourceBundle类
国际化的实现核心在于显示的语言上,通常的做法是将其定义成若干个属性文件(文件后缀是*.properties),属性文件中的格式采用“key=value”的格式进行操作。
ResourceBundle类表示的是一个资源文件的读取操作,所有的资源文件需要使用ResourceBundle进行读取,读取的时候不需要加上文件的后缀。
-
getBundle(String baseName)
-
getBundle(String baseName,Locale locale)
-
getString(String key)
示例
info_en_US.properties
system.name=EMP Manager System
input.username=Input UserName
input.password=Input Password
login.success=Login Success
login.error=Login Error
info_zh_CN.properties
system.name=员工管理系统
input.username=输入用户名
input.password=输入密码
login.success=登录成功
login.error=登录成败
import java.util.Locale;
import java.util.ResourceBundle;
public class Test {
public static void main(String[] args) {
//创建一个本地语言环境对象,该对象会根据参数设置来自动选择与之相关的语言环境
Locale cn = new Locale("zh","CN");
Locale en = new Locale("en","US");
//获取当前系统默认的语言环境
Locale locale = Locale.getDefault();
//用于绑定属性文件.properties的工具类(参数:全类名+属性文件基本名)
ResourceBundle r = ResourceBundle.getBundle("com.coydone.info",cn);
System.out.println(r.getString("system.name"));
System.out.println(r.getString("input.username"));
System.out.println(r.getString("input.password"));
System.out.println(r.getString("login.success"));
System.out.println(r.getString("login.error"));
}
}
处理动态文本
前面的示例读取的内容都是固定的,如果现在假设要想打印这样的信息”欢迎你,XXX!”,具体的名字不是固定的,那么就要使用动态文本进行程序的处理。
进行动态的文本处理,必须使用java.text.MessageFormat类完成。这个类是java.text.Format的子类。
system.name=员工管理系统
input.username=输入用户名
input.password=输入密码
login.success=登录成功
login.error=登录成败
welcome=欢迎你,{0}!
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
public class Test {
public static void main(String[] args) {
//创建一个本地语言环境对象,该对象会根据参数设置来自动选择与之相关的语言环境
Locale cn = new Locale("zh","CN");
//用于绑定属性文件.properties的工具类(参数:全类名+属性文件基本名)
ResourceBundle r = ResourceBundle.getBundle("com.coydone.info",cn);
String username = r.getString("input.username");
String welcome = r.getString("welcome");
//动态文本格式化
welcome = MessageFormat.format(welcome, username);
System.out.println(welcome);
}
}
评论区