サイトを翻訳して表示させる方法の説明です。
CakePHPとPHPのバージョンは以下の通りです。
CakePHP 3.1.13
PHP 5.4.15
新しいバージョンもしくは古いバージョンだと、少し変わってくるかもしれません。
サイトを翻訳するのに必要な事は以下の通りです。
- 翻訳したい文字列を__()で書く。
- Poeditのインストール
- POファイルの作成する
__()について
__()はCakePHPのグローバル関数で、引数に翻訳対象の文字列を入れて使用します。
<?= __(“こんにちわ!”); ?> というように書いて使用します。
「〇〇さん、こんにちわ!」という様な「〇〇」の部分が動的に変わる場合などは、__(“{0} さん、こんにちわ!”,[“いまよし”]) とすることで、対応できるようです。
ただ、公式で書かれている__(‘You have {unread} unread messages’, [‘unread’ => $number]);というのは、自分で試してみたのですが、ちゃんと動きませんでした。何か間違えていたのか、CakePHPかPHPのバージョンが古いのかもしれません。
参考にならないと思いますが、私の場合はstr_replace()で置換して対応しました。
<?php
$name = "いまよし";
echo str_replace("{name}",$name,__("{name}さん、こんにちわ!"));
// 結果:いまよしさん、こんにちわ!
?>
POファイルについて
先ほどの__()で書いた文字列に翻訳を適用するには、POファイルを作成する必要があります。
それにはまず、POTファイルというのを作成する必要があります。
CakePHPのI18Nシェルを利用すると簡単に作成できます。
POTファイルは特に設定を変えなければ、src\Locale\内に作成されます。
POファイルの作成
まずPoeditをインストールしましょう。
Poeditをインストールしたら、Poeditを起動して「翻訳プロジェクトを新規作成する」から先ほど作成したPOTファイルを開いてください。(開くと翻訳言語を選択するダイアログがでると思うので、翻訳したい言語を選んでください。)
後は翻訳欄の方に翻訳後に表示するテキストを入力するだけです。
POファイルの保存先は、src\Locale\言語コード(英語の場合は「en」)\と言うディレクトリを作成してその中にdefault.poと言う名前で保存すれば問題ないと思います。
同時に.moファイルが作成されると思いますが、このファイルは無くてもよさそうなので、削除しておきましょう。
ファイル→設定に「保存する際にMOファイルを自動コンパイル」という項目があるので、チェックを外しておけば.moファイルが作成されなくなるので、設定を変えておくと良いかもです。