gettextで日本語化(とりあえずvalidationメッセージ)
rails/gettextを使用したマルチルンガル対応として、まずValidateのメッセージがとりあえず日本語になるようしてみました。
gettextパッケージをインストール
gemを使ってgettextパッケージをインストールします。
#sudo gem install gettext
下は、このインストールの実行結果です。
Bulk updating Gem source index for: http://gems.rubyforge.org Successfully installed gettext-1.92.0 1 gem installed Installing ri documentation for gettext-1.92.0... Installing RDoc documentation for gettext-1.92.0...
config/environment.rbの変更
gettextが使用できるようにconfig/environment.rbを変更します。
$KCODE変数
gettextとは関係ないですが、Rubyの文字コードを表すグローバル変数$KCODEを指定します。
config/environment.rbの先頭に以下のように追加します。
$KCODE='u'
gettextをrequire
gettextパッケージが使えるようにconfig/environment.rbの一番下でrequireします。
require 'gettext/rails'
gettextの初期化
コントローラでinit_gettextをコールして初期化を行います。
class ApplicationController < ActionController::Base helper :all # include all helpers, all the time init_gettext "cart" ....
引数は、テキストドメイン名です。これは、(今回はしていませんが)自分で各言語のメッセージをファイルを作成するとき、このテキストドメイン名と名称がマッチするよう作成する必要があります。
確認
確認のためのモデルとコントローラーの実装をします(gettextを使用/非使用にかかわらず行うことは同じです)。
モデルでvalidates_XXX メソッドにより検証の指定を行います。
class Product < ActiveRecord::Base validates_presence_of :name, :price validates_numericality_of :price .... end
それからコントローラ側では編集ページからの更新アクションを実装。保存できなかった場合(=saveメソッドがfalseを返した場合)、編集ページを再レンダリングするよう実装します。
def update begin if params[:id] product = Product.find_by_id(params[:id]) product.update_attributes(params[:product]) else product = Product.new(params[:product]) end if(!product.save) .... return render :action => "edit" ...... end
それで、とりあえず、実行してみると、以下のようにメッセージが日本語化されて表示されました。
productに2つのエラーが発生しました。 次の項目を確認してください。 Nameを入力してください。 Priceは数値で入力してください。
あと、PC環境を中国語にすれば、メッセージが中国語になります。
TODO
次は、カラム名なども日本語化せねば..