tohokuaikiのチラシの裏

技術的ネタとか。

PHPのsetlocaleまとめ

前2つのエントリでハマりまくったPHPのsetlocaleのまとめ。*1

Apache CLIの共通の認識

  • $locale -a を行って表示されないロケールは(つまりOSで有効化されてないロケール)setlocale()しても無効である。
  • ただし、言語パック(debianだとtask-japaneseパッケージなど)を入れる必要は無い。
  • LC_MESSAGESディレクトリを置くフォルダ名は、文字コードが必要ない。付けてはいけない。(×:ja_JP.UTF8 〇:ja_JP)
  • setlocale()第二引数で設定するロケールは、$locale -a の中にあるもので一致してなければならない。locale -a の中に、"ja_JP.utf8"があった場合"ja_JP"はN.G
  • setlocale()の第二引数内の「utf8」は、文字表記の揺れを認める。UTF8/UTF-8/utf8/utf-8/UtF-8などは全て許容される。

CLIの場合のsetlocale

  • CLIでのsetlocale()の第二引数は環境変数$LANGUAGEで上書きされる。$LANGUAGEが無い場合は、$LANGで上書きされる
  • この2つの環境変数が無い場合に第二引数の環境変数が評価される。

*1:そもそもロケールがen_USしか入ってないdebianだからっていうのでハマったのであるが