Playframework: интернационализация в Akka и Unit-Test

В настоящее время я работаю над запланированной Akka-Task, которая отправляет электронные письма клиентам. Часть этих писем обрабатывается с помощью scala-Templates, которые вставляются следующим образом:

emailData.add("address", views.html.shared.formated_address.render(item).body());

formated_address.scala.html интенсивно использует Message-helper (play.api.i18n.Messages).

В контексте приложения интернационализация работает безупречно (с учетом языка, определенного в контексте). К сожалению, рендеринг одного и того же шаблона из Akka-Task или Unit-Test приводит к тому, что ключи перевода не переводятся.

Я знаю, что должна быть возможность принудительно использовать язык, перезаписав неявное значение Ланга, но мне это не удалось.

Одно из решений, которое пришло мне в голову, заключалось в том, чтобы запустить поддельное приложение, но это кажется излишним для легковесной Akka-Task.

Любые идеи, как обойти эту проблему?


person uhon    schedule 15.04.2014    source источник


Ответы (1)


Вот и ответ на мой собственный вопрос. Анализируя Library-Code, я обнаружил, что неявный язык (который используется Messages-Helper) обычно задается Cookie PLAY_LANG. В контексте, не связанном с приложением (например, в Akka-Actors или Unit-Tests), у вас нет этой информации. Поэтому вместо этого Play использует локаль системы по умолчанию, которая на моей машине по умолчанию имеет значение «en». Поскольку наше приложение не поддерживает английский язык, файл перевода с окончанием «.en» не найден. Это привело к непереводимым ключам.

Есть две возможности использовать определенный язык внутри акторов.

  • Создайте файл conf/messages, который является файлом по умолчанию, если для установленной локали нет другого языкового файла.
  • (мой предпочтительный способ). Принудительно используйте неявный язык, установив локаль по умолчанию следующим образом: java.util.Locale.setDefault(new Locale("de"));

Я надеюсь, что это может быть полезно для кого-то.

person uhon    schedule 16.04.2014