在 訊息管理 中,您已經知道如何使用訊息資源檔來統一管理訊息,接下來的問題是,如何使用中文訊息?
使用中文訊息檔的方式是使用預設的ISO-8859-1編碼(簡單的說,作業系統預設的文字檔案編碼就可以了),然後使用JDK中所附的工具程式native2ascii,將中文轉換為Unicode,執行以下指令即可:
native2ascii messages_zh_TW.txt application_zh_TW.properties
舉個例子,如果我們的messages_zh_TW.txt內容是:
welcome.helloWord=哈囉!
welcome.message=這是您的神秘禮物!
welcome.message=這是您的神秘禮物!
則經過native2ascii編碼過後的messages_zh_TW.properties,內容會如下:
welcome.helloWord=\u54c8\u56c9\uff01
welcome.message=\u9019\u662f\u60a8\u7684\u795e\u79d8\u79ae\u7269\uff01
welcome.message=\u9019\u662f\u60a8\u7684\u795e\u79d8\u79ae\u7269\uff01
Struts預設以伺服器上的Locale設定來決定要傳回哪一個訊息資源檔的內容給客戶端,在檔案名稱命名上您可以用語言與區域訊息來表明國際化時要使 用的檔案,例如application_zh_TW.properties、 application_zh_CN.properties、application_zh_HK.properties,如果Struts找不到對應 Locale的訊息檔案,則會使用預設的messages.properties。
將這個訊息資源檔與messages.properties放在同一個目錄,如果您的作業系統是繁體中文,則伺服器預設就會使用 messages_zh_TW.properties訊息檔案,而客戶端使用Big5編碼或UTF-8編碼來瀏覽就可以得到繁體中文訊息。
當然,如果您的程式服務於許多語系的使用者,您不能依賴於伺服器的預設語系,您可以在 Action 中使用MessageResources的getMessage()方法指定Locale,來取回對應的區域訊息,例如:
....
public ActionForward execute(....) throws Exception {
....
MessageResources messageResources =
getResources(request);
Locale locale = new Locale("zh", "CN");
String helloWord =
messageResources.getMessage(locale,
"welcome.helloWord");
String message =
messageResources.getMessage(locale,
"welcome.message");
....
}
....
public ActionForward execute(....) throws Exception {
....
MessageResources messageResources =
getResources(request);
Locale locale = new Locale("zh", "CN");
String helloWord =
messageResources.getMessage(locale,
"welcome.helloWord");
String message =
messageResources.getMessage(locale,
"welcome.message");
....
}
....
這可以指定取得messages_zh_CN.properties中的訊息,在實際的應用中,您可以在表單中放一個隱藏參數,表示使用者所選擇的語系,然後在Action中取得這個參數,以決定該顯示什麼語系給使用者。
如果您有這個需求的話,您也可以運用getMessage()並配合Locale的切換,在同一個頁面顯示各種語言,這只要訊息檔案配合使用UTF-8儲存,並指定客戶端顯示時使用UTF-8即可達到這個目的,例如:
Sting helloWord = messageResources.getMessage(
new Locale("zh", "CN"), "welcome.helloWord");
String message = messageResources.getMessage(
new Locale("zh", "TW"), "welcome.message");
new Locale("zh", "CN"), "welcome.helloWord");
String message = messageResources.getMessage(
new Locale("zh", "TW"), "welcome.message");
配合UTF-8編碼,這將可以在同一個頁面顯示簡體中文與繁體中文,當然,別忘了準備messages_zh_CN.properties與 messages_zh_TW.properties兩個不同語言的訊息檔案。