すでに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日本語版では、ここで使われる日本語も定数にして、言語ファイルから読み込むようにすべきですね。