Grails与自定义捆绑包的国际化

Grails与自定义捆绑包的国际化,grails,internationalization,gsp,Grails,Internationalization,Gsp,My Grails(2.4.2)应用程序是用一堆“默认/标准”资源包创建的: myapp/ grails-app/ i18n/ messages.properties messages_fr.properties 现在,我想创建自己的“自定义”资源包,即在创建myapp时使用的标准messages*.properties文件之外的文件中定义属性 根据i18n文档,所有捆绑包都需要以消息作为前缀,并以属性作为后缀。因此,我添

My Grails(2.4.2)应用程序是用一堆“默认/标准”资源包创建的:

myapp/
    grails-app/
        i18n/
            messages.properties
            messages_fr.properties
现在,我想创建自己的“自定义”资源包,即在创建
myapp
时使用的标准
messages*.properties
文件之外的文件中定义属性

根据i18n文档,所有捆绑包都需要以
消息
作为前缀,并以
属性
作为后缀。因此,我添加了两个新的道具文件,一个用于英语,一个用于法语:

myapp/
    grails-app/
        i18n/
            messages.properties
            messages_fr.properties
            messages_myapp.properties
            messages_myapp_fr.properties
首先,我不能100%确定我对文档的理解是否正确。所以,如果我的2个新道具文件有任何不正确之处,请告诉我

话虽如此,在这些文档的所有示例中,我看不出您在哪里指定要使用的捆绑包。所有示例如下所示:

<g:message code="fizz.buzz.foo" />

但是如果我在
messages_blah.properties
messages_bar.properties
中都定义了
fizz.buzz.foo
属性怎么办


所以我问:如何添加自己的定制资源包,如何从GSP中正确引用它们?

要回答您的问题,您必须了解Grails(嗯,Spring)是如何实现这一点的

多个文件的路径是正确的。您在此处概述的内容与文档相匹配,并将起作用

然而,在封面下真正要做的是将它们合并成一个包(每种语言)。因此,没有必要告诉Grails/Spring使用哪个捆绑包

最后,当同一个键被多次定义时会发生什么?第一个对手获胜。我似乎记得捆绑包的组合顺序是按文件名顺序的,尽管您应该能够很快地测试这一点


希望这有帮助,祝你好运

像往常一样,感谢@Joshua Moore(+1)-但是
没有解析,而是将“fizz.buzz.foo”呈现为HTML中的纯文本。任何DEA?意思是说上面的“想法”,而不是“DEA”。(有什么想法吗)?是的,请尝试在文件名中不要使用下划线(该语言所需的下划线除外),例如myapp.properties vs messages_myapp.properties,另外,在添加/删除新文件时,请确保停止应用程序并运行
clean
。这里只是一些进一步的信息:不客气,首先阅读文档是一种荣誉!文件不需要以
消息开头
;在我当前的项目(Grails2.4.4)中,我有
domain.properties
navigation.properties
(以及它们的翻译版本,例如
domain\u de.properties
),Grails可以很好地获取它们。