我的另一个问题:
这些是我想要使用Zend框架提供翻译的两种语言。当用户确定他们不想使用英语作为主要语言时,他们就有机会选择其他语言:
当我使用前面的代码时:
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-> getRegion()为空,这也失败了......
问题:
Zend_Translate
可以使用语言 _ 区域?<登记/>
- 引用我的其他问题,zh_HK和zh_CN不正确。 zh_Hans / zh_Hant是答案 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可以无缝地协同工作。也许有人有一个更清洁的想法...