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

2012年8月29日 at 11:29

投稿してから気がつきました。
これって、デフォルトを英語にしている場合の対策でした。
申し訳ないです。。。

でも悔しいので、もうちょいだけ追加修正。
先ほどのcontroller.phpの追記部分、次のようにしてください。

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


同様にタイトル部分もこんな感じで。
$this->set('formResponse', ('Please correct the following errors:') );
$this->set('formResponsejp', ('以下のエラーを訂正してください。') );   //この1行を追記


カッコの前にあるtを取れば日本語化されない、という事みたいです。
今度はちゃんと日本語環境でためしましたsmiling

タグ:

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

2012年8月29日 at 12:42
なるほど~、エラーメッセージがデフォルト言語に戻る理由が理解できました!
URLから言語を判断させてるんですね。

ふと思ったのですが、独自の属性を追加して言語を認識させる方法は可能でしょうか?
実際、テーマのテンプレートに英語ページ用の属性を追加して、
ナビゲーション(日本語と英語)の振り分けに使っています。
"english_nav"属性を追加して、
english_nav属性があるページには、英語用ナビゲーションブロックを表示させ、
それ以外は、日本語ナビのブロック、という感じです。
こんな感じで、言語の振り分けはできないのでしょうか?


あと、エラーメッセージを日本語と他言語を一緒に表示させる方法ですが、
if($notCompleted) $errors['CompleteRequired'] = t("Complete required fields * 必須項目を入力してください *") ;

のように、英文のあとに、日本語を続けて入力しても大丈夫のようです。
この方法だと改行されずに、英文のあとに日本語が表示されます。
 

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

2012年8月29日 at 18:00
t()でくくってあると、LOCALEで設定された値が(日本語ならja_JP.UTF8)
languagesフォルダ内にあれば、
そのフォルダ内のLC_MESSAGES/messages.po ファイルを見に行きます。
messages.poファイルの
msgid と書かれた行と合致する語句であれば
そのすぐ下のmsgstr に書かれた語句に変換する。
という処理になります。

ですのでLOCALEに設定した値によって変更が無い語句は
t()はつけないほうがいいです。

実際には少し違うのですがはしょっています。
ややこしいこと言ってすみません。