表示の地域化/国際化 †基本的な方法について。 普通はアプリケーション全体に言語切替の機能を持たせると思うので、app_controller.php に 'l10n' コンポーネント(?)を読み込ませる。 具体的には、app_controller.php の beforeFilter() メソッドに次の行を加える。メソッドがなければ追加する。 App::import('core', 'l10n');
コアコンポーネントの、l10n.php (localization コンポーネント)を読み込む指示。 この処理はなくても良い場合があった。 で、まずは各所で英語で次のように書かれているものを、日本語ロケールで使っているブラウザで日本語表示させるようにしてみる。 先ほどの import 指示の次の行に、以下を記述する。 Configure::write('Config.language', 'ja');
これで、日本語を強要することになる。 例えば、あるビューテンプレートに次のような記載があるとする。 echo __('English', true);
このページを表示させると、"English" が表示される。 次に、po ファイルを作る。 po は、Portable Object の略で、gettextからきているそうだ。 locale/jpn/LC_MESSAGES ディレクトリを掘って、その下に default.po を作成する。 中身はこんな感じで。ちゃんとしたのはあとで作る。 msgid "English" msgstr "日本語" 保存する文字コードはちゃんとアプリの文字コード設定に合わせるように。 これで、先ほどのビューを再度表示させてみると、English の部分が "日本語" と表示されているはず。文字化けしていればエンコードに問題があるが、変換そのものは成功している。 ここまでで、基本的な部分はできたから、今度はあちこちに分散して書かれている文字の対応表を整理しないといけない。 まず、CakePHP のコンソールを使って、__() の部分を抽出します。 とりあえず、views/ の下を再帰的に走査してくれれば良いので、次のように操作します。 php /path/to/cake/console/cake.php i18n 正しく起動されると、メニューが出るので、"Extract POT file from sources" の "E" を入力します。走査対象のディレクトリを聞いてくるので、views ディレクトリのフルパスを指定します。 また、出力先も聞かれるので、locale ディレクトリ(通常は apps 直下)を指定します。 続いて、走査結果を一つのファイルにまとめて出力するかどうかを聞かれるので、"y" を入力します。 結果、locale/default.pot ファイルが作られます。 まだこれだけでは使えません。翻訳作業が必要です。 翻訳作業には Poedit というツールが便利です。サイト からダウンロードして、インストールします。Windows, Max OS X, Linux, ソースコードの各種があります。 このツールで、default.pot ファイルを開きます。 編集操作は簡単で、上の方に単語一覧があるので、訳を下に書いていけばいいだけです。 翻訳が終わったら、ファイルを locale/jpn/LC_MESSAGES/ の下に、 default.po として置く。 これで、ページは日本語化できる。 ファイルを更新しても和訳されない場合は、キャッシュに残っている可能性があるので、tmp/cache/persistent/cake_core_default_jpn ファイルを削除する。 【参考URL】 |