Scaffoldingの日本語化とか

Rails3のScaffoldはとっても便利なんだけど、日本語化とか始めると、indexやshowでカラム名が固定文字で生成されたりして微妙なんで、いろいろやってみたよ

  • 概要としては、こんな流れかな?
    • まず、Scaffoldを日本語化してくれる「i18n_generators」を導入
      • この「i18n_generators」て、モデル名や各項目名を 自動で翻訳 してくれる、すごすぎるツールだ!
    • Scaffoldの、元テンプレート&コントローラを修正
    • 普通にScaffoldを使ってモデル生成&マイグレート
    • 最後に、i18n_generatorsを使って日本語化して完了!
  • ただ、この辺のテンプレート修正とかって、本質的にはRailsでやるべきのような気が…。今後はどうなるかな?

i18n_generatorsを導入

  • これは、普通にgemで入れて、設定を変更するだけ。
    • gem installコマンドはこうね
      gem install i18n_generators
      
    • で、ファイル(config/application.rb)を、以下のように修正
      変更前    # config.i18n.default_locale = :de
      変更後    config.i18n.default_locale = :ja
      
    • 後は、日本語のリソースファイルを配置

Scaffoldのテンプレート&コントローラを修正

  • まずは、Scaffoldの元ファイルをコピーする
    rake rails:templates:copy
    
  • で、テンプレート修正
    • なんでか知らんが、indexとshowは「label」を使わずに直にカラム名を使って出力してるから日本語化されんので、以下の修正を行うよ!
    • lib/templates/erb/scaffold/index.html.erb を以下のように修正
      • 修正前
        <% attributes.each do |attribute| -%>
          <th><%= attribute.human_name %></th>
        <% end -%>
        
      • 修正後
        <% attributes.each do |attribute| -%>
          <th><%%= label :<%= singular_table_name %>, :<%= attribute.name %> %></th>
        <% end -%>
        
      • 実際のコードは、こんな感じに出力されるよ。(例は、Memberモデルのnameの場合ね)
          <th><%= label :member, :name %></th>
        
    • lib/templates/erb/scaffold/show.html.erb を以下のように修正
      • 修正前
        <b><%= attribute.human_name %>:</b>
        
      • 修正後
        <b><%%= label :<%= singular_table_name %>, :<%= attribute.name %> %>:</b>
        
      • 実際のコードは、こんな感じに出力されるよ。(例は、Memberモデルのnameの場合ね)
        <b><%= label :member, :name %>:</b>
        
  • で、コントローラもちょっとだけ修正
    • テンプレート側のindexで修正したトコで必要なインスタンスもいるから、ちょっと追加
    • lib/templates/rails/scaffold_controller/controller.rb のindexメソッドに以下を追加
       def index
         @<%= singular_table_name %> = <%= orm_class.build(class_name) %>
      
    • 実際のコードは、こんな感じに出力されるよ。(例は、Memberモデルのnameの場合ね)
       def index
         @members = Member.new
      
      • とはいえ、もうちょっとテンプレートの記述を工夫したらコレ、いらないような気が…。うーん、微妙…。
  • で、細かいところも好きなように修正できるよ
    • lib/templates/erb/scaffold 以下の各テンプレートで、適当に日本語にしたい箇所を修正
      • ココでの修正が、今後のScaffold時に展開されるので、そのつもりで修正を。
      • とりあえず、修正なしでも動くのは動く

Scaffold実行

  • 普通にScaffoldを使ってモデル生成&マイグレートするだけ

日本語辞書生成

  • 最後に、i18n_generatorsを使って日本語化して完了!
    • 日本語化は、以下のコマンドを打つだけ。
      rails g i18n ja
      
      • ただ、ネットに繋がってないと、「翻訳」は動かないので、注意
      • しかし…、さすがにあんまりちゃんと翻訳されないなw
    • で、自動翻訳されたモデル用の日本語辞書が[config/locales/translation_ja.yml]に生成されるので、気に入らない所を修正
  • 後は、Scaffoldの画面のindexとshowが翻訳されていれば、Scaffoldの日本語化成功ね!
最終更新:2012年07月23日 07:17