DSpace新增編輯語系檔功能
實驗版本:DSpace 1.5
DSpace要修改語系檔的時候步驟繁雜,還要考慮編碼的轉換,十分的麻煩。以前我有寫過一個DSpace中文化專用utf-8轉碼程式,但其實那個轉換的功能很陽春、也有些缺陷,不建議再使用。我修改了一下轉碼程式,設計了更完整的編輯介面,並能夠直接在DSpace系統中使用。
我的作法是把原本DSpace那邊僅允許伺服器管理者必須手動修改設定檔的動作,改成用Java檔案管理的方式去建立、修改,跟原本DSpace設計理念有所差別,但是對於初學者來說卻是比較方便的。只是還是要手動重新啟動Tomcat,這個我之後再來寫一個網頁端程式好了。
以下是安裝步驟與使用方法介紹:
安裝檔案
請下載下列檔案,並擺到指定的位置:
- messages-edit-jspui.zip
[dspace-source]/dspace/modules/jspui/src/main/webapp/dspace-admin/messages-edit.jsp
[dspace-source]/dspace/modules/jspui/src/main/webapp/dspace-admin/messages-main.jsp - MessagesEditServlet.java
[dspace-source]/dspace-jspui/dspace-jspui-api/src/main/java/org/dspace/app/webui/servlet/admin/MessagesEditServlet.java - util.zip
[dspace-source]/dspace-api/src/main/java/org/dspace/app/util/FileUtil.java
[dspace-source]/dspace-api/src/main/java/org/dspace/app/util/EscapeUnescape.java - jquery.js (必需要用1.2.6以上版本)
[dspace-source]/dspace/modules/jspui/src/main/webapp/extension/jquery.js
修改web.xml,增加「messages-edit」路徑
web.xml原本的位置在[dspace-source]/dspace-jspui/dspace-jspui-webapp/src/main/webapp/WEB-INF/web.xml,但是如果您修改過這個檔案了,那麼應該要另外儲存一份修改過得檔案在[dspace-source]/dspace/modules/jspui/src/main/webapp/WEB-INF/web.xml。
請在最後一行結尾標籤</web-app>之前加入以下設定:
<!-- Plugin Messages Editor --> <servlet> <servlet-name>edit-messages</servlet-name> <servlet-class>org.dspace.app.webui.servlet.admin.MessagesEditServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>edit-messages</servlet-name> <url-pattern>/dspace-admin/messages-edit</url-pattern> </servlet-mapping>
然後請把web.xml儲存在[dspace-source]/dspace/modules/jspui/src/main/webapp/WEB-INF/web.xml之中。
修改navbar-admin.jsp,增加編輯語系檔的連結
navbar-admin.jsp預設位置在[dspace-source]/dspace-jspui/dspace-jspui-webapp/src/main/webapp/layout/navbar-admin.jsp,修改之後應該另存一份檔案在[dspace-source]/dspace/modules/jspui/src/main/webapp/layout/navbar-admin.jsp。
請找到以下程式碼:
我們增加一段程式碼在它
<tr class="navigationBarItem"> <td> <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/statistics") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> </td> <td nowrap="nowrap" class="navigationBarItem"> <a href="<%= request.getContextPath() %>/statistics"><fmt:message key="jsp.layout.navbar-admin.statistics"/></a> </td> </tr>
之後(不要動到原本的程式碼喔),如下:
<tr class="navigationBarItem"> <td> <img alt="" src="<%= request.getContextPath() %>/image/<%= (currentPage.endsWith("/dspace-admin/messages-edit") ? "arrow-highlight" : "arrow") %>.gif" width="16" height="16"/> </td> <td nowrap="nowrap" class="navigationBarItem"> <a href="<%= request.getContextPath() %>/dspace-admin/messages-edit"><fmt:message key="jsp.layout.navbar-admin.editmessages"/></a> </td> </tr>
修改語系檔
修改您現有的語系檔之前,要先確認您所使用的語系檔為何。您可以在dspace.cfg裡面找到default.language設定。如果設定為default.lanuage = en_US,那麼您所使用的語系檔名為預設的「Messages.properties」,如果不是en_US而是「zh_TW」,那麼檔名應該是「Messages_zh_TW.properties」。由於我是用中文撰寫的,所以現在要加入的語系設定也是中文,故我們以「Messages_zh_TW.properties」作為範例。
語系檔會在[dspace-source]/dspace/modules/jspui/src/main/resources/Messages_zh_TW.properties,請在最後加入以下設定:
jsp.layout.navbar-admin.editmessages = \u7de8\u8f2f\u8a9e\u7cfb\u6a94 jsp.dspace-admin.messages-main.title = \u7de8\u8f2f\u8a9e\u7cfb\u6a94 jsp.dspace-admin.messages-main.heading = \u7de8\u8f2f\u8a9e\u7cfb\u6a94 jsp.dspace-admin.messages-main.submit_saved = \u5df2\u7d93\u5132\u5b58\uff01\u8acb\u91cd\u65b0\u555f\u52d5Tomcat\u7db2\u9801\u4f3a\u670d\u5668\u4ee5\u770b\u5230\u4fee\u6539\u7684\u6210\u679c\u3002 jsp.dspace-admin.messages-main.submit_cancel = \u53d6\u6d88\u7de8\u8f2f jsp.dspace-admin.messages-main.default.language = \u76ee\u524d\u9810\u8a2d\u7684\u8a9e\u7cfb\u662f\uff1a jsp.dspace-admin.messages-main.change-default-language = \u5982\u9700\u8981\u8b8a\u66f4\u7cfb\u7d71\u9810\u8a2d\u8a9e\u7cfb\uff0c\u8acb\u4fee\u6539dspace.cfg\u4e2d\u7684default.language\u8a2d\u5b9a\u3002 jsp.dspace-admin.messages-main.edit = \u7de8\u8f2f\u8a9e\u7cfb\u6a94 jsp.dspace-admin.messages-main.create = \u5efa\u7acb\u65b0\u7684\u8a9e\u7cfb\u6a94 jsp.dspace-admin.messages-main.create.source = \u5f9e\u4f86\u6e90\u6a94\u6848\u8907\u88fd jsp.dspace-admin.messages-main.create.to-file-name = \u5230\u65b0\u7684\u8a9e\u7cfb\u6a94\u540d\u7a31 jsp.dspace-admin.messages-main.lang-collision = \u4e0d\u80fd\u8ddf\u73fe\u6709\u7684\u8a9e\u7cfb\u6a94\u540d\u7a31\u91cd\u8907\uff01 jsp.dspace-admin.messages-main.lang-empty = \u8a9e\u7cfb\u6a94\u540d\u7a31\u4e0d\u80fd\u662f\u7a7a\u503c\uff01 jsp.dspace-admin.messages-main.lang-active = \u73fe\u5728\u4f7f\u7528 jsp.dspace-admin.messages-edit.title = \u7de8\u8f2f\u8a9e\u7cfb\u6a94 jsp.dspace-admin.messages-edit.editing-position = \u60a8\u6b63\u5728\u7de8\u8f2f {0} \u8a9e\u7cfb\u6a94 jsp.dspace-admin.messages-edit.filter.key = \u7d22\u5f15\u540d\u7a31\u5305\u542b jsp.dspace-admin.messages-edit.filter.or = \u6216 jsp.dspace-admin.messages-edit.filter.and = \u4e26 jsp.dspace-admin.messages-edit.filter.key = \u986f\u793a\u5167\u6587\u5305\u542b jsp.dspace-admin.messages-edit.filter.do = \u641c\u5c0b jsp.dspace-admin.messages-edit.filter.reset = \u986f\u793a\u5168\u90e8 jsp.dspace-admin.messages-edit.function.create = \u65b0\u589e\u9805\u76ee jsp.dspace-admin.messages-edit.function.scroll-to-button = \u79fb\u81f3\u9801\u5c3e jsp.dspace-admin.messages-edit.function.scroll-to-top = \u56de\u5230\u9801\u9996 jsp.dspace-admin.messages-edit.table.key = \u7d22\u5f15\u540d\u7a31 jsp.dspace-admin.messages-edit.table.value = \u986f\u793a\u5167\u6587 jsp.dspace-admin.messages-edit.js.nowLoading = \u8b80\u53d6\u4e2d\u2026\u2026\u8acb\u7a0d\u5019\u2026\u2026 jsp.dspace-admin.messages-edit.js.deleteButton = \u522a\u9664 jsp.dspace-admin.messages-edit.js.deleteConfirm = \u78ba\u5b9a\u662f\u5426\u8981\u522a\u9664\uff1f jsp.dspace-admin.messages-edit.js.insertButton = \u63d2\u5165 jsp.dspace-admin.messages-edit.js.moveUpButton = \u2191 jsp.dspace-admin.messages-edit.js.moveDownButton = \u2193 jsp.dspace-admin.messages-edit.js.error.heading = \u767c\u751f\u932f\u8aa4 jsp.dspace-admin.messages-edit.js.error.name = \u932f\u8aa4\u540d\u7a31 jsp.dspace-admin.messages-edit.js.error.message = \u932f\u8aa4\u8a0a\u606f jsp.dspace-admin.messages-edit.js.error.ValueEmpty = \u4e0d\u80fd\u662f\u7a7a\u767d\uff01 jsp.dspace-admin.messages-edit.js.error.WithSlash = \u4e0d\u80fd\u5305\u542b\uff1a jsp.dspace-admin.messages-edit.js.error.WithNewLine = \u4e0d\u80fd\u63db\u884c\uff01 jsp.dspace-admin.messages-edit.js.error.CharsetError = \u4e0d\u80fd\u5305\u542b\u975e\u82f1\u6578\u5b57\u7684\u6587\u5b57 jsp.dspace-admin.messages-edit.js.save.KeyEmptyError = \u986f\u793a\u5167\u6587\u300c[0]\u300d\u7f3a\u5c11\u7d22\u5f15\u540d\u7a31\uff01 jsp.dspace-admin.messages-edit.js.save.ValueEncodeError = \u89e3\u78bc\u5230\u300c[0]\u300d\u6642\u767c\u751f\u932f\u8aa4\uff01 jsp.dspace-admin.messages-edit.js.filter.processing = \u641c\u5c0b\u4e2d\uff0c\u8acb\u7a0d\u5019\u3002 jsp.dspace-admin.messages-edit.js.sortConfirm = \u6392\u5e8f\u9700\u8981\u4e00\u6bb5\u6642\u9593\u904b\u7b97\uff0c\u800c\u4e14\u6392\u5e8f\u4e4b\u5f8c\u7684\u7d50\u679c\u7121\u6cd5\u5fa9\u539f\uff0c\u8acb\u554f\u662f\u5426\u8981\u7e7c\u7e8c\uff1f jsp.dspace-admin.messages-edit.js.filter.not-found = \u641c\u5c0b\u6c92\u6709\u7d50\u679c\u3002 jsp.dspace-admin.messages-edit.encode-demo.heading = \u6e2c\u8a66\u8f49\u78bc\u5668 jsp.dspace-admin.messages-edit.encode-demo.text-to-dspace = \u2190 jsp.dspace-admin.messages-edit.encode-demo.dspace-to-text = \u2192
修改dspace.cfg檔案
dspace.cfg位於[dspace]/config/dspace.cfg
請加入以下設定:
#---------------------------------------------------------------# #---------------Other Plugin Configuration----------------------# tomcat.dir = /opt/apache-tomcat-6.0.16/webapps/jspui dspace.source.dir = /opt/dspace-1.5.0-src-release
上面的tomcat.dir跟dspace.source.dir請更換成您實際上Tomcat伺服器當中擺放DSpace的位置,以及DSpace原始碼的位置。如果您之前照我寫的DSpace安裝法的話,那目錄位置就是這樣沒錯。
重新編譯DSpace
步驟如下:
- 移至DSpace原始檔目錄中的dspace目錄。注意底下的[dspace-source]要替換成您DSpace原始碼的目錄。
[dspace@dspace ~]# cd [dspace-source]/dspace/
- 執行mvn package指令
[dspace@dspace dspace]# mvn package
如果最後出現BUILD SUCCESSFUL,表示編譯成功。 - 移至底下的target/dspace-{您DSpace的版本號}-build.dir/目錄。注意,底下的1.5.0要替換成您DSpace的版本號,或是查查看target砥下的目錄即可。
[dspace@dspace dspace]# cd target/dspace-1.5.0-build.dir/
- 執行ant指令:
[dspace@dspace dspace-1.5.0-build.dir]# ant -Dconfig=[dspace:]/config/dspace.cfg update
- 複製DSpace安裝目錄底下的資料夾到Tomcat的webapps目錄之中。注意,底下的[dspace]要替換成您DSpace的安裝目錄,[tomcat]則是要替換成您Tomcat的安裝目錄。
[dspace@dspace dspace-1.5.0-build.dir]# cd [dspace] [dspace@dspace dspace]# \cp -rf [dspace]/webapps/* [tomcat-6.0.16]/webapps/
- 重新啟動Tomcat。
[dspace@dspace dspace]# cd [tomcat]/bin [dspace@dspace bin]# shutdown.sh [dspace@dspace bin]# startup.sh
功能說明:首頁
要使用編輯語系檔的功能,使用者必須要是管理者權限(Administrator)登入才行,一般的使用者是沒辦法使用的。
- 從左邊的導覽列可以進入「編輯語系檔」
- 偵測目前使用的語系:系統會取得dspace.cfg裡面的default.language設定,這就是您目前DSpace所使用的語系。
- 編輯語系檔:下拉式選單可以選擇您要編輯的語系檔。針對目前使用的語系檔,系統會特別在語系檔名稱後標明「現在使用」。
- 建立新的語系檔:您可以選擇一個來源檔案,然後將他複製到新的語系檔當中,再進行編輯動作。
功能說明:編輯頁
語系檔通常會高達一千多筆資料,進入編輯頁面的時候需要花一段時間讀取,請耐心等候。
- 顯示您現在編輯的語系檔名稱。
- 搜尋語系檔功能,當您要修改特定語系設定的時候非常好用。讀取完成之後,就可以按下後面的按鈕。
- 測試轉碼器:類似原來DSpace中文化專用utf-8轉碼程式的功能,這邊測試的資料並不會寫入語系檔。
- 功能列,包括更新、新增項目(在最後面新增一筆語系設定)、移至頁尾、取消(然後返回首頁)。讀取完成之後,就可以按下更新、新增項目的按鈕。
- 讀取中的訊息。有時候因為資料量過大,會導致網頁像是當機一樣,請稍後。
- 語系編輯器:
終於寫完了。
這樣要編輯DSpace語系檔就簡單多了吧。
接下來來作一個Tomcat重新啟動的功能,省得還要到伺服器端重新啟動DSpace吧。<-- Post Catalog -->
您好 照您的方法安裝完後
回覆刪除出現這個訊息
org.apache.jasper.JasperException: /dspace-admin/messages-main.jsp(68,31) Attribute value LocaleSupport.getLocalizedMessage(pageContext, "help.site-admin") + "#editmessages" is quoted with " which must be escaped when used within the value
麻煩解救
應該是雙引號(")沒有正確閉合或是脫逸(" -> \")吧,請再檢查看看
回覆刪除