4

Zend_Formを使用するZendアプリケーションがあります。これは、ここで行うようplaceholderに、ラベルの代わりにHTML5属性を使用する必要があります。

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を初期化したので、デフォルトでフォームを翻訳する必要があります。これはラベルでうまく機能します。ただし、プレースホルダーは翻訳されずにそのまま使用されます。

プレースホルダー文字列を翻訳するにはどうすればよいですか?

4

3 に答える 3

3

このような翻訳ヘルパーにアクセスできます

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

ところで。plceholder属性は。の代わりにはなりませんlabel

スペックから:

プレースホルダー属性は、ラベルの代わりに使用しないでください。

于 2011-12-03T19:12:20.400 に答える
2

これが私の最終的な解決策です。すべてのプレースホルダーを変換します。答えてくれたジョナに感謝します。

foreach($this->getElements() as $key => $element)
{
    $placeholder = $element->getAttrib('placeholder');
    if(isset($placeholder))
    {
        $this->$key->setAttrib('placeholder',$this->getView()->translate($placeholder));
    }
}

それでおしまい!

于 2011-12-04T08:47:34.447 に答える
0

実際、私は物事を自動化するのが好きなので、Zend_Formを拡張する新しいMy_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);
}
于 2015-01-14T17:46:18.953 に答える