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ファイルが生成されます。簡単ですね!