國際化
所謂國際化程序指的是同一套程序代碼可以在不同的國家使用,可以根據其應用的國家自動在項目中顯示出本國的相應文字信息。
使用Locale類定義語言環境
Locale類的常用方法
No. | 方法 | 類型 | 描述 |
---|---|---|---|
1 | public Locale(String language,String country) | 構造 | 設置使用的語言以及國家編碼 |
2 | public static Locale getDefault() | 普通 | 取得當前語言環境下的Locale類對象 |
例:輸出Locale類對象
package Project.Study.LocaleClass;
import java.util.Locale;
public class Test1 {
public static void main(String[]args){
Locale locale=Locale.getDefault();
System.out.println(locale);
}
}
//結果:
//zh_CN
我們可以看到,輸出部分“zh_CN”由兩個部分組成,其中“zh”表示現在使用的語言是中文,而“CN”表示現在的國家是中國。
利用ResourceBundle讀取文件
資源文件一般都是以“key=value”的形式保存文本信息,這樣在進行信息讀取時就可以根據指定的key取得對應的value數據,但是資源文件的文件名稱是有要求的,必須以“*.properties”作爲文件後綴。
ResourceBundle類的常用方法
No. | 方法 | 類型 | 描述 |
---|---|---|---|
1 | public static final ResourceBundle getBundle(String baseName) | 普通 | 根據當前默認語言環境,取得資源對象 |
2 | public static final ResourceBundle getBundle(String baseName,Locale locale) | 普通 | 根據指定的語言環境,取得資源對象 |
3 | public final String getString(String key) | 普通 | 根據key取得對應的value數據 |
例:在IDEA中創建一個"*.properties"文件
如圖,右鍵點擊
輸入所創建文件的名稱,點擊OK
這樣,一個"*.properties"文件就創建完成了
接着就是往文件裏面寫入信息了
例:讀取資源文件
package Project.Study.LocaleClass;
import java.util.ResourceBundle;
public class Test2 {
public static void main(String[]args){
//訪問的時候不用加上後綴,因爲默認找到的後綴就是“*.properties”
ResourceBundle resourceBundle=ResourceBundle.getBundle("Project.Study.LocaleClass.data1");//文件的存放地址
System.out.println(resourceBundle.getString("hello"));//根據文件中定義的key取得對應的value數據
}
}
//結果:
//Hello World!!!
例:讀取數據並且動態設置內容
資源文件
package Project.Study.ResourceBundleClass;
import java.text.MessageFormat;
import java.util.ResourceBundle;
public class Test1 {
public static void main(String[]args){
//訪問的時候不用加上後綴,因爲默認找到的後綴就是“*.properties”
ResourceBundle resourceBundle=ResourceBundle.getBundle("Project.Study.ResourceBundleClass.test1_data");
System.out.println(MessageFormat.format(resourceBundle.getString("data"),"World","!!!"));//設置兩個佔位符的內容
}
}
//結果:
//Hello World!!!
多資源讀取
關於資源文件的讀取順序:
在進行資源文件的定義時可能會出現兩類資源:
1.公共資源(沒有設置語言與國家編碼)
2.具體的語言資源文件(設置了語言與國家編碼)
因爲存在兩類文件,所以在讀取的時候會優先讀取存在具體語言與國家編碼的資源文件,如果讀取不到則再讀取公共資源。
例:讀取資源文件
定義中文資源文件
定義英文(英語——美國)資源文件
package Project.Study.ResourceBundleClass;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
public class Test2 {
public static void main(String[]args){
Locale zhLoc=new Locale("zh","CN");//中國——中文
Locale enLoc=new Locale("en","US");//英語——美國
ResourceBundle zhRB=ResourceBundle.getBundle("Project.Study.ResourceBundleClass.Message",zhLoc);//讀取中文資源文件
ResourceBundle enRB=ResourceBundle.getBundle("Project.Study.ResourceBundleClass.Message",enLoc);//讀取英文資源文件
//讀取資源內容
System.out.println(MessageFormat.format(zhRB.getString("data"),"World","!!!"));
System.out.println(MessageFormat.format(enRB.getString("data"),"World","!!!"));
}
}
//結果:
//Hello World!!!
//Hi World!!!
注意:如果資源中的佔位符不足,則就算輸出時設置了相應的數據也不會輸出這些數據;反之,如果資源中設置了相應的佔位符,但輸出時沒有設置相應的數據,則會將佔位符原封不動地輸出,如: