2011-08-11 10 views
1

Zend_LocaleとZend_Translateには、特にhtmlentitiesに関するいくつかの問題がありました。しかし、いくつかの異様なことがあります。Zend Framework、Zend_Locale、Zend_Translate、Zend_Formのロケールと翻訳の問題

まず、Zend_Localeのドキュメントでは述べて:

Zend Frameworkには、アプリケーションのロケールの使用を可能にします。 Zend_Localeのインスタンスをキー「 'Zend_Locale」を使ってレジストリに設定するだけです。そして、このインスタンスはZend Frameworkの

の意識 クラスこれはZend_Translateのでは動作していないよう、すべてのロケール内で使用されますが、私はそれがない奇妙なことに、Zend_Translateのは、「ロケール意識」クラスではありませんと仮定しています大きな問題はなく、私はそれを明示的に設定しなければなりませんでした。あなたがここに見ることができるように、私はZend_Translateのための配列のアダプターを使用してい

$session = new Zend_Session_Namespace(); 

// only if locale is explicitly set by user: 
if(isset($_GET['locale']) && !empty($_GET['locale'])) { 
    $session->locale = $_GET['locale']; 
} 

$locale = isset($session->locale) ? $session->locale : 'auto'; 

try { 
    $zendLocale = new Zend_Locale($locale); 
} catch (Zend_Locale_Exception $e) { 
    $zendLocale = new Zend_Locale('en_CA'); 
} 

Zend_Registry::set('Zend_Locale', $zendLocale); 

require_once(APPLICATION_PATH . '/languages/translation.php'); 

$translate = new Zend_Translate(array(
    'adapter' => 'array', 
    'content' => $english, 
    'locale' => 'en' 
)); 

$translate->addTranslation(array(
    'content' => $french, 
    'locale' => 'fr' 
)); 

$translate->setLocale($zendLocale->toString());  
Zend_Registry::set('translate', $translate); 

:以下は私のブートストラップからinitLocale()関数です。私の配列はtranslation.phpで定義されています。

Zend_Form(http://framework.zend.com/manual/en/zend.form.i18n.html)のドキュメントのZend_Localeと同様に、Zend_Formに翻訳を追加する最も簡単な方法は、Zend_Translateレジストリ内のオブジェクトを 'Zend_Translate'というキーで簡単に設定できます。これを設定すると、配列内で一致する翻訳を持つフォームラベルやエラーメッセージなどが自動的に翻訳されます。問題は、私のフランス語の翻訳に多くのhtmlentitiesがあることです。私は間違っている可能性がありますが、私はZend_FormのsetLabelメソッドがテキストをエスケープして、エンティティが2回変換されると考えています。私は翻訳からすべてのエンティティを削除しようとしましたが、これは完全に失敗し、私に空白の出力を与えます。

誰にもアイデアはありますか?翻訳のためのhtmlentitiesは重要な必要性のように思えますか?

現在、私はこれを自動的にやっていないんだけど、私は次のようん私のフォームに中間機能を追加しました($この - > _変換するZend_Translateのオブジェクトです):

private function getTranslation($str) { 
    return html_entity_decode($this->_translate->_($str), ENT_COMPAT, 'UTF-8'); 
} 

しかし、これはあります私がすべてのsetLabelとerrorMessageをこの最初にラップしなければならないように、理想からは遠く離れています.Zendのロケールと翻訳クラスのポイントがありません。

答えて

0

私はまた、フォームのラベルを設定するために、配列アダプターとともにZend_Translateを使用しました。 HTMLエンティティとして文字をエンコードする必要はありませんでした。私が知る限り、UTF-8としてエンコードするだけで十分です。したがって、あなたが言及するラッパーは必要ではありません。

レジストリに「Zend_Translate」キーを追加するだけです。それ以外の場合は機能しません。翻訳キーをsetLabel()に直接渡すと、動作します。

希望があれば...

関連する問題