1

首先我对Rythm很满意!出色的工作是免费的。

最近我开始使用 Rythm 对我的模板进行国际化,有些事情似乎比需要的更麻烦。我想知道是否有更好的方法来做我想做的事情。

1. 将标签链接到@i18n()

这不起作用:

  1. @i18n("about.text").nl2br()
  2. @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>")

编辑:

我尝试了您的建议,但只是部分成功。

  1. 链标签到@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 上运行它时,我得到了与我刚才描述的相同的错误:见截图:节奏 Safari 截图

  1. @i18n()在 javascript 中转义

按照你的解释工作!

  1. 使用内部标签@i18n()作为参数

明白了。当前的解决方案@assign()适合一次性使用。Using@def()是一个更好的通用解决方案。

4

1 回答 1

1
  1. 链标签到@i18n()

尝试使用.i18n()转换器而不是@i18n()标签。

@i18n("about.text").nl2br()改变@("about.text".i18n().nl2br())

请注意,如果您输入类似 的字符串文字,则需要该()对包含整个表达式"about.text",但是如果您对变量执行相同的操作,()则可以选择退出,例如@foo.i18n().nl2br()

  1. @i18n()在 javascript 中转义

再次,使用.i18n()变压器

  1. 在@i18n() 中使用标签作为参数

标签处理很难放入另一个标签或转换器中。在您的情况下,我建议您使用内联标签

以上三点的演示可以在http://fiddle.rythmengine.org/#/editor/0c426d5332334db3870b6bd8c0806e66找到

于 2016-06-05T23:44:48.957 回答