Ruby-GetText-Packageが動かない

最近、ブログを書いていても、動かないことばっかり書いているみたい。苦労は続く…。
で、Ruby-GetText-Packageを試してみた。
config/environment.rbにrequire 'gettext/rails' を追加し、application.rbにinit_gettext "XXX"
(XXXはRailsのプロジェクト名)を追加。へぇーこれだけで日本語が表示されるんだ…。
…甘かった。実行すると、
NoMethodError
undefined method `init_gettext' for ApplicationController:Class

あれ?動かない。で、いろんなサイトを調べるとRails2.1.0からは記載方法が変わったようだ。
Ruby-GetText-Packageの本家http://www.yotabanana.com/hiki/ja/ruby-gettext-howto-ror.htmlにも
そう書いてるし。
Rails::Initializer.run do |config|からendの間に
config.gem "gettext", :lib => "gettext/rails"
を追加するんだね。
…だめだ。やっぱりNoMethodError。なんで!?

gettextまでの準備

Rubyローカライズする準備が整った。ここまでの経緯をまとめると…。

  • Windowsユーザーを作成(ユーザー名に漢字を使っちゃダメ!)
  • NetBeans6.5をインストール(JDKでなくJREを指定)
  • gettextをGEMでインストール

ここからは、restful_authenticationを触ってみた - idesaku blogを参照

  • RAILSプラグインリポジトリhttp://svn.techno-weenie.net/projects/plugins/を追加
  • RAILSプラグインでRestful Authenticationをインストール
  • ジェネレートでauthenticate user sessionsを追加
  • database.ymlのdevelopmentに従ってDBを作成
  • データベースマイグレーションを実行
  • config/routes.rbを編集
  • app/controllers/users_controller.rbからinclude AuthenticatedSystemを削除
  • app/controllers/application.rbにinclude AuthenticatedSystemを追加
  • ジェネレートでコントローラwelcomeを作成(ビューはindex)
  • app/views/welcome/index.html.erbを編集
  • app/controllers/welcome_controller.rbにbefore_filter :login_requiredを追加
  • config/routes.rbにmap.root :controller => "welcome"を追加

これでhttp://localhost:3000/signupにアクセスすると、サインアップの画面が表示される。
で、入力をしないで「Sign up」のボタンを押すと、英語でエラーが表示される。

悪戦苦闘・・・でも

masakikatakaiさんからのアドバイスで、OutOfMemoryは解決し、Gemの一覧は出るようになったけど、
今度はアップデートができない。Gemそのものがバージョン1.0.1。これをバージョンアップしないと
いけないのか?とりあえず1.2.0にしようとがんばったのだが、インストール完了まで行った後、
またエラー発生…。しかも前回苦労したユーザー名を漢字にしたばっかりにおかしくなっている様子。
ということで、ちょっと路線変更。ユーザー名を英語にし、NetBeansを6.5にあげよう!
でもって、ブログのタイトルも変更。
だって「エンジニアの備忘録」にしてはあまりにもへなちょこで情けないもんね…。
NetBeans6.5にして、Gemの一覧は…出ました!(あたりまえか)。
さらにGemは1.2.0にバージョンアップされているし(これもあたりまえか)。
ようやく出発点に立った感じ。えーっと、…何してたっけ?

なかなか解決しないOutOfMemory

いろんなサイトを見たけれど、なんだか解決されていない様子。
もし、http://gems.rubyforge.orgのGemが多すぎるのが原因なら、
これにアクセスせず、他に良いサイトがあるんじゃないか?
ってことで、まずは、ファイアーウォールでここを見ないように設定。
こうするととりあえずNetBeansRuby Gemsから返ってくる。
他のサイトがわからないので、ローカルにhttp://gems.rubyforge.org
環境を持ち込めないか検討。
ローカルにhttp://gems.rubyforge.orgの環境を作成する方法は、
どうやらgem serverというのを使うようだけど…。
立ち上がりはした。アクセスもできた。えーっと、ここからどうやって?
時間切れです…。

NetBeansでOutOfMemory

Ruby-GetTextを使ってみようかとNetBeansRuby Gemsを選択すると、
いつまでたっても「更新中」のまま返ってこない。そのダイアログを
閉じるとNetBeansが固まってしまう。仕方なく何回か再起動を繰り返している
うちにエラーダイアログが出た。”java.lang.OutOfMemoryError”?
う〜ん・・・なんで?GEMを読み込む数が多いから?
そこで、NetBeansを再インストール、それでもダメなのでJAVA SDK
再インストール…でもダメ。サイトで検索…JAVA VMのメモリサイズを変更?
で、NetBeansのconfファイルを変更しても…ダメ。
あちこちサイトを開いているとどうやら他の人も同じような状況みたい。
NetBeans6.1はダメで6.5なら大丈夫?
前の備忘録で7月20日に実行したときはうまくいっていた。
ってことは、その後にアップした内容?

Ruby-GetText

やはり日本語化・ローカライズできるものがあったんだ。
Ruby-GetTextがそれにあたるらしい。この時の最新版が1.92.0。
http://rubyforge.org/projects/gettext/
http://www.yotabanana.com/hiki/ja/ruby-gettext-howto-ror.html
GNU-GetTextに似たライブラリ」とあるが、自分は、GNU-GetTextを知らないし、そもそもローカライズ
携わったことがなかったので、用語がさっぱりわからない。

validates_presence_of

validates_presence_ofは、フィールドの内容が空かどうか検証する。

validates_presence_of :login,:mail

渡されたフィールドが空だった場合、「〜 can't be blank」と表示する。
オプションの例(他にもある)。

 :message=>"は空ではありません"  # "can't be blank"の文字列を変更する
 :on=>:create                    # 検証するタイミングを変更する(通常は:save)

でも":message"オプションは、毎回validates_presence_ofの度に変更するのは面倒くさい。
validations.rbを直接修正するか、application.rbに以下の様な行を追加するか。

ActiveRecord::Errors.default_error_messages[:blank]="は空ではありません" 

まじめにするならメッセージ用のファイルを外だしするんだろうけど。