Locale类
要想实现国家化程序开发:首先需要解决的是不同国家用户的区域和语言编码问题,在java.util包里面提供有一个专门描述区域和语言编码的类,Local
类,主要使用两个构造方法进行实例化:
- 构造方法:
public Locale(String language)
; - 构造方法:
public Locale(String language, String country)
;
【范例】实例化Locale类对象
import java.util.Locale;
public class JavaDemo {
public static void main(String[] args) throws Exception{
Locale loc = new Locale("zh","CN");
System.out.println(loc);
}
}
#zh_CN
此时需要的是国家和语言的代码。中文:zh_CN、美国:en_US.
要想自动获得当前的运行环境,可利用Locale类本身默认的方式进行实例化:
- 读取本地默认环境:
public static getDefault
;
import java.util.Locale;
public class JavaDemo {
public static void main(String[] args) throws Exception{
Locale loc = Locale.getDefault();
System.out.println(loc);
}
}
#zh_CN
读取资源文件:ResourceBundle
读取资源文件主要依靠的是java.util.ResourceBundle类完成。定义:public abstract class ResourceBundle extends Object
;
ResourceBundle是一个抽象类,实例化需要使用其中一个static方法:
- 获取Resource Bundle类对象:
public static final ResourceBundle getBundle(String baseName)
;
|- baseName:描述的是资源文件的名称,但是没有后缀 - 根据
key
读取资源内容:public final String getString(String key);
import java.util.ResourceBundle;
public class JavaDemo {
public static void main(String[] args) throws Exception{
ResourceBundle resource = ResourceBundle.getBundle("message.Messages");
String val = resource.getString("info");
System.out.println(val);
}
}
#欢迎访问!这是中文的
如果资源没有放在包里面,则直接编写资源名称即可。
实现国际化程序开发
- 建立
Messages.properties
文件:info=Welcome!欢迎欢迎 - 建立
Messages_zh_CN.properties
文件:info=欢迎访问!这是中文的 - 建立
Messages_en_US.properties
文件: info=Welcome!This is English~
package demo;
import java.util.Locale;
import java.util.ResourceBundle;
public class JavaDemo {
public static void main(String[] args) throws Exception{
Locale loc = new Locale("en","US");
ResourceBundle resource = ResourceBundle.getBundle("message.Messages",loc);
String val = resource.getString("info");
System.out.println(val);
}
}
#Welcome!This is English~
如果不指定Locale,将默认为本地语言版本。
读取顺序:读取指定区域的资源文件>默认的本地资源文件>公共的资源(没有设置区域)。
不同的国家/地区与语言缩写代码
国家/地区 | 语言代码 | 国家地区 | 语言代码 |
简体中文(中国) | zh-cn | 简体中文(台湾地区) | zh-tw |
繁体中文(香港) | zh-hk | 英语(香港) | en-hk |
英语(美国) | en-us | 英语(英国) | en-gb |
英语(全球) | en-ww | 英语(加拿大) | en-ca |
英语(澳大利亚) | en-au | 英语(爱尔兰) | en-ie |
英语(芬兰) | en-fi | 芬兰语(芬兰) | fi-fi |
英语(丹麦) | en-dk | 丹麦语(丹麦) | da-dk |
英语(以色列) | en-il | 希伯来语(以色列) | he-il |
英语(南非) | en-za | 英语(印度) | en-in |
英语(挪威) | en-no | 英语(新加坡) | en-sg |
英语(新西兰) | en-nz | 英语(印度尼西亚) | en-id |
英语(菲律宾) | en-ph | 英语(泰国) | en-th |
英语(马来西亚) | en-my | 英语(阿拉伯) | en-xa |
韩文(韩国) | ko-kr | 日语(日本) | ja-jp |
荷兰语(荷兰) | nl-nl | 荷兰语(比利时) | nl-be |
葡萄牙语(葡萄牙) | pt-pt | 葡萄牙语(巴西) | pt-br |
法语(法国) | fr-fr | 法语(卢森堡) | fr-lu |
法语(瑞士) | fr-ch | 法语(比利时) | fr-be |
法语(加拿大) | fr-ca | 西班牙语(拉丁美洲) | es-la |
西班牙语(西班牙) | es-es | 西班牙语(阿根廷) | es-ar |
西班牙语(美国) | es-us | 西班牙语(墨西哥) | es-mx |
西班牙语(哥伦比亚) | es-co | 西班牙语(波多黎各) | es-pr |
德语(德国) | de-de | 德语(奥地利) | de-at |
德语(瑞士) | de-ch | 俄语(俄罗斯) | ru-ru |
意大利语(意大利) | it-it | 希腊语(希腊) | el-gr |
挪威语(挪威) | no-no | 匈牙利语(匈牙利) | hu-hu |
土耳其语(土耳其) | tr-tr | 捷克语(捷克共和国) | cs-cz |
斯洛文尼亚语 | sl-sl | 波兰语(波兰) | pl-pl |
瑞典语(瑞典) | sv-se | 西班牙语 (智利) | es-cl |
消息格式化
【范例】修改资源文件
文件名 | 修改内容 |
【中文资源文件】message.Messages_zh_CN.properties | info=欢迎{0}的访问,当前日期是{1}! |
【英文资源文件】message.Messages_en_US.properties | info=Welcome {0}, Date:{2}! |
如有需要可修改{0} 和{1}的内容:
此时如果要进行资源读取则会将占位符的信息一起读取出来,所以此时需要利用MessageFormat类进行格式化处理。
在MessageFormat类中提供有一个格式化文本的方法:public static String format(String patter,Obejct ...arguments);
【范例】格式化文本
package demo;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;
public class JavaDemo {
public static void main(String[] args) throws Exception{
Locale loc = new Locale("en","US");
ResourceBundle resource = ResourceBundle.getBundle("message.Messages", loc);
String val = resource.getString("info");
System.out.println(MessageFormat.format(val, "Demon",new SimpleDateFormat("yyyy-MM-dd").format(new Date())));
}
}
#Welcome Demon, Date:{2}!