gpt4 book ai didi

java - Rythm 使用变压器和带有 @i18n 标签的嵌套标签

转载 作者:行者123 更新时间:2023-11-30 07:20:38 24 4
gpt4 key购买 nike

首先我对 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=在此处查看我的个人资料{0}无论如何,这可能是编写资源字符串的更好方法,但如果我能以某种方式摆脱 @assign() 并编写以下内容,那就太好了:

@i18n("about.text","<a href='@genlink("person",person.getId())'>@person</a>")

编辑:

我尝试了你的建议,但只取得了部分成功。

  1. Chain tag onto @i18n()

执行 @("about.text".i18n()) 有效,而执行 @("about.text".i18n().nl2br()) 无效不起作用,并提示 @i18n() 缺少参数。如果我像这样添加缺少的参数: @("about.txt".i18n("").nl2br()) 它会提示 nl2br() 未定义对于字符串

对我有用的是:@s().i18n("about.txt").nl2br()

更奇怪的是,当我在 Chrome 上运行你的 fiddle 时,它工作得很好。当我在 Mac/Safari 上运行它时,我得到了与我刚才描述的相同的错误:参见屏幕截图:Rythm Safari screenshot

  1. @i18n() escaped in javascript

按照你的解释工作!

  1. Use of tag inside @i18n() as argument

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

最佳答案

  1. Chain tag onto @i18n()

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

假设将 @i18n("about.text").nl2br() 更改为 @("about.text".i18n().nl2br())

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

  1. @i18n() escaped in javascript

再次使用.i18n() 转换器

  1. Use of tag inside @i18n() as argument

标签处理很难放入另一个标签或转换器中。对于您的情况,我建议您使用 inline tag

以上三点的演示可以参见http://fiddle.rythmengine.org/#/editor/0c426d5332334db3870b6bd8c0806e66

关于java - Rythm 使用变压器和带有 @i18n 标签的嵌套标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37633470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com