多國語言

      在〈多國語言〉中尚無留言

Localization

Localization為本地化的意思, 也就是依照不同的地區顯示不同的文字日期格及貨幣格式.  比如在華語地區顯示中文字, 英文系國家顯示英文, 日本地區顯示日文, 此時就需使用多國語系. 如此就可以一支程式適用全球各地, 而不需發行不同的版本.

 建立多國語系的步驟

  • 在專案視窗中切換到Files, 在專案按右鍵/new Folder/建立resources目錄
  • 切換到Projects, 在專案按右鍵/Properties/Sources/Source Package Folders add Folders/選擇resources
  • resources按右鍵/other, 再由彈出視窗中的Other選取Empty file, 分別建立檔名message_zh_TW.properties及message_en_US.properties.
    message為等會Java代碼要打開的檔案名稱, 後面再加上語系及國碼, 然後副檔名為.properties
  • 在二個檔案中, 使用key/value 分別輸入不同的語言

Example

如下代碼中, 使用ResourceBundle.getBundle取得要使用的資源檔, 比如currentLocale為zh_TW, 則開啟resource/message_zs_TW.properties, 若為en_US, 則開啟resource/message_en_US.properties.

public class LocalTest {
    static Locale usLocale=Locale.US;
    static Locale zhLocale=new Locale("zh", "TW");
    //static Locale currentLocale=Locale.getDefault();
    static Locale currentLocale=usLocale;
    static ResourceBundle msg=ResourceBundle.getBundle("message", currentLocale);
    public static void main(String[] args) {
        printMenu();
    }
    public static void printMenu(){
        System.out.println("1."+msg.getString("menu1"));
        System.out.println("2."+msg.getString("menu2"));
    }
}

新增的檔案內容如下
message_zh_TW.properties
menu1 = 英文
menu2 = 中文

message_en_US.properties
menu1 = English
menu2 = Chinese

使用Locale 設定語系

有二種方式
Locale zhLocale=new Locale(“zh”, “TW”);
Locale zhLocale=Locale.TAIWAN;

使用ResourceBundle 變更語系

ResourceBundle messages=ResourceBundle.getBundle(“message”, zhLocale);

使用ResourceBundle 取得字串

messages.getString(“menu1″), 然後將之印出

Properties檔案命名規則

message_語系_國別.properties
en_US
zh_CN
zh_TW
語系為小寫, 國別為大寫

顯示日期

日期的顯示格式, 可以先使用DateFormat.getXXX來設定. 日期格式有如下三種
DateFormat.getDateInstance() : 可設定日期格式
DateFormat.getTimeInstance() : 可設定時間格式
DateFormat.getDateTimeInstance() : 可設定日期, 時間格式

上述的最後一個參數可以加入Locale.

格式有四種.
DateFormat.SHORT : 12.13.52 3:30PM
DateFormat.MEDIUM : Jan 12, 1952
DateFormat.LONG : January 12, 1952 3:30:32pm
DateFormat.FULL : Tuesday, April 12, 1952 3:30:42pm PST

    public static void main(String[] args) {
        Locale zhLocale=Locale.TAIWAN;
        DateFormat []df=new DateFormat[8];
        df[0]=DateFormat.getDateInstance(DateFormat.SHORT, zhLocale);
        df[1]=DateFormat.getTimeInstance(DateFormat.SHORT, zhLocale);
        df[2]=DateFormat.getDateInstance(DateFormat.MEDIUM, zhLocale);
        df[3]=DateFormat.getTimeInstance(DateFormat.MEDIUM, zhLocale);
        df[4]=DateFormat.getDateInstance(DateFormat.LONG, zhLocale);
        df[5]=DateFormat.getTimeInstance(DateFormat.LONG, zhLocale);
        df[6]=DateFormat.getDateInstance(DateFormat.FULL, zhLocale);
        df[7]=DateFormat.getTimeInstance(DateFormat.FULL, zhLocale);        
        for (int i=0;i<df.length;i++){
            System.out.printf("%s\n",df[i].format(new Date()));
        }
    }

結果如下

2018/7/14
下午 10:24
2018/7/14
下午 10:24:14
2018年7月14日
下午10時24分14秒
2018年7月14日 星期六
下午10時24分14秒 TST

SimpleDateFormat

OCP認証考式中,  超愛考上述的DateFormat. 但相信我, 一般專案中用到的機會非常小. 反而是SimpleDateFormat最常用

 SimpleDateFormat sdf1=new SimpleDateFormat("yyyy/MM/dd");
 System.out.println(sdf1.format(new Date()));
 SimpleDateFormat sdf2=new SimpleDateFormat("HH:mm:ss");
 System.out.println(sdf2.format(new Date()));

常見的格式如下
yyyy : 4位數西洋年
MM : 2位數月份, 不足2位補0
dd : 2位數日期
hh : 時, 12小時制
HH: 時, 24小時制
mm: 分
ss: 秒

Calendar

new Date()可以取得目前的系統時間. 但若要指定某個日期時間的話, 則需使用到Calendar

 Calendar calendar=Calendar.getInstance();
 calendar.set(2000, 6, 18, 14, 25, 59);
 SimpleDateFormat sdf1=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
 System.out.println(sdf1.format(calendar.getTime()));

上述calendar要使用getTime()轉換成Date物件, 再交由sdf列轉換格式列印出來

顯示貨幣

    NumberFormat currency=NumberFormat.getCurrencyInstance(Locale.CHINA);
    System.out.println(currency.format(100000));

結果如下
¥100,000.00

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *