RailsでRubyのl10n用ライブラリRuby-GetTextでハマってmasatoさんに助けられたのでメモります。

sudo gem install gettext

config/environment.rbに下記追加

$KCODE = 'u'
require 'jcode'
require 'gettext/rails'

app/controller/application_controller.rbに下記追加

class ApplicationController < ActionController::Base
  init_gettext "my_app_name" # 自分のアプリ名
end

こんな感じのgettext.rakeタスク作成

require 'gettext/utils'

desc "Update pot/po files." 
task :updatepo do
  GetText.update_pofiles(
    "my app name",
    Dir.glob("{app,config,components,lib}/**/*.{rb,rhtml}"),
    "my app name 0.0.1" 
  )
end

desc "Create mo-files" 
task :createmo do
  GetText.create_mofiles(true, "po", "locale")
end

potファイルを作成

rake updatepo

potから各言語用ファイルを生成(cpでもいいがmsginitを使うといい感じのヘッダを入れてくれる)

msginit -i po/my_app_name.pot -o po/ja/my_ap_name.po -l ja

今回糞ハマったのは foo.pot → ja/foo.po としなければならないところを foo.pot → ja/foo.pot とそのままの名前でコピってたとこ。これだと当然moはできねえ・・・。

poを適当にいじってmoを生成

rake createmo
ls locale/ja/LC_MESSAGES/my_app_name.mo
locale/ja/LC_MESSAGES/my_app_name.mo

エラーメッセージが勝手に多言語化されてたりと、poいじる前からかなり便利ですな。追記:

Ruby-Gettextの翻訳具合が気に食わない場合はそっちのpoをいじればOK。大体この辺に入ってるハズ。

/var/lib/gems/1.8/gems/gettext-1.9.0/po/ja/rails.po

Comments


Option