Ruby on Rails 3.0 日記
第17回: Devise によるユーザー認証機能の日本語化(3)
冒頭でちょっとお詫びをしなければなりません。前々回の記事で、デフォルトロケールを日本語(ja)に変更しました。その結果、Nchakにログインして、トップページ(タスクの一覧)を表示すると次のようなエラー画面が表示されてしまうのです。

エラーメッセージには次のように表示されています。
can't convert Symbol into String
せっかくなので、こういう訳の分からないエラーに出会った時にどう対処するか、少し詳しく書いてみたいと思います。
エラー画面をよく読むと、app/views/tasks/index.html.erb の4行目で例外が発生していることがわかります。
Showing /home/kuroda/work/nchak/app/views/tasks/index.html.erb where line #4 raised:
と書いてありますよね。
で、エラーメッセージの下にソースコードの抜粋が出ています。
1: <%= form_for @task do |form| %> 2: <ul> 3: <li><%= form.label :name %><%= form.text_field :name %></li> 4: <li><%= form.label :due_date %><%= form.date_select :due_date %></li> 5: <li><%= form.submit %></li> 6: </ul> 7: <% end %>
form.label か form.date_select が原因なのですが、label メソッドは3行目にもありますから、date_select メソッドがあやしいですね。デフォルトロケールを変更するまでは動いていたのですから、Rails 自体のバグかもしれません。
このような時には、もちろん Google 先生に聞いてみます(いつも答えてくれるわけではありませんが)。
「can't convert Symbol into String rails date_select」で検索すると、ビンゴです。最初の http://i18n.lighthouseapp.com/projects/14947/tickets/12-i18n-and-date_select-exception に解決法が載っていました。
未知のエラーに遭遇すると、いつも私はこのように調べています。エラーメッセージ全体に "rails" という単語と関連しそうな語句(ここでは "date_select")を加えて検索すると、見つかりやすいです。残念ながら、たいていは英語の記事がヒットして、そこに正解が書かれています。Rails を広めたい私としては「Rails プログラミングには英語が必須」とまでは言いたくないのですが、英語が苦手だとかなり不利であることは否定できません。
要するに、config/locales/ja.yml というファイル(存在しなければ作る)に、次のような記述を追加せよ、ということです。
ja:
date:
order: [ :year, :month, :day ]
これでアプリケーションを再起動すると、エラーは出なくなります。
ただし、日付選択の月表示が変になります。完全に直すには、この記事の後半の指示に従い github の svenfuchs/rails-i18n から ja.yml をダウンロードして config/locales に置いてください。
宿題の答え合わせ
さて、前回の最後に出した宿題は、やりましたか?
答えは、次の通りです。
config/locales/attributes.yml を次のように修正します。
ja:
activerecord:
attributes:
user:
email: メールアドレス
password: パスワード
password_confirmation: パスワード(再入力)
remember_me: 次回からパスワード入力を省く
task:
name: 名称
due_date: 期限
この結果、タスク一覧ページは次のような表示に変わります。

エラーメッセージの日本語化
では、本題に戻りましょう。
今回は、Devise によるユーザー認証機能の日本語化(3)ということで、エラーメッセージの日本語化を行います。
Nchak からログアウトして、「ユーザー登録」リンクをクリックし、何も入力しないで「Sign up」ボタンをクリックします。すると、次のようなエラーメッセージが表示されます。

これを直していきましょう。
Rails が依存している i18n パッケージは、ドイツ人のズヴェン・フックス(Sven Fuchs)さんという方がメインで作っているのですが、彼の github プロジェクトのひとつ svenfuchs/rails-i18n に行くと、各国の翻訳ファイル(ロケールファイル)が集められています。
ここを起点にして、rails/locales とたどると、ar.yml 以下ずらりと翻訳ファイルが並んでいます。このうちの ja.yml を開き、右上の「raw」リンクをクリックして、ja.yml をダウンロードし、config/localse ディレクトリに保存してください。
この作業の結果、エラーメッセージは次のように改善されます。

まだ、翻訳されない部分が残っていますし、よく見ると「メールアドレス」と「を入力してください。」の間に隙間が空いています。
この点は次回以降で直すことにしましょう。
(2010/10/16)
記事に関するご質問は、 hermes@oiax.jp までメールでお送りください。
ウェブサイト構築の発注先を検討されているお客様は、ご相談フォームをご利用ください。
- はじめに
- 第1回: インストール (2010/04/24)
- 第2回: 新規アプリケーションの作成 (2010/04/25)
- 第3回: コントローラとビューの生成(1) (2010/04/28)
- 第4回: コントローラとビューの生成(2) (2010/04/29)
- 第5回: データベーステーブルとモデル (2010/05/01)
- 第6回: タスクの一覧 (2010/05/02)
- 第8回: タスクの新規追加 (2010/05/09)
- 第7回: タスクの新規追加フォーム (2010/05/09)
- 第9回: タスクの完了 (2010/05/15)
- 第10回: 完了したタスクの一覧 (2010/05/16)
- 第11回: Bundler (2010/05/17)
- 第12回: ユーザー認証(1) (2010/05/18)
- 第13回: ユーザー認証(2) (2010/05/19)
- 第14回: ユーザーとタスクの関連づけ (2010/05/29)
- 第15回: Devise によるユーザー認証機能の日本語化(1) (2010/10/09)
- 第16回: Devise によるユーザー認証機能の日本語化(2) (2010/10/15)
- 第17回: Devise によるユーザー認証機能の日本語化(3) (2010/10/16)

