TOP | TEP-J

日本語版へのローカライズ

2001年5月15日
田村敏彦 (tamura@bitscope.co.jp)
The Exchange Project を日本で使用するには、 表示されるメッセージを日本語に変えるだけでなく、 日本の習慣に合わせた設定を行ったり、日本語に対応してソースを変更する必要があります。 この文書は、そのようなローカライズについて、Preview Release 2.1 を対象に記述したものです。

目次

日本固有の設定

日本の一般的な習慣に合わせるために、いくつかの設定を行います。

「日本語」を使用するには

「日本語」を追加する

管理ページから、以下のようにして言語に「日本語」を追加します。

画面から[Localization (ローカライズ)]>[Languages (言語)]を選択して、[new language]ボタンを押して以下の情報を入力します。

Name: Japanese
Code: ja
Images: flag_ja.gif   (国旗の画像を新たに作成する必要あり)
Directory: japanese
Sort Order: 4

デフォルトの言語を「日本語」にする

言語コード'ja'は、catalog/includes/application_top.phpの中でも次のように指定します。

define('DEFAULT_LANGUAGE', 'ja');

「円」を使用するには

「円」を追加する

管理ページから、以下のようにして通貨に「円」を追加します。

画面から[Localization (ローカライズ)]>[Currencies (通貨)]を選択して、[new currency]ボタンを押して以下の情報を入力します。

Title: Japanese Yen
 Code: JPY
 Symbol Left: 
 Symbol Right: 円
 Decimal Point: .
 Thousands Point: ,
 Decimal Places: 0

デフォルトの通貨を「円」にする

通貨コード'JPY'は、catalog/includes/application_top.phpの中でも次のように指定します。

define('DEFAULT_CURRENCY', 'JPY');

通貨の換算率をセットする

標準では、商品の価格を'USドル'の単位で入力して、それが'円'に換算して表示されます。それでは使いづらいですので、価格は'円'で入力して、必要があれば'USドル'に換算して表示してもらいたいですね。

それを実現するには、catalog/includes/data/rates.phpの中に記述してある換算率を変更します。初期状態では、次のような値が記入されています。これは、'USドル'を中心として、'円'やその他の通貨への換算率を定義したものです。

'USドル'を中心とした換算率
<?php
        :
'JPY' => '116.874',
        :
'USD' => '1.0000',
        :
);
?>

これを、円を中心とした換算率に変更します。'JPY'を1.0として次のようになります。

'円'を中心とした換算率
<?php
$currency_rates = array(
'AUD' => '0.01633',      // 豪ドル		2001/04/09
'DEM' => '0.01754',      // 独マルク		2001/04/09
'ESP' => '1.505',        // Spanish Peseta
'EUR' => '0.008973',     // ユーロ		2001/04/09
'HKD' => '0.06270',      // 香港ドル		2001/04/09
'JPY' => '1.0000',       // 日本円		
'KRW' => '11.11',        // 韓国ウォン	2001/04/09
'TWD' => '0.2639',       // 台湾ドル		2001/04/09
'USD' => '0.008042',     // 米ドル		2001/04/09
'DUMMY', ''
);
?>

住所

都道府県を登録する

テーブルzonesに都道府県を登録します。次のようなJIS都道府県コードに準拠したSQLを用意してzonesに追加します。

INSERT INTO zones VALUES ( 79,107,'01','北海道');
INSERT INTO zones VALUES ( 80,107,'02','青森県');
INSERT INTO zones VALUES ( 81,107,'03','岩手県');
INSERT INTO zones VALUES ( 82,107,'04','宮城県');
INSERT INTO zones VALUES ( 83,107,'05','秋田県');
INSERT INTO zones VALUES ( 84,107,'06','山形県');
INSERT INTO zones VALUES ( 85,107,'07','福島県');
                       :

ただし、アカウントの作成時などに、リストボックスに表示される件名の順番が名前(都道府県名)順になってしまいます。これはコード順にする必要があります。

都道府県のリストの表示順

アカウント作成ページ(catalog/create_account.php)で[国]の欄に'日本'が選ばれたときに、都道府県のリストは標準では地域名('zone_name')の順に並び替えられて表示されます。この部分を'zone_id'の順に並び替えられるように変更します。

catalog/includes/functions/general.phpの中の関数tep_get_zone_list()とtep_js_zone_list()に記述してあるSQLの'order by'のパラメータを以下のような規則で決定するようにします。

tep_get_zone_list()
$s_orderkey = ($country_code == 107) ? 'zone_id' : 'zone_name';
tep_js_zone_list()
$s_orderkey = ($country_values['zone_country_id'] == 107) ? 'zones.zone_id' : 'zones.zone_name';

'107'は日本の国IDです。

(2001年04月27日追加)

住所フォーマット

住所フォーマットというのは、住所を表記するのに、どんな項目をどんな順番でならべるかを定義した規則です。テーブルaddress_formatに記録します。

日本向けに、次のような住所フォーマットを用意しました。

日本向けの住所フォーマット
INSERT INTO address_format VALUES (5,
 '$lastname $firstname$cr$postcode$cr$statename$city$cr$streets$cr$country',
 '$statename $city');

また、日本向けの住所にこのフォーマットを使用してもらうために、テーブルcountriesの日本のレコードのaddress_format_idを変更します。

address_format_id を変更
INSERT INTO countries VALUES (107,'Japan','JP','JPN','5');

ここで登録した住所フォーマットに合わせて、tep_address_format()という関数が実際の住所の表記を組み立てます。ただし、標準では住所に県名を記入することができないため、住所フォーマットに$statenameという変数名を設けて、それを住所に変換できるよう、以下の関数を終始しました。

支払いモジュール

配送前に銀行振込み (cf_bank)

cf_bankは、商品の配送前に銀行振込をしてもらう支払いモジュールです。

次のファイルで構成されています。

(2001年05月07日追加)

商品到着後に銀行振込み (cod_bank)

cod_bankは、商品の到着後に銀行振込をしてもらう支払いモジュールです。

次のファイルで構成されています。

(2001年05月07日追加)

配送モジュール

佐川急便 (sagawaex)

sagawaexは、佐川急便(通常便)の運賃計算を行う配送モジュールです。ショップと顧客の住所(都道府県)、配送する荷物の重量によって運賃計算を行います。

次のファイルで構成されています。

(2001年05月07日追加)

  1. zonesテーブルの都道府県を参照します。
  2. 配送モジュールの中から顧客の住所を参照するために、標準のPR2.1を変更しています。

日本語の文字化けの問題

PHP4を利用した場合には、日本語を取り扱うのに注意する必要があります。

HTMLの文字化け

WWWブラウザが正しく判定できるように、WWWサーバとWWWブラウザの間でやりとりされるMIMEヘッダの中でcharsetパラメタを用いて文字コードを指定します。

対象となるのは以下の.phpファイルです。

これらのファイルの先頭部分に、以下の記述を追加します。

application_top.php
header("Content-type: text/html; charset=EUC-JP");

また、HTML文書の中でMETAタグを用いて、次のような手段で文字コードを指定することもできます。

まず、admin/includes/languages/japanese.phpとcatalog/includes/languages/japanese.phpに、次のような行を追加します。

japanese.php
define('ADD_HEAD', '<meta HTTP-EQUIV="Content-type" CONTENT="text/html; charset=euc-jp">');

次に、'<head>...</head>'の記述のある.phpファイルの'<head>...</head>'の中に、以下の行を挿入します。

追加する行
<? echo ADD_HEAD; ?>

この対象となるのは、catalogセクションでは以下の.phpファイルです。

adminセクションでは以下の.phpファイルです。

(2001年05月15日更新)

リンクの引数に使用される日本語の文字化け

リンクの引数として日本語を渡しているために文字化けが発生しているところがあります。これは、日本語の部分をurlencode()でエンコードすることで回避できます。対象になるのは以下のファイルです。

(2001年05月08日追加)

E-Mail配信の文字化け

自動的に送付されるE-Mailに関わるソースファイルには、以下のものがあります。いずれもcatalogセクションです。

これらについて、メール本文の文字化け対策のために必要な変更は以下のようなものです。

mail関数を変更する
mail()関数をjstr_send_mail()関数に置き換えます。
メール・ヘッダを変更する
Content-Typeの記述を次のようにします。
'Content-Type: text/plain; charset=ISO-2022-JP'

また、E-Mailの差出人に日本語が使われていた場合の文字化け対策が必要です。簡単な方法としては、catalog/contact_us.phpの差出人の氏名部分を取り外して、本文部分の先頭に付加します。

htmlentities()による文字化け

htmlentities()を使用しているために文字化けが発生しているところがあります。これは、htmlspecialchars()に置き換えることで回避できます。対象になるのは以下のファイルです。

substr()による文字化け

substr()を使用しているために文字化けが発生しているところがあります。2バイト文字の1バイト目を残して文字列を削除するためです。これは、jstr_substr()に置き換えることで回避できます。対象になるのは以下のファイルです。

(2001年04月26日追加)

tep_break_string()による文字化け

catalog/includes/functions/general.phpの中のtep_break_string()は、文章中の単語を指定の文字数でハイフネーションする関数です。日本語に対して行うと、文字化けが発生します。これは、この関数を使用している行をコメントアウトすることで回避できます。対象になるのは以下のファイルです。

(2001年04月26日追加)

その他

設定グループ名の変更の副作用

管理ページの表示を日本語化するために、configuration_groupテーブルのconfiguration_group_titleカラムに記録されている設定グループ名を日本語に変更すると、設定グループ名に依存したコードが動作しなくなります。

対象になるファイルはcatalog/advanced_search_result.phpです。このファイルの133行目の以下のSQLについて、

catalog/advanced_search_result.php
select c.configuration_key from configuration_group cg, configuration c 
where cg.configuration_group_title = 'Product Listing' ...

この中の'Product Listing'を新しい設定グループ名である'商品一覧'に変更します。

(2001年04月26日追加)