0

私はZendフレームワークの新人で、現在Zend2に取り組んでいます... Zendフォームでのトランスレーターの使用について尋ねたいです....フォームビューのラベルに直接使用するトランスレーターを使用したい場合は、ieform_view.phpのように

$this->formLabel()->setTranslator($translator, 'date_of_birth');

しかし、私は src/my_module/Form/UserForm.php のような形でのみ翻訳者を追加したい

$this->add(array(
        'name' => 'date_of_birth',
        'attributes' => array(
            'type'  => 'text',
            'id' => 'date_of_birth',
        ),
        'options' => array(
            'label' => 'DateOfBirth',
        ),                                 //Here there is any option to put translator
    ));

私を助けてください...私が尋ねたように、どんな答えでも私にとって助けになるでしょう

前もって感謝します

4

3 に答える 3

2

あなたは本当にそれをする必要はありません。factory-key を使用して設定された Translatortranslatorは自動的に Form に挿入されるためです。

(私の意見では) 最善の方法は、トランスレータを多用することですtext_domain:

'translator' => array(
    'locale' => 'de_DE',
    'translation_file_patterns' => array(
        array(
            'type'        => 'phparray',
            'base_dir'    => __DIR__ . '/../language',
            'pattern'     => '%s.php',
            'text_domain' => 'MyModuleTextDomain'
        ),
    ),
),

このセットアップでは、モジュールのファイルは、すべての Zend\Form が認識しているデフォルトの TranslatorService に自動的に挿入されます。

したがって、最終的に必要なのは、使用している をViewHelpers知るTextDomainことだけです。そして、これは次の方法で行われます。

$this->formLabel()->setTranslatorTextDomain('MyModuleTextDomain');
$this->formButton()->setTranslatorTextDomain('MyModuleTextDomain');
$this->formElementErrors()->setTranslatorTextDomain('MyModuleTextDomain');

またはview.phtmlのような ViewHelpers を使用して、それぞれの before(!) 内でこれを行う必要があります$this->formElement($element)$this->formCollection($form)

それだけです。Text-Domain-Data の受け渡しを容易にするという議論をどこかで見たことを思い出しましたが、今は見つかりません。ですから、将来はもう少し簡単になるかもしれません ;) 今のところ、必要なのは 3 行だけです!

于 2013-06-12T11:18:24.130 に答える
1

上記の回答はまったく不要です...フォームラベルをレンダリングするために翻訳者が自動的にzendフォームに追加され、....モジュール構成でこのコードのみを使用するためです。

'translator' => array(
        'locale' => 'en_US',
        'translation_file_patterns' => array(
            array(
                'type'     => 'phparray',
                'base_dir' => __DIR__ . '/../language',
                'pattern'  => '%s.php',
            ),
        ),
    ),

フォーム要素 (またはフォーム全体) のレンダリングに正しいビュー ヘルパーを使用すると、自動的に翻訳されます。

于 2013-02-08T14:09:27.597 に答える
0

トランスレータが設定されている場合(Skeletonアプリケーションを使用している場合)、フォームは自動的に変換されるため、これは推奨されるアプローチではありません。ただし、フォーム内で直接翻訳者を使用する方法を尋ねられたので、その方法を説明します。これが本当に必要かどうかを慎重に検討してください。必要なユースケースは想像できません。

あなたが求めていたことを正確に行うために、あなたはあなたのフォームに翻訳者を注入することができます。これは、コントローラーまたは工場で行うことができます。この例では、よりDRYであるため、ファクトリを使用します。

// In your module's config file
'service_manager' => array(
    'factories' => array(
        'YourModule\Form\YourForm' => function($sm) {
            $translator = $sm->get('Translator');
            return new \YourModule\Form\YourForm($translator);
        },
    ),
),

次に、フォームクラスで、次のように実行できます。

namespace YourModule\Form;

class RegisterForm extends \Zend\Form\Form {
    public function __construct($translator) {
        // Do something

        $translated_string = $translator->translate('string to translate');
    }
}

次に、コントローラーで次のように実行できます。

$your_form = $this->servicelocator->get('YourModule\Form\YourForm');

または、ファクトリを使用したくない場合は、ファクトリを追加せず、代わりに次のようにすることができます。

$your_form = new \YourModule\Form\YourForm($this->servicelocator->get('Translator'));

でも、工場に行くことをお勧めします。

于 2013-02-08T12:23:45.413 に答える