我正在尝试使我的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>
任何想法? 帮助赞赏
答案 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>