由於一直覺得 Snipsnap 的介面中一堆英文字實在有點不習慣,所以自己動手來中文化。目前經過一番努力,可以說 Snipsnap 已幾乎全面中文化。主要是使用 struts 1.0.2 的 bean 標籤來處理 JSP 中國際化的部份,並另外寫一個會使用到 struts 套件內 util 工具的類別來負責 Servlet 和其他的 classes。目前有兩個語言設定檔:
ApplicationResources.properties
:原 Snipsnap 中的英文訊息檔ApplicationResources_zh_TW.properties
:繁體中文的設定檔
大致的步驟是修改 src/apps/default 中的 JSP 部份,把訊息複製到 src/apps/default/WEB-INF/classes 下的 ApplicationResources.properties
中,設好一一對應的 key 值後,再將 JSP 中顯示英文訊息的部份改成由 bean 的 tag lib 來處理。把 ApplicationResources.properties
中的訊息改成中文另存新檔,並經由 j2sdk 中的 native2ascii
工具來轉碼,存成 ApplicationResources_zh_TW.properties
檔。
接著把 struts 相關檔案放到 src/apps/default/WEB-INF 和 src/apps/default/WEB-INF/lib 之下。修改 web.xml 及 web-xml.tmpl 中的內容。最後再用 ant 來重新編譯。
上面幾個步驟,但要做的事很多。我花了一整個下午來將這些事完成,但是到這裡還沒有完全中文化。因為 Snipsnap 把一些訊息寫到 Java 原始檔裡,如果要改成中文的話,勢必要另外寫一個工具來處理這些問題,好讓 Java bean 和 Servlet 都能存取到在 ServletContext
中的 PropertyMessageResources
資源。
所以我另外寫了一個 org.snipsnap.util.MessageResourcesUtil
來讀入 Servlet 傳來的物件,並從裡面得到國際化所要的 MessageResources 物件。由於使用的是 Singleton 的設計模式,所以不管任何物件都會存取到同一個,這也就保証不會有兩個物件讀到不同訊息。另外取得此物件必須要從 Servlet 傳入相關值來設定 (設定一次就可以了)。如果在 Servlet 還沒有設定之前就有其他的 classes 呼叫的話,就會自己去找設定檔和相關時區設定來初始化。
等到整個 Snipsnap 差不多完全中文化後(可能不會將安裝步驟進行中文化),我會考慮包成一個安裝檔讓大家下載執行。目前尚在考慮要不要將 Macro 和 help 的部份也中文化(也就是在 [snipsnap-help] 看到的部份)。
這個版本的 Snipsnap 已經按照 tcc 在網頁上所公佈的修改來做更新了(包括最新的 Rssify.java
中日期晚一天的修正部份)。
另外,我現在已經很確定本站和 http://meerkat.elixus.org/ 之間的更新已經爛掉了,現在已經停掉了……。我準備要寫信請他們幫忙看一下了……
忘了說,所有的按鈕部份我沒有中文化,因為我覺得這樣就很好看了 呵呵
=)
我現在開始要煩惱的問題是:
以後 Snipsnap 出了新版後,中文化的工作又得辛苦一次..~_~