0

当我在开发模式下运行我的 Play 2.6 应用程序时,它已正确本地化为请求的语言。但是在生产模式下,消息的占位符不会被它们的实际值替换。换句话说:

messages.en我有:

home.location = Germany

在我的 Twirl 模板中,我有:

@()(implicit messages: MessagesProvider)
...
<span>@messages.messages("home.location")</span>

在控制器中:

class HomeController @Inject()(components: ControllerComponents, langs: Langs)
    extends AbstractController(components)
    with I18nSupport {

  def home: Action[AnyContent] = Action { implicit request =>
    Ok(views.html.home())
  }
}

当我在开发模式下运行时,它呈现为

<span>Germany</span>

但在 prod 模式下:

<span>home.location</span>

当我在 SBT 中以 prod 模式运行以及将其打包sbt-native-packager并独立运行时,就会发生这种情况。我拿错了吗?

4

2 回答 2

0

我今天或多或少面临同样的问题。我有messagesmessages.pt-br的游戏应用程序。在开发模式下一切正常,但在生产中只messages加载了英文(文件)。我注意到在我的application.conf文件中我有:

play.i18n.langs = [ "en", "pt-BR"]

但我的pt-br文件名为messages.pt-br. 我所做的是将它重命名为messages.pt-BR,现在它在生产中运行良好。我怀疑文件名中的大写字母在生产中起着很大的作用。

尝试使用与中完全相同的语言扩展名来命名它们,application.conf看看它是否有效。

于 2018-07-11T22:40:33.120 回答
0

您必须在 build.sbt 中添加“LauncherJarPlugin”选项。

例如,“lazy val root = (project in file (".")).EnablePlugins (PlayScala, LauncherJarPlugin)”

我有同样的问题,但我是这样解决的。

祝你好运。

于 2017-09-22T20:52:40.473 回答