[gettext-u-ja] Using user-defined parsers for rgettext

Masao Mutoh mutoh at highway.ne.jp
Sat Jul 29 00:41:58 EDT 2006


むとうです。

On Sat, 29 Jul 2006 12:32:31 +0900
Masao Mutoh <mutoh at highway.ne.jp> wrote:

> > ユーザが定義したパーサを rgettext で使って pot を生成できると嬉しい、
> > と感じたのですが、いかがでしょうか。
(略)
> いやー、実は私も過去にそう思っていたんですが、実装があと一歩のところ
> で止まってるんですよね(苦笑)。
> ユーザもいないようだったのでモチベーションもあがりませんでしたが、
> 使っていただけるようなら、ということで考えてみます。

最新のCVSで対応してみました。
#ホントにあと一歩でした。なぜソコで放りだしたんだ・・・過去のオレ。

使い方:
まずはパーサモジュールを書きます。
target?, parseという2つのメソッドを実装する必要があります。
最後にパーサをGetText::RGetTextに登録します。

require 'gettext/rgettext'
module TestParser
  module_function
  # 与えられたファイルがこのパーサで処理すべきかどうか
  # を判断します。処理する場合はtrue、そうでなければfalseを返します。
  def target?(file)
    true
  end
  # 実際のパース結果を返します。
  # fileにはパースするファイル名が入ります。
  # aryは過去の解析結果が入ってくるので、これに結果を追加していきます。
  # そのmsgidがユニークになるかどうかはこのメソッド内でチェックする必要が
  # あります。要は配列に足す前に、aryにすでにそのmsgidがあるかどうかを
  # チェックしてください。
  # 戻り値は、[["msgid1", "file1:line1", "file2:line2",...],
  #           ["msgid2", "file3:line3",...]]
  # という形式です。
  def parse(file, ary)
    [["aaa", "foo.rb:200"], ["bbb", "bar.rb:300", "baz.rb:400"]]
  end
end
GetText::RGetText.add_parser(TestParser)

上記をtestparser.rbとして保存します。

で、あとはrgettextで上記を使えばOKです。

$ rgettext -rtestparser foo.txt -o foo.pot

Rakeで使う場合はrequire 'testparser'を実行すればあとは他と
変わらずに使えると思います。

たったこれだけの修正ですが、なんだかrgettextは
potファイル生成ツールとしては最強になったかもしれません ;)。

それでは。

P.S.
あ、そうそう、このチェックインでもしかしたらRailsが動かなくなっている
かもしれません。Railsを使っている場合にはまだ試さない方が良いと思います。

-- 
.:% Masao Mutoh<mutoh at highway.ne.jp>


More information about the gettext-users-ja mailing list