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 占位符翻译的主要内容,如果未能解决你的问题,请参考以下文章