Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Internationalization play framework 2.0-国际化-如何翻译消息_Internationalization_Playframework 2.0 - Fatal编程技术网

Internationalization play framework 2.0-国际化-如何翻译消息

Internationalization play framework 2.0-国际化-如何翻译消息,internationalization,playframework-2.0,Internationalization,Playframework 2.0,第一个问题:如何在控制器中检索文本的翻译 第二个问题:如何检索模板中文本的翻译 api说有一个.get方法可以转换消息: 但是,我的应用程序无法识别此方法。在eclipse中打开Message.class显示其中有一个.apply方法,用Scala和Java编写 object Messages { /** * Translates a message. * * Uses `java.text.MessageFormat` internally to format the

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

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

api说有一个.get方法可以转换消息:

但是,我的应用程序无法识别此方法。在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)
application.conf

    application.langs="en-GB,de-DE"

在控制器内获取转换:

    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"));
// 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);
从视图中,您可以使用:
消息(“msg.key”)

您甚至可以应用HTML格式(当然,仅适用于视图):

//在消息文件中
msg.key=Hello{0},这是你的翻译
//内部控制器
Messages.get(“msg.key”,User.firstName);
//鉴于
@Html(objectInView)
请注意以下事项: 目前无法明确定义语言,请参阅错误报告:

以前也有人问过类似的问题:


我的播放框架不知道Messages.get(“msg.key”)方法。它抛出错误:找不到symbol[symbol:method get(java.lang.String)][location:class play.api.i18n.Messages]-可能我使用了错误的播放源?实际上,控制台上说“播放!2.0”。也许我在创建应用程序时选择了“1-创建一个简单的规模应用程序”,而不是“2-创建一个简单的Java应用程序”。这可能是这种行为的原因吗?嗯。。。我想知道我是否选择了“1-SimpleScala应用程序”,但今天晚些时候我会尝试一下。我不认为这是原因,因为在我的应用程序中创建的所有模板文件都在.java;-)隐马尔可夫模型。。我正在导入“import play.api.i18n.Messages;”。框架如何决定是使用Java还是Scala类?这是某个配置吗?它显然使用了Scala类。不只是在Play2中,确切的方式是
Messages(“您的键”)
而不使用
get
方法。这就是游戏1。@i.am.michiel:即使在代码中?在视图中您是对的,但在Java代码中我必须使用:
Messages.get(“key”)
,如文档中所述(对于Java):
// 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)