Grails:组织i18n捆绑

sme*_*eeb 5 grails internationalization

我看到下面grails-app/i18n有很多messages*.properties捆.我想将我的应用程序国际化,但每页有1个"捆绑集".通过捆绑集我的意思是,包含文字相同的组包/属性文件,但针对不同的语言.例如,如果我希望我的网站支持英语,法语和西班牙语,那么我的"关于"页面可能包含3个捆绑包:

  • about.properties (英语)
  • about_fr.properties (法文)
  • about_es.properties (西班牙语)

如果我的应用程序包含100个页面,并且每页有3个属性文件,那么我将最终拥有300个属性文件grails-app/i18n!多数民众赞成!

我想知道我是否可以添加子文件夹grails-app/i18n并以分散的方式组织它:

myapp/
    grails-app/
        i18n/
            about/
                about.properties
                about_fr.properties
                about_es.properties
            contact/
                contact.properties
                contact_fr.properties
                contact_es.properties
            fizzbuzz/
                fizzbuzz.properties
                fizzbuzz_fr.properties
                fizzbuzz_es.properties
            ... etc.
Run Code Online (Sandbox Code Playgroud)

这将使更好/更清洁/更有组织的代码.如果可能的话:

  • 我只是在grails-app/i18n 下创建文件夹/包,还是有我可以使用的Grails CLI命令(例如grails create-i18n-bundle about)?
  • 然后,我如何从GSP内部引用我的嵌套包?例如,在我about.gsp,我会使用:<g:message code="about/foo.bar" />

小智 1

Grails 获取 grails-app/i18n 文件夹下的所有包。因此,您可以为每个组创建一个文件夹。

引用它们就像在 messages.properties 中一样简单。我的意思是,如果你有:

grails-app/i18n/messages.properties

foo.bar = foo bar
Run Code Online (Sandbox Code Playgroud)

grails-app/i18n/about/about.properties

bar.foo = bar foo
Run Code Online (Sandbox Code Playgroud)

您可以在 gsp 中执行以下操作:

<g:message code="foo.bar"/>
<g:message code="bar.foo"/>
Run Code Online (Sandbox Code Playgroud)

这里有一个简短的文档: https: //grails.org/wiki/Internationalization