6

第一个问题:如何在控制器中检索文本的翻译?

第二个问题:如何检索模板中文本的翻译?

api 说有一个翻译消息的 .get 方法:

http://www.playframework.org/documentation/api/2.0/java/play/i18n/Messages.html

但是我的应用程序无法识别此方法。在 Eclipse 中打开 Message.class 显示其中有一个 .apply 方法,用 Scala 和 Java 编写!?

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.api.i18n.Messages 而不是 play.i18n.Messages ...

定义了两个消息文件(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-隐式语言for-java-api

之前有人问过类似的问题: 从 Scala 模板访问翻译的 i18n 消息(播放!国际化)

i18n 错误:控制器和模板使用不同的隐式语言

于 2012-05-03T20:11:41.730 回答