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//<テキストドメイン名>.po」の名前でコピーします。(「locale」は日本語の場合「ja」です。)
以下、実行例です。

#mkdir po/ja
#cp po/cart.pot po/ja/cart.po

日本語用メッセージファイルの編集

日本語用メッセージファイル(「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//LC_MESSAGES/<テキストドメイン名>.pot」というファイルができます

TODO

そのうち、validate以外のメッセージも..