背景
我们正在迁移具有数据库中的字段标签的旧数据库。我们仍然使用messages.properties
来获取一些静态资源,例如css类(名称)。该表看起来像:
ITEMS
-------------------------------------------
code number(3) not null PK
language_code number(3) not null PK
label varchar2(90) not null
hint varchar2(250) not null
help varchar2(4000)
label_client varchar2(90) not null
hint_client varchar2(250) not null
help_client varchar2(4000)
对于html组件,我们只是查找此表中的项目,设置他的标签(自定义TagLib),这很有效。请注意,我们还允许客户端修改一些标签(* _client字段)。
问题
默认情况下,Grails将尝试查找带有后缀.label
的messages.properties以在验证错误消息中使用。例如(Person.name.label=name
):
Property name must not be blank.
如果我的数据库中的项目具有人物名称Person,则在验证中这将是不一致的,因为输入的标签不同。
我们无法将项目与.properties同步,因为客户端可以更改它们。因此,解决方案是以某种方式修改Grails验证消息以返回数据库的内容。
这可能吗?我如何才能从数据库中获取验证消息而不是属性?
答案 0 :(得分:0)
This blog post建议你可以通过实现自己的messageSource
Spring bean并在resources.groovy
中注册它来实现。它的历史可以追溯到2010年,但仍值得一试。
答案 1 :(得分:0)
您可以使用本地化插件! ;)
http://grails.org/plugin/localizations
从插件概述:
此插件将从数据库中提取i18n定义,而不是从i18n文件夹中的标准属性文件中提取。
它将执行以下操作:
创建一个名为Localization的域类和相应的表 使用在i18n文件夹中找到的所有消息属性预填充表 确保Grails根据它在数据库中找到的内容而不是118n文件夹
来编写i18n消息此外,该插件还具有以下附加功能,可以帮助您:
用于添加,删除和更新i18n消息的CRUD UI 缓存以提高速度 JSONP操作,可用于客户端模板。