有没有办法让Groovy / Grails中的域类名称具有人类可读性?例如,我可能有一个名为LibraryBook的类,在应用程序视图中,它将显示为“Create LibraryBook”。是否有可能让Grails将其显示为“创建图书馆书”?
答案 0 :(得分:4)
GrailsDomainClass有一个naturalName
属性,您可以使用它。您还可以使用GrailsNameUtils.getNaturalName()作为属性名称。
尽管如此,它仍无法本地化。
常规约定与@tim_yates一样,将className.label = Class Name
和className.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-views
或generate-all
时,新创建的gsp将具有此默认名称,其中包含空格