[CakePHP] 日本語翻訳機能

タグ :

CakePHP の機能として、英語で入力した文字列を日本語へ翻訳してくれる機能があります。
海外でそのページを見ると英語表記となりますが、日本国内でそのページを見ると日本語に訳されて表示されるみたいです。

国際化には興味無い場合はいらない機能ですが、より多くの人に見てもらうには、やはり英語表記も用意しておきたいです。
そんな機能の使い方をまとめてみました。

Locale

翻訳処理で必要なファイルは、以下になります。

/app/Locale/jpn/LC_MESSAGES/default.po

CakePHP デフォルトだと「jpn」フォルダが無いと思いますので、手動で追加します。
「default.po」というファイルはフォルダ Locale 直下に「default.pot」というファイルがあると思いますので、それをコピーして、拡張子を「po」に変更します。

このファイルの中身を見てみると、

msgid “Invalid.”
msgstr “データが無効です。”

とか似たようなコードがいっぱい書かれていると思います。
これが翻訳の実態です。
「msgid」で書かれた内容が「msgstr」で書かれた内容に翻訳される訳です。

ここへどんどん文字列を記述していけば、翻訳準備は完了です。
後は実際のビュー内へ「ここの文字列は翻訳しますよー」ていうのを記述するだけです。
ビューの文字列表示箇所には、

<?php echo __("Invalid."); ?>

と記述します。
もちろんビューだけでなく、コントローラなどにも同じように記述することで翻訳は行われます。

注意点としては、翻訳ファイル(.po)に記述した文字列とビューやコントローラへ記述した文字列が完全に一致しないと翻訳対象にならないです。
「.(ピリオド)」とかを忘れることがあるので気を付けましょう。

ハイレベルな使い方

翻訳ファイルに記述する文字列で、変数を用いた文字列を翻訳したい場合が出てきます。
そういった場合には以下のように記述できます。

msgid “<a href=%s >Click here</a>.”
msgstr “<a href=%s >ここをクリック</a>。”

この「%s」の部分が変数値が入ることになるので、そのまま翻訳させることが可能です。

また、ビューやコントローラ側では関数「printf()」を用いて表示させます。

<?php
	$url = 'http://booyan.lopan.jp';
	printf( __('<a href=%s >Click here</a>.'), $url);
?>

このように翻訳の記述は、かなりめんどくさい作業となります。

Share

  • このエントリーをはてなブックマークに追加

Comment

コメントを残す

*がついている欄は必須項目です。

  • Twitter
  • Facebook
  • Google Plus
  • RSS Feed