gettextで日本語化(メッセージのカラム名を)
昨日の続きで、validateメッセージのカラム名も日本語化してみます。
タスクの設定
ファイルの変換を行うタスクをRakeFileに追加しておきます。
desc "Update pot/po files." task :updatepo do require 'gettext/utils' GetText.update_pofiles("cart", #テキストドメイン名(init_gettextで使用した名前) Dir.glob("{app,config,components,lib}/**/*.{rb,erb,rjs}"), #ターゲットとなるファイル "cart 1.0.0" #アプリケーションのバージョン ) end desc "Create mo-files" task :makemo do require 'gettext/utils' GetText.create_mofiles(true, "po", "locale") end
これは、よたらばなさんのサイトのものをまねしました。
なお、GetText.update_pofilesの1つめのパラメータはテキストドメイン名で、この名前で以後作成される各ファイルが作成されます。またこの名前とgettextの初期化時(コントローラでのinit_gettextのコール)に指定する名前とマッチしている必要があります。
POファイル作成
railsアプリケーションのルートの位置で以下のようにして、podファイルを作成します。
rake updatepo
以下は実行時のターミナル出力例です。
(in /Users/nyaago/workspace/cart) po/cart.pot .... done.
これでアプリケーション以下のpoディレクト以下に「po/<テキストドメイン名>.pot」というファイルができます。
日本語用メッセージファイルの作成
作成されたpotファイルを「po/
以下、実行例です。
#mkdir po/ja #cp po/cart.pot po/ja/cart.po
日本語用メッセージファイルの編集
日本語用メッセージファイル(「po/
メッセージファイルは以下のようにmsgidとmsgstrの組で構成されています。DBのカラム名は自動的の抽出され、それらのmsgidは、「<モデル名>|<カラム名
>」という書式になっています。
.... #: app/models/product.rb:- msgid "Product|Name" msgstr "" #: app/models/product.rb:- msgid "Product|Price" msgstr "" ....
これのmsgstrのところに日本語の値をいれていきます。
.... #: app/models/product.rb:- msgid "Product|Name" msgstr "商品名" #: app/models/product.rb:- msgid "Product|Price" msgstr "価格" ....
なお、以降に「rake updatepo」を実行すると、この日本語メッセージファイルも適切にマージされます(追加したカラム、その他のメッセージが反映され、日本語済みのmsgstrも消えたりしません)。
PO->MOファイル変換
POファイルをバイナリファイルであるMOファイルに変換します。
railsアプリケーションのルートの位置で以下のようにして、moファイルを作成します。
rake makemo
以下は実行時のターミナル出力例です。
(in /Users/nyaago/workspace/cart) po/ja/cart.po -> locale/ja/LC_MESSAGES/cart.mo ... Done.
これでアプリケーション以下のpoディレクト以下に「locale/
TODO
そのうち、validate以外のメッセージも..