Zend_Form 占位符翻译

Posted

技术标签:

【中文标题】Zend_Form 占位符翻译【英文标题】:Zend_Form Placeholder Translation 【发布时间】:2012-01-12 05:08:30 【问题描述】:

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

如何翻译占位符字符串?

【问题讨论】:

【参考方案1】:

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

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

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

来自spec:

placeholder 属性不应用作标签的替代品。

【讨论】:

谢谢你的作品!占位符而不是标签对我来说是可以的。我不支持过时的浏览器。 - 这个属性我等了好久,现在不能用??? 请记住,这将按原样翻译“占位符”属性,将来对 setTranslator 和/或翻译器更改的调用不会影响结果。这可能被认为打破了 Zend\Form 根的抽象。【参考方案2】:

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

foreach($this->getElements() as $key => $element)

    $placeholder = $element->getAttrib('placeholder');
    if(isset($placeholder))
    
        $this->$key->setAttrib('placeholder',$this->getView()->translate($placeholder));
    

就是这样!

【讨论】:

【参考方案3】:

其实我喜欢让事情自动化,所以我只是简单地创建了一个新的 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);

【讨论】:

以上是关于Zend_Form 占位符翻译的主要内容,如果未能解决你的问题,请参考以下文章

如何动态翻译 html5 占位符

使用 i18next(占位符,值)翻译自定义属性

如何更改输入标签占位符的语言?

翻译后的占位符值未拉入 Symfony 4 表单字段

选择新语言时,ngx quill 占位符不会改变

从本地化中排除占位符文本