我发现在zend框架中设置翻译很简单。您只需使用这些语言制作一些文件,并从用户代理获取区域设置。唯一我无法找到的是“在哪里”我应该调用zend_translate类。所以我有这些界限:
<?php
// load required classes
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Translate');
Zend_Loader::loadClass('Zend_Locale');
Zend_Loader::loadClass('Zend_Registry');
// initialize locale and save in registry
// auto-detect locale from browser settings
try {
$locale = new Zend_Locale('browser');
} catch (Zend_Locale_Exception $e) {
$locale = new Zend_Locale('en');
}
$registry = Zend_Registry::getInstance();
$registry->set('Zend_Locale', $locale);
我不知道我是应该在控制器中还是在视图中设置它们,因为与其他线路相比显而易见:
<title><?php echo this->translate('Title'); ?></title>
那么我必须在控制器中设置类并将变量传递给视图吗?谢谢你的帮助。
答案 0 :(得分:1)
你可以在控制器中设置Zend_Locale,但一般来说你应该这样做“更高”,因为基本上你想从其他控制器访问zend_locale。 通常,您在引导程序或index.php文件中初始化注册表。 这是关于如何设置zend_locale的很好的指南: http://delboy1978uk.wordpress.com/category/languages/php/zend-framework/zend_registry/
答案 1 :(得分:1)
您可以通过创建_init Translate函数将Zend_Translate初始化为引导程序:
protected function _initTranslate()
{
// (optional) get cache
$cache = $this->bootstrap('cachemanager')
->getResource('cachemanager')
->getCache('generic');
$translate = new Zend_Translate(
'gettext',
APPLICATION_PATH . '/languages',
'fr',
array(
'scan' => Zend_Translate::LOCALE_FILENAME,
'logUntranslated' => false
)
);
$translate->setCache($cache);
Zend_Registry::set('Zend_Translate', $translate);
// Traducteur par defaut pour les classes suivantes
Zend_Validate_Abstract::setDefaultTranslator($translate);
Zend_Form::setDefaultTranslator($translate);
return $translate;
}
因此翻译人员可以在整个应用程序中使用