CMSのポテンシャルを引き出す─MODxで作る商用サイト

第11回 MODxとSimpleSearchスニペット

この記事を読むのに必要な時間:およそ 4 分

日本語表示

ちょっと待ってください。無事検索はできるようになりましたが,現在検索結果の表示は

1 Results found for "modx"

のような英語表記になっています。

スニペットの作者は日本人とは限らないため,これは当然のことですが,このままでは日本語サイトとして不自然すぎます。かと言って,PHPソースをゴリゴリ修正して無理やり日本語化するのもスマートではありません。

MODxにはこのような英語表示を多言語表示するための仕組みが備わっています。それがこれまでも何度も出てきたLexicon(日本語訳=語彙)という機能です。

LinuxやUNIXに少し詳しい方であれば,gettextというライブラリや機能について耳にされたことがあるはずです。主にオープンソースソフトウェアを多言語対応させる場合,ソースファイル中に複数の言語や訳を記述しては美しくありませんしメンテナンス性にも欠けます。そのため,gettextではja.poといった外部ファイルを別途用意して,その中でオリジナルのメッセージと日本語訳の対応付けを行なっておきます。

たとえば,GNUtarに含まれるja.poの一部は次のように定義されています。

ja.poの一部

#: gnu/argmatch.c:136 
#, c-format 
msgid "ambiguous argument %s for %s"
msgstr "引数 %s は %s に対してあいまいです"

MODxでも,gettextと似たような仕組みで言語ファイルを用意することで,スニペットを多言語対応させることができます。SimpleSearchスニペットがインストールされている/var/www/html/core/components/simplesearchディレクトリを見てみると,その中にlexiconディレクトリが存在します。さらにその下には次のように言語ごとのディレクトリや設定ファイルが用意されています。

# find /var/www/html/core/components/simplesearch/lexicon 
/var/www/html/core/components/simplesearch/lexicon 
/var/www/html/core/components/simplesearch/lexicon/en 
/var/www/html/core/components/simplesearch/lexicon/en/properties.inc.php 
/var/www/html/core/components/simplesearch/lexicon/en/default.inc.php 
/var/www/html/core/components/simplesearch/lexicon/fr 
/var/www/html/core/components/simplesearch/lexicon/fr/properties.inc.php 
/var/www/html/core/components/simplesearch/lexicon/fr/default.inc.php 
/var/www/html/core/components/simplesearch/lexicon/nl 
/var/www/html/core/components/simplesearch/lexicon/nl/properties.inc.php 
/var/www/html/core/components/simplesearch/lexicon/nl/default.inc.php 
/var/www/html/core/components/simplesearch/lexicon/de 
/var/www/html/core/components/simplesearch/lexicon/de/properties.inc.php 
/var/www/html/core/components/simplesearch/lexicon/de/default.inc.php 
/var/www/html/core/components/simplesearch/lexicon/ru 
/var/www/html/core/components/simplesearch/lexicon/ru/properties.inc.php 
/var/www/html/core/components/simplesearch/lexicon/ru/default.inc.php 

たとえば,この中のlexicon/en/default.inc.php の中身を見てみると,次の記述が見つかります。

$_lang['sisea.results_found'] = '[[+count]] Results found for "[[+text]]"'; 
$_lang['sisea.result_pages'] = 'Result pages:';

現時点でjaディレクトリは用意されていませんので,他ディレクトリと同様,jaディレクトリを用意して,その下で日本語用のproperties.inc.php やdefault.inc.php といったファイルを設置しておけば,日本語表示が可能になるのではないか…?と想像することができます。

日本語用語彙フォルダの準備

では,上記の予想を元に,日本語表示を実現してみましょう。まずは語彙ディレクトリが必須ですので,英語用であるenディレクトリをjaディレクトリとしてコピーしておきます。

# cd /var/www/html/core/components/simplesearch/lexicon
# cp -a en ja

あとは,default.inc.phpやproperties.inc.phpの英語表記部分をコツコツと日本語に直していけば良いのですが,一度jaディレクトリやファイルを準備すれば,MODxの「システム」⁠⁠語彙トピックの管理」から各メッセージを編集し,MySQL側から上書きすることもできます。

試しに,ネームスペース=sisea,言語=jaを選択し,3ページ目に表示される「sisea.results_found」というパラメータの内容を

[[+count]] Results found for "[[+text]]"

から

"[[+text]]"というキーワードは[[+count]]件見つかりました。

に変更してみます。

図4 語彙情報を上書き

図4 語彙情報を上書き

次に,⁠サイト」より「キャッシュをクリア」を選択した後,再び検索ウインドウから検索を行ってみると,結果は次のようになります。

図5 検索結果を日本語で表示

図5 検索結果を日本語で表示

さて,今回は日本語訳用のjaディレクトリを用意して,管理画面から日本語訳を入力するだけで検索結果を日本語表示させることができましたが,⁠日本語で表示するように」という設定は一度も行っていません。なぜデフォルトで日本語表示が可能となるのでしょうか?

答えは,⁠システム設定」「cultureKey」という言語設定にあります。MODx日本語版をインストールすると,この値が自動的にjaと設定されています。たとえばこの値を「fr」に設定した場合には検索結果もフランス語として表示されます。

最後に

今回SimpleSearchスニペットを紹介した理由は,このスニペットがLexicon(語彙)に対応しているためでした。Lexiconは便利な一方,コンセプトが少しわかりづらい機能のひとつでもありますので,今回は単純化するために敢えて紹介しなかった機能もあります。

次回はこのあたりを詳しく見ていき,Lexiconをより深く理解していきましょう。

著者プロフィール

中満英生(なかみつひでお)

大学時代に出会ったSolarisがきっかけでUNIXの世界へ。その後ホスティングプロバイダ,データセンターで実務経験を積む傍ら,雑誌記事の執筆や技術セミナーの講師を務める。サーバ設定の他,セキュリティに関する著作や技術者エッセイも執筆経験あり。