カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年
知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。
Ruby-GetText-Package が メジャーリリースして rails に対応した とのこと。
ちょうど業務用に作っている rails アプリがあったので、これを日本語化してみました。基本的に Ruby on RailsでRuby-GetText-Packageを使う の通りに作業して問題なく L10N 化できました。
gem でインストール。
$ sudo gem install gettext Attempting local installation of 'gettext' Local gem file not found: gettext*.gem Attempting remote installation of 'gettext' Select which gem to install for your platform (i686-linux) 1. gettext 1.0.0 (ruby) 2. gettext 1.0.0 (mswin32) 3. Cancel installation > 1 Building native extensions. This could take a while... ruby extconf.rb install gettext checking for setlocale()... yes checking for nl_langinfo()... yes creating Makefile make i686-pc-linux-gnu-gcc -fPIC -O2 -pipe -march=pentium4 -fPIC -I. -I/usr/lib/ruby/1.8/i686-linux -I/usr/lib/ruby/1.8/i686-linux -I. -DHAVE_SETLOCALE -DHAVE_NL_LANGINFO -c _locale.c i686-pc-linux-gnu-gcc -shared -L'/usr/lib' -Wl,-R'/usr/lib' -o _locale.so _locale.o -Wl,-R -Wl,/usr/lib -L/usr/lib -L. -lruby18 -lpthread -ldl -lcrypt -lm -lc make install install -c -p -m 0755 _locale.so /usr/lib/ruby/gems/1.8/gems/gettext-1.0.0/lib ruby extconf.rb install gettext checking for setlocale()... yes checking for nl_langinfo()... yes creating Makefile make make: Nothing to be done for `all'. make install install -c -p -m 0755 _locale.so /usr/lib/ruby/gems/1.8/gems/gettext-1.0.0/lib Successfully installed gettext-1.0.0
プラットフォームを選択するところがありましたが、mswin32 ではないので ruby を選んでみました。つつがなくインストールできたようです。
$ gem list gettext
*** LOCAL GEMS ***
gettext (1.0.0)
Ruby-GetText-Package is Native Language Support Library and Tools
which modeled after GNU gettext package.
require 'gettext/rails'
GetText.output_charset = 'UTF-8'
ドキュメントでは RAILS_ROOT/app/controllers/application.rb に追加していますが、こっちにおいてみました。どっちがいいんでしょ>識者の方。
class ApplicationController < ActionController::Base
before_filter :init_gettext
def init_gettext
bindtextdomain('lazydog', request.cgi)
@headers['Content-Type'] = 'text/html; charset=UTF-8'
end
end
environment.rb に移した分を除いて、ドキュメントそのままです。
rgettextによる翻訳文字列の抽出 ではシェル上で実行していますが、ワイルドカードに ** が使えないシェルを使っているので rake のタスクにしました。RAILS_ROOT/Rakefile に以下を追加(2005/09/07:rgettext コマンドではなく、GetText.rgettext を使うように修正しました)。
desc "Create pot file for L10n"
task :makepot do
require 'gettext/rgettext'
files = Dir.glob('**/*.{rb,rhtml}')
GetText.rgettext(files, "po/foo.pot")
end
po → mo変換 のままです。
desc "Create mo-files for L10n"
task :makemo do
require 'gettext/rmsgfmt'
GetText.create_mofiles(true, "po", "locale")
end
view や helper や contoroller 内の文字列をひたすら _('hoge') に。
ファイルを作って編集。
$ mkdir po $ mkdir po/ja $ rake makepot $ cp po/foo.pot po/ja/foo.po $ vi po/ja/foo.po
rake makemo
すでに動作をさせている環境だったので、kill してから ruby script/server。
おー。ブラウザの Accept-Language によって、表示すべき言語を自動で判断するんですね。便利。
最近のコメント:
RSS
![]()
This work is licensed under a
Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).
environment.rb に移した方が良いかもしれませんね。requireとset_output_charsetの部分。<br><br>それから、rgettextをタスク化するなら、GetText.rgettextというメソッドを使った方が簡単だと思いますよ。<br><br>require 'gettext/rgettext'<br>GetText.rgettext(files, "po/foo.pot")
どうもです。GetText.rgettext を使うようにしました。