首先我对Rythm很满意!出色的工作是免费的。
最近我开始使用 Rythm 对我的模板进行国际化,有些事情似乎比需要的更麻烦。我想知道是否有更好的方法来做我想做的事情。
1. 将标签链接到@i18n()
这不起作用:
@i18n("about.text").nl2br()
@i18n("about.text").mytransformer()
解决方法是:
@assign(newvar){@i18n("about.text")}
@newvar.nl2br()
这有效,但并不漂亮。
2. @i18n() 在 javascript 中转义
如果我有一个部分
<script>
var s = '@description';
</script>
那么 Rythm 会很好地避开该描述中的任何 ' 或 "。但是当我使用时:
<script>
var s = '@i18n("description")';
</script>
逃脱没有完成。我也尝试过:
var s = '@i18n("description").escape("js")';
和
var s = '@escapeJS(){@i18n("description")}';
但两者都不起作用(见上文)。再次起作用的是使用
@assign(desc){@i18n("description")}
...
var s = '@desc';
3. 使用@i18n() 中的标签作为参数
有时我需要一个翻译字符串中的链接,如下所示:
about.text=See my profile here <a href="{0}">{1}</a>
我想在模板中使用它,如下所示:
@i18n("about.txt",@genlink("person",person.getId()),person)
注意:person
这里是一个类型为模板的参数Person
。@genlink
是使用查找生成链接的便利模板(或标签)。我目前使用的解决方案是:
@assign(lnk){<a href='@genlink("person",person.getId())'>@person</a>}
@i18n("about.txt",lnk)
请注意,语言资源已更改为:无论如何,这可能是编写资源字符串的更好方法,但如果我能以某种方式about.text=See my profile here {0}
摆脱它并编写以下代码,那就太好了:@assign()
@i18n("about.text","<a href='@genlink("person",person.getId())'>@person</a>")
编辑:
我尝试了您的建议,但只是部分成功。
- 链标签到
@i18n()
doing@("about.text".i18n())
有效,而 doing@("about.text".i18n().nl2br())
无效,并抱怨@i18n()
. 如果我像这样添加缺少的参数:@("about.txt".i18n("").nl2br())
它抱怨nl2br()
未定义String
对我有用的是:@s().i18n("about.txt").nl2br()
更奇怪的是,当我在 Chrome 上运行你的小提琴时,它可以完美运行。当我在 Mac/Safari 上运行它时,我得到了与我刚才描述的相同的错误:见截图:
@i18n()
在 javascript 中转义
按照你的解释工作!
- 使用内部标签
@i18n()
作为参数
明白了。当前的解决方案@assign()
适合一次性使用。Using@def()
是一个更好的通用解决方案。