2011-12-12 1 views
5

Abbiamo un sito che verrà utilizzato per due diversi client. Durante la prima richiesta all'utente verrà chiesto di scegliere un cliente. Sulla base di tale testo, dovrebbero essere visualizzate le etichette e il contenuto del sito.È possibile avere più di un file di messaggi in Play framework

E 'possibile avere un file due messaggi nel quadro Play e durante l'avvio della sessione il file messaggi sarebbe stato deciso

Come la mia ricerca possiamo avere più di un file per ogni Locale, i messaggi saranno ottenere basate sul locale nella richiesta.

risposta

1

risolto questo problema con la soluzione qui di seguito,

  1. creato una classe MessagesPlugIn che si estende play.i18n.MessagesPlugin
  2. Creata una classe Messages come play.i18n.Messages
  3. Aveva una statica Mappa messaagesByClientID in Messages.java
  4. override onApplicationStart() in MessagesPlugIn
  5. Loaded Proprietà nel messaagesByClientID come locales caricata in play.i18n.MessagesPlugin
  6. Aveva un metodo di get() in Messages.java, recuperare la proprietà dalla messaagesByClientID ClientId base nella sessione. Se la proprietà non è disponibile chiamata get() in play.i18n.Messages

7.Created un tag personalizzato il8nTag e la sua utilizzato in modelli HTML. il8nTag invocherà i methos in Messages.get().

1

È possibile scrivere il proprio PlayPlugin e gestire l'attrezzo play.PlayPlugin.getMessage(String, Object, Object...). Quindi puoi scegliere il file giusto. La classe play.i18n.Messages può essere utilizzata come ispirazione per implementare il metodo.

+0

Grazie, in base alle risposte fornite in questa pagina, ho trovato la risposta e pubblicato sopra. –

4

No, al momento non è supportato. Si può facilmente fare che o in un plugin (Look at MessagesPlugin) o anche utilizzando un bootstrap job con l'annotazione @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

Grazie, posso farlo quando carico i messaggi in Controller. Ma come faccio a sovrascrivere la funzionalità quando i messaggi caricati nei modelli utilizzano & {}. Mi aiuti per favore. I messaggi modello –

+0

dovrebbero funzionare anche dopo averli aggiunti a Messages.defaults. Hai provato senza successo? – mericano1

+0

In realtà il mio requisito è, l'applicazione avrà più di un file di proprietà con le stesse chiavi, ma i valori sono diversi. Dovrebbe essere in grado di recuperare una proprietà da uno dei due file sulla base di "ClientID" nella sessione.Se lo aggiungo in default che non sono riuscito a trovare per valore di sessione. trova un'altra soluzione.Creato customMessagesPlugIn che estende MessagePlugin e ha HashMap all'interno di esso, carica tutti i file nella mappa con ID client come chiave e Proprietà come valore. Una chiamata per Messages.get(), recupererà il valore basato su ID client nella sessione.Per i modelli ho usato tag personalizzati per recuperare il messaggio. –