2014-01-10 22 views
0

我发现在zend框架中设置翻译很简单。您只需使用这些语言制作一些文件,并从用户代理获取语言环境。我唯一无法找到的地方是“我应该在哪里调用zend_translate类”。所以,我有这些行:我必须在哪里设置zend翻译?

<?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); 

而且我不知道我是否应该在控制器或视图设置它们,因为这将是明显的与THOS其他线路做:

<title><?php echo this->translate('Title'); ?></title> 

所以我必须在控制器中设置类并将变量传递给视图?感谢您的帮助。

+0

它会在我设置本地文件名的行中抛出_initTranslate错误。你能检查我的这条线的语法吗?数组('scan'=> Zend_Translate :: text.php它说没有找到“text”常量。我应该在那里写什么? – softwareplay

回答

1

你可以在控制器中设置Zend_Locale,但一般来说你应该这样做“更高”,因为基本上你想从其他控制器访问zend_locale。 一般而言,您可以在引导程序中初始化您的注册表,或者仅在index.php文件中进行初始化。 这里是如何设置从Zend_Locale好指南: http://delboy1978uk.wordpress.com/category/languages/php/zend-framework/zend_registry/

+1

@softwareplay - 我不能写评论给你的文章,所以我会评论我自己的。关于你的第二个问题 - 你不能用你自己的文件替换LOCALE_FILENAME,因为它是一个constatnt,告诉zend如何自动搜索你的语言文件(可选LOCALE_DIRECTORY)。 (在根目录下)languages/text.en.php和scan会搜索你的文件。 – MSadura

1

您可以初始化一个Zend_Translate到自举通过创建_initTranslate功能:

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

所以译者将可为整个应用程序

相关问题