2011-12-12 68 views
5

我們有一個網站將用於兩個不同的客戶端。在第一次請求期間,用戶將被要求選擇一個客戶端。根據該文本,應顯示標籤和網站內容。是否可以在Play框架中擁有多個消息文件

是否有可能有兩個消息在遊戲的框架和會話啓動期間的消息文件將被決定

由於我的研究,我們可以不用爲每個區域設置一個文件的詳細文件,這些消息將會得到基於在請求中的區域設置。

回答

1

解決了這個問題下面的解決方案,

  1. 創建的類MessagesPlugIn延伸play.i18n.MessagesPlugin
  2. 創建一個類Messagesplay.i18n.Messages
  3. 有一個靜態在MessagesPlugIn
  4. 地圖messaagesByClientIDMessages.java
  5. 重寫onApplicationStart()加載的屬性在messaagesByClientID作爲localesplay.i18n.MessagesPlugin
  6. 加載Messages.java有一個方法get(),從會議messaagesByClientID基於客戶端Id檢索的屬性。如果屬性是不可用的呼叫get()play.i18n.Messages

7.Created自定義標籤il8nTag及其在HTML模板中使用。 il8nTag將調用Messages.get()中的方法。

1

你可以寫你自己PlayPlugin和手柄實現play.PlayPlugin.getMessage(String, Object, Object...)。然後你可以選擇正確的文件。 play.i18n.Messages可以作爲靈感如何實施的方法。

+0

謝謝,基於給出這個頁面的答案,我找到了答案,並張貼在上面。 –

4

不,目前尚不支持。 您可以輕鬆地做到這一點無論是在一個插件(Look at MessagesPlugin),甚至使用bootstrap job與@onApplicationStartup註釋

// From MessagesPlugin.java 

//default languange messages 
VirtualFile appDM = Play.getVirtualFile("conf/messages"); 
if(appDM != null && appDM.exists()) { 
    Messages.defaults.putAll(read(appDM)); 
} 

static Properties read(VirtualFile vf) { 
    if (vf != null) { 
     return IO.readUtf8Properties(vf.inputstream()); 
    } 
    return null; 
} 
+0

謝謝,當我在控制器中加載消息時,我可以實現這一點。但是,如何使用&{}在模板中加載消息時重寫該功能。請幫幫我。 –

+0

模板消息一旦添加到Messages.defaults後也應該可以正常工作。你嘗試過沒有成功嗎? – mericano1

+0

其實我的要求是,應用程序將有多個屬性文件具有相同的鍵,但值是不同的。它應該能夠從基於會話中的「ClientID」的任何一個文件中檢索屬性。如果我將它添加到默認情況下,我找不到會話value.found另一個解決方案。創建了customMessagesPlugIn,它擴展了MessagePlugin,並在其中包含HashMap,使用客戶端Id作爲鍵和屬性作爲value來加載地圖中的所有文件。對Messages.get()的調用將根據會話中的客戶端ID進行檢索.For模板我使用自定義標籤來檢索郵件。 –

相關問題