随着国际化的潮流,越来越多的APP产品开发了多个国际版本。而在网页产品中,很多就是对于网页上显示的文字内容进行了一个翻译操作,根据用户的需求翻译为不同的语言。
java提供了一个强大的Locale类可以帮助我们实现这一功能。
locale类提供了三种初始化的方法,每一个初始化的方法需要的参数个数不同。一共有三个参数:
language:这个是一个必须的参数,初始化需要使用的语言。
比如:en(英语),zh(中文), de(德语)等等。
country:国家,指定语言的国家版本。
比如:US,CA等等。
variant:个人把这个理解为类别,比如有四川话,湖南话等等,但都是中文。
public Locale(String language, String country, String variant) {
if (language== null || country == null || variant == null) {
throw new NullPointerException();
}
baseLocale = BaseLocale.getInstance(convertOldISOCodes(language), "", country, variant);
localeExtensions = getCompatibilityExtensions(language, "", country, variant);
}
public Locale(String language, String country) {
this(language, country, "");
}
public Locale(String language) {
this(language, "", "");
}
接下来讲一讲locale的应用。
创建需要properties文件,以及对应的不同语言的版本。放在resource目录下。文件的内容
test=文件名。
简单的进行一个测试
package com.leetcode.arrayAndString;
import java.util.Locale;
import java.util.ResourceBundle;
/**
* created by Eden
*/
public class ResouceTest {
public static void main(String[] args) {
//对应获取到的文件就是test_zh
Locale locale1 = new Locale("zh");
ResourceBundle resourceBundle1 = ResourceBundle.getBundle("test", locale1);
System.out.println("locale1:" + resourceBundle1.getString("test"));
//对应获取到的文件应该是是test_de,但这个文件不存在,获取系统默认的locale初始化的文件test_en_US,因为系统的初始化环境的locale的language是en,country是US.
//该文件不存在进一步获取test_en,依旧不存在则获取test文件,都不存在则会报错。
Locale locale2 = new Locale("de");
ResourceBundle resourceBundle2 = ResourceBundle.getBundle("test", locale2);
System.out.println("locale2:"+resourceBundle2.getString("test"));
//对应获取到的文件就是test_en
Locale locale3 = new Locale("en");
ResourceBundle resourceBundle3 = ResourceBundle.getBundle("test", locale3);
System.out.println("locale3:"+resourceBundle3.getString("test"));
//对应获取到的文件就是test_de_CA_1
Locale locale4 = new Locale("de", "CA", "1");
ResourceBundle resourceBundle4 = ResourceBundle.getBundle("test", locale4);
System.out.println("locale5:"+resourceBundle4.getString("test"));
//对应获取到的文件就是test_de_CA_2
Locale locale5 = new Locale("de", "CA", "2");
ResourceBundle resourceBundle5 = ResourceBundle.getBundle("test", locale5);
System.out.println("locale5:"+resourceBundle5.getString("test"));
//对应获取到的文件就是test_en_US
Locale locale6 = new Locale("en","US");
ResourceBundle resourceBundle6 = ResourceBundle.getBundle("test", locale6);
System.out.println("locale6:"+resourceBundle6.getString("test"));
}
}
测试结果
可以根据初始化locale的语言参数(language),国家参数(country),类别参数(variant),获取不同文件里面的内容。
在实际项目中就可以根据前端用户选择的语言、国家等来初始化locale,从而实现页面的翻译。