2011-12-12 17 views
5

2つの異なるクライアントに使用されるサイトがあります。最初の要求時に、ユーザーはクライアントを選択するよう求められます。そのテキストに基づいて、ラベルとサイトの内容を表示する必要があります。Playフレームワークに複数のメッセージファイルを含めることは可能ですか

は、それは2件のメッセージがプレイ枠組みの中でファイルを、私たちはメッセージをベース取得され、各ロケールのファイルよりも多くを持つことができます私の研究のように、セッションの起動時にメッセージファイルが

を決めたことになることは可能です要求のロケールで

答えて

1

play.i18n.MessagesPluginを拡張するクラスMessagesPlugInを作成し

  1. のいずれかを使用していることを行うことができます
  2. クラスを作成play.i18n.Messages
  3. 静的MessagesPlugIn
  4. onApplicationStart()をオーバーライドMessages.java
  5. で地図messaagesByClientIDplay.i18n.MessagesPlugin
  6. にロードされlocalesようmessaagesByClientIDにプロパティをロードセッションでmessaagesByClientIDベースのClientIdをからプロパティを取得、Messages.java方法get()を持っていました。プロパティが使用できない場合play.i18n.Messages
でコール get()

は、カスタムタグil8nTagを7.Createdし、そのHTMLテンプレートで使用されます。 il8nTagMessages.get()にあるメソッドを呼び出します。

1

あなた自身がPlayPluginと書いてあり、play.PlayPlugin.getMessage(String, Object, Object...)の実装を処理することができます。次に、適切なファイルを選択することができます。クラスplay.i18n.Messagesは、このメソッドを実装する方法のインスピレーションとして使用できます。

+0

ありがとう、このページの回答に基づいて、私は答えを見つけて上に投稿しました。 –

4

いいえ、現時点ではサポートされていません。 あなたは簡単にプラグイン(Look at MessagesPlugin)で、あるいは解決策以下でこの問題を解決し@onApplicationStartup注釈付きbootstrap job

// 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別の解決策で見つけることができませんでしたデフォルト。MessagesPluginを継承し、その中にHashMapを持つcustomMessagesPlugInを作成し、クライアントIdをキーとしてすべてのファイルをキーとしてロードし、プロパティをvalue.Aとして呼び出します。Messages.get()の呼び出しは、セッション内のクライアントIDに基づいて値を取得します。テンプレートカスタムタグを使用してメッセージを取得しました。 –

関連する問題