國際化是指應用程式運行時,可根據客戶端OS的國家/地區、語言的不同而顯示不同的界面,比如客戶端OS的語言環境為大陸的簡體中文,程式就顯示為簡體中文,客戶端OS的語言環境為美國——英語,程式就顯示美式英語。 OS的語言環境可在控制面板中手動設置。 國際化的英文單詞是Internationalizati ...
國際化是指應用程式運行時,可根據客戶端OS的國家/地區、語言的不同而顯示不同的界面,比如客戶端OS的語言環境為大陸的簡體中文,程式就顯示為簡體中文,客戶端OS的語言環境為美國——英語,程式就顯示美式英語。
OS的語言環境可在控制面板中手動設置。
國際化的英文單詞是Internationalization,單詞較長,通常簡稱I18N,I是第一個字母,18表示中間省略了18個字母,N是最後一個字母。
實現國際化的思路:
標簽、提示等字元串信息放在資源文件中,一個語言環境對應一個資源文件(一套)。資源文件中存儲鍵值對,每個資源文件的key都相同,value則隨語言環境的改變而改變。key是程式使用的部分,value是GUI要顯示的字元串。
資源文件的命名方式:
baseName.properties 用於單個資源文件
baseName_language.properties
baseName_language_country.properties 國際化一般用這種命名方式
語言代碼是特定,常用:zh 中文,en 英文
國家代碼也是特定的,常用:CN 中國,US 美國,JP 日本
國際化示例:
1、在IDEA -> File -> Settings -> Editor -> file Encodings -> 設置Properties Files的編碼方式為utf-8,預設為GBK。(也可使用其它方式,只要.properties文件的編碼字元集是utf-8即可)
2、對src單擊右鍵,新建一個mess_zh_CN.properties文件,輸入:
1 hello=你好!
以 key=value 形式輸入,一行一個鍵值對,預設就是字元串,不用加引號。
.properties文件中可以寫註釋:#註釋內容
3、對src單擊右鍵,新建一個mess_en_US.properties文件(baseName要相同),輸入:
1 hello=hello!
兩個資源文件的key要一一對應(相同)。
4、在.java文件中使用:
1 package test; 2 3 import java.util.Locale; 4 import java.util.ResourceBundle; 5 6 public class Test{ 7 public static void main(String[] args){ 8 //獲取OS使用的語言環境 9 Locale locale=Locale.getDefault(); 10 //根據指定的語言環境載入對應的資源文件。第一個參數是字元串,指定資源文件的baseName,第二個參數指定Locale(語言環境)。可預設第二個參數(預設就是OS的當前/預設語言環境) 11 ResourceBundle bundle=ResourceBundle.getBundle("mess",locale); 12 //通過key獲取已載入資源的value,參數為key 13 System.out.println(bundle.getString("hello")); 14 } 15 }
如果OS的語言環境為簡體中文,則輸出 你好!
如果OS的語言環境為美式英語,則輸出 hello!
如果資源文件中要使用動態內容,比如輸出當前的日期時間,則可在資源文件中使用占位符,在讀取時向占位符賦值。
示例:
1、對src右鍵單擊,新建一個資源文件msg.properties,輸入:
1 msg={0},你好!現在是{1}。
2、要使用時向占位符賦值:
1 package test; 2 3 import java.text.MessageFormat; 4 import java.util.Date; 5 import java.util.ResourceBundle; 6 7 public class Test{ 8 public static void main(String[] args){ 9 //載入指定資源文件 10 ResourceBundle bundle=ResourceBundle.getBundle("mess"); 11 //獲取指定value,返回字元串(帶有占位符) 12 String msg=bundle.getString("hello"); 13 //使用MessageFormat類的靜態方法format(String str,Object... args)向占位符賦值。 14 // 第一個參數是帶占位符的字元串,後面的參數對應占位符,是Object類型即可。返回賦值後的字元串。 15 String str=MessageFormat.format(msg,"Mike",new Date()); 16 System.out.println(str); 17 } 18 }