2014年10月21日 星期二

JAVA - 基本properties的運用


說起來真是慚愧,用java這麼久,一直都沒有真正使用過properties file,今天就來練習一下:(其實是因為專案需要多國語系的關係啦,不得不用...)


假設我們設計一個網站 or app 需要支援多國語系,但不可能有人願意把每個跟語系有關的文字harcode在程式裡,畢竟那太愚蠢了,變成一個專案多個版本,卻只是為了那些不同的顯示文字,使用properties可以很好地解決這個問題:

今天我需要依照不同的語系,輸出不同的招呼語(中文=你好,英文=hello,日文=こんにちは),我該怎麼做呢:

首先是專案架構:
很簡單src只有一個檔案,而resource下的3個properties就是今天的主角囉,properties.sh只是方便執行測試的sh檔案,先看唯一的code Main.java:

package com.example.shihanne.properties;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Locale;
import java.util.ResourceBundle;

public class Main {

 public static void main(String[] args) throws IOException {
  Locale locale = Locale.getDefault();
  String key    = "hello";
  if(args.length == 1)
   key = args[0];
  if(args.length == 2){
   key = args[0];
   locale = Locale.forLanguageTag(args[1]);
  }
  System.out.println(new Main().getMessageByBundle(key,locale));
 }
    
    public String getMessageByBundle(String key,Locale local) throws UnsupportedEncodingException{
     ResourceBundle rs = ResourceBundle.getBundle("config",local); 
     return new String(rs.getString(key).getBytes("ISO-8859-1"),"UTF-8");
    }
}


以下是我的properties file:

config_en.properties:
hello=hello

config_zh_TW.properties:
hello=你好

config_ja.properties:
hello=こんにちは

很簡單,都各只有一行,=左邊的hello代表這個propertie的參數名稱(key),=右邊的也就是我們要輸出的各國語系value啦~

必須要注意的是properties的命名規則:[filename]_[locale].properties
在這裡我們使用的檔案名稱為config,繁體中文的locale=zh_TW,日文locale=ja,英文=en

程式很簡單,Main先偵測是否有指定參數:
第一個參數為欲讀取的properties key(此例為hello),第二個參數為語系(若沒有,則使用本機的預設語系(當然是zh_TW囉) )
之後我們再使用ResourceBundle.getBundle(basename,locale) 讀取properties file,最後再使用ResourceBundle.getString(key)讀出我們需要的value

properties.sh如下:

java -cp ../bin:../resource com.example.shihanne.properties.Main $1 $2

結果畫面:

沒有留言:

張貼留言