2011-08-01 39 views
0

熱關我的其他問題的高跟鞋:了Zend_Framework問題

這是兩種語言,我想使用Zend框架提供翻譯。當用戶決定他們不想使用英語作爲其主要的語言,他們提供的機會,選擇另一種語言:

  • zh_Hans
  • zh_Hant

當我使用前面的代碼如下:

require_once 'Zend/Locale.php'; 
$locale = new Zend_Locale(); 
$locale->setLocale('zh_Hans'); // for example 

可用的實際語言是ZH,而不是zh_Hanszh_CN的

所以現在,當涉及到使用Zend爲翻譯

require_once 'Zend/Translate.php'; 
$translate = new Zend_Translate(array('adapter' => 'array', 
        'content' => 'translations/zh_Hant.trans', 
        'locale' => $locale->getLanguage() 
       )); 

它失敗......因爲ZH不作爲存在一個語言文件。這是預期的,因爲我告訴$translate$locale是語言...

  1. 所以我嘗試以下方法:

    'locale' => $locale->getLanguage() . '_' . $locale->getRegion()

這也未按$ locale- > getRegion()爲空...

問題:

  • 什麼是設置使用Zend框架,以便語言 _ 區域可用於Zend_Translate遠程用戶的語言環境的語言的正確方法?
    - 引用我的另一個問題,zh_HK和zh_CN不正確。 zh_Hans/zh_Hant是

回答

0

我不到優雅黑客:

$supported_langs = array(
    'en_US' => 'en_US', 
    'en_GB' => 'en_GB', 
    'zh_Hans' => 'zh_CN', 
    'zh_Hant' => 'zh_HK', 
    'es' = > 'es' 
); 

    require_once 'Zend/Translate.php'; 
    $targetLanguage = $locale->getLanguage(); 
    if ($locale->getRegion() != null) { 
    $targetLanguage = $locale->getLanguage() . '_' . $locale->getRegion(); 
    } 
    $contentFile = dirname(__FILE__) . '/../translations/' . $locale->getLanguage() . '/general-' . $targetLanguage . '.trans'; 
    $translation_language = array_search($targetLanguage, $supported_langs); 

    $translate = new Zend_Translate(
    array(
     'adapter' => 'array', 
     'content' => $contentFile, 
     'locale' => $translation_language 
     ) 
); 

我的希望是,從Zend_Locale和一個Zend_Translate將無縫協同工作。也許有人有一個更清潔的想法...

0

如果您查看翻譯適配器類,您將找不到像遠程支持區域一樣的任何內容。事實上,他們更多地剝離這些地區。恐怕你必須編寫(擴展)你自己的適配器來支持區域。

Zend類是獨立的對象,有時一起工作幾乎像魔術一樣,但它們仍然是獨立的實體。儘管我們在Zend_Locale中與地區提供了大力支持,但並不意味着它也以翻譯形式實施。不過,它可能在未來。

+0

我認爲這個答案將綽綽有餘我的其他問題...! http://stackoverflow.com/questions/6722948/why-doesnt-the-zend-locale-honor-abbreviated-formats-like-zh-hk-or-zh-cn .. – sdolgy

+0

@sdolgy我想我有一個偶數對此更好的答案 –