選択した回答を承認しません :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
して挿入することです。コントローラーレベルでは、これは次のようになります。ServiceManager
ServiceLocator
__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__,
),
),
),