1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 21741 -->
4 <sect3 id="zend.view.helpers.initial.translate">
9 ウェブサイトを複数言語で提供することもよくあります。
11 <link linkend="zend.translate.introduction">Zend_Translate</link>
12 を使用します。 <classname>Zend_Translate</classname> をビューと統合するために使用するのが
13 <emphasis>Translate</emphasis> ビューヘルパーです。
17 これ以降のすべての例では、単純は配列翻訳アダプタを使用します。
18 もちろん <classname>Zend_Translate</classname> の任意のインスタンスやお好みの
19 <classname>Zend_Translate_Adapter</classname> のサブクラスを使うことも可能です。
20 <emphasis>Translate</emphasis> ビューヘルパーのインスタンスを作成するにはいくつかの方法があります。
26 事前に <classname>Zend_Registry</classname> に登録済みのインスタンスを使用する
31 流れるようなインターフェイスで後から追加する
42 登録済みの <classname>Zend_Translate</classname> のインスタンスを使用する方法をおすすめします。
43 アダプタをレジストリに追加する際に、使用するロケールを選択できます。
48 ここで言語ではなくロケールと言っているのは、
51 イギリス英語やアメリカ英語など複数の翻訳が存在します。
52 そこで、ここでは "言語" と言わずに "ロケール" としているのです。
56 <example id="zend.view.helpers.initial.translate.registered">
58 <title>登録済みのインスタンス</title>
61 登録済みのインスタンスを使用するには、まず <classname>Zend_Translate</classname> あるいは
62 <classname>Zend_Translate_Adapter</classname> のインスタンスを作成し、
63 それを <classname>Zend_Registry</classname> に登録します。登録する際のキーとして
64 <classname>Zend_Translate</classname> を使用します。
67 <programlisting language="php"><![CDATA[
69 $adapter = new Zend_Translate(
72 'content' => array('simple' => 'einfach'),
76 Zend_Registry::set('Zend_Translate', $adapter);
79 echo $this->translate('simple');
80 // これは 'einfach' を返します
86 流れるようなインターフェイスのほうがなじみがあるという場合は、
87 ビューの中でインスタンスを作成し、ヘルパーのインスタンスは後で作成することもできます。
90 <example id="zend.view.helpers.initial.translate.afterwards">
95 流れるようなインターフェイスで <classname>Zend_Translate</classname> あるいは
96 <classname>Zend_Translate_Adapter</classname> のインスタンスを作成するには、
97 パラメータを指定せずにヘルパーをコールし、それから
98 <methodname>setTranslator()</methodname> メソッドをコールします。
101 <programlisting language="php"><![CDATA[
103 $adapter = new Zend_Translate(
105 'adapter' => 'array',
106 'content' => array('simple' => 'einfach'),
110 $this->translate()->setTranslator($adapter)->translate('simple');
111 // これは 'einfach' を返します
117 ヘルパーを <classname>Zend_View</classname> なしで使用すると、
121 <example id="zend.view.helpers.initial.translate.directly">
123 <title>直接使用する方法</title>
125 <programlisting language="php"><![CDATA[
127 $adapter = new Zend_Translate(
129 'adapter' => 'array',
130 'content' => array('simple' => 'einfach'),
136 $translate = new Zend_View_Helper_Translate($adapter);
137 print $translate->translate('simple'); // これは 'einfach' を返します
141 <classname>Zend_View</classname> は使わないけれど、
142 翻訳した結果がほしいという場合にこの方式を使用します。
148 これまで見てきたように、<methodname>translate()</methodname> メソッドは翻訳を返します。
149 翻訳アダプタのメッセージ ID を指定してこれをコールします。
150 さらに、翻訳文字列の中のパラメータを置換することも可能です。
151 パラメータの値を指定する方法には二通りあります。
152 パラメータのリストを指定する方法か、あるいはパラメータの配列を指定する方法です。
156 <example id="zend.view.helpers.initial.translate.parameter">
158 <title>単一のパラメータ</title>
161 単一のパラメータを使用するには、単にそれをメソッドに追加します。
164 <programlisting language="php"><![CDATA[
167 $this->translate("Today is %1\$s", $date);
168 // これは 'Heute ist Monday' を返します
175 パラメータの値にテキストを使用する場合は、
176 このパラメータの値も翻訳しなければならないことに注意しましょう。
180 <example id="zend.view.helpers.initial.translate.parameterlist">
182 <title>パラメータのリスト</title>
185 パラメータのリストを使用して、それをメソッドに追加することもできます。
188 <programlisting language="php"><![CDATA[
193 $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s",
197 // これは 'Heute ist Monday in April. Aktuelle Zeit: 11:20:55' を返します
202 <example id="zend.view.helpers.initial.translate.parameterarray">
204 <title>パラメータの配列</title>
207 パラメータの配列を使用して、それをメソッドに追加することもできます。
210 <programlisting language="php"><![CDATA[
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' を返します
220 翻訳のロケールを変更しなければならないこともあるでしょう。
221 翻訳単位で動的に変更することもできますが、
222 静的に変更してそれ以降のすべての翻訳に適用させることもできます。
223 そして、パラメータリスト型あるいはパラメータ配列型のどちらの形式でもそれを使用できます。
224 どひらの形式の場合も、ロケールは最後のパラメータとして指定します。
227 <example id="zend.view.helpers.initial.translate.dynamic">
229 <title>ロケールの動的な変更</title>
231 <programlisting language="php"><![CDATA[
233 $date = array("Monday", "April", "11:20:55");
234 $this->translate("Today is %1\$s in %2\$s. Actual time: %3\$s", $date, 'it');
240 この例は、指定したメッセージ ID に対応するイタリア語の翻訳を返します。
241 しかし、イタリア語を返すのはこのときだけです。
242 次の翻訳では、アダプタに設定されているロケールを使用します。
243 通常は、使用したいロケールを翻訳アダプタに設定してからレジストリに追加します。
244 しかし、ロケールの設定をヘルパー内で行うこともできます。
247 <example id="zend.view.helpers.initial.translate.static">
249 <title>ロケールの静的な変更</title>
251 <programlisting language="php"><![CDATA[
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);
261 上の例では新しいデフォルトロケールとして <emphasis>'it'</emphasis>
262 を設定しており、これ以降の翻訳ではこのロケールを使用します。
266 もちろん、現在設定されているロケールを取得するためのメソッド
267 <methodname>getLocale()</methodname> もあります。
270 <example id="zend.view.helpers.initial.translate.getlocale">
272 <title>現在設定されているロケールの取得</title>
274 <programlisting language="php"><![CDATA[
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();