はじめに

導入

運用

参加・貢献

リソース

GitHubでこのページを編集

Home / 5 / 国際化

国際化

はじめに

ここでは、baserCMS5のアプリケーション部分の表示やメッセージを国際化対応する方法について解説します。

国際化対応方針

通常、翻訳対象となる言語は、英語を用いるケースが多数を占めます。しかし、baserCMS5は日本語をベース言語とし、原則的に英訳にのみ対応する方針としています。

ただし、baserCMS5のコア以外のプラグインやテーマなどを開発する場合、あるいは、他の言語への対応についても、翻訳のサポートが十分に得られる場合については、この限りではありません。

技術的背景について

baserCMS5は、CakePHP 4.xが用意している国際化機構を用いて国際化に対応しております。

なお、ここでは国際化機構の詳細については解説致しませんので、必要に応じて下記URLを参照してください。

国際化と地域化 - 4.x

翻訳関数

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のインストールに先駆けて、最低でもライブラリのインストールを済ませておいてください。

ライブラリのインストールが完了していない場合、翻訳に必要なツールなどが利用できません。

I18n を利用して Pot ファイルを生成する

アプリケーション内の、__d()関数や英訳されたメッセージから pot ファイルを生成するためには、CakePHPI18n シェルが利用できます。

翻訳を行う前に、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ファイルを開く

次のPOファイルを Poedit で開きます。

/plugins/baser-core/resources/locales/en/baser_core.po

POTファイルを読み込む

Poedit の メニューから、POTファイルを読み込みます。

メニュー → 翻訳 → POTファイルから更新

次のファイルを選択します。

/plugins/baser-core/resources/locales/baser_core.pot

新しい翻訳対象が増えた場合に反映されます。

翻訳対象が、新たに追加されている場合にPOファイルが更新されます。

Poeditによる翻訳手順

文字色がオレンジのものが未翻訳となります。(ただし、翻訳済みであっても必ずしも正しいとは限りませんので、翻訳の内容が正しいかどうか確認する必要はあります。)
右側のペインに、翻訳の候補となる英文(機械翻訳の他に過去の翻訳例や人力での翻訳例など)が複数提案されますので、内容をしっかり確認して問題ない場合だけ受け入れます。

受け入れる場合には、右下の「要確認」をクリックします。

翻訳ファイルを作成する

PoeditでPOファイルを保存すると、直ちに下記の翻訳ファイルMOファイルが作成されます。

/plugins/baser-core/resources/locales/en/baser_core.mo

プルリクエストを送る

翻訳が終わったらGitにコミットし、プルリクエストを作成します。

marker error(s) detected が発生した場合

翻訳関数の利用箇所でエラーが発生しています。

Dockerコンテナ内部で、i18nシェル実行時に--marker-errorオプションを追加すると詳細な内容が確認できます。

実行例:

bin/cake i18n extract --marker-error --paths

最後に

このページを執筆するにあたり、下記のWEBサイトを参考にさせていただきました。

参照URL:国際化(ucmitz)