ここでは、baserCMS5
のアプリケーション部分の表示やメッセージを国際化対応する方法について解説します。
通常、翻訳対象となる言語は、英語を用いるケースが多数を占めます。しかし、baserCMS5
は日本語をベース言語とし、原則的に英訳にのみ対応する方針としています。
ただし、baserCMS5
のコア以外のプラグインやテーマなどを開発する場合、あるいは、他の言語への対応についても、翻訳のサポートが十分に得られる場合については、この限りではありません。
baserCMS5
は、CakePHP 4.x
が用意している国際化機構を用いて国際化に対応しております。
なお、ここでは国際化機構の詳細については解説致しませんので、必要に応じて下記URLを参照してください。
baserCMS5
では、次の翻訳関数を利用し日本語を記述します。
echo __d('baser_core', '日本語を記述します。');
そうする事で、BaserCore
プラグイン配下の次の言語ファイル(バイナリファイル)を読み込む事ができます。
/plugins/baser-core/resources/locales/en/baser_core.mo
翻訳フォルダー名は、2文字または3文字の言語 ISO コード、または、言語及び話されている国を含む fr_FR, es_AR, da_DK のような完全なロケールの名称にする必要があります。
※ baserCMS5
では、英語に対応するためのフォルダー名をenとしております。
参考URL:
https://www.localeplanet.com/icu/
翻訳ファイルの具体例は以下のようになります。
msgid "私の名前は {0} です"
msgstr "My name is {0}"
msgid "I'm {0,number} years old"
msgstr "J'ai {0,number} ans"
注意事項:
翻訳はキャッシュされています。翻訳を変更した際は、結果を反映するために必ずキャッシュをクリアしてください。
実行例:
bin/cake cache clear _cake_core_
1. Githubの自分のアカウントでbaserproject.github.ioをフォークする
↓
2. ローカルにbaserproject.github.ioをクローンする
↓
3. gitコマンドでローカル環境を最新の状態へ更新する
↓
4. Potファイルを生成する
↓
5. Poeditなどで翻訳する
↓
6. プルリクエストを送る
↓
3. へ戻る
pot ファイルの生成に必要なツールを利用するには、CakePHPのライブラリをローカルの開発環境へインストールする必要があります。
ローカル環境構築の際、baserCMS5のインストールに先駆けて、最低でもライブラリのインストールを済ませておいてください。
ライブラリのインストールが完了していない場合、翻訳に必要なツールなどが利用できません。
アプリケーション内の、__d()関数
や英訳されたメッセージから pot ファイルを生成するためには、CakePHP
のI18n シェル
が利用できます。
翻訳を行う前に、CakePHP の I18n シェルを利用して、POTファイルを生成します。
Docker コンテナにログインし、コマンドを実行します。
全てのプラグインを一つのPOTファイルにまとめます。
Docker コンテナにログインするコマンド実行例
docker exec -it bc-php /bin/bash
Docker コンテナ内部でのコマンド実行例
bin/cake i18n extract --paths /var/www/html/plugins/baser-core,\
/var/www/html/plugins/bc-admin-third,\
/var/www/html/plugins/bc-blog,\
/var/www/html/plugins/bc-content-link,\
/var/www/html/plugins/bc-custom-content,\
/var/www/html/plugins/bc-editor-template,\
/var/www/html/plugins/bc-favorite,\
/var/www/html/plugins/bc-front,\
/var/www/html/plugins/bc-installer,\
/var/www/html/plugins/bc-mail,\
/var/www/html/plugins/bc-search-index,\
/var/www/html/plugins/bc-theme-config,\
/var/www/html/plugins/bc-theme-file,\
/var/www/html/plugins/bc-uploader,\
/var/www/html/plugins/bc-widget-area
#Would you like to extract the messages from the CakePHP core? (y/n)
→ n を入力
#What is the path you would like to output?
→ /var/www/html/plugins/baser-core/resources/locales/ を入力
メッセージをまとめる必要がある場合は、 別のドメインからメッセージを取ってくるのに__d()関数
が利用できます。
echo __d('baser_core', '日本語を記述します。');
次のPOファイルを Poedit で開きます。
/plugins/baser-core/resources/locales/en/baser_core.po
Poedit の メニューから、POTファイルを読み込みます。
メニュー → 翻訳 → POTファイルから更新
次のファイルを選択します。
/plugins/baser-core/resources/locales/baser_core.pot
新しい翻訳対象が増えた場合に反映されます。
翻訳対象が、新たに追加されている場合にPOファイルが更新されます。
文字色がオレンジのものが未翻訳となります。(ただし、翻訳済みであっても必ずしも正しいとは限りませんので、翻訳の内容が正しいかどうか確認する必要はあります。)
右側のペインに、翻訳の候補となる英文(機械翻訳の他に過去の翻訳例や人力での翻訳例など)が複数提案されますので、内容をしっかり確認して問題ない場合だけ受け入れます。
受け入れる場合には、右下の「要確認」をクリックします。
PoeditでPOファイルを保存すると、直ちに下記の翻訳ファイルMOファイルが作成されます。
/plugins/baser-core/resources/locales/en/baser_core.mo
翻訳が終わったらGitにコミットし、プルリクエストを作成します。
翻訳関数の利用箇所でエラーが発生しています。
Dockerコンテナ内部で、i18nシェル
実行時に--marker-error
オプションを追加すると詳細な内容が確認できます。
実行例:
bin/cake i18n extract --marker-error --paths
このページを執筆するにあたり、下記のWEBサイトを参考にさせていただきました。
参照URL:国際化(ucmitz)