15.2. Zend_Locale の使用法

Zend_Locale は、各ロケールについての情報も、 自分自身のロケールに合わせた形式で提供します。 たとえば他のロケールの名前や曜日名、月名などがこれにあたります。

15.2.1. ロケールオブジェクトのコピー、クローン作成およびシリアライズ

オブジェクトのクローンを作成し、 ロケールオブジェクトを正確かつ効率的に複製することができます。 ロケール対応のメソッドのほとんどは、$locale->toString() が返す文字列表現のロケールを受け付けます。

例 15.6. clone

<?php
require_once 'Zend/Locale.php';

$locale = new Zend_Locale('ar');

// $locale オブジェクトをシリアライズして保存します
$serializedLocale = $locale->serialize();
// もとのオブジェクトを再度作成します
$localeObject = unserialize($serializedLocale);

// ロケールの文字列表記を取得します
$stringLocale = $locale->toString();

// $local オブジェクトの複製を作成します
$copiedLocale = clone $locale;

print "copied: ", $copiedLocale->toString();
print "copied: ", $copiedLocale; // PHP は、__toString() 経由で自動的に toString() をコールします
?>

15.2.2. isEqual() - 同等

Zend_Locale は、 二つのロケールを比較するための便利な関数も提供しています。 ロケール対応のクラスはすべて、これと同等の同一性チェック機能を提供しなければなりません。

例 15.7. ロケールが同一かどうかの調査

<?php
require_once 'Zend/Locale.php';

$locale = new Zend_Locale();
$mylocale = new Zend_Locale('en_US');

// ロケールが同一かどうかを調べます
if ($locale->isEqual($mylocale) { 
    print "これらのロケールは同一です";
}
?>

15.2.3. デフォルトのロケール

getDefault() メソッドは、関連するロケールの配列を返します。 これは、ユーザのウェブブラウザからの情報 (取得できる場合)、 ホストサーバの環境変数および ZF の設定をもとに取得します。 Zend_Locale のコンストラクタの最初のパラメータで、 (BROWSERENVIRONMENT あるいは FRAMEWORK のうちの) どの情報を優先するかを選択します。 二番目のパラメータでは、マッチしたロケールをすべて返すのか あるいは最初にマッチした/一番マッチしたものを返すのかを指定します。 ロケール対応のコンポーネントは、通常は最初のロケールのみを使用します。 優先度が指定されている場合は、それも考慮します。

例 15.8. デフォルトロケールの取得

<?php
require_once 'Zend/Locale.php';

$locale = new Zend_Locale();

// すべてのデフォルトロケールを返します
$found = $locale->getDefault();
print_r($found);

// ブラウザのロケールのみを返します
$found2 = $locale->getDefault(Zend_Locale::BROWSER,TRUE);
print_r($found2);
?>

BROWSERENVIRONMENT あるいは FRAMEWORK のいずれかに対応するデフォルトロケールを取得するには、 それぞれ対応するメソッドを使用します。

  • getEnvironment()

  • getBrowser()

  • getLocale()

15.2.4. 新しいロケールの設定

新しいロケールを設定するには、関数 setLocale() を使用します。この関数は、ロケール文字列をパラメータとして受け取ります。 ロケールを省略した場合は、ロケールが 自動的に選択 されます。Zend_Locale オブジェクトは "light" なので、このメソッドは既存のインスタンスを参照しているすべてのコードに影響をおよぼします。

例 15.9. setLocale

<?php
require_once 'Zend/Locale.php';

$locale = new Zend_Locale();

// 実際のロケール
print $locale->toString();

// 新しいロケール
$locale->setLocale('aa_DJ');
print $locale->toString();
?>

15.2.5. 言語および地域の取得

getLanguage() を使用して、二文字の言語コード文字列を ロケール識別文字列から取得します。また、 getRegion() を使用して、二文字の地域コード文字列を ロケール識別文字列から取得します。

15.2.6. 各地域での言語、地域、カレンダーの名前の取得

getLanguageDisplay($language, $locale) を使用して、ある言語の名前を指定した $locale (デフォルトは、そのオブジェクトのロケール) で表した文字列を取得します。また、 getLanguageList($locale) を使用して、既知の言語名をすべて $locale (デフォルトは、そのオブジェクトのロケール) に翻訳した文字列の配列を取得します。

例 15.10. getLanguageDisplay

<?php
require_once 'Zend/Locale.php';

$locale = new Zend_Locale('en_US');
print $locale->getLanguageDisplay('de'); // "German" と表示されます
?>

Zend_Locale で使用できるすべての言語の一覧を、それぞれの言語での表記で取得するには、 以下の例をウェブページで使用してみましょう 同様に getRegionList() および getRegionDisplay() を使用すると、 あなたのネイティブ言語での地域名と別の言語での地域名の対応表を作成できます。 また、getCalendarList() および getCalendarDisplay() も同様に動作します。 try .. catch ブロックで、 存在しないロケールを使用した場合の例外を処理するようにしましょう。 すべての言語がすべてのロケールに対応しているわけではありません。 この例では、例外を無視することで、 スクリプトが途中で終わってしまうことを防いでいます。

例 15.11. すべての言語を、その国のネイティブ言語で書き出す

<?php
require_once 'Zend/Locale.php';

$sourceLanguage = null; // あなたのネイティブ言語のコードを設定します
$locale = new Zend_Locale($sourceLanguage);
$list = $locale->getLanguageList();

foreach($list as $language => $content) {
    try {
        $output = $locale->getLanguageDisplay($language, $language);
        if (is_string($output)) {
            print "\n<br>[".$language."] ".$output;
        }
    } catch (Exception $e) {
        continue;
    }
}
?>

15.2.7. 翻訳された文字名の取得

getScriptDisplay() は、指定した言語の文字名を翻訳したものを返します。 getLanguageDisplay() 関数と同様、この関数は別のロケールで結果を出力することもできます。 その場合はオプションの引数 $locale を指定します。

例 15.12. getScriptDisplay

<?php
require_once 'Zend/Locale.php';

$locale = new Zend_Locale();

// 文字
print $locale->getScriptDisplay('Latn');
?>

15.2.8. 文字一覧の取得

getScriptList() を使用して、既知の文字名をすべて $locale (デフォルトは、そのオブジェクトのロケール) に翻訳した文字列の配列を取得します。 L10N の観点から、ここでいう文字とは ある言語を表示するために使用する文字セットとなります。 英語を表示するための文字の名前はラテン文字 (Latin) で、ISO-15924 における短縮形は "Latn" となります。

例 15.13. getScriptList

<?php
require_once 'Zend/Locale.php';

$locale = new Zend_Locale();

// 文字の一覧
print_r($locale->getScriptList());
?>

15.2.9. "yes" および "no" に対応する翻訳の取得

プログラム上で、ユーザに "はい" あるいは "いいえ" で答えてもらうことがよくあります。 getQuestion() を使用すると、 ユーザに問い合わせるときに使用する単語を含む配列を、特定の $locale (デフォルトは、そのオブジェクトのロケール) にあわせて返します。この配列には四つの要素が含まれます。それぞれが "はい"、"いいえ" とその省略形を現します。以下の例を参照ください。

例 15.14. getQuestion()

<?php
require_once 'Zend/Locale.php';

$locale = new Zend_Locale();

// 設問の文字列
print_r($locale->getQuestion());

- - - 出力 - - -

Array
(
    [yes] => yes
    [yesabbr] => y
    [no] => no
    [noabbr] => n
)
?>