Play 2.6 I18N Twirl не работает в производственном режиме

Когда я запускаю приложение 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>

Это происходит, когда я запускаю в режиме Prod в SBT, а также когда я упаковываю его с sbt-native-packager и запустить автономно. Я ошибаюсь?

2 ответа

Я столкнулся с более или менее той же проблемой сегодня. я имею messages а также messages.pt-br на моем игровом приложении. все работало нормально в режиме dev но на производстве только английский (messages файл) загружался. Я заметил, что на моем application.conf файл у меня был:

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

но мой pt-br файл был назван messages.pt-br, Я переименовал его в messages.pt-BR и теперь он работает просто отлично на производстве. Я подозреваю, что заглавные буквы в имени файла играют большую роль при производстве.

Попробуйте назвать их с расширением языка точно так же, как в application.conf и посмотреть, если это работает.

Вы должны включить опцию "LauncherJarPlugin" в build.sbt.

Например, "lazy val root = (проект в файле (". ")). EnablePlugins (PlayScala, LauncherJarPlugin)"

У меня была такая же проблема, но я исправил это так.

Удачи.

Другие вопросы по тегам