WordPress のテーマで日付表記をローカライズする

» Posted by on 12月 21, 2009 in Blog | 0 comments

cal2

Ken's stuck in time calendar

messaliberty の日本語版と英語版は同じ WordPress テーマを使っています。1つのファイルで両方に対応している、という意味です。このやり方を実現するためには、完全に内部で切り分けて各言語ごとにローカライズする必要があります。英語と日本語の大きな違いは日付のフォーマットです。2009年12月13日は英語では Dec 13th 2009 にする必要があります。

最初 Chapp はテーマファイルの中にハードコードしていました。

<?php the_time('F jS, Y'); ?>

このままでは日本語版で日付がおかしくなります。だからといって ‘F jS, Y’ の部分を取り除くと、デフォルトの挙動で時間が表示されてしまいます。この問題は、次のような書き方で解決できます。

<?php the_date(); ?>

これで両方の言語で正しい表記となりまいた。めでたしめでたし・・・。と思いきや、WordPress がアーカイブページを生成するとき、date() が予期せぬ挙動をしてしまいます。特定の日付を一度しか表示しないのです。つまり、同じ日に2回投稿すると、一方にだけ日付が表示されます。配列を使ったあまりスマートではない解決策もありますが、以下の方法が良さそうです。

<?php the_time(get_option('date_format')); ?>

上記処理では、設定 > 一般 > 日付フォーマットの設定値を呼び出して使っています。英語版なら値が F jS, Y になっていて、日本語版なら Y年n月j日 になっています。こうやってみると分かりやすい解決策ですが、この問題には少し手こずりました。

同じテーマファイルを複数の言語用に利用する場合は、設定画面の日付フォーマット項目を利用して設定をするようにしてください。(WordPress MU の場合は少し異なります。)