0

我正在尝试使我的 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>

有任何想法吗?帮助表示赞赏

4

2 回答 2

0

问题是 gettext 无法解析 gsp 文件,插件将 gettext 配置为使用 PHP 解析器来识别需要翻译的字符串。这就是为什么 <% %>在标签内时会失败。

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

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

于 2012-05-30T21:41:06.143 回答
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>
于 2012-05-31T14:40:31.227 回答