2014-01-10 28 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; 
} 

所以譯者將可爲整個應用程序

相關問題