6

最初の質問: コントローラー内のテキストの翻訳を取得するにはどうすればよいですか?

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"
4

1 に答える 1

10

コントローラー内で翻訳を取得する:

// in messages file
msg.key=Hello Translation

// in you controller
Messages.get("msg.key");

パラメータを渡すこともできます:

// in messages file
msg.key=Hello {0}, here is your translation

//in controller
Messages.get("msg.key", User.firstName);

ビューから次を使用できます。Messages("msg.key")

HTML フォーマットを適用することもできます (もちろん、ビューにのみ適用されます):

// in messages file
msg.key=Hello <strong>{0}</strong>, here is your translation

// in controller
Messages.get("msg.key", User.firstName);

//in view
@Html(objectInView)

次の点に注意してください: 現在、言語を明示的に定義することはできません。バグ レポートを参照してください: https://play.lighthouseapp.com/projects/82401/tickets/174-20-i18n-add-ability-to-define- Java API の暗黙的な言語

同様の質問が以前に尋ねられました: Scala テンプレートから翻訳された i18n メッセージにアクセスする (Play! Internationalization)

i18n エラー: コントローラーとテンプレートが異なる暗黙の言語を使用しています

于 2012-05-03T20:11:41.730 に答える