Zend_Form占位符翻译

4

我有一个Zend应用程序,其中一个Zend_Form应该使用HTML5的placeholder属性而不是标签,就像这里所做的那样

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,因此它应该默认翻译我的表单。这对标签(label)有效。但是,占位符(placeholder)会原封不动地使用,而没有被翻译。

我该如何翻译占位符字符串?

3个回答

3

You can access the the translate helper like this

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

顺便说一下,plceholder属性不能替代label

规范中得知:

不应该使用placeholder属性来替代label。


谢谢,这个可行!对我来说,使用占位符代替标签是可以的。我不支持过时的浏览器。我已经等了很久才得到这个属性,现在不能用吗? - danijar
请注意,这将按原样翻译“placeholder”属性,未来对setTranslator和/或translator更改的调用不会影响结果。这可能被认为是从Zend\Form根中打破抽象。 - Denis 'Alpheus' Cahuk

2

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

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

就是这样!


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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接