2011-10-17 12 views
1

Groovy/Grailsでドメインクラス名を人間が読めるようにする方法はありますか?たとえば、LibraryBookというクラスがあり、アプリケーションビューでは「Create LibraryBook」と表示されます。 Grailsにこれを "Create Library Book"と表示させることは可能ですか?Groovy/Grailsでモデル名を人間が読めるようにする

答えて

3

あなたgrails-app/views/libraryBook/create.gspファイルの先頭を見れば、あなたのようなものが表示されます。これは、あなたがLibraryBookのデフォルト名を上書きするlibraryBook.labelメッセージのプロパティを設定することができます示し

<g:set var="entityName" value="${message(code: 'libraryBook.label', default: '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.replaceAll(/\B[A-Z]/){ " $it" }}')}" /> 

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

ご覧のとおり、このコード:

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

CamelCaseクラス名をとり、大文字(最初の文字とは別)を空白文字の後の文字に置き換えます。あなたがgenerate-viewsgenerate-allを呼び出すとき

その後、新しく作成されたGSPはそれに

+2

が正しいです。しかし、私は彼がメッセージのプロパティがi18lライブラリのmessage.propertiesファイルにあることに言及していないと思います。私は彼の2番目の解決策は過度のものであり、それは非常に国際化が容易ではないと信じています。 – sbglasius

+0

@sbglasius私は、第二の方法ではなく、第一の方法に向かって、私の答えをより強く語っていたはずです。 2番目は、デフォルトの足場テンプレートがどのようにベストプラクティスのデモよりも構成可能であるかのデモンストレーションでした...残念です...私はこれをもっと明白にするために私の答えを変更します。間違ったやり方で(そして人々を間違った道筋に導く)長期的には誰も助けない –

4

をスペースで、このデフォルト名を持つことになりますGrailsDomainClassは、あなたが使用することができます性質を持っています。プロパティの名前にはGrailsNameUtils.getNaturalName()を使用することもできます。

まだ、ローカライズはできません。

通常、@ temp_yatesと同様に、className.label = Class NameclassName.propertyName.label=Property Nameからmessages.propertiesのようなメッセージを追加します。

関連する問題