多言語化するときのConfig.languageの値

本題

カレントの言語を指定するには、次のようにすると思います。

<?php
// app/locale/ja_jp ディレクトリ以下の情報を用いる
Configure::write('Config.language', 'ja_jp');
?>

以下、この例でいう'ja_jp'を識別子と呼びます。


さて、識別子が、l10nのカタログ(のキー)に存在するとき、l10nはそれに対応する「locale」「localeFallback」といった値を、languagePath(ロケール情報をもつディレクトリへのパス郡)に追加します。
よって、例えば、識別子に「ja」を指定した場合、以下のようになります。

<?php
// 識別子「ja」はカタログにあり、「locale」、「localeFallback」の値は「jpn」
Configure::write('Config.language', 'ja');
// よって、app/locale/jpn/ 以下の情報を参照する
// $l10n->languagePath = array('jpn', 'jpn');
?>

カタログって何?

  • 言語に対する様々な情報を保持しています。
  • リクエストヘッダのHTTP_ACCEPT_LANGUAGEをキーになっています。(振り分けが容易)
<?php
// 日本語の例
'ja' => array(
	'language' => 'Japanese', // 言語のフルネーム
	'locale' => 'jpn', // setlocale()などに適応される地域名
	'localeFallback' => 'jpn', // 下記を参照
	'charset' => 'utf-8', // この言語を使用する際に推奨される文字エンコーディング(自信なし)
	'direction' => 'ltr' // 文字の方向。ltr(left to right)とrtl(right to left)のどちらか
)
?>

localeFallbackですが、fallbackとは予備のもの、といった意味合いを持ちます。
例えば英語の場合、様々な地域・国で使われ、方言も多種多様にわたりますが、

  • locale => en_ca // カナダ英語
  • localeFallback => eng // カナダ英語も英語!

という風に、英語ならどこの地域・国でも「eng」を予備として利用できる、といった風になります。
つまりapp/locale/engに記述をおけば、多種多様な英語圏の国・地域に適応できるといったことが可能になります。

余談

最初、本題のことが理解できておらず、小一時間デバッグして、ようやくたどり着き、どうせなら噛み砕いてみようと思ってこのエントリを書きました。半分備忘録です。
なかなか大多数の地域に渡って多言語化することはないと思いますが、世界中で利用されているCakePHPならではの機能であるなぁと思います。