Несколько лет назад у меня была похожая проблема в более старой версии игрового фреймворка (2.2.x), которую я решил, написав такой шаблон twirl:
@()
@import play.api.Play.current
var myI18n = (function() {
var messages = @Html("{" + Messages.messages.flatMap(_._2).map(mess => s""""${mess._1}":"${mess._2}"""").mkString(", ") + "}")
return {
getMessage: function (key) {
if(messages.hasOwnProperty(key)) {
return messages[key];
}
else return key;
}
};
});
Таким образом, я создаю во время выполнения файл js с моей библиотекой сообщений и с основной функцией для извлечения.
Затем я выставляю действие, которое возвращает это (безусловно, нужен кэш по локали):
public static Result javascriptRoutes() {
response().setContentType("text/javascript");
return ok(views.html.i18n.render());
}
и включить в страницы:
<script type="text/javascript" src="@controllers.routes.I18nJs.javascriptRoutes()"></script>
Наконец, я могу получить значение ключа сообщения с образцом myI18n().getMessage("my.message.key")