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のロケールと翻訳クラスのポイントがありません。