<%=%>在grails标签中使用i18n-gettext

时间:2012-05-30 08:02:25

标签: grails internationalization gettext

我正在尝试使我的grails应用程序支持多语言。 对于我想要翻译的每个文本,我必须这样做:

<%=t9n.tr(s: "Delete Filter")%>

相反,以下内容将起作用(输出“删除过滤器”作为字符串),但i18n-gettext将找不到要翻译的字符串

${t9n.tr(s: "Delete Filter")}

所以我试着像

一样
<g:link controller="user" title="<%=t9n.tr(s: 'Delete Filter')%>">foo</g:link>

以下作品,但看起来很讨厌,因为我需要2行代码:

<% the_title = t9n.tr(s: "Delete Filter")%>
<g:link controller="user" title="${the_title}">foo</g:link>

任何想法? 帮助赞赏

2 个答案:

答案 0 :(得分:0)

问题是gettext无法解析gsp文件,插件配置gettext以使用PHP解析器来识别需要翻译的字符串。这就是<% %>在标记内部失败的原因。

可悲的是,没有简单的解决方案,我在gettext中使用了每个解析器,但没有一个能够比PHP更好。

编辑:我目前正在进行快速(脏)修复。

答案 1 :(得分:0)

Grails包含自己的i18n机制。本地化文件位于/ grails-app / i18n /.

在GSP文件中,您可以使用标记:

    <g:message code="my.key" default="My key" />

在代码中,您可以使用方法:

    message( code:'my.key' )

在GSP的一些复杂情况下,您可以将其结合起来:

    <g:link controller="user" title="${ message( code:'delete.filter' ) }">foo</g:link>