3

さまざまな言語用の .po およびコンパイル済み .mo 言語ファイルがあります。しかし、言語翻訳は zend フォームの検証エラー メッセージでは機能しません。fr.php のような余分な .php ファイルを使用したくありません。

ここをクリックしてこのコードを取得しました

$translator = new Zend\I18n\Translator\Translator();
$translator->addTranslationFile(
    'phpArray'
    'resources/languages/en.php',
    'default',
    'en_US'
);

Zend\Validator\AbstractValidator::setDefaultTranslator($translator);

ZF2でそれを実装する方法。

4

2 に答える 2

7

選択した回答を承認しません :P

構成に新しいトランスレータを追加するときは、デフォルトの translator-text-domain を使用しないでください。構文は次のとおりです。

$translator->addTranslationFile(
    $type,
    $resource,
    $textDomain, //<-- this is the important one
    $lang
);

あなたの例では、default-textdomain にファイルを追加しました。残念ながら、これは常に期待どおりに機能するとは限らないため、多くの問題を引き起こします。翻訳ファイルを追加するときはいつでも、自分のテキスト ドメインに追加してください。

その後、Zend\Form\View\Helperテキストドメインを割り当てるだけです。これは以下によって行われます。

// For Labels
$this->formLabel()->setTranslatorTextDomain('your-textdomain');

// For Buttons (input type submit)
$this->formButton()->setTranslatorTextDomain('your-textdomain');

// For Error-Messages
$this->formElementErrors()->setTranslatorTextDomain('your-textdomain');

ServiceManager をフォームに取得する方法は?

これもかなり簡単です。簡単なのは、フォームのまたはを使用constructor-injectionして挿入することです。コントローラーレベルでは、これは次のようになります。ServiceManagerServiceLocator__construct()

$serviceLocator = $this->getServiceLocator();
$form           = new My\Form($serviceLocator);

Form-Dependencies のより詳細な紹介は、私のブログZend\Form\Element\Selectで見つけることができます。ここでは、依存する Database-Connectionsの -Element の人口を示しています。

翻訳者自体について

注意すべきもう 1 つの点は、構成に という名前の Translator-Service がアタッチされてtranslatorいる限り、デフォルトのトランスレータとして自動的にフォームにアタッチされます。これは、モジュール内で定期的に使用するサンプル構成です。

'translator' => array(
    'locale' => 'de_DE',
    'translation_file_patterns' => array(
        array(
            'type'     => 'phparray',
            'base_dir' => __DIR__ . '/lang',
            'pattern'  => '%s.php',
            'text_domain' => __NAMESPACE__,
        ),
    ),
),
于 2013-04-03T13:01:39.527 に答える
1

次のように、ファイルの代わりに.poまたはファイルを追加するだけです。 .mo.php

$translator = new Zend\I18n\Translator\Translator();
$translator->addTranslationFile(
    'gettext'
    'resources/languages/fr.mo',
    'default',
    'fr_FR'
);
Zend\Validator\AbstractValidator::setDefaultTranslator($translator);

そして、それを翻訳するには、使用します

echo $this->formElementErrors($form->get("username"),
                              array('message' => $this->translate("errormessage"))
);

ZF2 での変換のパフォーマンスについてはわかりませんが、ZF1 では、.phpファイルで配列を使用すると、他の方法よりもはるかに高速でした。

于 2013-04-03T09:14:25.457 に答える