<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 16566 -->
<sect1 id="performance.localization">
    <title>国際化(i18n)とローカライズ(l10n)</title>

    <para>
        サイトを国際化したり、ローカライズしたりすることはあなたの観客を増やし、
        訪問者すべてが彼らの必要とする情報を入手できることを確実にするすばらしい方法です。
        しかしながら、しばしばパフォーマンス上のペナルティーをもたらします。
        下記はあなたが国際化とローカライズのオーバーヘッドを減らすために利用できる戦略のいくつかです。
    </para>

    <sect2 id="performance.localization.translationadapter">
        <title>どの翻訳アダプタを使うべきですか？</title>

        <para>
            翻訳アダプタのすべてが同じことを引き起こすとは限りません。
            あるものは他にない特色を持ち、またあるものは他より良く機能を果たします。
            さらに、ビジネス上の必要性によって、
            特定のアダプタを使わなければならないことがあるかもしれません。
            しかしながら、もしあなたに好みがあるなら、どのアダプタがもっとも速いでしょうか？
        </para>

        <sect3 id="performance.localization.translationadapter.fastest">
            <title>最速にするためにXML以外の翻訳アダプタを使う</title>

            <para>
                Zend Frameworkはさまざまな翻訳アダプタとともに出荷されています。
                それらのうち丸々半分はメモリやパフォーマンスのオーバーヘッドを招く<acronym>XML</acronym>形式を利用します。
                幸運なことに、もっとより速くパース可能な他の形式を利用するアダプタがいくつかあります。
                速度の順でもっとも速いものから遅いものまで見て行きましょう:
            </para>

            <itemizedlist>
                <listitem><para>
                    <emphasis>配列</emphasis>: これはもっとも高速です。
                    <!-- TODO -->
                    by definition, on inclusion 
                    ネィティブな<acronym>PHP</acronym>形式にすぐにパースされるためです。
                </para></listitem>

                <listitem><para>
                    <emphasis><acronym>CSV</acronym></emphasis>: <acronym>CSV</acronym>ファイルをパースするために
                    <methodname>fgetcsv()</methodname> を使い、
                    それをネィティブな<acronym>PHP</acronym>形式に変換します。
                </para></listitem>

                <listitem><para>
                    <emphasis><acronym>INI</acronym></emphasis>: <acronym>INI</acronym>ファイルをパースするために
                    <methodname>parse_ini_file()</methodname> を使い、
                    それをネィティブな<acronym>PHP</acronym>形式に変換します。
                    このアダプタと<acronym>CSV</acronym>アダプタは性能面で概ね等価です。
                </para></listitem>

                <listitem><para>
                    <emphasis>Gettext</emphasis>: Zend Frameworkのgettextアダプタはgettextエクステンションを
                    使い<emphasis>ません</emphasis>。
                    それはスレッドセーフではなく、サーバでひとつのロケールだけしか指定できないからです。
                    その結果、gettextエクステンションを直接利用するよりも遅くなりますが、
                    gettext形式はバイナリなので、<acronym>XML</acronym>をパースするよりは高速です。
                </para></listitem>
            </itemizedlist>

            <para>
                もしあなたの目的のひとつが高い性能なら、上記のアダプタのうちの
                ひとつを利用することを提案します。
            </para>
        </sect3>
    </sect2>

    <sect2 id="performance.localization.cache">
        <title>どのようにしたら翻訳やローカライズをもっと速くできますか？</title>

        <para>
            もしかするとビジネス上の理由であなたは<acronym>XML</acronym>ベースの翻訳アダプタに制限されているかもしれません。
            あるいは恐らくあなたはさらに速くしたいかもしれません。
            あるいはひょっとするとローカライズ作業を早めたいかもしれません。
            それにはどうしたら良いでしょう？
        </para>

        <sect3 id="performance.localization.cache.usage">
            <title>翻訳およびローカライズのキャッシュを使う</title>

            <para>
                <classname>Zend_Translate</classname>と<classname>Zend_Locale</classname>の両方とも
                パフォーマンスに大きな影響を与えることができるキャッシュ機能が実装されています。
                どちらの場合も、主なボトルネックは一般的にファイルの読み込みで、
                実際のルックアップ処理ではありません;
                キャッシュを利用することにより、翻訳および（または）ローカライズファイルを読み込む必要をなくします。
            </para>

            <para>
                文字列の翻訳およびローカライズのキャッシュについて下記を参考に出来ます。:
            </para>

            <itemizedlist>
                <listitem>
                    <para>
                        <link linkend="zend.translate.adapter.caching"><classname>Zend_Translate</classname>
                            アダプタキャッシング</link>
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <link linkend="zend.locale.cache"><classname>Zend_Locale</classname>
                            キャッシング</link>
                    </para>
                </listitem>
            </itemizedlist>
        </sect3>
    </sect2>
</sect1>
<!--
vim:se ts=4 sw=4 et:
-->
