如何在不通过模板传递值的情况下使国际化更改js文件进行警报。
我在conf文件夹中有'messages'和messages.es-ES文件。
答案 0 :(得分:0)
几年前,我在一个较旧版本的播放框架(2.2.x)中遇到了类似的问题,我已经通过编写如下的旋转模板来解决了这个问题:
@()
@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")