Zen-Cart v1.3.0.2のUTF-8化カスタマイズ
Blog 12月 30th, 2008すでにZen-Cart v1.3.0.2日本語版で構築して、運用中のサイトをUTF-8にして欲しいという依頼があり、カスタマイズいたしましたので、ここで方法をご紹介いたします。
Zen-Cart v1.3.0.2日本語版は、データベース、言語ファイルともEUC-JPです。ここでは、それをともにUTF-8化してしまおうというカスタマイズです。
なお、公式版ではありませんが、ビッグマウスさんがリリースしているv1.3.8aは、UTF-8が基本になってます。また、公式版の次期バージョンではUTF-8が採用される予定です。
まず、phpMyAdminなどのツールを使って、Zen-Cartで利用しているデータベースをまるごとダンプ(エクスポート)します。
ダンプしたsqlファイルを文字コード変換ツール「KanjiTranslator 」などを使って、UTF-8に変換します。UTF-8のZen-Cart用のデータベースを作成します。この際に、文字コードを指定できるようであれば、UTF-8にします。
例)create database データベース名 DEFAULT CHARACTER SET utf8;
作成したデータベースに先ほど変換したsqlファイルを流します。
これでデータベース側の準備は終了です。
次にサーバーから以下の言語ファイルをダウンロードします。
/admin/includes/languages/japanese.php
/admin/includes/languages/japanese内のすべてのファイル
/includes/languages/japanese.php
(オーバーライドしている場合は、/includes/languages/MY_TEMPLATE/japanese.phpも忘れずに)
/includes/languages/japanese内のすべてのファイル
ダウンロードした言語ファイルを先ほどの文字コード変換ツールを使ってUTF-8に変換します。
*変換前にバックアップをとっておいてください。
次に以下の修正を行ってください。
/admin/includes/languages/japanese.php
[code]
mb_internal_encoding(“EUC-JP”);
mb_http_output(“EUC-JP”);
[/code]
↓
[code]
mb_internal_encoding(“UTF-8”);
mb_http_output(“UTF-8”);
[/code]
/includes/languages/japanese.php
(オーバーライドしている場合は、/includes/languages/MY_TEMPLATE/japanese.php)
[code]
@setlocale(LC_TIME, ‘ja_JP.EUC-JP’);
mb_language(‘Japanese’);
mb_internal_encoding(“EUC-JP”);
mb_http_output(“EUC-JP”);
[/code]
↓
[code]
@setlocale(LC_TIME, ‘ja_JP.UTF-8’);
mb_language(‘Japanese’);
mb_internal_encoding(“UTF-8”);
mb_http_output(“UTF-8”);
[/code]
および
[code]
define(‘CHARSET’, ‘EUC-JP’);
[/code]
↓
[code]
define(‘CHARSET’, ‘UTF-8’);
[/code]
これで言語ファイルの準備はOKです。ここまでくればあと少し。
その他に変更が必要なファイルを用意します。
以下のファイルをサーバーからダンロードしてください。
/admin/includes/configure.php
/includes/classes/db/mysql/query_factory.php
/includes/configure.php
ダウンロードしたファイルを修正します。
*修正前にバックアップをとっておいてください。
/includes/classes/db/mysql/query_factory.php
[code]
if ($zf_pconnect != ‘false’) {
$this->link = @mysql_connect($zf_host, $zf_user, $zf_password, true);
} else {
// pconnect disabled … leaving it as “connect” here instead of “pconnect”
$this->link = @mysql_connect($zf_host, $zf_user, $zf_password, true);
}
[/code]
↓
[code]
if ($zf_pconnect != ‘false’) {
$this->link = @mysql_connect($zf_host, $zf_user, $zf_password, true);
} else {
// pconnect disabled … leaving it as “connect” here instead of “pconnect”
$this->link = @mysql_connect($zf_host, $zf_user, $zf_password, true);
}
if (version_compare(mysql_get_server_info(), ‘4.1.0’, ‘>=’)) {
mysql_query(‘SET NAMES “utf8″‘, $this->link);
}
[/code]
/admin/includes/configure.php と /includes/configure.php
[code]
define(‘DB_SERVER_USERNAME’, ‘現在のユーザ名’);
define(‘DB_SERVER_PASSWORD’, ‘現在のパスワード’);
define(‘DB_DATABASE’, ‘現在のデータベース’);
[/code]
↓
[code]
define(‘DB_SERVER_USERNAME’, ‘新しいユーザ名’);
define(‘DB_SERVER_PASSWORD’, ‘新しいパスワード’);
define(‘DB_DATABASE’, ‘新しいデータベース’);
[/code]
言語ファイルおよび変更を加えた3ファイルをアップロードすれば完了です。
ブラウザでZen-Cartへアクセスし、文字コードを確認してみましょう。
なお、
/admin/includes/configure.php
/includes/configure.php
はパーミッションを666などにしないとアップロードできないので、一時的に変更して、すぐに戻しておきましょう。
ちなみに、UTF-8化した後は、EUC-JPの公式版用のモジュールはそのままでは利用できない場合があります。
・言語ファイルがある場合は、文字コードをUTF-8に変更
・mb_convert_encodingなどの変換関数がある場合は、EU-JPの部分をUTF-8に変更
・その他、「EUC-JP」をgrepして、どのような処理を行っているか確認
上記を行えば、EUC-JPの公式版用のモジュールでも利用することができるはずです。
ご自身でできなそうであれば、Zen-Cartカスタマイズサポートでお請けすることもできますので、ご相談ください。
追記
以下のモジュールディレクトリ内も日本語が直接書かれてますので、UTF-8への変更が必要でした。
(モジュールインストールに関わるファイルなので、インストール・アンインストールしない場合は影響しません)
/includes/modules/order_total
/includes/modules/payment
/includes/modules/shipping
また、以下のクラスファイルもUTF-8化の必要があります。
/includes/classes/_yamato.php
/includes/classes/_sagawaex.php
/includes/classes/_nittsu.php
* 次期、Zen-Cart日本語版では、ここで使われる日本語も定数にして、言語ファイルから読み込むようにすべきですね。
1月 29th, 2009 at 11:31:12
[…] 変更する部分を発見。⇒参考 ⇒もうひとつ […]
12月 15th, 2009 at 17:29:45
[…] ?Zen-Cart v1.3.0.2のUTF-8化カスタマイズを参考に、日本語が含まれるファイルを全部UTFに変更。 […]
2月 13th, 2012 at 22:49:32
[…] CartをUTF-8化する方法は、Zen-Cart v1.3.0.2のUTF-8化カスタマイズなんかが参考になります。 […]
12月 3rd, 2013 at 14:23:40
[…] 数百数千あるファイルを一括文字コード変換したい時に使うコマンド。(私はzen-cart-v1.3.0.2-l10n-jp-6がEUC-JPであることが気に入らなくてUTF-8に一括変換) find . -type f | xargs -n 10 nkf -w –overwrite find でカレントディレクトリ内のファイルをすべて拾って(-type f)、そのファイルリストをxargsに渡します。-n 10のところでファイルリストを一度に渡す数を調整します。膨大な量が予想される場合は-n 50とかにするとよいです。それからnkfに渡して-wでutf-8に文字コード変換。変換後はそのまま上書きしてしまって–overwriteしてしまいます。殆ど失敗しないので大丈夫。(ですが、コピーしておいた方がいいかもです。) […]