2011-02-28 71 views
3

維護/管理Wicket應用程序國際化的方法是否正確?管理國際化的檢票口應用程序

目前有幾個* .properties文件,其中的翻譯就像在Wicket中一樣。你可以在運行時訪問它們並更改值,以便在不重新啓動應用程序的情況下進行更改。

(另一種方法是將值存儲在數據庫中,但我只是留到現在。)

+0

不知道你的問題是什麼。但是,如果您想在運行時更改文本,則需要使用數據庫。 – bert 2011-02-28 09:57:06

回答

4

您可以編寫自己的實現的IStringResourceLoader,並與您的應用程序註冊,如下所示:

getApplication().getResourceSettings().addStringResourceLoader( 
                new CustomResourceLoader()); 

你的資源加載器應該WAR文件之外的一些地方獲取資源,所以它可以由管理員修改正如Aaron Digulla所建議的那樣。

爲了讓檢票拿起在運行時,你必須這樣調整您的資源設置的修改:

getApplication().getResourceSettings().setResourcePollFrequency( 
                  Duration.seconds(1)); 
1

我知道任何現有的解決方案,但這裏有一些想法,我們有:

  • 將翻譯存儲在應用程序之外的目錄中。這樣,它們不會以JAR文件結尾,因此您可以在運行時更改它們。
  • 確保可以刷新資源包(例如,通過使用事件總線或文本更改時可以調用的偵聽程序)
  • 嚮應用程序添加「翻譯模式」。通過一點點的JavaScript和HTML的精心設計,應該可以通過點擊一個資源包來「編輯」每個文本。使用AJAX將更改事件發送回服務器並更新資源包。

    這樣,譯者可以做他們的工作在直播系統,使他們看到在線什麼需要改變(你可以給文本取決於他們是否是一個CSS類或仍需要翻譯)和翻譯是什麼樣子,等

[編輯]

我的意思是WAR文件之外。否則,每次翻譯更改時都需要重新創建WAR。

或者,您可以將屬性文件放入WEB-INF/classes(與常規類文件並排)中,並使用小腳本替換WAR中的文件。

在批處理/ shell腳本中,使用jar -u替換現有文件。在ant中,通過zipfileset使用舊的WAR文件作爲源文件,首先添加新文件並使用duplicate="preserve"

這樣,您不必再次壓縮整個文件。

+0

謝謝你,「翻譯模式」聽起來非常複雜,並超越了我目前的需求:)關於將屬性文件保存在應用程序之外......你的意思是在課程目錄之外?沒有jar文件,只有我部署的war文件... – rotsch 2011-02-28 10:09:56

+0

避免將資源放入'WEB-INF/lib /'中的JAR文件中。 – 2011-02-28 11:11:30