2009年9月24日木曜日

Rails ActiveRecord::Validationsのエラーメッセージを多国語対応するメモ

RailsでActiveRecordのValidationによって生成されるエラーメッセージを翻訳するためのメモ。


方法その1:I18nを使う

所定のYAMLに翻訳部分を記述しておく方法。現在はこれが一番スマートなようだ。
(フィールド名とその後のメッセージの間に半角スペースが入ってしまう?)

参考:
 Rails 2.2.2でエラーメッセージを日本語化する。|WEBデザイン Tips
 Rails 2.2 の ActiveRecord::Validations#add のソースコードを読む - Ruby on Rails 研究 - Ruby on Rails with OIAX



方法その2:GetTextを使う

ActiveRecord::Errorsのdefault_error_messagesをゴリゴリ書き換える方法。
例えば、基本となるModelを作ってその中でメッセージをセットし、他のモデルはそれを継承する方法でもよいと思う。

class BaseModel < ActiveRecord::Base
 ActiveRecord::Errors.default_error_messages[:invalid] = _("がおかしいよ!")
 ActiveRecord::Errors.default_error_messages[:empty] = _("を入力してね!")
 ・
 ・
end
ただし最新のRailsではDeprecation::warnの対象

個々のエラー内容の前に出てくる文(デフォルトでは「<n> errors prohibited this object from being saved」と「There were problems with the following fields:」)は、Module: ActionView::Helpers::ActiveRecordHelperにあるとおり、:header_messageと:messageを指定することにより変えられる。
(2009/10/14追記:Ruby on RailsでRuby-GetText-Packageを使う (Rails-2.3.2以降) - よたらぼ 保管庫に書いてある、「エラーメッセージのタイトル部分をカスタマイズ」のやり方なら、個々のformごとに:header_messageと:messageを指定しなくてすむようだ。)


参考:
 エラーメッセージからフィールド名を取り除く
 ActiveRecord::Errorsあたりのローカライズ - ハードコアシステム開発
 validationのエラーメッセージ(error_messages_for)の日本語化 - Slow Dance
(2009/10/14追加:最新のRails/GetTextについての説明になっていた)
 Ruby on RailsでRuby-GetText-Packageを使う (Rails-2.3.2以降) - よたらぼ 保管庫

0 件のコメント:

ブログ アーカイブ

tags