多言語対応CMS「concrete5」で日付を表示する際は必ず日付ヘルパーを使いましょう

菱川拓郎
菱川拓郎

今日は concrete5 のデザインカスタマイズについてのトピックです。

CMSを使った更新性の高いウェブサイトを制作する際のデザインカスタマイズにおいて必要になるのが日付や日時の表示です。トップページやアーカイブでの新着情報の一覧には、ほぼ必ず「2019年7月10日」のような日付が記載されていると思います。あるいは、「2019/7/10」のような簡潔な表示になっているかもしれません。

PHPを使えば、このような日付書式を指定することは簡単ですね!

echo date('Y/m/d', $date);

しかし、concrete5 は多言語サイト対応CMSです。同じテンプレートを使用していても、ページによって異なる言語を表示している可能性があります。その場合、各言語ごとの日付書式に合わせたテンプレートを作成するのは面倒ですよね!

「2019年7月10日」は流石に漢字が入っているので日本でしか使えないのは直感的にわかりますので、それなら「2019/7/10」形式に統一しよう!これで解決!…とはいきません。

実は「2019/7/10」という表記も、世界共通ではありません!例えば英語では「7/10/19」のように年が最後に来ます。数字だけなら大丈夫と思っても、実は順番が国によって違うということがあるのです。

しかし、ご安心ください。concrete5 は多言語サイト対応CMSだからこそ、抜かりはありません。テンプレートに同じ書き方をしておけば、ページの言語に合わせて自動的に日付の書式を切り替えてくれる仕組みがあります。

冒頭の例のような書き方の代わりに、次のように記載しましょう。

// 日付ヘルパーの呼び出し
$dh = Core::make('helper/date');

echo $dh->formatDateTime($date);

まず最初に「日付ヘルパー」を呼び出しています。こいつが、自動的に各言語に合わせて日付を表示してくれるすごいやつです。英語であれば「7/10/19, 7:28 AM」日本語であれば「2019/07/10 7:28」中国語であれば「2019/7/10 上午7:28」のように、自動的に表記を変えてくれるのです!

concrete5 に同梱されているページリストなどのブロックのテンプレートは、この日付ヘルパーを使って日時を表示するようになっていますので、特に意識することなく多言語対応することが可能です。

上の例で使用している formatDateTime 関数以外にも、時間のみ表示する formatTime 関数もあります。

// 日付ヘルパーの呼び出し
$dh = Core::make('helper/date');

echo $dh->formatTime($date);

出力結果は、英語の場合「7:28 AM」日本語だと「7:28」となります。アメリカ英語では12時間表記+AM/PMが一般的ですが、日本語では24時間表記が一般的です。このように、24時間表記にするかどうかも国によって違うのが面白いところです。

さらに詳しい書式設定をしたい場合は、formatDate 関数を使うことができます。こちらの関数では、full, medium, short と3パターンを選べるほか、Unicode Locale Data Markup (LDML) という世界共通規格を使ったより詳細な書式設定が可能です。

// 日付ヘルパーの呼び出し
$dh = Core::make('helper/date');

echo $dh->formatDate($date, 'full');
// 英語: Wednesday, July 10, 2019
// 日本語: 2019年7月10日水曜日

echo $dh->formatDate($date, 'medium');
// 英語:Jul 10, 2019
// 日本語: 2019/07/10

echo $dh->formatDate($date, '~Ehm');
// 英語: Wed 7:28 AM
// 日本語: 午前7:28 (水)

echo $dh->formatDate($date, '~yMEd');
// 英語: Wed, 7/10/2019
// 日本語: 2019/7/10(水)

echo echo $dh->formatDate($date, '~yMMMd');
// 英語: Jul 10, 2019
// 日本語: 2019年7月10日

LDMLの使い方はちょっとややこしいので、どのような書式が使えるのかと、5言語での出力結果をまとめたページをご用意しましたので、参考にしてください。

Complete usage and output of Date Helper to localize date time format

サイトの開設時は日本語だけと思っていても、やっぱり必要なので英語も…。要望があるので中国語も…。と、後から多言語サイトになっていく例は、結構あります。そんな時に、考えてなかった!テンプレート修正しなきゃ!とならないように、事前に準備しておきたいですね。ぜひテンプレート作成の際は、当記事を参考にしてみてください。

最後に、本記事では書式についてのみ解説しましたが、日付ヘルパーを使えば時差も表示の際に吸収してくれます。そういう意味でも、日時を画面に表示する際は必ず日付ヘルパーを使う!と覚えておいてください。