gettextのmo/poファイルを更新したらApacheを再起動する

PHP logo
サイトを国際化するにあたってgettextを使って、mo/poファイルを作って翻訳を行うということはよくあり、今触っているシステムでもFuelの下で(Fuelのi18nは使わずに)gettextを使って日本語版と英語版の切り替えを実現しています。当然、このファイルは頻繁に更新されるわけですが、ローカルで確認していると更新後にロケールが正しく取得されずに日本語版で英語が表示されてしまうことがよくあります。何度かページ更新したり、時間をおいたりすると直るんですが、ローカルならまだしも本番環境で同じことが起こったら軽く事故ですね。ファイルサイズとかサーバスペックとかでキャッシュ更新タイミングが決まってるのか、運良く本番環境では発生していなかったようですが。



で、これなんともならんのかなあと思ってたら、こんな情報が。


PHPでgettextする際の注意事項というか、setlocaleの罠 – tohokuaikiのチラシの裏

罠3 Apacheを再起動せよ
なんか、setlocaleが成功したり失敗したりする。。。。
検索したらPHPドキュメントのコメントが・・・。 PHP: setlocale – Manual

Omer Sabic
On Linux/Apache, when you install and try to use a new locale, the setlocale() function with the new locale will fail sometimes, but not always. To furthermore complicate, setlocale() will always complete with any of the previously installed locales. This would seem a really weird behaviour, which you can fix by restarting Apache, as Kari Sderholm aka Haprog mentioned, but I felt it needed to be properly pointed out.

Apacheを再起動せよと・・・・。 確かに治った。



なるほど。そしてリリース手順に「services httpd graceful」を組み込んだら、ロケールの設定に失敗することがなくなりました。おおー。これまでモヤモヤしてたのが解決してスッキリしてよかったけど、でもまじかー。こんな簡単なことだったのか。