【问题标题】:Zend_Form Placeholder TranslationZend_Form 占位符翻译
【发布时间】: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,所以它应该默认翻译我的表单。这适用于标签。但是,占位符按原样使用,无需翻译。

如何翻译占位符字符串?

【问题讨论】:

    标签: php zend-framework zend-form placeholder 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);
      }
      

      【讨论】:

        猜你喜欢
        • 2014-05-02
        • 1970-01-01
        • 2019-09-02
        • 2016-02-26
        • 2017-10-20
        • 1970-01-01
        • 1970-01-01
        • 2011-01-04
        • 2014-01-28
        相关资源
        最近更新 更多