多言語サイトを運営する時に大変なことの一つにテンプレートの編集があります。
日本語ページでデザインを修正した時に英語ページでもデザインを修正する。
言語数が多くなる程、一度の修正で手を付けなければいけない箇所が増えてきて、いずれは修正するのが億劫になりメンテナンスされなくなっていくという事があります。
この問題を回避する為に共通箇所はモジュールで管理しておくと良いです。
今回は例としてサイト名の表記の箇所をモジュール化してみます。
/ドキュメントルート/サイトID/.module/parts/site_name.php
上記のファイルを作成しましたら、先に公開側ページのテンプレートに
<!-- cms:module="parts.site_name" --><h1>SOY CMSを使ってみよう!</h1><!-- /cms:module="parts.site_name" -->
のタグを挿入しておきます。
続いて、モジュールファイルの方のコードを作成します。
書き方は規模に応じていくつかあります。
1つ目は単純に日本語ページと英語ページの出し分けを行う方法です。
/ドキュメントルート/サイトID/.module/parts/site_name.php
<?php
function soycms_site_name(string $html, HTMLPage $htmlObj){
// 多言語プラグインで定義している定数がなかった場合はこの場で定義しておく。
if(!defined("SOYCMS_PUBLISH_LANGUAGE")) define("SOYCMS_PUBLISH_LANGUAGE", "jp");
switch(SOYCMS_PUBLISH_LANGUAGE){
case "en":
echo "<h1>Let's use SOY CMS!</h1>";
break;
default: // 日本語ページの場合はそのまま出力
echo $html;
}
}
?>
この方法は共通箇所のHTMLの文量が少ない時に有効ですが、文量が多くなると管理が大変です。
モジュールのもう一つの書き方は置換文字列を利用する方法です。
公開側のテンプレートに挿入するモジュールを下記のように変更します。
<!-- cms:module="parts.site_name" --><h1>##SITE_NAME##</h1><!-- /cms:module="parts.site_name" -->
モジュールファイルの方を下記のように書き換えます。
/ドキュメントルート/サイトID/.module/parts/site_name.php
<?php
function soycms_site_name(string $html, HTMLPage $htmlObj){
// 多言語プラグインで定義している定数がなかった場合はこの場で定義しておく。
if(!defined("SOYCMS_PUBLISH_LANGUAGE")) define("SOYCMS_PUBLISH_LANGUAGE", "jp");
$list = array();
switch(SOYCMS_PUBLISH_LANGUAGE){
case "en":
$list["##SITE_NAME##"] = "Let's use SOY CMS!";
break;
default:
$list["##SITE_NAME##"] = "SOY CMSを使ってみよう!";
}
// 置換文字列を変換する
foreach($list as $replaceKey => $replaceText){
$html = str_replace($replaceKey, $replaceText, $html);
}
echo $html;
}
?>
※定数のSOYCMS_PUBLISH_LANGUAGEに代入される値は下記のページを参考にしてください。
こちらの書き方はPHPの連想配列の知識が必要になりますが、メンテナンス性は上がります。
