8

私はそれを得ていません! ..誰かがフォームラベルを翻訳する方法を説明してもらえますか? 簡単な例は素晴らしいでしょう。

前もって感謝します!


クラス検索\フォーム\コース検索フォーム

...

class CourseSearchForm extends Form {

    ...

    public function __construct(array $cities) {
        parent::__construct('courseSearch');
        ...
        $this->add(array(
            'name' => 'city',
            'type'  => 'Zend\Form\Element\Select',
            'options' => array(
                'label' => 'Stadt',
                'value_options' => $this->cities,
                'id'  => 'searchFormCity',
            ),
        ));
        ...
    }
}

ビュー スクリプト /module/Search/view/sea​​rch/search/search-form.phtml

<?php echo $this->form()->openTag($form); ?>
<dl>
    ...
    <dt><label><?php echo $form->get('city')->getLabel(); ?></label></dt>
    <dd><?php echo $this->formRow($form->get('city'), null, false, false); ?></dd>
    ...
</dl>
<?php echo $this->form()->closeTag(); ?>
<!-- The formRow(...) is my MyNamespace\Form\View\Helper (extends Zend\Form\View\Helper\FormRow); the fourth argument of it disables the label. -->

は次のmodule/Application/config/module.config.phpように構成されています。

return array(
    'router' => ...
    'service_manager' => array(
        'factories' => array(
            'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
        ),
    ),
    'translator' => array(
        'locale' => 'de_DE',
        'translation_file_patterns' => array(
            array(
                'type'     => 'gettext',
                'base_dir' => __DIR__ . '/../language',
                'pattern'  => '%s.mo',
            ),
        ),
    ),
    'controllers' => ...
    'view_manager' => ...
);

ビューも編集し、FormLabelビュー ヘルパーを使用します。

<dt><label><?php echo $this->formLabel($form->get('city')); ?></label></dt>

さらにFormLabel、翻訳者が使用されている場所 (行116-120 ) でデバッグしましたが、問題ないようです。

しかし、それはまだ機能していません。


編集

de_DE.po手動でファイルに追加したラベルの (テスト) アイテムが翻訳されます。ZF2 側の問題は、実際にはビュー スクリプト$form->get('city')->getLabel()の代わりに使用していたものでした。$this->formlabel($form->get('city'))

問題は、ラベルがde_DE.poファイルに追加されていないことです。しかし、これはもう ZF2 の問題ではないので、Ruben の回答を受け入れて、新しい Poedit の質問を開きました。

4

4 に答える 4

9

使用する代わりに:

<?php echo $form->get('city')->getLabel(); ?>

formlabel ビュー ヘルパーを使用する必要があります。このヘルパーは、ServiceManager にトランスレーターを挿入した場合、レンダリング中に自動的にトランスレーターを使用します。ほとんどの場合、アプリケーションのモジュール module.config.php に含まれています。

'service_manager' => array(
        'factories' => array(
            'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
        ),
    ),

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

formlabel ビュー ヘルパーを使用したら、次のようにします。

echo $this->formLabel($form->get('city'));

そしてもちろん、翻訳が .po ファイルにあることを確認してください。

于 2013-04-12T02:37:21.597 に答える
1

@ルーベンは正しいと言います!

私はPoEditを使用して*.moファイルを生成し、ファイル内のすべての翻訳を確実に取得するために、翻訳対象のすべてのテキストを含む _lan.phtmlという名前のファイルをどこかに (たとえばビューで) 作成します。

<?php echo $this->translate("My label"); 
... ?>

もちろん、私のキーワードを見つけるようにPoeditを設定する必要があります。これを設定する方法を確認してください

于 2013-04-12T07:05:34.833 に答える