首先,我对Rythm非常满意!对于免费的东西,这是一项出色的工
最近我开始使用Rythm对我的模板进行国际化,有些事情看起来比需要的更麻烦。我想知道是否有更好的方法来做我想做的事。
这不起作用:
@i18n("about.text").nl2br()
@i18n("about.text").mytransformer()
解决方法是:
@assign(newvar){@i18n("about.text")}
@newvar.nl2br()
这样可行,但并不漂亮。
如果我有一个部分
<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';
有时我需要一个翻译过的字符串中的链接,如下所示:
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()
执行@("about.text".i18n())
有效,而执行@("about.text".i18n().nl2br())
则不起作用,并抱怨@i18n()
缺少参数。如果我添加丢失的参数,例如@("about.txt".i18n("").nl2br())
,则会抱怨nl2br()
没有定义String
对我有用的是:@s().i18n("about.txt").nl2br()
甚至更奇怪,当我在Chrome上运行你的小提琴时,它完美无缺。当我在Mac / Safari上运行时,我得到的错误与我刚才描述的相同:见截图:
- 醇>
@i18n()
在javascript中转义
按照你的解释工作!
- 在
醇>@i18n()
内使用标记作为参数
理解。使用@assign()
的当前解决方案适用于一次性。使用@def()
是一个更好的通用解决方案。
答案 0 :(得分:1)
- 链标记到
醇>@i18n()
尝试使用.i18n()
转换器而不是@i18n()
标记。
将@i18n("about.text").nl2br()
更改为@("about.text".i18n().nl2br())
请注意,如果您输入字符串文字()
,则需要"about.text"
对括起整个表达式,但是如果对变量执行相同的操作,则()
可以选择退出,例如@foo.i18n().nl2br()
- 醇>
@i18n()
在javascript中转义
再次使用.i18n()
变换器
- 在@ i18n()中使用标签作为参数
醇>
很难将标签处理放入另一个标签或变换器中。在您的情况下,我建议您使用inline tag
以上三点的论证可以在http://fiddle.rythmengine.org/#/editor/0c426d5332334db3870b6bd8c0806e66
找到