[GENERIC] Zend_Translate:
[zend.git] / documentation / manual / ja / module_specs / Zend_View-Helpers-Translate.xml
bloba20906f7d283d3b983ba8945d7471b57166c08ea
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- Reviewed: no -->
3 <!-- EN-Revision: 21741 -->
4 <sect3 id="zend.view.helpers.initial.translate">
6     <title>翻訳ヘルパー</title>
8     <para>
9         ウェブサイトを複数言語で提供することもよくあります。
10         サイト上のコンテンツを翻訳するには、
11         <link linkend="zend.translate.introduction">Zend_Translate</link>
12         を使用します。 <classname>Zend_Translate</classname> をビューと統合するために使用するのが
13         <emphasis>Translate</emphasis> ビューヘルパーです。
14     </para>
16     <para>
17         これ以降のすべての例では、単純は配列翻訳アダプタを使用します。
18         もちろん <classname>Zend_Translate</classname> の任意のインスタンスやお好みの
19         <classname>Zend_Translate_Adapter</classname> のサブクラスを使うことも可能です。
20         <emphasis>Translate</emphasis> ビューヘルパーのインスタンスを作成するにはいくつかの方法があります。
21     </para>
23     <itemizedlist>
24         <listitem>
25             <para>
26                 事前に <classname>Zend_Registry</classname> に登録済みのインスタンスを使用する
27             </para>
28         </listitem>
29         <listitem>
30             <para>
31                 流れるようなインターフェイスで後から追加する
32             </para>
33         </listitem>
34         <listitem>
35             <para>
36                 クラスのインスタンスの作成時に直接指定する
37             </para>
38         </listitem>
39     </itemizedlist>
41     <para>
42         登録済みの <classname>Zend_Translate</classname> のインスタンスを使用する方法をおすすめします。
43         アダプタをレジストリに追加する際に、使用するロケールを選択できます。
44     </para>
46     <note>
47         <para>
48             ここで言語ではなくロケールと言っているのは、
49             言語には地域を含む可能性があるからです。
50             たとえば英語は様々な地域で話されています。
51             イギリス英語やアメリカ英語など複数の翻訳が存在します。
52             そこで、ここでは "言語" と言わずに "ロケール" としているのです。
53         </para>
54     </note>
56     <example id="zend.view.helpers.initial.translate.registered">
58         <title>登録済みのインスタンス</title>
60         <para>
61             登録済みのインスタンスを使用するには、まず <classname>Zend_Translate</classname> あるいは
62             <classname>Zend_Translate_Adapter</classname> のインスタンスを作成し、
63             それを <classname>Zend_Registry</classname> に登録します。登録する際のキーとして
64             <classname>Zend_Translate</classname> を使用します。
65         </para>
67         <programlisting language="php"><![CDATA[
68 // サンプルアダプタ
69 $adapter = new Zend_Translate(
70     array(
71         'adapter' => 'array',
72         'content' => array('simple' => 'einfach'),
73         'locale'  => 'de'
74     )
76 Zend_Registry::set('Zend_Translate', $adapter);
78 // ビューの中で
79 echo $this->translate('simple');
80 // これは 'einfach' を返します
81 ]]></programlisting>
83     </example>
85     <para>
86         流れるようなインターフェイスのほうがなじみがあるという場合は、
87         ビューの中でインスタンスを作成し、ヘルパーのインスタンスは後で作成することもできます。
88     </para>
90     <example id="zend.view.helpers.initial.translate.afterwards">
92         <title>ビューの中で</title>
94         <para>
95             流れるようなインターフェイスで <classname>Zend_Translate</classname> あるいは
96             <classname>Zend_Translate_Adapter</classname> のインスタンスを作成するには、
97             パラメータを指定せずにヘルパーをコールし、それから
98             <methodname>setTranslator()</methodname> メソッドをコールします。
99         </para>
101         <programlisting language="php"><![CDATA[
102 // ビューの中で
103 $adapter = new Zend_Translate(
104     array(
105         'adapter' => 'array',
106         'content' => array('simple' => 'einfach'),
107         'locale'  => 'de'
108     )
110 $this->translate()->setTranslator($adapter)->translate('simple');
111 // これは 'einfach' を返します
112 ]]></programlisting>
114     </example>
116     <para>
117         ヘルパーを <classname>Zend_View</classname> なしで使用すると、
118         ヘルパーを直接使用することもできます。
119     </para>
121     <example id="zend.view.helpers.initial.translate.directly">
123         <title>直接使用する方法</title>
125         <programlisting language="php"><![CDATA[
126 // サンプルアダプタ
127 $adapter = new Zend_Translate(
128     array(
129         'adapter' => 'array',
130         'content' => array('simple' => 'einfach'),
131         'locale'  => 'de'
132     )
135 // アダプタを初期化します
136 $translate = new Zend_View_Helper_Translate($adapter);
137 print $translate->translate('simple'); // これは 'einfach' を返します
138 ]]></programlisting>
140         <para>
141             <classname>Zend_View</classname> は使わないけれど、
142             翻訳した結果がほしいという場合にこの方式を使用します。
143         </para>
145     </example>
147     <para>
148         これまで見てきたように、<methodname>translate()</methodname> メソッドは翻訳を返します。
149         翻訳アダプタのメッセージ ID を指定してこれをコールします。
150         さらに、翻訳文字列の中のパラメータを置換することも可能です。
151         パラメータの値を指定する方法には二通りあります。
152         パラメータのリストを指定する方法か、あるいはパラメータの配列を指定する方法です。
153         たとえば次のようになります。
154     </para>
156     <example id="zend.view.helpers.initial.translate.parameter">
158         <title>単一のパラメータ</title>
160         <para>
161             単一のパラメータを使用するには、単にそれをメソッドに追加します。
162         </para>
164         <programlisting language="php"><![CDATA[
165 // ビューの中で
166 $date = "Monday";
167 $this->translate("Today is %1\$s", $date);
168 // これは 'Heute ist Monday' を返します
169 ]]></programlisting>
171     </example>
173     <note>
174         <para>
175             パラメータの値にテキストを使用する場合は、
176             このパラメータの値も翻訳しなければならないことに注意しましょう。
177         </para>
178     </note>
180     <example id="zend.view.helpers.initial.translate.parameterlist">
182         <title>パラメータのリスト</title>
184         <para>
185             パラメータのリストを使用して、それをメソッドに追加することもできます。
186         </para>
188         <programlisting language="php"><![CDATA[
189 // ビューの中で
190 $date = "Monday";
191 $month = "April";
192 $time = "11:20:55";
193 $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s",
194                  $date,
195                  $month,
196                  $time);
197 // これは 'Heute ist Monday in April. Aktuelle Zeit: 11:20:55' を返します
198 ]]></programlisting>
200     </example>
202     <example id="zend.view.helpers.initial.translate.parameterarray">
204         <title>パラメータの配列</title>
206         <para>
207             パラメータの配列を使用して、それをメソッドに追加することもできます。
208         </para>
210         <programlisting language="php"><![CDATA[
211 // ビューの中で
212 $date = array("Monday", "April", "11:20:55");
213 $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date);
214 // これは 'Heute ist Monday in April. Aktuelle Zeit: 11:20:55' を返します
215 ]]></programlisting>
217     </example>
219     <para>
220         翻訳のロケールを変更しなければならないこともあるでしょう。
221         翻訳単位で動的に変更することもできますが、
222         静的に変更してそれ以降のすべての翻訳に適用させることもできます。
223         そして、パラメータリスト型あるいはパラメータ配列型のどちらの形式でもそれを使用できます。
224         どひらの形式の場合も、ロケールは最後のパラメータとして指定します。
225     </para>
227     <example id="zend.view.helpers.initial.translate.dynamic">
229         <title>ロケールの動的な変更</title>
231         <programlisting language="php"><![CDATA[
232 // ビューの中で
233 $date = array("Monday", "April", "11:20:55");
234 $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date, 'it');
235 ]]></programlisting>
237     </example>
239     <para>
240         この例は、指定したメッセージ ID に対応するイタリア語の翻訳を返します。
241         しかし、イタリア語を返すのはこのときだけです。
242         次の翻訳では、アダプタに設定されているロケールを使用します。
243         通常は、使用したいロケールを翻訳アダプタに設定してからレジストリに追加します。
244         しかし、ロケールの設定をヘルパー内で行うこともできます。
245     </para>
247     <example id="zend.view.helpers.initial.translate.static">
249         <title>ロケールの静的な変更</title>
251         <programlisting language="php"><![CDATA[
252 // ビューの中で
253 $date = array("Monday", "April", "11:20:55");
254 $this->translate()->setLocale('it');
255 $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date);
256 ]]></programlisting>
258     </example>
260     <para>
261         上の例では新しいデフォルトロケールとして <emphasis>'it'</emphasis>
262         を設定しており、これ以降の翻訳ではこのロケールを使用します。
263     </para>
265     <para>
266         もちろん、現在設定されているロケールを取得するためのメソッド
267         <methodname>getLocale()</methodname> もあります。
268     </para>
270     <example id="zend.view.helpers.initial.translate.getlocale">
272         <title>現在設定されているロケールの取得</title>
274         <programlisting language="php"><![CDATA[
275 // ビューの中で
276 $date = array("Monday", "April", "11:20:55");
278 // これまでの例で設定されているデフォルトロケールである 'de' を返します
279 $this->translate()->getLocale();
281 $this->translate()->setLocale('it');
282 $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date);
284 // 新たに設定されたデフォルトロケールである 'it' を返します
285 $this->translate()->getLocale();
286 ]]></programlisting>
288     </example>
290 </sect3>
291 <!--
292 vim:se ts=4 sw=4 et: