sphinx gettext と .mo と戦った記録

sphinx html で.moを更新してもHTMLが出力されない問題を追う #世界
2
tk0miya @tk0miya

@r_rudi 昨日話していた .mo を更新しても make html が反応しない件、見てみました。結論から言うとあまりいい手が思いつきませんでした。

2011-11-29 12:50:40
tk0miya @tk0miya

@r_rudi 書きながらなんかやり方があるような気もしてきました。ただし note_dependency() とは別のやり方が必要かもしれません。

2011-11-29 12:55:17
tk0miya @tk0miya

@r_rudi .mo ファイルは .rst の更新とはまったく別軸で作成されるので、.rst を doctree に変換するタイミングでは .mo ファイルが存在しない可能性があります(依存関係が組み立てられない)。そのため、note_dependency() は使えません。

2011-11-29 12:56:22
tk0miya @tk0miya

@r_rudi sphinx の gettext は docutils の Transform として実装されています(sphinx.environment.Locale)。これは doctree の組み立てが終わった後に呼び出されます。

2011-11-29 12:53:28
tk0miya @tk0miya

@r_rudi やるとすれば .mo ファイルの更新状況を前回と比較する機能が必要になります。これは完全に新規に作る必要があります。

2011-11-29 12:58:07
tk0miya @tk0miya

当たり前だけど sphinx では .mo ファイルの扱いを gettext ライブラリに任せている。そのため、sphinx ではどのカタログを使って訳しているのかは意識することができない。こいつは参った。(sphinx.locale:init() あたり)

2011-11-29 12:59:38
tk0miya @tk0miya

実行が必要なデータがあるかどうかの判定をしてる箇所にメッセージカタログ更新の判定を埋め込めばいいのかしら。あとで get_outdated_files()? の周りをみてみるか。まずはご飯。

2011-11-29 13:10:00
tk0miya @tk0miya

自分で使う場面だと他の理由で clean を必ず実行してるから、そんなにメリットがあるわけでもない。

2011-11-29 13:11:26
tk0miya @tk0miya

get_outed_files() の結果をどう加工すればいいのかよくわかんないな。.mo ファイルが変わってたときは changed 扱いにすべきなのか? そもそもの部分をしっかり追いかける必要があるなぁ。

2011-11-29 14:25:22
tk0miya @tk0miya

む。pickled された doctree (_build/doctree/index.doctree とか) を見ると gettext で訳されたテキストが入ってる。transform した奴を保存してるのかー。だとしたら、note_dependency() でいいのかも。

2011-11-29 14:28:07
tk0miya @tk0miya

問題は利用している .mo ファイルが gettext モジュールに隠蔽されてしまって、どれをみているのかよく分からないってことだよなー。

2011-11-29 14:28:37
tk0miya @tk0miya

いや、やっぱり後から .mo ファイルが追加になる可能性を考慮しなくちゃだめだな。note_dependency() 案は捨て。

2011-11-29 14:29:37
tk0miya @tk0miya

@r_rudi レポートしておきました。おかしかったら突っ込んどいてくださいw http://t.co/In6a7sBg #sphinxjp

2011-11-29 14:43:24