2011-08-01 91 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我想我有一个偶数对此更好的答案 –