[GENERIC] Zend_Translate:
[zend.git] / documentation / manual / ja / module_specs / Zend_Translate-Adapters.xml
blobf3e9ff5f834a9c2e8c2f08115f43bfc53c12817e
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- Reviewed: no -->
3 <!-- EN-Revision: 21661 -->
4 <sect1 id="zend.translate.adapter">
5     <title>Zend_Translate のアダプタ</title>
7     <para>
8         <classname>Zend_Translate</classname> は、さまざまなアダプタを使用して翻訳を行えます。
9         それぞれのアダプタによって利点や欠点があります。
10         以下に、翻訳の入力ファイルとしてサポートしているすべてのアダプタについてまとめます。
11     </para>
13     <table id="zend.translate.adapter.table">
14         <title><classname>Zend_Translate</classname> のアダプタ</title>
16         <tgroup cols="3">
17             <thead>
18                 <row>
19                     <entry>アダプタ</entry>
20                     <entry>説明</entry>
21                     <entry>備考</entry>
22                 </row>
23             </thead>
25             <tbody>
26                 <row>
27                     <entry>Array</entry>
28                     <entry><acronym>PHP</acronym> の配列</entry>
29                     <entry>小さめのページ。簡単に使用できる。プログラマしかさわれない。</entry>
30                 </row>
32                 <row>
33                     <entry>Csv</entry>
34                     <entry>カンマ区切りファイル (*.csv/*.txt)</entry>
35                     <entry>シンプルなテキスト形式。高速。Unicode 文字で問題が発生する可能性がある。</entry>
36                 </row>
38                 <row>
39                     <entry>Gettext</entry>
40                     <entry>gettext のバイナリファイル (*.mo)</entry>
41                     <entry>linux における GNU の標準形式。スレッドセーフ。翻訳用ツールが必要。</entry>
42                 </row>
44                 <row>
45                     <entry>Ini</entry>
46                     <entry>シンプルな ini ファイル (*.ini)</entry>
47                     <entry>シンプルなテキスト形式。高速。Unicode 文字で問題が発生する可能性がある。</entry>
48                 </row>
50                 <row>
51                     <entry>Tbx</entry>
52                     <entry>termbase 変換ファイル (*.tbx/*.xml)</entry>
53                     <entry>アプリケーション間で専門用語を変換するための業界標準。<acronym>XML</acronym> フォーマット。</entry>
54                 </row>
56                 <row>
57                     <entry>Tmx</entry>
58                     <entry>tmx ファイル (*.tmx/*.xml)</entry>
59                     <entry>アプリケーション間での翻訳の業界標準。<acronym>XML</acronym> フォーマット。可読形式。</entry>
60                 </row>
62                 <row>
63                     <entry>Qt</entry>
64                     <entry>qt 言語ファイル (*.ts)</entry>
65                     <entry>クロスプラットフォームなアプリケーションフレームワーク。<acronym>XML</acronym> フォーマット。可読形式。</entry>
66                 </row>
68                 <row>
69                     <entry>Xliff</entry>
70                     <entry>xliff ファイル (*.xliff/*.xml)</entry>
71                     <entry><acronym>TMX</acronym> に似ているが、よりシンプル。<acronym>XML</acronym> フォーマット。可読形式。</entry>
72                 </row>
74                 <row>
75                     <entry>XmlTm</entry>
76                     <entry>xmltm ファイル (*.xml)</entry>
77                     <entry><acronym>XML</acronym> ドキュメントの翻訳メモリの業界標準。<acronym>XML</acronym> フォーマット。可読形式。</entry>
78                 </row>
80                 <row>
81                     <entry>その他</entry>
82                     <entry>*.sql</entry>
83                     <entry>今後、その他さまざまなアダプタを実装する予定です。</entry>
84                 </row>
85             </tbody>
86         </tgroup>
87     </table>
89     <sect2 id="zend.translate.adapter.decision">
90         <title>使用するアダプタを決める方法</title>
92         <para>
93             <classname>Zend_Translate</classname> でどのアダプタを使用するのかを決める必要があります。
94             プロジェクトの制約や顧客からの要望などの外的要因でアダプタが決まることもよくありますが、
95             もしあなたに決定権があるのなら、以下のヒントを参考にしてください。
96         </para>
98         <note>
99             <para>
100                 使用するアダプタを決めるにあたっては、
101                 使用するエンコーディングを考慮しなければなりません。
102                 Zend Framework では UTF-8 をデフォルトのエンコーディングとしていますが、
103                 時には他のエンコーディングを使わなければならないこともあるでしょう。
104                 <classname>Zend_Translate</classname> は、
105                 ソースファイル内で定義されているエンコーディングを変更しません。
106                 つまり、もし Gettext のソースが ISO-8859-1 で作られている場合は、
107                 それをそのままのエンコーディングで返します。
108                 ただ、ひとつだけ制限があります。
109             </para>
111             <para>
112                 TMX や XLIFF といった <acronym>XML</acronym> ベースのソース形式を使用する場合は、
113                 そのエンコーディングを <acronym>XML</acronym> ファイルのヘッダで定義しなければなりません。
114                 エンコーディングの定義がない <acronym>XML</acronym> ファイルは、
115                 デフォルトでは UTF-8 として扱われるからです。
116                 また、もうひとつ注意すべき点は、<acronym>XML</acronym>
117                 ファイルのエンコーディングとして使用できるのは <acronym>PHP</acronym>
118                 がサポートしているエンコーディングのみであること、
119                 つまり UTF-8、ISO-8859-1 および US-ASCII だけであるということです。
120             </para>
121         </note>
123         <sect3 id="zend.translate.adapter.array">
124             <title>Zend_Translate_Adapter_Array</title>
126             <para>
127                 Array アダプタは、プログラマにとっては
128                 一番シンプルに使えるアダプタです。
129                 しかし、翻訳する文字列が大量にある場合や
130                 多くの言語に翻訳する必要がある場合は、別のアダプタを使うようにしましょう。
131                 たとえば、翻訳文字列が 5000 ほどある場合は
132                 Array アダプタは選択しないほうがいいでしょう。
133             </para>
135             <para>
136                 このアダプタを使うのは、小さめのサイトで少なめの言語を扱い、
137                 かつプログラマ自身で翻訳も行う場合だけにしましょう。
138             </para>
139         </sect3>
141         <sect3 id="zend.translate.adapter.csv">
142             <title>Zend_Translate_Adapter_Csv</title>
144             <para>
145                 Csv アダプタは、顧客にとっては最もシンプルに使えるアダプタです。
146                 CSV ファイルは標準的なテキストエディタで読むことができますが、
147                 エディタによっては utf8 文字セットをサポートしていないものもあります。
148             </para>
150             <para>
151                 このアダプタを使うのは、
152                 顧客が自分で翻訳を行いたいという場合だけにしましょう。
153             </para>
155             <note>
156                 <para>
157                     Csv ファイルのエンコードがあなたの環境のロケール設定と異なる場合、
158                     Csv アダプタで問題が発生することに注意しましょう。
159                     これは <acronym>PHP</acronym> 自体のバグによるもので、このバグは <acronym>PHP</acronym> 6.0
160                     で修正される予定です (http://bugs.php.net/bug.php?id=38471)。
161                     したがって、Csv アダプタを使用する場合は
162                     (<acronym>PHP</acronym> の制約のせいで) それがロケール対応でないということに注意しなければなりません。
163                 </para>
164             </note>
165         </sect3>
167         <sect3 id="zend.translate.adapter.gettext">
168             <title>Zend_Translate_Adapter_Gettext</title>
170             <para>
171                 Gettext アダプタは、最もよく用いられるアダプタです。
172                 Gettext は GNU が提供している翻訳フォーマットで、世界中で使用されています。
173                 可読形式ではありませんが、便利なフリーウェア
174                 (<ulink url="http://sourceforge.net/projects/poedit/">POEdit</ulink> など)
175                 が公開されています。
176                 <classname>Zend_Translate</classname> の Gettext アダプタは、<acronym>PHP</acronym> の gettext
177                 拡張モジュールを使わずに実装しています。
178                 <acronym>PHP</acronym> の gettext 拡張モジュールをインストールしていなくても
179                 Gettext アダプタを使用することが可能です。
180                 また、このアダプタはスレッドセーフですが、<acronym>PHP</acronym> の gettext
181                 拡張モジュールは現状ではスレッドセーフでありません。
182             </para>
184             <para>
185                 ほとんどの人たちは、このアダプタを使うことになるでしょう。
186                 便利なツールを使用することで、高品質な翻訳が簡単に作成できます。
187                 しかし、gettext のデータは機械が読める形式で保存されるので、
188                 何らかのツールがないと人間が読むことはできません。
189             </para>
190         </sect3>
192         <sect3 id="zend.translate.adapter.ini">
193             <title>Zend_Translate_Adapter_Ini</title>
195             <para>
196                 Ini アダプタは非常にシンプルなアダプタであり、
197                 顧客が直接触ることができます。
198                 <acronym>INI</acronym> ファイルは標準的なテキストエディタで読むことができますが、
199                 エディタによっては utf8 文字セットをサポートしていないものもあります。
200             </para>
202             <para>
203                 このアダプタを使うのは、
204                 顧客が自分で翻訳を行いたいという場合だけにしましょう。
205                 汎用的な翻訳ソースとしては使用しないようにしましょう。
206             </para>
208             <warning>
209                 <title>PHP 5.3 でのリグレッション</title>
211                 <para>
212                     <acronym>PHP</acronym> 5.3 より前のバージョンでは、<methodname>parse_ini_file()</methodname>
213                     および <methodname>parse_ini_string()</methodname> で
214                     <acronym>INI</acronym> オプションのキーに非 ASCII 文字を問題なく使用できました。
215                     しかし <acronym>PHP</acronym> 5.3 以降では、
216                     非 ASCII 文字のキーはどちらの関数の返す配列からも黙って抜け落ちてしまいます。
217                     UTF-8 や Latin-1 の文字をキーに使用している場合は、
218                     <acronym>INI</acronym> アダプタを使うと翻訳が正しく機能しなくなってしまいました。
219                     そのような場合は別のアダプタを使用することを推奨します。
220                 </para>
221             </warning>
222         </sect3>
224         <sect3 id="zend.translate.adapter.tbx">
225             <title>Zend_Translate_Adapter_Tbx</title>
227             <para>
228                 Tbx アダプタは、内部ですでに TBX フォーマットの翻訳システムを使用している顧客などが使用します。
229                 Tbx は標準の翻訳フォーマットではありませんが、
230                 すでに多くの翻訳や翻訳済み文字列が存在します。
231                 このアダプタを使用する場合は、
232                 必要な文字列をすべて翻訳しなければならないことに気をつけましょう。
233                 TBX は、まったく新しく作られた <acronym>XML</acronym> ベースのフォーマットです。
234                 <acronym>XML</acronym> ファイルは人間が読むことも可能ですが、
235                 パース速度は gettext ファイルより遅くなります。
236             </para>
238             <para>
239                 このアダプタは、すでにこの形式の翻訳ファイルを持っている企業に最適です。
240                 ファイルは可読形式で、システムに依存しない形式になります。
241             </para>
242         </sect3>
244         <sect3 id="zend.translate.adapter.tmx">
245             <title>Zend_Translate_Adapter_Tmx</title>
247             <para>
248                 Tmx アダプタは、複数のシステムで同一の翻訳ソースを使用している顧客などが使用します。
249                 また、翻訳ソースをシステムに依存しない形式にしたい場合にも使用します。
250                 TMX は <acronym>XML</acronym> 形式のフォーマットで、業界標準になるといわれています。
251                 <acronym>XML</acronym> ファイルは人間が読むことも可能ですが、
252                 パース速度は gettext ファイルより遅くなります。
253             </para>
255             <para>
256                 中規模から大規模の会社はこのアダプタを使用します。
257                 ファイルは可読形式で、システムに依存しない形式になります。
258             </para>
259         </sect3>
261         <sect3 id="zend.translate.adapter.qt">
262             <title>Zend_Translate_Adapter_Qt</title>
264             <para>
265                 Qt アダプタは、QtLinguist で作成した TS
266                 ファイル形式の翻訳を使用している顧客が使用します。
267                 QT は <acronym>XML</acronym> 形式のフォーマットです。
268                 <acronym>XML</acronym> ファイルは人間が読むことも可能ですが、
269                 パース速度は gettext ファイルより遅くなります。
270             </para>
272             <para>
273                 大手企業の中には QT フレームワークを使用したソフトウェアを作成しているところがあります。
274                 ファイルは可読形式で、システムに依存しない形式になります。
275             </para>
276         </sect3>
278         <sect3 id="zend.translate.adapter.xliff">
279             <title>Zend_Translate_Adapter_Xliff</title>
281             <para>
282                 Xliff アダプタは、<acronym>XML</acronym> ファイルを使用したいけれど
283                 TMX 用のツールを持っていないという顧客などが使用します。
284                 XLIFF は <acronym>XML</acronym> 形式のフォーマットで、
285                 TMX と関連していますがもうすこしシンプルです。機能も一部限定されています。
286                 <acronym>XML</acronym> ファイルは人間が読むことも可能ですが、
287                 パース速度は gettext ファイルより遅くなります。
288             </para>
290             <para>
291                 中規模の会社はこのアダプタを使用します。
292                 ファイルは可読形式で、システムに依存しない形式になります。
293             </para>
294         </sect3>
296         <sect3 id="zend.translate.adapter.xmltm">
297             <title>Zend_Translate_Adapter_XmlTm</title>
299             <para>
300                 XmlTm アダプタは、すでにこのレイアウトを採用している顧客が使用するアダプタです。
301                 XmlTm は、html ソース全体を翻訳ソースに含めることのできるフォーマットで、
302                 翻訳とレイアウトがひとつにまとまります。
303                 XLIFF は <acronym>XML</acronym> ベースのフォーマットです。XLIFF
304                 と関連していますが、それほど読みやすくはありません。
305             </para>
307             <para>
308                 このアダプタは、すでにソースファイルが存在する場合にのみ使用するようにしましょう。
309                 ファイルは可読形式で、システムに依存しない形式になります。
310             </para>
311         </sect3>
313     </sect2>
315     <sect2 id="zend.translate.adapter.selfwritten">
316         <title>自作のアダプタの組み込み</title>
318         <para>
319             <classname>Zend_Translate</classname> に、自作のアダプタクラスを組み込むこともできます。
320             これは、<classname>Zend_Translate</classname> に組み込まれている標準のアダプタクラスと同様に使用できます。
321         </para>
323         <para>
324             <classname>Zend_Translate</classname> で使用するアダプタクラスは、
325             <classname>Zend_Translate_Adapter</classname> のサブクラスでなければなりません。
326             <classname>Zend_Translate_Adapter</classname> は抽象クラスであり、翻訳に必要なものをすべて定義しています。
327             あなたがすべきことは、翻訳データの読み込み方法を定義することだけです。
328         </para>
330         <para>
331             名前の先頭に "Zend" をつけることができるのは Zend_Framework
332             内のパッケージだけです。<classname>Zend_Translate</classname> で使うためのアダプタを自作する場合は、
333             その名前はたとえば "Company_Translate_Adapter_MyFormat" のようにする必要があります。
334             次のコードは、独自のアダプタクラスを実装する例を示すものです。
335         </para>
337         <programlisting language="php"><![CDATA[
338 try {
339     $translate = new Zend_Translate(
340         array(
341             'adapter' => 'Company_Translate_Adapter_MyFormat',
342             'content' => '/path/to/translate.xx',
343             'locale'  => 'en',
344             'myoption' => 'myvalue'
345         )
346     );
347 } catch (Exception $e) {
348     // ファイルが見つからない、アダプタクラスが存在しない、……
349     // などの一般的なエラー
351 ]]></programlisting>
353     </sect2>
355     <sect2 id="zend.translate.adapter.caching">
356         <title>全アダプタの高速化</title>
358         <para>
359             <classname>Zend_Translate</classname> では、内部的に <classname>Zend_Cache</classname>
360             を使用して翻訳ソースの読み込みを高速化できます。
361             これは、多数の翻訳ソースを使用していたり
362             <acronym>XML</acronym> ベースの複雑なソース形式を使用していたりする場合に非常に便利です。
363         </para>
365         <para>
366             キャッシュ機能を使用するには、キャッシュオブジェクトを
367             <methodname>Zend_Translate::setCache()</methodname> メソッドで渡します。
368             このメソッドの唯一のパラメータには
369             <classname>Zend_Cache</classname> のインスタンスを指定します。
370             また、任意のアダプタを直接使用するには
371             <methodname>setCache()</methodname> メソッドを使用します。
372             利便性を考慮して、静的メソッド
373             <methodname>getCache()</methodname>、<methodname>hasCache()</methodname>、<methodname>clearCache()</methodname> および
374             <methodname>removeCache()</methodname> も用意されています。
375         </para>
377         <programlisting language="php"><![CDATA[
378 $cache = Zend_Cache::factory('Core',
379                              'File',
380                              $frontendOptions,
381                              $backendOptions);
382 Zend_Translate::setCache($cache);
383 $translate = new Zend_Translate(
384     array(
385         'adapter' => 'gettext',
386         'content' => '/path/to/translate.mo',
387         'locale'  => 'en'
388     )
390 ]]></programlisting>
392         <note>
393             <para>
394                 キャッシュの設定は、アダプタや
395                 <classname>Zend_Translate</classname> のインスタンスを使用したり初期化したりする
396                 <emphasis>前</emphasis> に行わなければなりません。
397                 さもないと、新たなソースを
398                 <methodname>addTranslation()</methodname> メソッドで追加するまで
399                 翻訳ソースのキャッシュは行われません。
400             </para>
401         </note>
402     </sect2>
403 </sect1>
404 <!--
405 vim:se ts=4 sw=4 et: