0

紧随我的另一个问题之后:

这是我想要为使用 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 是
4

2 回答 2

0

如果您查看翻译适配器类,您将找不到任何看起来只是远程支持区域的东西。实际上,他们在剥离这些地区方面做得更多。恐怕您必须编写(扩展)自己的适配器以支持区域。

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

于 2011-08-01T16:14:23.487 回答
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 可以无缝地协同工作。也许有人有更清洁的想法......

于 2011-08-01T16:29:45.933 回答