紧随我的另一个问题:
- 为什么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_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
是语言…
所以我尝试如下:
'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能够无缝地协同工作。也许有人有更清晰的想法…