0

背景

我们正在迁移一个遗留数据库,该数据库在数据库中具有国际化字段的标签。我们仍然将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 将尝试查看带有后缀的 messages.properties,.label以便在验证错误消息中使用。例如 ( Person.name.label=name):

Property name must not be blank.

如果我在数据库中的项目具有人的标签名称,则在验证中这将是不一致的,因为输入的标签不同。

我们无法将项目与 .properties 同步,因为客户端可以更改它们。所以解决方案是以某种方式修改 Grails 验证消息以返回数据库的内容。

这可能吗?仅对于验证消息,我如何从数据库而不是属性中获取?

4

2 回答 2

0

这篇博文建议您可以通过实现自己的messageSourceSpring bean 并将其注册到resources.groovy. 它可以追溯到 2010 年,但仍然值得一试。

于 2012-10-04T15:10:27.920 回答
0

您可以使用本地化插件!;)

http://grails.org/plugin/localizations

从插件概述:

此插件将从数据库中提取 i18n 定义,而不是从 i18n 文件夹中的标准属性文件中提取。

它将执行以下操作:

创建一个名为 Localization 的域类和相应的表 使用它在 i18n 文件夹中找到的所有消息属性预填充该表 确保 Grails 根据它在数据库中找到的内容而不是 118n 文件夹写入 i18n 消息

此外,该插件还具有以下附加功能来帮助您:

用于添加、删除和更新 i18n 消息的 CRUD UI 用于提高速度的缓存 可用于客户端模板的 JSONP 操作。

于 2012-10-04T16:16:57.670 回答