zend_翻译两种语言之间的问题



紧随我的另一个问题:

  • 为什么Zend_Locale不支持像zh_HK或zh_CN这样的缩写格式

这是我想为使用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-> getreregion ()为空…

问题:

  • 使用Zend框架设置远程用户语言环境的正确方法是什么,以便语言 _ 区域可用于Zend_Translate ?参考我的另一个问题,zh_HK和zh_CN是不正确的。zh_Hans/zh_Hant is

如果您查看翻译适配器类,您不会发现任何看起来像它们支持区域的东西。实际上他们更倾向于剥离这些区域。恐怕你必须编写(扩展)你自己的适配器来支持区域。

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

我不太优雅的hack:

  $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能够无缝地协同工作。也许有人有更清晰的想法…

相关内容

  • 没有找到相关文章

最新更新