[英]ZF2 - How To Translate Zend Form Validation Error Messages?
我有不同語言的.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中實現它。
我不贊成所選擇的答案: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
注入到Form的__construct()
中。 在Controller-Level上,這看起來像這樣:
$serviceLocator = $this->getServiceLocator();
$form = new My\Form($serviceLocator);
可以在我的博客上找到對 Form-Dependencies的更深入的介紹,其中我在依賴的Database-Connections上說明了Zend\\Form\\Element\\Select
-Element的填充。
關於譯者本身
另一件需要注意的事情是:只要有一個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__,
),
),
),
只需添加.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
文件中的數組比任何其他方法都要快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.