[ZF-10089] Zend_Log
[zend.git] / documentation / manual / ja / module_specs / Zend_Translate-SourceCreation.xml
blobcbbab91e212cfcb993be81e87f258b433811543d
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- Reviewed: no -->
3 <!-- EN-Revision: 21661 -->
4 <sect1 id="zend.translate.sourcecreation">
6     <title>ソースファイルの作成</title>
8     <para>
9         <classname>Zend_Translate</classname> で使用できる
10         さまざまなソース形式についての説明を以下で行います。
11     </para>
13     <note>
14         <para>
15             大半のフォーマットは、何らかのツールを用いて生成しなければならないことに注意しましょう。
16             そのツールについては Zend Framework には含まれていません。
17             ほとんどのフォーマットについてはフリーの生成ツールが存在します。
18         </para>
19     </note>
21     <sect2 id="zend.translate.sourcecreation.array">
23         <title>Array ソースファイルの作成</title>
25         <para>
26             Array ソースファイルは、単なる配列です。
27             しかし、専用のツールはないので自分でそれを定義しなければなりません。
28             とは言え、この配列は非常にシンプルです。
29             コードが期待通りに動作しているかを確認するのにも最も手っ取り早いでしょう。
30             翻訳作業を始めるにあたっては、一般的に最適なアダプタであるといえます。
31         </para>
33         <programlisting language="php"><![CDATA[
34 $english = array(
35     'message1' => 'message1',
36     'message2' => 'message2',
37     'message3' => 'message3');
39 $german = array(
40     'message1' => 'Nachricht1',
41     'message2' => 'Nachricht2',
42     'message3' => 'Nachricht3');
44 $translate = new Zend_Translate(
45     array(
46         'adapter' => 'array',
47         'content' => $english,
48         'locale'  => 'en'
49     )
51 $translate->addTranslation(array('content' => $deutsch, 'locale' => 'de'));
52 ]]></programlisting>
54         <para>
55             リリース 1.5 以降では、配列を外部のファイルに含めることもサポートしています。
56             ファイル名を指定すると、 <classname>Zend_Translate</classname>
57             が自動的にそれをインクルードして配列を探します。
58             詳細は、次の例を参照ください。
59         </para>
61         <programlisting language="php"><![CDATA[
62 // myarray.php
63 return array(
64     'message1' => 'Nachricht1',
65     'message2' => 'Nachricht2',
66     'message3' => 'Nachricht3');
68 // コントローラ
69 $translate = new Zend_Translate(
70     array(
71         'adapter' => 'array',
72         'content' => '/path/to/myarray.php',
73         'locale'  => 'de'
74     )
76 ]]></programlisting>
78         <note>
79             <para>
80                 配列を返さないファイルはインクルードできません。
81                 また、このファイル内での出力はすべて無視されます。
82             </para>
84         </note>
86     </sect2>
88     <sect2 id="zend.translate.sourcecreation.gettext">
90         <title>Gettext ソースファイルの作成</title>
92         <para>
93             Gettext ソースファイルは、GNU の gettext ライブラリで作成します。
94             あなたのコードをパースして gettext ソースファイルを作成してくれるツールが、
95             フリーで公開されています。このファイルは、拡張子が
96             <emphasis>*.mo</emphasis> のバイナリファイルとなります。
97             ファイルを作成するためのフリーソフトウェアのひとつに
98             <ulink url="http://sourceforge.net/projects/poedit/">poEdit</ulink>
99             があります。これは、ファイルの作成だけでなく翻訳作業自体もサポートしています。
100         </para>
102         <programlisting language="php"><![CDATA[
103 // mo ファイルを作成し、翻訳を済ませているものとします
104 $translate = new Zend_Translate(
105     array(
106         'adapter' => 'gettext',
107         'content' => '/path/to/english.mo',
108         'locale'  => 'en'
109     )
111 $translate->addTranslation(
112     array(
113         'content' => '/path/to/german.mo',
114         'locale' => 'de'
115     )
117 ]]></programlisting>
119         <para>
120             ご覧の通り、アダプタの使用法はまったく同じです。
121             違っているのはたったの一点だけ。
122             <emphasis>array</emphasis> が <emphasis>gettext</emphasis>
123             になっているということです。
124             その他の部分は、どのアダプタを使用してもまったく同じになります。
125             gettext アダプタを使用する際には、
126             gettext の標準的なディレクトリ構造や bindtextdomain、
127             textdomain にこだわる必要はありません。
128             単にパスとファイル名をアダプタに渡せばいいのです。
129         </para>
131         <note>
132             <para>
133                  ソースのエンコーディングには常に UTF-8
134                  を使用しなければなりません。そうしないと、
135                  複数のソースエンコーディングを使用することで問題が発生します。
136                  たとえば、あるソースファイルは ISO-8815-11 でエンコードされており、
137                  他のファイルは CP815 でエンコードされているとしましょう。
138                  ソースファイルのエンコーディングはひとつしか指定できないので、
139                  どちらか一方は正しく表示されなくなります。
140             </para>
142             <para>
143                  UTF-8 は可搬性の高いフォーマットで、全言語をサポートしています。
144                  すべての言語で UTF-8 を使用することで、
145                  エンコーディングの非互換性による問題をなくすことができます。
146             </para>
147         </note>
149         <para>
150             gettext エディタの多くは、
151             空の翻訳文字列という形式で追加情報を記録します。
152             そのため、gettext アダプタは空の文字列の翻訳を行いません。
153             これらの情報は翻訳テーブルからは削除され、かわりに
154             <methodname>getAdapterInfo()</methodname> メソッドで取得できるようになります。
155             このメソッドは、追加された gettext
156             ファイルすべてから取得した情報を配列で返します。
157             ファイル名を配列のキーとして使用します。
158         </para>
160         <programlisting language="php"><![CDATA[
161 // アダプタの情報を取得する方法
162 $translate = new Zend_Translate(
163     array(
164         'adapter' => 'gettext',
165         'content' => '/path/to/english.mo',
166         'locale'  => 'en'
167     )
169 print_r($translate->getAdapterInfo());
170 ]]></programlisting>
172     </sect2>
174     <sect2 id="zend.translate.sourcecreation.tmx">
176         <title>TMX ソースファイルの作成</title>
178         <para>
179             TMX ソースファイルは、新しい業界標準です。
180             <acronym>XML</acronym> ファイルを使用しているので、どんなエディタでも読み込め、
181             かつ人間にも読める形式であるという利点があります。
182             TMX ファイルはテキストエディタで作成することもできますし、
183             ツールを用いて作成することもできます。しかし、
184             現在使用できる TMX ソースファイル作成ツールの多くは
185             フリーソフトウェアではありません。
186         </para>
188         <example id="zend.translate.sourcecreation.tmx.example">
189             <title>TMX ファイルの例</title>
191             <programlisting language="xml"><![CDATA[
192 <?xml version="1.0" ?>
193 <!DOCTYPE tmx SYSTEM "tmx14.dtd">
194 <tmx version="1.4">
195    <header creationtoolversion="1.0.0" datatype="winres" segtype="sentence"
196            adminlang="en-us" srclang="de-at" o-tmf="abc"
197            creationtool="XYZTool" >
198    </header>
199    <body>
200        <tu tuid='message1'>
201            <tuv xml:lang="de"><seg>Nachricht1</seg></tuv>
202            <tuv xml:lang="en"><seg>message1</seg></tuv>
203        </tu>
204        <tu tuid='message2'>
205            <tuv xml:lang="de"><seg>Nachricht2</seg></tuv>
206            <tuv xml:lang="en"><seg>message2</seg></tuv>
207        </tu>
208    </body>
209 </tmx>
210 ]]></programlisting>
212             <programlisting language="php"><![CDATA[
213 $translate = new Zend_Translate(
214     array(
215         'adapter' => 'tmx',
216         'content' => 'path/to/mytranslation.tmx',
217         'locale'  => 'en'
218     )
220 ]]></programlisting>
221         </example>
223         <para>
224             TMX ファイルには、同一ファイルに複数の言語を含めることができます。
225             含まれている言語はすべて自動的に追加されるので、
226             <methodname>addLanguage()</methodname> をコールする必要はありません。
227         </para>
229         <para>
230             ソース中の特定の言語のみを翻訳対象としたい場合は、オプション
231             '<code>defined_language</code>' を <constant>TRUE</constant>
232             に設定します。このオプションを指定した場合は、
233             対象としたい言語を <methodname>addLanguage()</methodname>
234             で明示的に指定します。このオプションのデフォルト設定は、
235             全言語を対象とするようになっています。
236         </para>
238         <!-- TODO : to be translated -->
239         <note>
240             <title>Option useId</title>
242             <para>
243                 When you set the <emphasis>useId</emphasis> option to <constant>FALSE</constant>
244                 then the <emphasis>srclang</emphasis> header will be used to define the language
245                 which sets the message.
246             </para>
248             <para>
249                 In our example the message key would <emphasis>message1</emphasis> per default.
250                 When this option is set to <constant>FALSE</constant> the message key
251                 <emphasis>Nachricht1</emphasis> would be used.
252             </para>
254             <para>
255                 Note that the <emphasis>tuv</emphasis> entry which is related to the
256                 <emphasis>srclang</emphasis> entry must be the first
257                 <emphasis>tuv</emphasis> entry which is set like shown in the above example.
258             </para>
259         </note>
260     </sect2>
262     <sect2 id="zend.translate.sourcecreation.csv">
264         <title>CSV ソースファイルの作成</title>
266         <para>
267             CSV ソースファイルは、サイズが小さく可読性があります。
268             顧客が自分で翻訳をしたいということなら、
269             おそらく CSV アダプタを使用することになるでしょう。
270         </para>
272         <example id="zend.translate.sourcecreation.csv.example">
273             <title>CSV ファイルの例</title>
275             <programlisting language="txt"><![CDATA[
276 # csv ファイルの例
277 message1;Nachricht1
278 message2;Nachricht2
279 ]]></programlisting>
281             <programlisting language="php"><![CDATA[
282 $translate = new Zend_Translate(
283     array(
284         'adapter' => 'csv',
285         'content' => '/path/to/mytranslation.csv',
286         'locale'  => 'de'
287     )
289 $translate->addTranslation(array('content' => 'path/to/other.csv', 'locale' => 'fr'));
290 ]]></programlisting>
291         </example>
293         <para>
294             CSV アダプタで使用できるオプションは、
295             '<code>delimiter</code>' と '<code>limit</code>' そして
296             '<code>enclosure</code>' の 3 つです。
297         </para>
299         <para>
300             CSV 文字列の標準の区切り文字は '<code>;</code>' 記号です
301             <footnote>
302                 <para>
303                     訳注: カンマ以外で区切ったら、もはや CSV でも何でもないのですが、
304                     そのあたりはあまり気にしない方向で :-)
305                 </para>
306             </footnote>。
307             が、オプション '<code>delimiter</code>' を使用すると、
308             別の区切り文字を使用できます。
309         </para>
311         <para>
312             CSV ファイルのデフォルトの行長制限は '<code>0</code>' です。
313             この場合は、CSV ファイルの行末を自動的に検出します。
314             '<code>limit</code>' オプションに何らかの値を設定すると
315             CSV ファイルの読み込みが高速になりますが、
316             その長さを超えた部分は切り捨てられます。
317         </para>
319         <para>
320             CSV ファイルの値を囲む文字のデフォルトは '<code>"</code>' です。
321             別の文字を使用する場合は '<code>enclosure</code>' オプションを設定します。
322         </para>
324         <example id="zend.translate.sourcecreation.csv.example2">
325             <title>CSV ファイルの例 その 2</title>
327             <programlisting language="txt"><![CDATA[
328 # csv ファイルの例
329 "message,1",Nachricht1
330 message2,"Nachricht,2"
331 "message3,",Nachricht3
332 ]]></programlisting>
334             <programlisting language="php"><![CDATA[
335 $translate = new Zend_Translate(
336     array(
337         'adapter' => 'csv',
338         'content' => '/path/to/mytranslation.csv',
339         'locale'  => 'de',
340         'delimiter' => ','
341     )
344 $translate->addTranslation(
345     array(
346         'content' => '/path/to/other.csv',
347         'locale' => 'fr'
348     )
350 ]]></programlisting>
351         </example>
353         <note>
355             <para>
356                 CSV ファイルで非 ASCII 文字 (ウムラウトや UTF-8 文字など) を使用する場合は、
357                 値を囲んでおく必要があります。値を囲むのを省略すると、
358                 翻訳で文字が失われてしまったりする可能性があります。
359             </para>
361         </note>
363     </sect2>
365     <sect2 id="zend.translate.sourcecreation.ini">
367         <title>INI ソースファイルの作成</title>
369         <para>
370             <acronym>INI</acronym> ソースファイルは可読性がありますが、
371             翻訳以外のデータを含めるとサイズはそれほど小さくなりません。
372             直接顧客に変更させるようなデータの場合にも
373             <acronym>INI</acronym> アダプタが使えるでしょう。
374         </para>
376         <example id="zend.translate.sourcecreation.ini.example">
377             <title>INI ファイルの例</title>
379             <programlisting language="txt"><![CDATA[
380 [Test]
381 ;TestPage Comment
382 Message_1="Nachricht 1 (de)"
383 Message_2="Nachricht 2 (de)"
384 Message_3="Nachricht :3 (de)"
385 ]]></programlisting>
387             <programlisting language="php"><![CDATA[
388 $translate = new Zend_Translate(
389     array(
390         'adapter' => 'ini',
391         'content' => '/path/to/mytranslation.ini',
392         'locale'  => 'de'
393     )
395 $translate->addTranslation(
396     array(
397         'content' => '/path/to/other.ini',
398         'locale' => 'it'
399     )
401 ]]></programlisting>
402         </example>
404         <para>
405             <acronym>INI</acronym> にはいくつかの制約があります。
406             <acronym>INI</acronym> ファイルの値に非英数字が含まれる場合は、値をダブルクォート (<code>"</code>)
407             で囲まなければなりません。また、ini ファイルのキーとしては使えない予約語があります。
408             予約語には <constant>NULL</constant>, <code>yes</code>, <code>no</code>, <constant>TRUE</constant>
409             そして <constant>FALSE</constant> があります。
410             値に <constant>NULL</constant>, <code>no</code> および <constant>FALSE</constant>
411             を指定するとそれは <code>""</code>
412             と同じ扱いとなり、<code>yes</code> と <constant>TRUE</constant> を指定するとそれは
413             <code>1</code> と同じ扱いとなります。
414             <code>{}|&amp;~![()"</code> といった文字はキーの中では使えず、
415             また値の中で使用すると特別な意味を持つことになります。
416             予期せぬ挙動を起こすようなら、このアダプタを使わないようにしましょう。
417         </para>
419     </sect2>
421 </sect1>
422 <!--
423 vim:se ts=4 sw=4 et: