我有一个带有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,所以它应该默认翻译我的表单。这适用于标签。但是,占位符按原样使用,不进行转换。
如何翻译占位符字符串?
答案 0 :(得分:3)
您可以像这样访问翻译助手
'placeholder'=> $this->getView()->translate('user_editprofile_firstname),
顺便说一句。 plceholder
属性不是label
的替代。
来自spec:
不应将占位符属性用作标签的替代。
答案 1 :(得分:2)
这是我的最终解决方案。它翻译所有占位符。感谢Jona的回答。
foreach($this->getElements() as $key => $element)
{
$placeholder = $element->getAttrib('placeholder');
if(isset($placeholder))
{
$this->$key->setAttrib('placeholder',$this->getView()->translate($placeholder));
}
}
就是这样!
答案 2 :(得分: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);
}