2011-12-03 5 views
3

Zend_Form을 가진 Zend 응용 프로그램이 있습니다. 레이블은 like done here 대신 HTML5 placeholder 속성을 사용해야합니다.Zend_Form 자리 표시 자 변환

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

당신은하여 번역 도우미 BTW이

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

처럼 액세스 할 수 있습니다. plceholder 속성은 label을 대체하지 않습니다. spec에서

:

자리 표시 자 속성은 라벨의 대안으로 사용할 수 없습니다.

+0

감사합니다! 라벨 대신 자리 표시자를 사용하는 것이 좋습니다. 나는 오래된 브라우저를 지원하지 않는다. - 나는이 속성에 대한 연령대를 기다렸지 만 지금은 사용할 수 없다. ??? – danijar

+0

이것은 '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)); 
    } 
} 

그게 전부 야!

0

는 사실은 내가 자동화 된 물건을 갖고 싶은, 그래서 나는 단순히 Zend_Form 확장 새 My_Form 클래스를 만든 방법은 일을 처리하기 위해 렌더링 교체했습니다 작동

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