Zend_Form占位符翻译

时间:2011-12-03 15:34:03

标签: php zend-framework zend-form placeholder zend-translate

我有一个带有Zend_Form的Zend应用程序,该应用程序应该使用HTML5 placeholder属性而不是标签like done here

class Application_Form_Usereditprofile extends Zend_Form
{
     public function init()
     {
         [...]
         $this->addElement('text', 'FirstName', array(
            'filters'    => [...],
            'validators' => [...],
            'placeholder'=> 'user_editprofile_firstname', // string I want to translate
         ));
         [...]
     }
}

我初始化了Zend_Translate,所以它应该默认翻译我的表单。这适用于标签。但是,占位符按原样使用,不进行转换。

如何翻译占位符字符串?

3 个答案:

答案 0 :(得分:3)

您可以像这样访问翻译助手

'placeholder'=> $this->getView()->translate('user_editprofile_firstname),

顺便说一句。 plceholder属性不是label的替代。

来自spec

  

不应将占位符属性用作标签的替代。

答案 1 :(得分:2)

这是我的最终解决方案。它翻译所有占位符。感谢Jona的回答。

foreach($this->getElements() as $key => $element)
{
    $placeholder = $element->getAttrib('placeholder');
    if(isset($placeholder))
    {
        $this->$key->setAttrib('placeholder',$this->getView()->translate($placeholder));
    }
}

就是这样!

答案 2 :(得分:0)

实际上我喜欢让事情自动化,所以我只是简单地制作了新的My_Form类来扩展Zend_Form并替换了render方法来处理事情:

public function render(Zend_View_Interface $view = null)
{
        /**
         * Getting elements.
         */
        $elements = $this->getElements();

        foreach ($elements as $eachElement) {

            /**
             * Auto placeholder translation
             */
            if($eachElement->getAttrib('placeholder') !== NULL && $eachElement->getTranslator() !== NULL ) {
                $placeholderText = $eachElement->getAttrib('placeholder');
                $textTrans =  $eachElement->getTranslator()->translate( $placeholderText);
                $eachElement->setAttrib('placeholder', $textTrans);
            }

        }

    /**
     * Rendering.
     */

    return parent::render($view);
}