zencart日本語化で、日付と時間が文字化けするのを解消

zencart1.5.7cで、languageを新規にjapaneseを自前で用意してインストールすると、adminの画面は日本語に切り替わりますが日付や時間の表示が文字化けしています。これはかなり前のバージョンからで、今まで特に修正も入ってないようでユーザー自ら直して使う状態です。

管理画面のメインページはjapanese.phpだけをenglish.phpからコピーして日本語を入れていくだけでできるのでそこは簡単。日付や時刻などのフォーマットを出力する@setlocale関数をいじってなんとかうまくいくようにしました。

ただ、日本語の日付と曜日は文字化けなくできても、時刻はどこかの国の時間になったまま、php.iniの設定を見直すといいらしいのですが、とりあえずはzencartのソースコードを直すだけでなんとかなるところまで。

admin/includes/languages/japanese.php

zencartのlocalesを日本対応にする

こちらは english.phpのオリジナルの方です。

$locales = [‘en_US’, ‘en_US.utf8’, ‘en’, ‘English_United States.1252’];

とセットしてあります。これだとアメリカ合衆国の時刻と曜日表示に最適になっているので、日本語のlocalesに変更します。

zencartのlocalesを日本のタイムゾーンに変更する

変更点、2行

date_default.timezone_set(‘Asia/Tokyo’);

この1行を入れると、初期値はUTCという日本時間-9時間がデフォルトでセットされていて、管理画面に常時表示されている時間がずれているのを日本時間にできます。別になんの影響もないのですが、時間が日本時間で正確に表示されていた方が気持ちいいですね。

$locales = [‘ja_JP.utf8’, ‘ja’];

こちらはstrtime()関数の曜日や月日などを取得した際に日本語として取得するためのロケールと言います。初期設定のen_USだと日本語の月曜日、などの2バイト文字が文字化けしてしまっていて、◆◆ のような読めない文字になっています。

英語版の初期値はこのように4個の区切りで分けてありますが、1番目の

‘en_US’を’ja_JP’を入れず、飛ばしてやるとうまく日本語が表示されました。

ここら辺PHPがちょっと古いと言いますか、理屈じゃないやり方がうまくいってしまう変なところです。

$locales = [‘en_US’, ‘en_US.utf8’, ‘en’, ‘English_United States.1252’];

$locales = [‘ja_JP’, ‘ja_JP.utf8’ ‘ja’, ‘japanese_Japanese.928’];

と書くのが正解な気がしますが

$locales = [‘ja_JP.utf8’, ‘ja’];

ここまで短縮していいようでした。特に正常に日本語が表示できるかは先頭の’ja_JP’の部分は飛ばす、という点です。ここ大事です。

最後のEnglish_United States.1252やjapanese_Japanese.928などの国際規格はいくら変更してもなんの影響もなかったので、消しても問題なく使用できました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です