
photo credit: Wolfgang Wildner
Ubuntu8上、PHPなWebアプリでgettextが効かない・・・って現象が解決しそうです。
やっぱり現象ばかりを追っかけてデバッグしようとしててもダメですね。
- Apache2+PHPでgettext・・・ダメ
- PHP CLIちゃん版・・・ダメ
- gettextを直接使う・・・OK(Gnomeも日本語化されているのだからもちろんですね)
ってことで、ApacheかPHPが原因ってことに(最終的には全然そんなことはなかったのですがw)。
次に、Ubuntuのパッケージ(apt-getできるやつ)のPHPをやめて、ソースからbuildしてみました。
現象に変化なし。
で、ここまできたら手を動かしてどうにかなるもんでもなさそうなので、頭をちょっと使うことに。
gettextを使うってことは
- gettextのライブラリから、moファイルが見えていること
- ロケールがちゃんと設定されていること(gettextのライブラリがちゃんとそれを認識していること)
が必要なわけです。
moファイルの場所は、ちゃんとパスを渡すだけ(PHPならbindtextdomain()関数)なんであまり疑う余地はありません。
ってわけで、ロケールを見てみると。。。
- ボクのWebアプリ・・・ja_JP
- Ubuntu8のロケール・・・ja_JP.UTF-8
と違いがあります。
どうやら、最近のロケール表現はうしろに文字コードをつけるってことになりつつあるようです・・・(しらんがな・・・)。
昔、JavaやC++をやってたときに「常識」として植え込まれていた情報が、時と共にちょっとだけ・・・しかし、致命的に変化していたようです。
(こんなとき、ボクの頭は「常識の向こう側」には遠く及ばないのでした・・・)
いままで使っていたFedoraやCentOSは、どちらの表現もサポートしていたので、ぜんぜーん気づきませんでした。
Ubuntuは文字コードあり表現だけなので、ボクは「古きよきオレ様志向」で文字コードなしの形式でもOKなように・・・
- /var/lib/locales/supported.d/localに「ja_JP」を追加
- sudo locale-genを実行
しました。
今後は、文字コード付のロケール表現形式をボクのWebアプリでもサポートしてあげることにします。
これでやっと「WindowsXP同居計画」に突入できます。
でも、どうかんがえても簡単にいくとは思えません。
少し時間を置いて余裕があるときにやろうと思います。



