簡體   English   中英

ZF2 - 如何翻譯Zend表單驗證錯誤消息?

[英]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注入並將ServiceManagerServiceLocator注入到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM