1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 21661 -->
4 <sect1 id="zend.translate.sourcecreation">
6 <title>ソースファイルの作成</title>
9 <classname>Zend_Translate</classname> で使用できる
10 さまざまなソース形式についての説明を以下で行います。
15 大半のフォーマットは、何らかのツールを用いて生成しなければならないことに注意しましょう。
16 そのツールについては Zend Framework には含まれていません。
17 ほとんどのフォーマットについてはフリーの生成ツールが存在します。
21 <sect2 id="zend.translate.sourcecreation.array">
23 <title>Array ソースファイルの作成</title>
26 Array ソースファイルは、単なる配列です。
27 しかし、専用のツールはないので自分でそれを定義しなければなりません。
29 コードが期待通りに動作しているかを確認するのにも最も手っ取り早いでしょう。
30 翻訳作業を始めるにあたっては、一般的に最適なアダプタであるといえます。
33 <programlisting language="php"><![CDATA[
35 'message1' => 'message1',
36 'message2' => 'message2',
37 'message3' => 'message3');
40 'message1' => 'Nachricht1',
41 'message2' => 'Nachricht2',
42 'message3' => 'Nachricht3');
44 $translate = new Zend_Translate(
47 'content' => $english,
51 $translate->addTranslation(array('content' => $deutsch, 'locale' => 'de'));
55 リリース 1.5 以降では、配列を外部のファイルに含めることもサポートしています。
56 ファイル名を指定すると、 <classname>Zend_Translate</classname>
57 が自動的にそれをインクルードして配列を探します。
61 <programlisting language="php"><![CDATA[
64 'message1' => 'Nachricht1',
65 'message2' => 'Nachricht2',
66 'message3' => 'Nachricht3');
69 $translate = new Zend_Translate(
72 'content' => '/path/to/myarray.php',
80 配列を返さないファイルはインクルードできません。
81 また、このファイル内での出力はすべて無視されます。
88 <sect2 id="zend.translate.sourcecreation.gettext">
90 <title>Gettext ソースファイルの作成</title>
93 Gettext ソースファイルは、GNU の gettext ライブラリで作成します。
94 あなたのコードをパースして gettext ソースファイルを作成してくれるツールが、
95 フリーで公開されています。このファイルは、拡張子が
96 <emphasis>*.mo</emphasis> のバイナリファイルとなります。
97 ファイルを作成するためのフリーソフトウェアのひとつに
98 <ulink url="http://sourceforge.net/projects/poedit/">poEdit</ulink>
99 があります。これは、ファイルの作成だけでなく翻訳作業自体もサポートしています。
102 <programlisting language="php"><![CDATA[
103 // mo ファイルを作成し、翻訳を済ませているものとします
104 $translate = new Zend_Translate(
106 'adapter' => 'gettext',
107 'content' => '/path/to/english.mo',
111 $translate->addTranslation(
113 'content' => '/path/to/german.mo',
120 ご覧の通り、アダプタの使用法はまったく同じです。
122 <emphasis>array</emphasis> が <emphasis>gettext</emphasis>
124 その他の部分は、どのアダプタを使用してもまったく同じになります。
125 gettext アダプタを使用する際には、
126 gettext の標準的なディレクトリ構造や bindtextdomain、
127 textdomain にこだわる必要はありません。
128 単にパスとファイル名をアダプタに渡せばいいのです。
133 ソースのエンコーディングには常に UTF-8
134 を使用しなければなりません。そうしないと、
135 複数のソースエンコーディングを使用することで問題が発生します。
136 たとえば、あるソースファイルは ISO-8815-11 でエンコードされており、
137 他のファイルは CP815 でエンコードされているとしましょう。
138 ソースファイルのエンコーディングはひとつしか指定できないので、
139 どちらか一方は正しく表示されなくなります。
143 UTF-8 は可搬性の高いフォーマットで、全言語をサポートしています。
144 すべての言語で UTF-8 を使用することで、
145 エンコーディングの非互換性による問題をなくすことができます。
151 空の翻訳文字列という形式で追加情報を記録します。
152 そのため、gettext アダプタは空の文字列の翻訳を行いません。
153 これらの情報は翻訳テーブルからは削除され、かわりに
154 <methodname>getAdapterInfo()</methodname> メソッドで取得できるようになります。
155 このメソッドは、追加された gettext
156 ファイルすべてから取得した情報を配列で返します。
160 <programlisting language="php"><![CDATA[
162 $translate = new Zend_Translate(
164 'adapter' => 'gettext',
165 'content' => '/path/to/english.mo',
169 print_r($translate->getAdapterInfo());
174 <sect2 id="zend.translate.sourcecreation.tmx">
176 <title>TMX ソースファイルの作成</title>
179 TMX ソースファイルは、新しい業界標準です。
180 <acronym>XML</acronym> ファイルを使用しているので、どんなエディタでも読み込め、
181 かつ人間にも読める形式であるという利点があります。
182 TMX ファイルはテキストエディタで作成することもできますし、
183 ツールを用いて作成することもできます。しかし、
184 現在使用できる TMX ソースファイル作成ツールの多くは
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">
195 <header creationtoolversion="1.0.0" datatype="winres" segtype="sentence"
196 adminlang="en-us" srclang="de-at" o-tmf="abc"
197 creationtool="XYZTool" >
201 <tuv xml:lang="de"><seg>Nachricht1</seg></tuv>
202 <tuv xml:lang="en"><seg>message1</seg></tuv>
205 <tuv xml:lang="de"><seg>Nachricht2</seg></tuv>
206 <tuv xml:lang="en"><seg>message2</seg></tuv>
212 <programlisting language="php"><![CDATA[
213 $translate = new Zend_Translate(
216 'content' => 'path/to/mytranslation.tmx',
224 TMX ファイルには、同一ファイルに複数の言語を含めることができます。
225 含まれている言語はすべて自動的に追加されるので、
226 <methodname>addLanguage()</methodname> をコールする必要はありません。
230 ソース中の特定の言語のみを翻訳対象としたい場合は、オプション
231 '<code>defined_language</code>' を <constant>TRUE</constant>
232 に設定します。このオプションを指定した場合は、
233 対象としたい言語を <methodname>addLanguage()</methodname>
234 で明示的に指定します。このオプションのデフォルト設定は、
238 <!-- TODO : to be translated -->
240 <title>Option useId</title>
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.
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.
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.
262 <sect2 id="zend.translate.sourcecreation.csv">
264 <title>CSV ソースファイルの作成</title>
267 CSV ソースファイルは、サイズが小さく可読性があります。
269 おそらく CSV アダプタを使用することになるでしょう。
272 <example id="zend.translate.sourcecreation.csv.example">
273 <title>CSV ファイルの例</title>
275 <programlisting language="txt"><![CDATA[
281 <programlisting language="php"><![CDATA[
282 $translate = new Zend_Translate(
285 'content' => '/path/to/mytranslation.csv',
289 $translate->addTranslation(array('content' => 'path/to/other.csv', 'locale' => 'fr'));
294 CSV アダプタで使用できるオプションは、
295 '<code>delimiter</code>' と '<code>limit</code>' そして
296 '<code>enclosure</code>' の 3 つです。
300 CSV 文字列の標準の区切り文字は '<code>;</code>' 記号です
303 訳注: カンマ以外で区切ったら、もはや CSV でも何でもないのですが、
304 そのあたりはあまり気にしない方向で :-)
307 が、オプション '<code>delimiter</code>' を使用すると、
312 CSV ファイルのデフォルトの行長制限は '<code>0</code>' です。
313 この場合は、CSV ファイルの行末を自動的に検出します。
314 '<code>limit</code>' オプションに何らかの値を設定すると
315 CSV ファイルの読み込みが高速になりますが、
320 CSV ファイルの値を囲む文字のデフォルトは '<code>"</code>' です。
321 別の文字を使用する場合は '<code>enclosure</code>' オプションを設定します。
324 <example id="zend.translate.sourcecreation.csv.example2">
325 <title>CSV ファイルの例 その 2</title>
327 <programlisting language="txt"><![CDATA[
329 "message,1",Nachricht1
330 message2,"Nachricht,2"
331 "message3,",Nachricht3
334 <programlisting language="php"><![CDATA[
335 $translate = new Zend_Translate(
338 'content' => '/path/to/mytranslation.csv',
344 $translate->addTranslation(
346 'content' => '/path/to/other.csv',
356 CSV ファイルで非 ASCII 文字 (ウムラウトや UTF-8 文字など) を使用する場合は、
357 値を囲んでおく必要があります。値を囲むのを省略すると、
358 翻訳で文字が失われてしまったりする可能性があります。
365 <sect2 id="zend.translate.sourcecreation.ini">
367 <title>INI ソースファイルの作成</title>
370 <acronym>INI</acronym> ソースファイルは可読性がありますが、
371 翻訳以外のデータを含めるとサイズはそれほど小さくなりません。
372 直接顧客に変更させるようなデータの場合にも
373 <acronym>INI</acronym> アダプタが使えるでしょう。
376 <example id="zend.translate.sourcecreation.ini.example">
377 <title>INI ファイルの例</title>
379 <programlisting language="txt"><![CDATA[
382 Message_1="Nachricht 1 (de)"
383 Message_2="Nachricht 2 (de)"
384 Message_3="Nachricht :3 (de)"
387 <programlisting language="php"><![CDATA[
388 $translate = new Zend_Translate(
391 'content' => '/path/to/mytranslation.ini',
395 $translate->addTranslation(
397 'content' => '/path/to/other.ini',
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>{}|&~![()"</code> といった文字はキーの中では使えず、
415 また値の中で使用すると特別な意味を持つことになります。
416 予期せぬ挙動を起こすようなら、このアダプタを使わないようにしましょう。