Skip to content

国際化対応方法

Takayuki Nagatomi edited this page Apr 29, 2019 · 1 revision

国際化対応方法

baserCMSは、土台となるCakePHPの国際化機構を利用して国際化に対応しています。
アプリケーション部分の表示やメッセージについて国際化するためには翻訳関数を利用します。
CakePHPの国際化機構の詳細については、CakePHPの 国際化と地域化 を参照してください。

翻訳関数の埋め込み

あなたのコードを国際化する為には、翻訳箇所に翻訳関数を埋め込む必要があります。
次の2つのコードは、役割は同じですが、翻訳ファイルをカテゴライズする為に使い分けます。与えられた文字列を翻訳がある場合は翻訳し、そうでなければ何も変更せずに返します。

<!-- テーマに関連するコードの場合 -->
<h2><?php echo __('記事タイトル') ?></h2>

<!-- baserCMSの管理システムに関連するコードの場合 -->
<h2><?php echo __('baser', '記事タイトル') ?></h2>

通常、翻訳対象となる文字列は、世界共通語である英語を使う事が多いですが、日本産のbaserCMSコアの開発方針として、日本語を利用しています。なお、プラグインやテーマなど baserCMSコア以外の開発については、この限りではありません。

Javascript 上の翻訳箇所の翻訳

Javascript 上の翻訳箇所については、PHP上で翻訳を行い、ヘルパーの機能を利用して引き渡す事を推奨しています。

// Javascript 上にて i18n 用の変数を宣言する。一回のレンダリング内にて、必ず一度宣言が必要。
// ※ 管理システムの場合は、HTMLヘッダー内にて既に宣言されているので不要です。
echo $this->BcBaser->declarationI18n();

// コンテンツ本体内での定義
$this->BcBaser->i18nScript([
    'commonCancel' => __d('baser', 'キャンセル'),
    'commonSave' => __d('baser', '保存')
]);

// コンテンツ本体以外での定義(echo と inline オプションが必要)
$this->BcBaser->i18nScript([
    'commonCancel' => __d('baser', 'キャンセル'),
    'commonSave' => __d('baser', '保存')
], ['inline' => true]);

// Javascript 内にて変数を参照する
alert(bcI18n.commonCancel);
alert(bcI18n.commonSave);

pot ファイルの作成

翻訳関数の埋め込みが完了したら、次に pot ファイルの作成を行います。
pot ファイルは、baserCMS内の全ての翻訳可能文字列のテンプレートとなり、CakePHPの I18Nシェル を利用し、一括で作成します。

開発環境に Docker を利用している場合

Dockerコンテナにログイン

docker exec -it {コンテナ名} /bin/bash

# basercms-4.1 というコンテナにログインする場合
docker exec -it basercms-4.1 /bin/bash

I18Nシェルを実行

app/Console/cake i18n extract —overwrite —extract-core no —merge no —paths {翻訳対象のフォルダ} —output {pot ファイルの出力先}

# baserCMSの管理システムの pot ファイルを更新する場合
app/Console/cake i18n extract --overwrite --extract-core no --merge no --paths /var/www/html/lib/Baser/ --output /var/www/html/lib/Baser/Locale

処理が完了すると、 /lib/Baser/Locale/ 内の、default.pot と baser.pot が上書更新されます。

翻訳を行う

pot ファイルを更新したら、次はいよいよ翻訳です。
翻訳方法 のページを参考に翻訳を開始してください。

↑↑↑ Wikiに登録されているページは古いドキュメントです。 新しいドキュメントは、baserCMS公式ガイド をご覧ください。

Clone this wiki locally