sphinx gettext と .mo と戦った記録
@r_rudi 昨日話していた .mo を更新しても make html が反応しない件、見てみました。結論から言うとあまりいい手が思いつきませんでした。
2011-11-29 12:50:40@r_rudi 書きながらなんかやり方があるような気もしてきました。ただし note_dependency() とは別のやり方が必要かもしれません。
2011-11-29 12:55:17@r_rudi .mo ファイルは .rst の更新とはまったく別軸で作成されるので、.rst を doctree に変換するタイミングでは .mo ファイルが存在しない可能性があります(依存関係が組み立てられない)。そのため、note_dependency() は使えません。
2011-11-29 12:56:22@r_rudi sphinx の gettext は docutils の Transform として実装されています(sphinx.environment.Locale)。これは doctree の組み立てが終わった後に呼び出されます。
2011-11-29 12:53:28@r_rudi やるとすれば .mo ファイルの更新状況を前回と比較する機能が必要になります。これは完全に新規に作る必要があります。
2011-11-29 12:58:07当たり前だけど sphinx では .mo ファイルの扱いを gettext ライブラリに任せている。そのため、sphinx ではどのカタログを使って訳しているのかは意識することができない。こいつは参った。(sphinx.locale:init() あたり)
2011-11-29 12:59:38実行が必要なデータがあるかどうかの判定をしてる箇所にメッセージカタログ更新の判定を埋め込めばいいのかしら。あとで get_outdated_files()? の周りをみてみるか。まずはご飯。
2011-11-29 13:10:00get_outed_files() の結果をどう加工すればいいのかよくわかんないな。.mo ファイルが変わってたときは changed 扱いにすべきなのか? そもそもの部分をしっかり追いかける必要があるなぁ。
2011-11-29 14:25:22む。pickled された doctree (_build/doctree/index.doctree とか) を見ると gettext で訳されたテキストが入ってる。transform した奴を保存してるのかー。だとしたら、note_dependency() でいいのかも。
2011-11-29 14:28:07問題は利用している .mo ファイルが gettext モジュールに隠蔽されてしまって、どれをみているのかよく分からないってことだよなー。
2011-11-29 14:28:37いや、やっぱり後から .mo ファイルが追加になる可能性を考慮しなくちゃだめだな。note_dependency() 案は捨て。
2011-11-29 14:29:37@r_rudi レポートしておきました。おかしかったら突っ込んどいてくださいw http://t.co/In6a7sBg #sphinxjp
2011-11-29 14:43:24