2009/12/10

Ruby on Rails で gettext を使う

あとで i18n もやるので、ブランチを作って作業する。

git branch gettext
git checkout gettext

次を参考に

まず必要なものを vendor/gems にインストールするために

rake -T | grep gems

rake gems                                 # List the gems that this rails application depends on
rake gems:build # Build any native extensions for unpacked gems
rake gems:build:force # Force the build of all gems
rake gems:install # Installs all required gems.
rake gems:refresh_specs # Regenerate gem specifications in correct format.
rake gems:unpack # Unpacks all required gems into vendor/gems.
rake gems:unpack:dependencies # Unpacks all required gems and their dependencies into vendor/gems.

config/environments.rb に config.gem "gettext" を追加する。

Rails::Initializer.run do |config|
config.gem 'locale'
config.gem 'locale_rails'
config.gem 'gettext'
config.gem 'gettext_activerecord'
config.gem 'gettext_rails'

次の一連の rake を実行すると vendor/gems の下に gettext が配置される。

rake gems:unpack:dependencies
rake gems:build

ApplicationController に init_gettext "blog" を追加する。

これでサーバを再起動すると検証エラー等が日本語になっている。

apps/blog/vendor/gems/gettext_rails-2.1.0/README.rdoc を参考に lib/tasks/gettext.rake を作成する。

# -*- mode: ruby -*-
require 'rubygems'

namespace :gettext do

desc "Create mo files"
task :makemo do
require 'gettext_rails/tools'
GetText.create_mofiles
end

desc "Update po file"
task :updatepo do
require 'gettext_rails/tools'
# Need to access DB to find Model table/column names.
# Use config/database.yml which is the same style with rails.
GetText.update_pofiles("blog",
Dir.glob("{app,config,components,lib}/**/*.{rb,erb}"),
"blog 1.0.0")
end

end

次で po/blog.pot ファイルを作成する。

rake gettext:updatepo

po/blog.pot を編集。

次で po/ja/blog.po を作成。この手順は最初の1回だけ。 msginit は cp でも ok?

cd po
mkdir ja
msginit -i blog.pot -o ja/blog.po

po/ja/blog.po の msgstr に日本語を書く。

rake gettext:makemo

次で locale/ja/LC_MESSAGES/blog.mo を作成。

rake makemo

サーバを再起動する。

_() を追加したら rake gettext:updatepo する。 po/ja/blog.po を編集したら rake gettext:makemo して、サーバを再起動する。

0 件のコメント: