使模型名称在Groovy / Grails中可读

时间:2011-10-17 17:52:50

标签: string grails groovy model format

有没有办法让Groovy / Grails中的域类名称具有人类可读性?例如,我可能有一个名为LibraryBook的类,在应用程序视图中,它将显示为“Create LibraryBook”。是否有可能让Grails将其显示为“创建图书馆书”?

2 个答案:

答案 0 :(得分:4)

GrailsDomainClass有一个naturalName属性,您可以使用它。您还可以使用GrailsNameUtils.getNaturalName()作为属性名称。

尽管如此,它仍无法本地化。

常规约定与@tim_yates一样,将className.label = Class NameclassName.propertyName.label=Property Name等消息添加到messages.properties

答案 1 :(得分:3)

如果查看grails-app/views/libraryBook/create.gsp文件的顶部,您会看到如下内容:

    <g:set var="entityName" value="${message(code: 'libraryBook.label', default: 'LibraryBook')}" />

这表明您可以设置libraryBook.label消息属性以覆盖默认名称LibraryBook。应在grails-app/i18n/message.properties文件中设置此属性。此can be found here的文档。

作为一个有趣的(不是推荐的最佳实践),您可以更改默认的grails脚手架模板。首先,您需要安装模板:

grails install-templates

然后,您可以编辑文件src/templates/scaffolding/create.gsp(以及list.gsp等)并更改该行:

<g:set var="entityName" value="\${message(code: '${domainClass.propertyName}.label', default: '${className}')}" />

<g:set var="entityName" value="\${message(code: '${domainClass.propertyName}.label', default: '${className.replaceAll(/\B[A-Z]/){ " $it" }}')}" />

如您所见,此代码:

className.replaceAll(/\B[A-Z]/){ " $it" }

使用CamelCase类名,并用空格字符后面的字母替换所有大写字母(除了第一个)。

然后当您致电generate-viewsgenerate-all时,新创建的gsp将具有此默认名称,其中包含空格