我如何进行国际化更改js文件以发出警报

时间:2018-10-30 11:19:51

标签: javascript scala playframework

如何在不通过模板传递值的情况下使国际化更改js文件进行警报。

我在conf文件夹中有'messages'和messages.es-ES文件。

1 个答案:

答案 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")

来检索messages键的值。