Re: 多言語サイトのフォームの翻訳

2012年8月29日 at 11:23

Internationalizationすらまともに設置できておりません私ですが、
なんとなく、エラーメッセージ時に言語がデフォルトに戻る原因と、
(場当たり的な)対応が見えましたので書き込みます。

まず、site.phpに記述する

$sitelang = substr($_SERVER['REQUEST_URI'],strlen(DIR_REL)+1, 2);

ですが、これでURLから第1階層の二文字を抜き出しています(enとかjpとか)。
そしてその後に続く
switch($sitelang) {
case 'en': {
・・・・・(省略)

の部分で言語環境を変更しています。
(もし抜き出した2文字がenならen_USに設定、デフォルトはja_JP.UTF8ね、という感じです)

で、問題のエラーメッセージですが、エラーメッセージが表示されるときのURLが
index.php?cID= で始まるようになっています。
例:
フォームページを開いた状態:your.domain/en/form/
エラーメッセージが出た状態:your.domain/index.php?cID=###########


これだと上記2文字を抜き出しても en ではなく in になってしまうので、
英語ではなく、デフォルトの日本語でページが表示されてしまう訳です。
これでエラーメッセージの謎が解けました。

さて、話を大元に戻して、エラーメッセージに日本語と他言語を一緒に表示させる方法ですが、
下記の方法はいかがでしょうか?

1./concrete/blocks/form/controller.php および同フォルダにあるview.css、view.phpを
 /blocks/form/ フォルダにいれる

2.controller.phpに日本語メッセージを追記する(下記は269行目にある「必須項目未入力」の追記例です)。

if($notCompleted) $errors['CompleteRequired'] = t("Complete required fields *") ;
$errors['CompleteRequiredjp'] = t("必須項目を入力してください *") ; //この1行を追記
}


※他のエラーメッセージも同様の方法でいけると思います。
※captchaエラーは246行目、ファイルアップロード関連は291行目と294行目です。

3..controller.phpに日本語メッセージのタイトルを追記する(310行目あたり)
if(count($errors)){
$this->set('formResponse', t('Please correct the following errors:') );
$this->set('formResponsejp', t('以下のエラーを訂正してください。') );   //この1行を追記
$this->set('errors',$errors); $this->set('Entry',$E);


4.view.phpに追記する(17行目あたり)
<div id="msg">
<?php echo $formResponse ?>
<br><?php echo $formResponsejp ?>  //この1行を追記


なお、view.cssは見た目を同じくするだけなので無修正でOKです。

以上でエラーメッセージに日本語と他言語を一緒に表示させることが可能です。
日本語メッセージは
/languages/ja_JP.UTF8/LC_MESSAGES/messages.po
を参考にしてみてください。

物は試しでお試しください。

タグ: