29.6. 以前のバージョンからの移行

Zend_Locale の API は日々変わっています。 Zend_Locale やそのサブコンポーネントを 初期のバージョンから使っている方は、以下のガイドラインに従ってスクリプトを変更し、 新しい API にあわせましょう。

29.6.1. 1.6 から 1.7 以降への移行

29.6.1.1. isLocale() を使う際の変更点

コーディング規約に従うと、 isLocale() は boolean 値を返さなければなりませんでした。 以前のバージョンでは、成功したばあいに文字列を返していました。 リリース 1.7 では、互換性モードが追加されて文字列を返す古い挙動も使えます。 しかし、このばあいは新しい挙動に変更するようにというユーザ警告が発生します。 古い挙動の isLocale() が行っていた再ルーティングはもはや不要で、 すべての I18N は自分自身で再ルーティングを行います。

あなたのスクリプトを新しい API 用に変更するには、次のようにメソッドを使用します。

例 29.51. isLocale() を 1.6 用から 1.7 用に変更する方法

// 1.6 の例
if ($locale = Zend_Locale::isLocale($locale)) {
    // ここで何かします
}

// 1.7 の例

// 互換性モードを変更して警告の発生を防ぐ必要があります
// これは起動ファイルで行うことができます
Zend_Locale::$compatibilityMode = false;

if (Zend_Locale::isLocale($locale)) {
}

                

2 番目のパラメータを使えば、 そのロケールが正しくて再ルーティングが発生しなかったかどうかがわかることに注意しましょう。

// 1.6 の例
if ($locale = Zend_Locale::isLocale($locale, false)) {
    // ここで何かします
}

// 1.7 の例

// 互換性モードを変更して警告の発生を防ぐ必要があります
// これは起動ファイルで行うことができます
Zend_Locale::$compatibilityMode = false;

if (Zend_Locale::isLocale($locale, false)) {
    if (Zend_Locale::isLocale($locale, true)) {
        // ロケールはありません
    }

    // もとの文字列はロケールを持ちませんが再ルーティングすることができます
}

                

29.6.1.2. getDefault() を使用する際の変更

getDefault() メソッドの意味が変わりました。 フレームワークにロケールが統合され、それを setDefault() で設定できるようになったからです。 このメソッドはもはやロケールチェインを返すことはなく、 フレームワークのロケールに設定されたものだけを返します。

あなたのスクリプトを新しい API 用に変更するには、次のようにメソッドを使用します。

例 29.52. getDefault() を 1.6 用から 1.7 用に変更する方法

// 1.6 の例
$locales = $locale->getDefault(Zend_Locale::BROWSER);

// 1.7 の例

// 互換性モードを変更して警告の発生を防ぐ必要があります
// これは起動ファイルで行うことができます
Zend_Locale::$compatibilityMode = false;

$locale = Zend_Locale::getOrder(Zend_Locale::BROWSER);

                

古い実装における getDefault() の 2 番目のパラメータはもはや使えないことに注意しましょう。 返り値がそれと同じ値となります。


[注意] 注意

デフォルトでは古い挙動も有効ですが、ユーザ警告が発生します。 新しい挙動にあわせてコードを変更し終えたら、 互換性モードを false に変更して警告が発生しないようにしなければなりません。