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
を参考にしてみてください。
物は試しでお試しください。
タグ:
Your post has been saved and will be published after approval by the forum moderator.