読者です 読者をやめる 読者になる 読者になる

uehaj's blog

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

好きなGrailsプラグインシリーズその1 i18n-templates

Grails

前にもどっかに書いたかもしれませんが、山本さんに教わったi18nテンプレートプラグイン」はわたしの好きなものの一つです。scaffold生成物は最終的には使えん、という意見も散見しますが、動的に生成させるにせよ静的に生成するにせよ、scaffoldテンプレートをかなりいじると、結構つかえる可能性もあるんじゃないかなーとおもう(マスター系管理画面などには特に)。さらにいうとお客さんの前でささーっとプロトタイプを作るのにはscaffoldは必須だし、日本語の方が取っ付きがいいですよね。

そのような向きにお勧めしたいのがscaffold画面を日本語化(多国語化)できるi18nテンプレートプラグインです。

使い方:

>grails install-plugin i18n-templates

すると、/src/templates 配下に、以下のようなGSPやコントローラソースコードのテンプレートができます。

  • Controller.groovy
  • create.gsp
  • edit.gsp
  • list.gsp
  • renderEditor.template
  • show.gsp

これらは、grails generate-allとかgrails generate-viewとかで静的生成するscaffoldの雛形でもあるし、動的scaffoldのGSPの雛形ともなります(GSPはある意味でHTMLの雛形なので、「雛形の雛形」ともいうべきか)。

ここまでで既に有用ですが(ここまでならgrails insatall-templatesと同様)、データ項目名などや[Edit][Delete]などのリンクも日本語化多国語化できるのがi18n-templatesの利点です。

具体的には、上を入れた後でgrails generate-i18n-messages "*"とかすると各ドメインクラス向けの多国語化メッセージファイルのベースを標準出力に表示してくれます。こんな感じです。("*"の代りにドメインクラス名を指定すると、その指定したドメインクラスに対してのみ表示されます)

# Test messages
test.create=Create Test
test.edit=Edit Test
test.list=Test List
test.new=New Test
test.show=Show Test
test.created=Test {0} created
test.updated=Test {0} updated
test.deleted=Test {0} deleted
test.not.found=Test not found with id {0}
test.id=Id
test.address=Address
test.address.nullable.error=Property [Address] of class [Test] cannot be null
test.age=Age
test.age.nullable.error=Property [Age] of class [Test] cannot be null
test.name=Name
test.name.nullable.error=Property [Name] of class [Test] cannot be null

これは「Test.groovy」というドメインクラス向けのメッセージです。
んでこれを元にちょちょいと日本語に翻訳しておきます。

# Test messages
test.create=テストを生成
test.edit=テストを編集
test.list=テストの一覧
test.new=テストを新規作成
test.show=テストを表示
test.created=テスト{0}が生成されました
test.updated=テスト{0}が更新されました
test.deleted=テスト{0}を削除しました
test.not.found=id {0}を持つテストがありません。
test.id=Id
test.address=住所
test.address.nullable.error=クラス[Test]の[住所]プロパティはnullになることができません。
test.age=年齢
test.age.nullable.error=クラス[Test]の[年齢]プロパティはnullになることができません。
test.name=名前
test.name.nullable.error=クラス[Test]の[名前]プロパティはnullになることができません。

この内容を、/i18n/i18n-templates_ja.properties に置き換えます。するってーとscaffoldが日本語化されるという寸法です。加えて、データ項目名に対する日本語としての用語の統一・一括置換が容易になるという副作用としての利点も得られます。これらのメッセージや項目名をGSP内で「g:message」のように参照することもできるでしょう。

ちなみに特定ドメインクラスに所属しないGeneral messageとして

home=ホーム
create=作成
edit=編集
update=更新
delete=削除
delete.confirm=まじっすか?

とかを書いておくことも出来ます。詳しくはプラグインのリファレンスをどうぞ。