uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

scaffoldで生成される項目名を日本語にするには

注意!以下で達成したいことは、T.Yamamotoさんがコメント欄に指摘してくれたように、I18n Templates Pluginでより高機能で汎用的でしかもより簡単に達成できますので、以下は使わないほうがいいです。


前に「scaffoldで生成される項目名が日本語にならないかなあ」という記事を書きましたが、なんとかできたので紹介。まず、id:uehaj:20080224:1203862889で示したように、grails install-templatesを実行してscaffoldのテンプレートを持ってきます。次に、Grailsプロジェクト配下(以降と表記)の/src/templates/scaffolding/にインストールされたいくつかのGSPに対して以下の修正を行います。

diff scaffolding c:/tool/grails-1.0.1/src/grails/templates/scaffolding/
diff scaffolding/create.gsp c:/tool/grails-1.0.1/src/grails/templates/scaffolding/create.gsp
46c46
<                                     
    • -
diff scaffolding/edit.gsp c:/tool/grails-1.0.1/src/grails/templates/scaffolding/edit.gsp 46c46 <
    • -
diff scaffolding/list.gsp c:/tool/grails-1.0.1/src/grails/templates/scaffolding/list.gsp 15d14 < 38c37 < g:sortablecolumn
    • -
diff scaffolding/show.gsp c:/tool/grails-1.0.1/src/grails/templates/scaffolding/show.gsp 34c34 < g:message:
    • -
要するに「${p.naturalName}」を「g:message」に置き換えます。 あとは、i18n/messages_ja.propertiesに、
フィールド変数名=日本語訳
というエントリを日本語に置換したい変数分だけ記入しておけばOKです。例えば
price=価格 name=名称
こんな感じ。 なお、こういうのが欲しい理由は、Grailsで顧客向けにデモをちゃっちゃと作りたいとき、scaffold(特に動的scaffold)を有効利用したいのですが、英語だと取っ付きがはるかに悪いアプリになってしまうからです。 ちなみにGroovyレベルでは日本語の変数名OKなのですが、Grailsレベルでエラーになります。こっちを何とかするのが正しい対処だったかもしれませんが、DBのフィールド名が日本語になってもアレなので、まあ、これで妥当かもしれません。