2011-08-11 21 views
1

我一直在使用Zend_Locale和Zend_Translate,特別是使用htmlentities時遇到了一些問題。但是還有其他一些古怪的東西。Zend Framework語言環境和Zend_Locale,Zend_Translate和Zend_Form形式的翻譯問題

首先,從Zend_Locale文檔中它指出:

Zend框架允許應用範圍的地方的使用情況。您只需使用 'Zend_Locale'將Zend_Locale的實例設置爲註冊表即可。那麼這種情況下將所有的語言環境意識到 類Zend框架

內使用這似乎並不在Zend_Translate工作,我假設了Zend_Framework不是「語言環境意識」類的,怪異的,這是不但沒有什麼大問題,我只需要明確地設置它。下面是我的自舉initLocale()函數:

$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); 

正如你所看到的,我使用了Zend_Framework陣列適配器。我的數組在translation.php中定義。

與Zend_Locale類似,Zend_Form(http://framework.zend.com/manual/en/zend.form.i18n.html)文檔中提到了將翻譯添加到Zend_Form的最簡單方法是設置一個Zend_Translate在註冊表中使用'Zend_Translate'鍵的對象 - 很簡單,將其設置,並且在數組中有匹配翻譯的任何表單標籤,錯誤消息等都將被自動轉換。問題是我的法語翻譯有很多問題。我可能是錯的,但我相信Zend_Form的setLabel方法可以轉義文本,所以我的實體被轉換了兩次。我嘗試從翻譯中刪除所有實體,但這完全失敗,並給我一個空白輸出。

有沒有人有任何想法?翻譯的好處似乎是一種主要的必然性嗎?

目前我不會自動這樣做,但我已經添加了一箇中間的功能到我的形式做了以下(其中$本 - > _翻譯是一個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添加到註冊表(使用'Zend_Translate'鍵,否則它將不起作用),直接將轉換鍵傳遞給setLabel()並且它可以工作。

希望可以幫到...