ここでは、baserCMS
のアプリケーション部分の表示やメッセージを国際化対応する方法について解説します。
通常、翻訳対象となる言語は、英語を用いるケースが多数を占めます。しかし、baserCMS
は日本語をベース言語とし、原則的に英訳にのみ対応する方針としています。
ただし、baserCMS
のコア以外のプラグインやテーマなどを開発する場合、あるいは、他の言語への対応についても、翻訳のサポートが十分に得られる場合については、この限りではありません。
baserCMS
は、CakePHP 4.x
が用意している国際化機構を用いて国際化に対応しております。
なお、ここでは国際化機構の詳細については解説致しませんので、必要に応じて下記URLを参照してください。
baserCMS
では、次の翻訳関数を利用し日本語を記述します。
echo __d('baser_core', '日本語を記述します。');
そうする事で、BaserCore
プラグイン配下の次の言語ファイル(バイナリファイル)を読み込む事ができます。
/plugins/baser-core/resources/locales/en/baser_core.mo
翻訳フォルダー名は、2文字または3文字の言語 ISO コード、または、言語及び話されている国を含む fr_FR, es_AR, da_DK のような完全なロケールの名称にする必要があります。
※ baserCMS
では、英語に対応するためのフォルダー名をenとしております。
参考URL:https://www.localeplanet.com/icu/
翻訳ファイルの具体例は以下のようになりますが、baserCMSでは、翻訳ファイルの作成は、i18nシェル
を利用して行います。
msgid "私の名前は {0} です"
msgstr "My name is {0}"
msgid "I'm {0,number} years old"
msgstr "J'ai {0,number} ans"
翻訳はキャッシュされています。翻訳を変更した際は、結果を反映するために必ずキャッシュをクリアしてください。
# 実行例
bin/cake cache clear baser_core
事前準備
1. レポジトリをフォークしローカルにクローンする
2. 開発環境を構築する
翻訳実施
3. gitコマンドでローカル環境を最新の状態へ更新する
4. Potファイルを生成する
5. Poeditなどで翻訳する
6. プルリクエストを送る
3. へ戻る
翻訳を実施するためには、baserCMSの開発環境を構築する必要があります。
開発手順を参考に、レポジトリをフォークしローカルにクローンしてください。
ローカル環境を構築して利用する を参考に、開発環境を構築してください。
翻訳を実施する前に、ローカル環境を最新の状態へ更新します。
git pull {リモート名} {開発ブランチ名}
#(例)本家のリモート名 basercms から、5.1.x ブランチの内容を取り込む
git pull basercms 5.1.x
アプリケーション内の、__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/ を入力
実行すると、次のファイルが生成されます。
次のPOファイルを Poedit で開きます。
/plugins/baser-core/resources/locales/en/baser_core.po
Poedit の メニューから、POTファイルを読み込みます。
メニュー
→ 翻訳
→ POTファイルから更新
次のファイルを選択すると新しい翻訳対象が増えた場合に反映されます。
/plugins/baser-core/resources/locales/baser_core.pot
文字色がオレンジのものが未翻訳となります。(ただし、翻訳済みであっても必ずしも正しいとは限りませんので、翻訳の内容が正しいかどうか確認する必要はあります。)
右側のペインに、翻訳の候補となる英文(機械翻訳の他に過去の翻訳例や人力での翻訳例など)が複数提案されますので、内容をしっかり確認して問題ない場合だけ受け入れます。
受け入れる場合には、右下の「要確認」をクリックします。
PoeditでPOファイルを保存すると、直ちに下記の翻訳ファイルMOファイルが作成されます。
/plugins/baser-core/resources/locales/en/baser_core.mo
翻訳が終わったらGitにコミットし、プルリクエストを作成します。
翻訳関数の利用箇所でエラーが発生しています。
Dockerコンテナ内部で、i18nシェル
実行時に--marker-error
オプションを追加すると詳細な内容が確認できます。
# 実行例
bin/cake i18n extract --marker-error --paths