2009-04-29 1 views
6

私はこれをしたいということを意味し、私たちのデザイナーは、ビュー内の文字列をローカライズするためにできるだけ簡単にそれを作りたい:具体的な機能を実装するためにZend Viewを拡張するにはどうすればよいですか?

... 
<p><?php echo $this->_("Hello, world!"); ?></p> 
... 

ここで下線表記はPoeditは、自動的にすべての文字列を抽出することができるようにする必要がありますローカリゼーションのために。実装は簡単です:

public function _($string) 
{ 
    return Zend_Registry::get('Zend_Translate')->_($string); 
} 

瞬間、私は(私はZendのライブラリーのいずれかを変更することによって、これを行うにはしたくない)悪いである、直接Zend_View_Abstractでこれを入れています。理想的には、Zend_View_Abstractを拡張して、必要な他の具体的な機能を実装できるようにしますが、これを設定する方法はわかりません。ビューヘルパーを実装する方法もありますが、これを行う方法がわかっている唯一の方法は、ビュー内のコードをより冗長にすることです。どんなポインタ(いいえ、それらの種類ではない)は非常に高く評価されるでしょう。ありがとう!

+0

私はZend_View_Abstractを拡張し、ViewRendererが使用するビューの代わりにその新しいカスタムビューを使用し、最新のリリースで非ハックシンクでこれを行う方法についての情報はありませんZendのZendのドキュメンテーションには、「多くの開発者がZend_View_Abstractを拡張してカスタム機能を追加することを望んでいることがわかりました」という言及はありません。 – kranzky

答えて

14

明らかに...

  1. は、それを割り当て
  2. (例えば、あなたのブートストラップの)クラスのインスタンスを生成し、この拡張したクラスで
  3. をあなたの方法を入れZend_View
  4. を拡張しますViewRendererに
  5. viewrendererをZend_Controller_Action_HelperBroker'sに渡すaddHelperメソッド
  6. あなたのビューでそれを使用してください。

/ライブラリ/ MegaHAL/Zend/create View。PHP:あなたのブートストラップで

class MegaHAL_Zend_View extends Zend_View 
{ 
    public function _($string) 
    { 
    return Zend_Registry::get('translate')->_($string); 
    } 
} 

:あなたのビューで

require_once APPLICATION_PATH.'../library/MegaHAL/Zend/View.php'; 

$view = new MegaHAL_Zend_View(); 

$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer(); 
$viewRenderer->setView($view); 
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer); 

<p><?php echo $this->_("Hello");?></p> 

私ははい、それはあなたがやりたいと考えていますか?

+0

あなたのお手伝いをしていただきありがとうございます。私はそれがより多くの段階的なものであり、ViewRendererの私の問題に固有であるため、これを他の回答よりも受け入れています。 – kranzky

+0

問題ないです。喜んで助けてください。 Zend Frameworkのドキュメントのように、「1つ、2つはスキップする」というタイプの命令は、常に1つの小さなナゲットを残して終了するように見えるので、より詳細な説明を優先します。ドライブ私ナット。 – Stuart

2

custom view helpersを作成する方法を探していると思います。

例:

class My_View_Helper extends Zend_View_Helper_Abstract 
{ 
    public function translate($string) 
    { 
     //... 
    } 
} 

...

$view->setHelperPath('/path/to/helpers', 'My_View_Helper'); 

...

は、その後、あなたの意見では、あなたはそれを使用することができます。

echo $this->translate("Hello, World!"); 
+1

ヘルパーを使用したくありません。クラスの命名とファイルの命名のために、ヘルパーで "_"という名前の関数を実装する方法はないようですあなたにリンクしました)。私が質問したように、敏感さ、gettextとの一貫性、Poedit automagicの文字列抽出の両方のために、アンダースコア表記法が重要です。 – kranzky

0

設定が適切であればPoedit自動的にstrinを抽出することができますgsは_()以外の関数から返されます。

+0

はい、あなたは大丈夫ですが、私はまだすべてのビューに具体的なヘルパー関数を公開したいと考えています。それも可能ですか? – kranzky

1

ビューヘルパーを使用すると正しい "Zend-Framework"となると思いますが、Zend_Viewを拡張して、追加したいメソッドをすべて実装することができます。 Zend_Viewの機能

class My_View extends Zend_View 
{ 
    public function _($string) 
    { 
     return Zend_Registry::get('Zend_Translate')->_($string); 
    } 
} 

それからだけ(あなたのクラスのインスタンスにZend_Controller_Action::$viewインスタンス変数を設定する)新しいビュークラスがcontrollerでインスタンス化され、デフォルトのビューとして登録されていることを確認する必要がありますし、あなたの​​で(使用している場合レイアウトはの設定オプションとしてビューを渡します)ViewRendererを使用していない場合、の場合は、Zend_Controller_Action_Helper_ViewRenderer::setView()を使用してViewRendererを使用しています。あなた自身のための私のパスを無視

+0

ありがとう、私はそれがまさに私が望むものだと信じています。 – kranzky

関連する問題