Gettext parser module for Ramaze
RamazeのViewテンプレート用の Gettext parser module を作成しました。これはテンプレートファイルからPOTファイルを生成するためのものです。Ramaze-0.3.0でもPOTファイルを作る機能は存在していましたが、サーバでリクエスト毎(!)に動的に作成する仕組みでした。あと、0.3.0のだと、POTにファイル名と行番号も付けてなかったんですよね。これではさすがに困るので、きちんとRuby-Gettextのやり方で実用的なPOTファイルを作れるようにしました。なんだか一人でワッシワッシとパッチを送り続けるのも非常に気がひけますが、まぁ気にしない気にしない。
http://rubyforge.org/pipermail/ramaze-general/2008-January/000126.html
作り方はpoファイルにメッセージを抽出するためのパーサを独自に追加するを参考にしました。とっても簡単ですね!...って、簡単なことしかしてないからですが。パラメータも複数形も扱わないので。
使い方
まずテンプレート(この例では template/test.xhtml とします)は次のように用意。標準では "" と "" で囲まれた部分が翻訳対象の文字列となります(この辺は設定次第なので Ramaze::Tool::Localize, Ramaze::Tool::Gettext などをご覧下さい)。
<html><body> <h1>[[This is a test.]]</h1> </body></html>
次にPOTファイルを生成しましょう。Rakefile に次のようなタスクを追加します。
require "ramaze" task :generate_pot do require 'ramaze/contrib/gettext/parser.rb' Ramaze::Tool::Gettext.module_eval do pot = (trait[:file] % trait[:default_language]) + '.pot' GetText::RGetText.run(Dir.glob("template/*.{xhtml,mab}"), pot) end end
あとはこれを呼び出して下さい。
rake generate_pot
これだけでRamazeテンプレート用の実用的POTファイルが生成されます。簡単ですね!