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

Javascript js文件中的eex语法或Phoenix代码,javascript,elixir,phoenix-framework,gettext,Javascript,Elixir,Phoenix Framework,Gettext,在我的index.html.eex中的Inside标记中,我可以使用此语法检索文本 <%= gettext "Login failed!"%> 现在我有了一个用于验证字段的js文件,我将该文件作为脚本加载到index.html.eex中 一切正常,但我需要在js文件中使用gettext进行Phoenix文本翻译。我知道语法不会在.eex文件之外编译,但我拒绝将所有验证逻辑代码放在index.html.eex中 如何在js文件中获取phoenix代码?您可以将翻译存储在index

在我的index.html.eex中的Inside标记中,我可以使用此语法检索文本

<%= gettext "Login failed!"%>

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

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

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

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

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

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

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

变量转换={
“登录失败”:,
“某些其他错误”:,
};
这样所有的翻译都可以在
app.js
中找到


为什么
raw
Poison.encode


如果
东西
包含引号或换行符(可能还有其他一些特殊字符),只需执行
操作就会中断<代码>毒药.编码
将把值转换为有效的JSON(也是有效的JSON),并且
raw
将确保此值不会双重转义。

谢谢@Dogbert!还有一件事:我为什么要叫毒药。编码!在gettext上?没有ITA它可以正常工作。你确定它没有
Poison.encode也能正常工作吗<代码>毒药.编码
将正确转义字符串中的任何特殊字符,并在值周围添加双引号。您可以执行
,但如果翻译包含例如换行符,则会中断。请确定。我正在使用这种语法,它就像一个符咒“是的,添加引号会起作用,但如果翻译包含引号或换行符,它会中断<代码>毒药.编码将这些字符转换为有效的JS字符串。使用Poison.encode!返回此值“pswdNotMatch”:“密码不匹配。请重试”,我得到以下错误:未捕获的语法错误:意外令牌&
<script>
  var Translations = {
    "login_failed": <%= raw Poison.encode!(gettext("Login failed!")) %>,
    "some_other_error": <%= raw Poison.encode!(gettext("Some other error!")) %>,
  };
</script>