baserCMS サブサイトの多言語設定は、 なかなかにカオス。

-2021/12/13 追記
baserCMS 4.5.4以降で暫定的に本設定を実現するため、`app/config/bootstrap.php`に以下を記述し、`app/config/setting.php`内に記述した各言語の翻訳ファイルの設定が追加された後にカレントランゲージを再定義するようにしました。(「#1780 管理画面のメニューが英語化できていない問題を改善(#1781)」 に記載のlib/Baser/Config/bootstrap.php
192 - 203行目の追加コード部分)
/**
* フロントページ用言語設定
* 多言語利用時における言語設定の再々定義に使用する
*/
$currentSite = BcSite::findCurrent();
if ($currentSite) {
$lang = Configure::read('BcLang.' . $currentSite->lang);
}
if (Configure::read('BcApp.systemMessageLangFromSiteSetting') && isset($lang['langs'][0])) {
Configure::write('Config.language', $lang['langs'][0]);
}
また、baserCMS 4.5.4では、'systemMessageLangFromSiteSetting'
のデフォルト値がtrue
に変更されたため、以下の記載は不要です。
$config['BcApp'] = [
// システムメッセージの言語につてサイト設定を利用する
// - false:ブラウザ
// - true:サイト設定
'systemMessageLangFromSiteSetting' => true
];
-2021/12/12 追記
本記事に掲載した設定でサブサイトによるサイト設定優先の多言語化(フロント側)が実現するのはbaserCMS 4.5.3までで、残念ながら最新のbaserCMS 4.5.4(2021/11/25リリース)では機能しませんでした。あれこれと試行錯誤してもなかなか実現しなかったサブサイトのサイト設定本意の多言語設定。4.4.3でひっそりと実装された以下の設定をすると、結果、ブラウザの言語判定に影響されず、baserCMS側で指定した言語に倣って翻訳ファイルを適用してくれる。
$config['BcApp'] = [
// システムメッセージの言語につてサイト設定を利用する
// - false:ブラウザ
// - true:サイト設定
'systemMessageLangFromSiteSetting' => true
];
以下が、日本語、英語、ドイツ語、フランス語、中国語の多言語化したい場合。app/config/setting.php
内に多言語化したい翻訳ファイルの呼び出しと併せて追記。(英語は、デフォルトで既に実装済み)
もちろん/en/
/de/
/fr/
/zh/
の各言語に対応したサブサイト、翻訳ファイルを用意している前提です。
$config = [];
$config['BcApp'] = [
// システムメッセージの言語につてサイト設定を利用する
// - false:ブラウザ
// - true:サイト設定
'systemMessageLangFromSiteSetting' => true
];
$config['BcLang'] = [
// サブサイトで言語設定を利用する
// ドイツ語を追加
'german' => [
'name' => __d('baser', 'ドイツ語'),
'langs' => [
'de'
]
],
// フランス語を追加
'french' => [
'name' => __d('baser', 'フランス語'),
'langs' => [
'fr'
]
],
// 中国語を追加
'chaina' => [
'name' => __d('baser', '中国語'),
'langs' => [
'zh'
]
]
];
サブサイト設定は、こんな感じ。
上記のサブサイト設定で、
/de/
ページを表示すると、こんな感じになります。
各言語の翻訳ファイルは、こんな感じ。ちなみにフォルダ名の言語コードは、ISO 639-2コード(3文字コード)でないとうまく認識しません。
各言語の翻訳ファイルを作成するのは、Poedit を使いましたが、これは、結構地道な作業です。
Freeでももちろん使えますが、各言語ごととなるとPRO版のMT翻訳を利用しないときついかもしれません。
基本的な、多言語化の手順は、以上。
上記の設定をせずに、たとえば、英語の言語設定をしたブラウザにおいて、ブラウザのURL表示欄で/de/
フォルダを指定してページを表示させても、表示は英語のままでドイツ語の翻訳ファイルを拾ってドイツ語にはなってくれない。
しかし、上記の設定をしておけば、ドイツ語の翻訳ファイルを見て(もちろん翻訳ソースに対するターゲット訳が存在する前提)、きちんとドイツ語で表示してくれる。
これが何を実現してくれるのかというと、例えば、イギリスに住んでいるドイツ人がどこぞのネットカフェで英語設定のパソコンのまま、ドイツ語表記で当該サイトのドイツ語サブサイトを見たいと思ったときに見ることができるというもの。 この設定がなければ、英語環境のパソコン(あるいは英語の言語設定をしたブラウザ)では、ドイツ語のサブサイトは表示できないのです。 これ、実は、ずっと悩み苦しんで実現しなかったことだったのです。
しかし、この設定で実現している上述の現象が、本来の仕様として狙って実現したことなのかは不明です。 baserCMSにおける多言語化(国際化)の仕様は、なかなかにカオスで一筋縄ではいかないのです。。。