最初の質問: コントローラー内のテキストの翻訳を取得するにはどうすればよいですか?
2 番目の質問: テンプレート内のテキストの翻訳を取得するにはどうすればよいですか?
API は、メッセージを変換する .get メソッドがあることを示しています。
http://www.playframework.org/documentation/api/2.0/java/play/i18n/Messages.html
ただし、私のアプリケーションはこの方法を認識しません。Eclipse で Message.class を開くと、Scala と Java で書かれた .apply メソッドが含まれていることがわかります!?
object Messages {
/**
* Translates a message.
*
* Uses `java.text.MessageFormat` internally to format the message.
*
* @param key the message key
* @param args the message arguments
* @return the formatted message or a default rendering if the key wasn’t defined
*/
def apply(key: String, args: Any*)(implicit lang: Lang): String = {
Play.maybeApplication.flatMap { app =>
app.plugin[MessagesPlugin].map(_.api.translate(key, args)).getOrElse(throw new Exception("this plugin was not registered or disabled"))
}.getOrElse(noMatch(key, args))
}
今Eclipseは、このメソッドを次のように呼び出すことができることを教えてくれます:
> String play.api.i18n.Messages.apply(String arg0, Seq<Object> arg1,
> Lang arg2)
しかし、「Seq」引数として何を入力すればよいでしょうか?
- ソリューション -
問題は、play.i18n.Messages の代わりに play.api.i18n.Messages をインポートしたことでした ...
2 つのメッセージ ファイル (messages.de-DE と messages.en-UK) を定義し、次のコードを使用すると、すべて正常に動作します。
コントローラ:
import play.i18n.Messages;
import play.api.i18n.Lang;
Lang en = new Lang("en","GB");
play.i18n.Lang en_lang = new play.i18n.Lang(en);
Lang de = new Lang("de", "DE");
play.i18n.Lang de_lang = new play.i18n.Lang(de);
Logger.info(Messages.get("home.title"));
Logger.info(Messages.get(en_lang, "home.title"));
Logger.info(Messages.get(de_lang, "home.title"));
アプリケーション.conf
application.langs="en-GB,de-DE"