我在哪里设置zend翻译?

时间:2014-01-10 13:41:19

标签: php zend-framework localization zend-translate

我发现在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>

那么我必须在控制器中设置类并将变量传递给视图吗?谢谢你的帮助。

2 个答案:

答案 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;
}

因此翻译人员可以在整个应用程序中使用