所以,我已经google'd并找到了一种方法,使我的应用程序可以使用数据库适配器进行本地化(这非常有用),现在下一个上升的问题是后备。这是场景:
示例:
<?php
// This is init'd in the bootstrap
try {
$locale = new Zend_Locale(Zend_Locale::BROWSER); /* Q1!!! */
} catch (Zend_Locale_Exception $e) {
$locale = new Zend_Locale('en_US');
}
$translate = new Zend_Translate(
'XYZ_Translate_Adapter_Db', // My adapter
$data, // Populated variable
$locale->getLanguage(), // Returns en, de, fr or ko
array() // Options to pass to the adapter, none.
);
// This is called from the view
echo $translate->_(123); /* Q2!!! */
?>
echo'd输出将是 ID 123 的相应文本。现在在 Q1!评论 ,如何验证en / de / fr / ko语言环境?对于 Q2!评论 ,如果找不到其他语言的 ID 123 ,我该如何回退到英语。
此外,我将处理日期和货币,因此我想验证fr_FR,de_DE,ko_KO而不是像fr_CA或de_AT这样的变体。因此,对于第一部分,我需要验证语言环境是否来自我需要的国家/地区,或者它们是否至少是一个有效的语言(并强制它们到正确的国家);对于最后一部分,我需要验证如果翻译不在db上,则回归到英语。
答案 0 :(得分:1)
Zend_Translate支持后退功能。 这里是从de到en
的回退示例$translate = new Zend_Translate(
array(
'adapter' => Zend_Translate::AN_XLIFF,
'content' => APPLICATION_PATH . '/../data/locales/',
'locale' => $locale->getLanguage(),
'scan' => Zend_Translate::LOCALE_FILENAME,
'useId' => true,
'route' => array('de' => 'en')
)
);
注意“route”参数,它允许您设置回退规则。 您无需担心区域代码会自动处理。 阅读Zend_Translate路由部分中的更多内容 http://framework.zend.com/manual/en/zend.translate.additional.html#zend.translate.additional.rerouting