PukiWiki コンテンツの国際化対応のヒント

前提:UI の国際化

PukiWiki は LANG 定数の設定に応じて各種 UI 文字列の設定を読み替える機構をデフォルトで持っています。

LANG 定数の定義は PukiWiki.ini.php にあり、デフォルトの定義は日本語(ja)固定になっています。

/////////////////////////////////////////////////
// Language / Encoding settings

// LANG - Internal content encoding ('en', 'ja', or ...)
define('LANG', 'ja');

以上の設定を元に読み込まれる ja.lng.php と en.lng.php が切り替わります。

何らかのルールを作ってこれが動的に設定されるようにすれば UI の多言語化は簡単にできます。

例えばサブドメインの文字列(www.ownway.info の先頭の www の部分)によって切り替える簡単な実装は以下の通りです。

/////////////////////////////////////////////////
// Language / Encoding settings

// LANG - Internal content encoding ('en', 'ja', or ...)
list($subdomain) = explode('.', $_SERVER['HTTP_HOST']);
define('LANG', $subdomain);

以上のコードはドメインの指定に ja.ownway.info や en.ownway.info 等が来ることを想定しています。

それ以外の値が来た場合は考慮に入れていないのでもう少しコードを書く必要が出てくるかもしれません。

また、サブドメインを自由に設定できない場合は別の方法を考える必要がありますが、やるべきことはリクエストを元に適切な LANG を設定することです。

ここまでが前提となる UI の国際化です。

本題:コンテンツの国際化

LANG の指定に従って、UI だけではなく内部のコンテンツもその言語特有のものに切り替える方法のヒントを紹介します。

ちなみにコンテンツの国際化について PukiWiki-dev の以下のページに 2005 年頃の議論があります。

リンクが切れていて、この当時の再現ができませんが、この方法とは別の方法です。

PukiWiki の標準実装を使い、以下の単純な設定変更で実現します。

  • LANG の設定に従ってデータフォルダの読み込み先を切り替える。

具体的には PukiWiki.ini.php にあるディレクトリの設定を以下のように修正します。

// You may hide these directories (from web browsers)
// by setting DATA_HOME at index.php.

define('DATA_DIR', DATA_HOME . LANG . '/wiki/' ); // Latest wiki texts
define('DIFF_DIR', DATA_HOME . LANG . '/diff/' ); // Latest diffs
define('BACKUP_DIR', DATA_HOME . LANG . '/backup/' ); // Backups
define('CACHE_DIR', DATA_HOME . LANG . '/cache/' ); // Some sort of caches
define('UPLOAD_DIR', DATA_HOME . LANG . '/attach/' ); // Attached files and logs
define('COUNTER_DIR', DATA_HOME . LANG . '/counter/' ); // Counter plugin's counts

ポイントは、読み込みの起点を DATA_HOME . LANG にしているところです。

wiki, diff, backup, cache, attach, counter の設定を変更していますが、添付ファイルだけは共有したいということがあれば attach の設定は変えなくても OK です。

設定を変えたら PukiWiki 直下に ja と en というディレクトリを作って、wiki, diff, backup, cache, attach, counter をそれぞれにコピーします。

以上の説明は少し雑で PukiWiki 直下に ja と en を置くよりは data/ja や data/en という形にした方がすっきりするので、DATA_HOME 自体の定義も変えるなど配置は調整した方が良いです。

これだけで LANG の設定に従ったコンテンツの国際化対応が概ね完了です。

後は言語ごとにコンテンツを用意するという本来の作業をしましょう!

システム的には言語切り替え機能や alternate タグの設置機能なども欲しくなってくると思いますがそれはまた別の話です。