<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 15103 -->
<sect1 id="zend.locale.migration">

    <title>以前のバージョンからの移行</title>

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

    <sect2 id="zend.locale.migration.fromonesixtooneseven">
        <title>1.6 から 1.7 以降への移行</title>
        <sect3 id="zend.locale.migration.fromonesixtooneseven.islocale">
            <title>isLocale() を使う際の変更点</title>

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

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

            <example id="zend.locale.migration.fromonesixtooneseven.example">
                <title>isLocale() を 1.6 用から 1.7 用に変更する方法</title>

                <programlisting role="php"><![CDATA[
// 1.6 の例
if ($locale = Zend_Locale::isLocale($locale)) {
    // ここで何かします
}

// 1.7 の例

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

if (Zend_Locale::isLocale($locale)) {
}
]]>
                </programlisting>

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

                <programlisting role="php"><![CDATA[
// 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)) {
        // ロケールはありません
    }

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

            </example>

        </sect3>

        <sect3 id="zend.locale.migration.fromonesixtooneseven.getdefault">
            <title>getDefault() を使用する際の変更</title>

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

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

            <example id="zend.locale.migration.fromonesixtooneseven.getdefault.example">
                <title>getDefault() を 1.6 用から 1.7 用に変更する方法</title>

                <programlisting role="php"><![CDATA[
// 1.6 の例
$locales = $locale->getDefault(Zend_Locale::BROWSER);

// 1.7 の例

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

$locale = Zend_Locale::getOrder(Zend_Locale::BROWSER);
]]>
                </programlisting>

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

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

        </sect3>

    </sect2>
</sect1>
