Zend_Translate两种语言之间的问题

时间:2011-08-01 10:55:12

标签: php zend-framework zend-translate zend-locale

我的另一个问题:

这些是我想要使用Zend框架提供翻译的两种语言。当用户确定他们不想使用英语作为主要语言时,他们就有机会选择其他语言:

  • zh_Hans
  • zh_Hant

当我使用前面的代码时:

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

我可以使用的实际语言是 zh 而不是 zh_Hans zh_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()

  2. 由于 $ locale-> getRegion()为空,这也失败了......

    问题:

    • 使用Zend框架设置远程用户语言环境的语言的正确方法是什么,以便Zend_Translate可以使用语言 _ 区域?<登记/> - 引用我的其他问题,zh_HK和zh_CN不正确。 zh_Hans / zh_Hant是

2 个答案:

答案 0 :(得分:0)

如果你看一下翻译适配器类,你将找不到任何看起来像它们支持区域的东西。实际上他们做了更多的剥离地区。我担心你必须编写(扩展)自己的适配器来支持区域。

Zend类是独立的对象,有时像魔术一样协同工作,但它们仍然是独立的实体。虽然我们对Zend_Locale中的区域有很大的支持,但并不意味着它也在translate中实现。但它可能在未来。

答案 1 :(得分: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可以无缝地协同工作。也许有人有一个更清洁的想法...