[Rails][Ruby] Rails2.0系で scaffold 日本語化までをやってみる

移転しました。

scaffold

参考URL
http://d.hatena.ne.jp/idesaku/20071211/1197386955

環境整える

基本的に割愛

以下とかでrailsインストールしておく。

$ gem install rails sqlite3 sqlite3-ruby ruby-debug
scaffold 作成

personというテーブルのscaffoldを作成する
以下参考URL引用

Rails 1.2であれば、まずはmigrationファイルを作ってDBにmigrateし、その後でおもむろにscaffold生成を行うところである。しかし、Rails 2.0ではここでいきなりscaffoldの生成を始める。

オプションとして与えているname:stringとage:integerに注目。従来はscaffoldジェネレータが勝手にDBのスキーマ情報を参照して表示・編集するフィールドを定めていたが、今回はスキーマを作る前にジェネレータを使うので、それができない。従って、modelのどのフィールドを対象とするのか、プログラマが明示的に指定する必要がある。これを指定しないと、何も表示せず何も編集できない退屈なscaffoldが作られてしまう。また、migrationファイルもこのパラメータに従って作られている。
$ ruby script/generate scaffold person name:string age:integer

テストデータ作成

$ ruby script/console
Loading development environment (Rails 2.0.1)
>> 10.times do
?> Person.create(:name => "Miku Hatsune", :age => 16)
>> end
=> 10
>> quit
動作確認

サーバー起動

$ ruby script/server

以下ブラウザでアクセス。動作確認する
http://localhost:3000/people

日本語化

参考URL
http://hidekazu.dhs1.sst.ne.jp/pukiwiki/Ruby%20on%20Rails.html

各項目のバリデータメッセージ
class Person < ActiveRecord::Base
  validates_presence_of :name,
    :message=>"が空の状態で保存することは出来ません。"
バリデータ表示時の項目名も日本語化

gettext使う。
これはいろいろな場面で日本語化する時に使える。

$ sudo gem install gettext

config/environment.rb
-----
■最初に以下を追加
$KCODE='u'          # u=utf s=Shift_JIS, e=EUC-JP
require 'jcode' 

■(Rails-2.1以降の場合) 2.1以降の場合は、require 'gettext/rails'を呼ぶのではなく、config.gemを使います。
Rails::Initializer.run do |config|
 :
 :
 config.gem "gettext", :lib => "gettext/rails"
end
-----

app/controllers/application.rb
-----
class ApplicationController < ActionController::Base
        :
  require 'gettext/rails'  # ←これ追加しないとrakeできないときがある?
  init_gettext "hogedom"
        :
end
-----

lib/tasks/gettext.rake
-----
desc "Update pot/po files."
task :updatepo do
 require 'gettext/utils'
 GetText::ErbParser.init(:extnames => ['.rhtml', '.erb'])
 GetText.update_pofiles(
   "hogedom",  #<<<<<<テキストドメインの名前
   Dir.glob("{app,config,components,lib}/**/*.{rb,rhtml,rjs,erb}"),
   "hogedom 1.0.0")  #バージョン
end

desc "Create mo-files"
task :makemo do
 require 'gettext/utils'
 GetText.create_mofiles(true, "po", "locale")
end
-----

$ rake updatepo

poディレクトリが作成され、その中にテキストドメイン名のrailsproject.potができました。これをpo/jaディレクトリを作成して、そこにコピーして、railsproject.poにリネーム。

-----
#: app/models/person.rb:-
msgid "person"
msgstr "人物だよ"

#: app/models/person.rb:-
msgid "Person|Name"
msgstr "名前だよ"
-----

$ rake makemo
エラーメッセージのタイトル

以下はgettextインストールしてからじゃないと、機能しない。

class Person < ActiveRecord::Base
  set_error_message_title("入力した項目にエラーがあります。", "")
  set_error_message_explanation("以下項目にエラーがあります。", "")