你不需要加任何額外的初始化標簽,也不用擔心所全部的多國語言文件放在一個大大的properties文件中所造成的管理不便,你所需要做的就是使用一個$lang.get標簽,或者使用I18n.get方法,多國語言問題就會被優雅地解決掉。
EasyJWeb中的多國語言功能摘要:
1、 在頁面中使用$lang.get(“屬性名稱”)來顯示多國語言信息。
2、 在程序中使用I18n.get(“屬性名稱”)來獲得多國語言信息。
3、 多國語言屬性信息按模塊存放,文件名為“模塊名.properties”,存放在WEB-INF\applicationResources目錄。
4、 application.properties代表全局的屬性名,當在模塊中找不到具體的定義時,會自動到全局模塊中查找。
5、 可以使用$lang.get(“屬性名”,”模塊名”)或I18n.get(“屬性名”,“模塊名”)調用其它模塊的多國語言屬性信息,
6、使用$lang.getPrameterMessage(“屬性名”,”參數1”…“參數n”)來得到帶參數的多國語言屬性信息。如:當message為“hello {0},your brother {1} is waiting for you。” 時,使用$lange.get ("message","WilliamRaym","Daxia"),在合成模板的時候將會變成下面的內容輸出:
Hello WilliamRaym,your brother Daxia is waiting for you。
7、也可以直接使用$lang.get(“屬性名”,”第一個參數’,”第二個參數.”,”第n個參數”)。
8、使用I18n 的changeLocale(String language)方法來直接把客戶端首選語言切換為其它語言。
9、直接在模板的默認目錄下開語言目錄,使得應用中就具有多國語言模板支持。
這樣的設計,你覺得還能湊合嗎?如果還有更多的要求,歡迎提出來。
下載完整的示例:ftp://ftp1.easyjf.com/easyjweb/demo/i18n.war
EasyJWeb官方演示:http://easyjweb.demo.easyjf.com/i18n/user.ejf
下面具體講解如何使用,就拿EasyJWeb的HelloWorld來說吧,看看他的原始模板:
HelloWorld中只有index.html一個頁面,內容主要如下:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>EasyJWeb的Hello World</title>
</head>
<body>
<div><h4>EasyJWeb版本的HelloWorld程序</h4></div>
<div>
來自EasyJWeb的問候:<font color="#0000FF">${msg}</font><br />
現在時間:<font color="#0000FF">${date}</font>
</div>
</body>
</html>
分別使用“title”、“topic”、“greeting”及“time”來代表上面四個需要支持多國語言的提示信息,這樣要在頁面中顯示“title”屬性,則使用$lang.get("title")即可。添加了多國語言標簽后的index.html頁面內容如下:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>$lang.get("title")</title>
</head>
<body>
<div>
<h4>$lang.get("topic")</h4>
</div>
<div>
$lang.get("greeting"):<font color="#0000FF">${msg}</font><br />
$lang.get("time"):<font color="#0000FF">${date}</font>
</div>
</body>
</html>
接下來,是在WEB-INF目錄下建一個applicationResources目錄,然后在該目錄建立hello.properties及hello_zh_CN.properties來分別存放英文及中文信息,內容分別如下:
hello.properties
greeting = the greeting from EasyJWeb
time = current time
title = The Hello World of EasyJWeb
topic = The Hello World of EasyJWeb
hello_zh_CN.properties
greeting = \u6765\u81EAEasyJWeb\u7684\u95EE\u5019
time = \u73B0\u5728\u65F6\u95F4
title = EasyJWeb\u7684Hello World
topic = EasyJWeb\u7248\u672C\u7684HelloWorld\u7A0B\u5E8F
其它的代碼都不用任何修改,分別修改瀏覽器的首先語言屬性為英文及中文,然后打開hello.ejf,你會到如下圖所示結果:


(首選語言為中文時的瀏覽效果)


(首選語言為英文時的瀏覽效果)
從程序的運行效果我們可以看出,以前頁面上固定的四個中文信息現在支持國際化了,如果還要增加對韓語及日語的支持,那么只需要在WEB-INF\applicationResources目錄下添加hello_ko_KR.properties及hello_ja.properties兩個文件,并在其中分別輸入“title”等屬性的值即可。
當然,通過圖xx我們發現這個程序還沒有完全“國際化”,由于從HelloAction中給msg的值已經被寫死,因此這個程序不管遇到誰,在問候的時候仍然有一串中文字符:“您好,這是EasyJWeb的第一個程序!”。
在EasyJWeb中,要在程序中使用多國語言信息非常簡單,直接調用I18n工具類中的get("屬性名")方法即可。下面修改HelloAction中的代碼,把其中的:
form.addResult("msg", "您好,這是EasyJWeb的第一個程序!");修改為:
form.addResult("msg", I18n.get("message"));// I18n.get("message")表示從多國語言文件中加載名為message的屬性
然后我們在hello.properties中加入message屬性的內容,如下:
message = hello, this is the first program of EasyJWeb!
在hello_zh_CN.properties中加入message屬性的內容,如下:
message=\u60A8\u597D\uFF0C\u8FD9\u662FEasyJWeb\u7684\u7B2C\u4E00\u4E2A\u7A0B\u5E8F\uFF01
運行修改后的程序,在英文環境下瀏覽可以得到如圖xxx所示的結果:
增加多國模板支持
為了滿足英語國家所喜歡的頁面排版方式,我們可以在WEB-INF\views\hello目錄下,添加一個子目錄en,然后在en這個目錄提供一個index.html文件,文件內容如下:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>$lang.get("title")</title>
</head>
<body>
<div>
<h3><font color="#0000FF">Hi,My Dear Friend,I'm sure you know what I say.</font></h3>
<h4>$lang.get("topic")</h4>
</div>
<div>
$lang.get("greeting"):<font color="#0000FF">${msg}</font><br />
$lang.get("time"):<font color="#0000FF">${date}</font>
</div>
</body>
</html>
則當客戶端首選語言為英語的用戶,在訪問hello.ejf?cmd=index的時候,就會使用hello\en\index.html這個文件來作為視圖模板輸出,如下圖所示:


而其它客戶端首選語言為非英語的用戶在訪問同樣的url時,則會使用hello\index.html這個文件來做為視圖模板輸出,如下圖所示。


整個過程非常簡單,不需要修改任何一句Java代碼或配置文件,需要做就是讓頁面設計人員設計及制作頁面。