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

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

31.6.1. 1.8 から 1.9 以降への移行

31.6.1.1. 非推奨となるメソッド

特別に用意されていたメソッドのいくつかが非推奨となります。 既存の挙動と重複しているからです。 古いメソッドも動作するにはしますが、 新しいメソッドについて説明する user notice が発生することに注意しましょう。 これらのメソッドは 2.0 で削除されます。 次の一覧で、新旧のメソッドコールを参照ください。

表 31.10. 新旧のメソッドコールの一覧

古い方法 新しい方法
getLanguageTranslationList($locale) getTranslationList('language', $locale)
getScriptTranslationList($locale) getTranslationList('script', $locale)
getCountryTranslationList($locale) getTranslationList('territory', $locale, 2)
getTerritoryTranslationList($locale) getTranslationList('territory', $locale, 1)
getLanguageTranslation($value, $locale) getTranslation($value, 'language', $locale)
getScriptTranslation($value, $locale) getTranslation($value, 'script', $locale)
getCountryTranslation($value, $locale) getTranslation($value, 'country', $locale)
getTerritoryTranslation($value, $locale) getTranslation($value, 'territory', $locale)

31.6.2. 1.7 から 1.8 以降への移行

31.6.2.1. デフォルトのキャッシュ処理

Zend Framework 1.8 以降、デフォルトのキャッシュ処理が追加されました。 このように変更された理由は、大半のユーザが、 パフォーマンスに問題を抱えていたにもかかわらずキャッシュを有効にしていなかったからです。 キャッシュを使用しない場合に I18n コアがボトルネックになることから、 Zend_Locale にキャッシュが設定されていない場合に デフォルトのキャッシュ機能を追加することにしたのです。

パフォーマンスを落とすことがわかっていたとしても、 あえてキャッシュを無効にしたい場合もあるでしょう。 そのような場合にキャッシュを無効にするには disableCache() メソッドを使用します。

例 31.50. デフォルトのキャッシュ処理の無効化

Zend_Locale::disableCache(true);

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

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

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

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

例 31.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)) {
        // ロケールはありません
    }

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

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

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

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

例 31.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 に変更して警告が発生しないようにしなければなりません。