0

バックグラウンド

データベース内で国際化されたフィールドのラベルを持つレガシーデータベースを移行しています。私たちは今でもmessages.propertiescssクラス(名前)のようないくつかの静的リソースにを使用しています。テーブルは次のようになります。

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.

データベース内のアイテムにNameofPersonというラベルが付いている場合、検証では、入力のラベルが異なるため、これは一貫性がありません。

クライアントがアイテムを変更できるため、アイテムを.propertiesと同期することはできません。したがって、解決策は、どういうわけか、Grails検証メッセージを変更してデータベースのコンテンツを返すことです。

これは可能ですか?検証メッセージのためだけに、プロパティではなくデータベースから取得するにはどうすればよいですか?

4

2 に答える 2

0

このブログ投稿messageSourceは、独自のSpring Beanを実装し、に登録することでそれを実行できることを示唆していますresources.groovy。それは2010年にさかのぼりますが、それでも試してみる価値があります。

于 2012-10-04T15:10:27.920 に答える
0

ローカリゼーションプラグインを使用できます!;)

http://grails.org/plugin/localizations

プラグインの概要から:

このプラグインは、i18nフォルダー内の標準プロパティファイルからではなく、データベースからi18n定義をプルします。

次のことを行います。

ドメインクラスとローカリゼーションと呼ばれる対応するテーブルを作成します。テーブルにi18nフォルダで見つかったすべてのメッセージプロパティを事前入力します。Grailsが118nフォルダではなくデータベースで見つけたものに基づいてi18nメッセージを書き込むようにします。

さらに、プラグインには次のような追加機能があります。

i18nメッセージを追加、削除、更新するためのCRUDUI速度を上げるためのキャッシュクライアント側のテンプレート作成に役立つJSONPアクション。

于 2012-10-04T16:16:57.670 に答える