Java 國際化


 

國際化是指應用程序運行時,可根據客戶端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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM