Programmer's Reference Guide
| Zend Framework に同梱されている標準のデコレータ |
Zend_Form の国際化
作成したコンテンツを複数の言語や地域に対応させるという作業は、 日増しに重要になってきています。 Zend_Form はそんな作業も簡単にできるように作られており、 Zend_Translate と Zend_Validate の機能を使うことで国際化を実現できます。
デフォルトでは、国際化 (i18n) は行われません。
i18n 機能を Zend_Form で使うには、まず適切なアダプタを指定して
Zend_Translate のインスタンスを作成し、それを
Zend_Form や Zend_Validate
にアタッチしなければなりません。翻訳オブジェクトや翻訳ファイルの作成方法についての詳細は
Zend_Translate
のドキュメント を参照ください。
注意: 項目単位での翻訳の無効化
個々のフォームや要素、表示グループ、サブフォームなどの単位で翻訳を無効にするには、setDisableTranslator($flag)メソッドをコールするか あるいはそのオブジェクトにオプションdisableTranslatorを渡します。これは、特定の要素 (あるいは要素群) についてだけ翻訳を無効にしたい場合に有用です。
フォームでの i18n 機能の初期化
フォームの i18n 機能を初期化するには
Zend_Translate オブジェクトあるいは
Zend_Translate_Adapter オブジェクトが必要です。詳細は
Zend_Translate のドキュメントを参照ください。
翻訳オブジェクトを作成したら、その後の手順にはいくつかの方法があります。
-
最も簡単な方法: レジストリに登録します。Zend Framework の i18n 対応コンポーネントはすべて、レジストリの 'Zend_Translate' キーに登録されている翻訳オブジェクトを自動取得して翻訳や地域化を行います。
<?php // 'Zend_Translate' キーを使用します。$translate は Zend_Translate オブジェクトです Zend_Registry::set('Zend_Translate', $translate); ?>これは、
Zend_FormやZend_ValidateそしてZend_View_Helper_Translateが使用します。 -
検証エラーのメッセージだけを翻訳したいのなら、 翻訳オブジェクトを
Zend_Validate_Abstractに登録することもできます。<?php // すべてのバリデーションクラスに、指定した翻訳アダプタを使用させます Zend_Validate_Abstract::setDefaultTranslator($translate); ?>
-
あるいは、
Zend_Formオブジェクトにアタッチしてグローバルに使用することもできます。 その副作用として、検証エラーメッセージも翻訳されます。<?php // すべてのフォームクラスで特定の翻訳アダプタを使用させます。 // このアダプタは、検証エラーメッセージの翻訳にも用いられます。 Zend_Form::setDefaultTranslator($translate); ?>
-
最後に、特定のフォームや要素のインスタンスに 翻訳オブジェクトをアタッチすることもできます。 その場合は
setTranslator()メソッドを使用します。<?php // 「この」フォームのインスタンスで特定の翻訳アダプタを使用させます。 // このアダプタは、すべての要素の検証エラーメッセージの翻訳にも用いられます。 $form->setTranslator($translate); // 「この」要素のインスタンスで特定の翻訳アダプタを使用させます。 // このアダプタは、この要素の検証エラーメッセージの翻訳にも用いられます。 $element->setTranslator($translate); ?>
標準的な I18N の対象
これで翻訳オブジェクトがアタッチできました。 デフォルトでは、いったい何が翻訳の対象となるのでしょうか?
-
検証エラーメッセージ。 検証エラーメッセージを翻訳させることができます。 そのためには、
Zend_Validateのバリデーションクラスのエラーコード定数をメッセージ ID として使用します。 エラーコードについての詳細は Zend_Validate のドキュメントを参照ください。 -
ラベル。 要素のラベルも、翻訳が存在すれば翻訳されます。
-
フィールドセットの説明 (legend)。 表示グループやサブフォームは、デフォルトでは fieldset としてレンダリングされます。Fieldset デコレータは、 レンダリングの前に legend の翻訳を試みます。
-
フォームや要素の説明。 すべての型 (要素、フォーム、表示グループ、サブフォーム) で、オプションとしてその項目の説明を指定することができます。 Description デコレータを用いて、これをレンダリングします。 その際、デフォルトでこの値の翻訳を試みます。
-
選択肢の値。
Zend_Form_Element_Multiを継承した項目 (MultiCheckbox、Multiselect および Radio 要素) で、もし翻訳がある場合に選択肢の値 (キーではありません) が翻訳の対象となります。つまり、 ユーザ向けに表示される選択肢のラベルが翻訳されるということです。 -
ボタンのラベル。 ボタン系の要素 (Button、Submit および Reset) で、ユーザ向けに表示されるラベルが翻訳されます。
| Zend Framework に同梱されている標準のデコレータ |
