如何在 Angular JS 中使用 Grails Message 代码标签

How to use Grails Message code tag with Angular JS

我有一个加载 .GSP 模板的自定义指令,即

在我的指令中我有

template: '/view/pages/dummy.gsp'

在dummy.gsp、

我有一个如下所示的复选框:

<input type="checkbox" name="orangeFruit"> Orange </input>

现在我不想使用硬编码的 Orange,而是使用这样的东西:

<div ng-repeat="thisfruit in fruits">
<input type="checkbox" name="{{thisfruit}}chkbox">
    ${message(code:'label.{{thisfruit}}')}
</input>
</div>

以上片段是我的 angular 模板,我在其中遍历水果列表并为每个水果添加复选框。

fruits:["orange","apple","banana"] is the angular JSON object.

其中 {{thisfruit}} 是 Javascript 对象并且值为 orange。

下面是我的 messages.properties 文件的样子:

label.orange=Orange
label.apple=Apple
label.banana=Banana

当我 运行 上面的消息代码时,它总是给我 "label.orange" 而不是 "orange"。我的 messages.properties 文件中有这个密钥,所以它应该能找到它。 当我用 label.orange 替换 label.{{thisfruit}} 时,它给出了正确的值。

感谢任何帮助!

这根本不可能,而且是人们过去常常感到困惑的最常见问题。您基本上是在尝试使用客户端 javascript 或 angular 代码修复服务器端 GSP 或 Groovy 代码。

GSP 文件是在服务器端编译的,而不是在浏览器上编译的,因此它不会处理任何 angular 代码,例如 {{thisfruit}},这些代码永远不会在服务器端编译。

类似地,当 GSP 被编译成 HTML 代码时,它将被转换为浏览器理解如何呈现它的 HTML 代码,并在那里执行您的 angular 代码。

因此,当它在客户端呈现时,将没有像 ${message(code:'label.{{thisfruit}}')} 您尝试执行的代码可用,因为它在呈现之前已经在服务器端编译。

因此您不能在客户端 (angular) 代码中使用服务器端 (Grails) 消息代码。

为此,您可以为 angular 使用一个非常棒的客户端库。 http://angular-translate.github.io/

检查一下。