js文件中的eex语法或Phoenix代码

时间:2018-02-09 10:48:49

标签: javascript elixir phoenix-framework gettext

我的index.html.eex中的内部标记我可以使用此语法来检索文本。

<%= gettext "Login failed!"%>

现在我有一个用于验证字段的js文件,我将此文件作为index.html.eex中的脚本加载。

一切正常但我需要在js文件中使用gettext for Phoenix文本翻译。我知道&lt;%=%&gt;语法不会在.eex文件外编译,但我拒绝将所有验证逻辑代码放在index.html.eex中 如何在js文件中获取phoenix代码?

1 个答案:

答案 0 :(得分:2)

您可以将翻译存储在index.html.eex中的变量中,然后从JS文件中访问它。这是一个例子:

将其添加到index.html.eex的顶部:

<script>
  var Translations = {
    "login_failed": <%= raw Poison.encode!(gettext("Login failed!")) %>,
  };
</script>

现在在你的JS文件中,执行:

console.log(Translations.login_failed)

更好的方法是创建此类翻译列表并将其注入布局文件中:

<script>
  var Translations = {
    "login_failed": <%= raw Poison.encode!(gettext("Login failed!")) %>,
    "some_other_error": <%= raw Poison.encode!(gettext("Some other error!")) %>,
  };
</script>

这样,所有翻译都将在app.js中提供。

为什么rawPoison.encode!

如果"<%= thing %>"包含引号或换行符(可能还有其他一些特殊字符),那么简单地执行'<%= thing %>'thing就会中断。 Poison.encode!会将值转换为有效的JSON(也是有效的JS),raw将确保此值不会被双重转义。