Smartyのhtml_select_dateで日本語表記にする方法

Smartyの中に{html_select_date}という日付を指定するためのフォームを自動的に作成してくれる関数がある。

とても便利なんだけど、標準の設定では「月」の指定がアルファベットでJanuary, February...Decemberと表記されてしまう。




かといって、月の表示を%mにして数字にしてしまうと、フォームが年月日と並んでる状態ではどれがどの項目かわかりにくいんすよね。


これを回避するには、Smartyを呼び出すPHP側で、setlocaleをして、日本語環境と指定してあげると、標準に月表示が1月2月...12月といったフォームをが出力される。

<<--hogehoge.php-->>

setlocale(LC_TIME, "ja_JP.UTF-8");
$smarty = new Smarty;
$smarty->display(test.html);

<<--test.html-->>

{html_select_date field_order="YMD" month_format="%B"}
field_order : 表示を年月日の順にする
month_format : %B=ロケールに従って表示する(ここでは日本語として)




これで、とても見やすくなった。


指定できるロケールは表示する文字コードに合わせて随時変えるといいみたい。

ただし、Windows上のPHPの場合はコードが違うようで、

  • Japanese_Japan.932  ←SJIS
  • Japanese_Japan.20932  ←EUC

ただ、うちの環境だと、EUCのコードを指定しても、SJISが返ってきた・・・汗
まぁ、僕の場合は本番環境で動けば問題ないんですけど。