はじめに

導入

運用

参加・貢献

リソース

GitHubでこのページを編集

Home / 5 / 国際化

国際化

はじめに

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

国際化対応方針

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

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

技術的背景について

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

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

国際化と地域化 - 4.x

翻訳関数

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の開発環境を構築する必要があります。

1. レポジトリをフォークしローカルにクローンする

開発手順を参考に、レポジトリをフォークしローカルにクローンしてください。

2. 開発環境

ローカル環境を構築して利用する を参考に、開発環境を構築してください。

翻訳実施

3. gitコマンドでローカル環境を最新の状態へ更新する

翻訳を実施する前に、ローカル環境を最新の状態へ更新します。

git pull {リモート名} {開発ブランチ名}
#(例)本家のリモート名 basercms から、5.1.x ブランチの内容を取り込む
git pull basercms 5.1.x

4. 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/ を入力

実行すると、次のファイルが生成されます。

5. Poeditなどで翻訳する

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

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

POTファイルを読み込む

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

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

次のファイルを選択すると新しい翻訳対象が増えた場合に反映されます。

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

Poeditによる翻訳手順

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

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

翻訳ファイルを作成する

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

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

6. プルリクエストを送る

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

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

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

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

# 実行例
bin/cake i18n extract --marker-error --paths