4

我有一个带有 Zend_Form 的 Zend 应用程序,它应该使用 HTML5placeholder属性而不是标签,就像在此处完成的一样。

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,所以它应该默认翻译我的表单。这适用于标签。但是,占位符按原样使用,无需翻译。

如何翻译占位符字符串?

4

3 回答 3

3

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

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

顺便提一句。该plceholder属性不能替代label.

规格

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

于 2011-12-03T19:12:20.400 回答
2

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

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

而已!

于 2011-12-04T08:47:34.447 回答
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);
}
于 2015-01-14T17:46:18.953 回答