概要: Babel on GAE したい時は Babel を生で使うべし
最近 Google App Engine を使った Web Service をひっそりと開発していて、
その Application はFlask
とbuildout
を組み合わせて管理してたんだけど、
今日Flask-Babel
使って国際化しようとしてたら、構築されてた環境の影響で鬼はまりしてたので、
それを忘れない様にメモっておく。
0. 前提環境
まず、僕の Web Application は、
を参考に環境構築して作ってる。
で、上記サイトで公開されてりるbuildout.cfg
では、
関連ライブラリをdistlib.zip
として一つのファイルにまとめる、
という処理が使われています。
で、僕の環境では関連ライブラリをdistlib.zip
にまとめて読み込む、
という処理をしていました。
1. 質問: 何ではまったか
解答: Flask-Babel
使おうとしてはまった
症状として Flask-Babel のチュートリアル通りに事を進めても、
UnkownLocaleError
が延々とで続けるというもの。
2. 質問: 原因は何か
解答: Babel
がファイルシステムから読み込んでたファイルがzipimport
使ったことにより読み込めなかったため
で、多分これで合ってると思いますが、
Babel
は ファイルシステム上からファイルを読み込むようになっていて 、
かつ zipimport は python の code 以外読み込めない という仕様から、
distlib.zip
からBabel
に必要な.dat
ファイルが読み込めなかったため、
延々とUnknownLocaleError
が出てた、という状態だったらしい。
3. 質問: 解決方法は?
解答: Babel
は生で使うべし。distlib.zip
に放り込んではならない。
まあ症状として上記の通りだったんですが、
実際にBabel
のファイルを生のライブラリを読み込むディレクトリに配置して、
ライブラリを読み込む順番を生のライブラリを先に読み込むようにしたところ、
なんか問題なく表示されましたとさ。
まあナニソレって感じでした。orz
4. 以上で終わり
まあ解決できてよかったーって感じではありますが、とりあえず今日の 1:00 頃 3:40 頃まで、 時間をずっとこの問題解決に費やしておりましたとさ。いやぁ本当時間食ったし疲れたわ><
まあこういう落とし穴があって見事にはまったって話でした。わりとどうでもいいですね。はい。
#FIXME