SOY CMSのフォーラムで下記のような内容があった。


/*****************************************/

現在日本語、英語、中国語の3言語のサイトを制作しているのですが
1つのsoycmsで、/ja、/en、/cnで各サイトを作成し、1つのinquiryでメールフォームを共有したいと思っています。

各フォームで、表示メッセージや自動送信メールの内容などは変更したのですが
1点のみ
管理者とユーザーへの送信メール内容の中で
「問い合わせ番号:」
「問い合わせ日時:」
の部分のみすべて日本語となってしまいます。

(途中省略)

もし、良い方法があればご教授頂けますと嬉しいです。

/*****************************************/


上記の件はメールを送信する直前に日本語表記が他言語表記に変われば良いので、

SOY Inqiuryでお問い合わせ内容をコンパクトにするで見たmail.***.phpでメール文面の拡張を行えば良い。


今回は取り急ぎユーザ側に送信するメールになるので、mail.user.phpを活用する。


defaultテンプレートを例に話を進めると、


cms
└── app
     └── webapp
            └── inquiry
                   └── src
                        └── template
                               ├── _sample
                               ├── default
                               │    ├── complete.php
                               │    ├── confirm.php
                               │    ├── form.php
                               │    ├── mail.user.php
                               │    └── style.php
                               ├── mobile
                               └── responsive

defaultディレクトリ以下にmail.user.phpを配置する。

配置したmail.user.phpの記述は下記のようにする。


<?php
/**
 * 使用できる変数
 * $columns 各フォームのオブジェクト(入力内容も含む)
 * $this->form フォームの設定
 * $inquiryMailBody 出力されたお問い合わせ内容
 *
 * 拡張方法
 * echo "追加したい文字列";でメールのコンテンツ末尾に追加されます。
 * $mailBody[1]の値を上書きすると出力内容が変わります。
 */

$lines = explode("\n", $mailBody[1]);
if(count($lines)){
	$contents = array();
	foreach($lines as $line){

		// 問い合わせ番号を他言語に変換
		if(strpos($line, "問い合わせ番号") !== false){
			$line = str_replace("問い合わせ番号", "contact number", $line);
		}

		// 問い合わせ日時を他言語に変換
		if(strpos($line, "問い合わせ日時") !== false){
			$line = str_replace("問い合わせ日時", "contact date", $line);
		}

		$contents[] = $line;
	}

	//再び組み立てる
	$mailBody[1] = implode("\n", $contents);
}

これで日本語になってしまう個所を他言語に変換出来た。

これを各言語毎にカスタマイズ用のフォームを設ければ、複数言語にも対応できる。