Rythm使用@ i18n标签

时间:2016-06-04 18:07:51

标签: java template-engine templating templating-engine rythm

首先,我对Rythm非常满意!对于免费的东西,这是一项出色的工

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

1。链标签到@ i18n()

这不起作用:

  1. @i18n("about.text").nl2br()
  2. @i18n("about.text").mytransformer()
  3. 解决方法是:

    @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()
    2.   

    执行@("about.text".i18n())有效,而执行@("about.text".i18n().nl2br())则不起作用,并抱怨@i18n()缺少参数。如果我添加丢失的参数,例如@("about.txt".i18n("").nl2br()),则会抱怨nl2br()没有定义String

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

    甚至更奇怪,当我在Chrome上运行你的小提琴时,它完美无缺。当我在Mac / Safari上运行时,我得到的错误与我刚才描述的相同:见截图:Rythm Safari screenshot

      
        
    1. @i18n()在javascript中转义
    2.   

    按照你的解释工作!

      
        
    1. @i18n()内使用标记作为参数
    2.   

    理解。使用@assign()的当前解决方案适用于一次性。使用@def()是一个更好的通用解决方案。

1 个答案:

答案 0 :(得分:1)

  
      
  1. 链标记到@i18n()
  2.   

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

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

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

  
      
  1. @i18n()在javascript中转义
  2.   

再次使用.i18n()变换器

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

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

以上三点的论证可以在http://fiddle.rythmengine.org/#/editor/0c426d5332334db3870b6bd8c0806e66

找到