2011-12-24 37 views
3

請爲我提供zend_translate和zend_locale的簡單小型 應用程序的文件夾strusture和代碼。zend_translate和zend_locale

爲了讓我對此有所瞭解。 我引用了framework.zend,但無法理解我應該在控制器,索引,boorstrap甚至視圖中提及哪些東西。 對於我來說,使用zend_translate和zend_locale似乎是hecic。 請幫幫我。

回答

1

給你舉個例子,對於簡單的翻譯,我有以下我的application.ini定義:

resources.translate.data = APPLICATION_PATH "/translations/nl/" 
resources.translate.locale = "nl" 

而且/譯/ NL /目錄裏面我有一個或多個翻譯文件名(.php ,.ini,...)。

這就是你所需要的,基本上。

0

這是我的解決方案:

protected function _initTranslate() 
{ 
    //set gettext adapter 
    $translate = new Zend_Translate('Gettext', APPLICATION_PATH . '/languages', 
     null, array('scan' => Zend_Translate::LOCALE_FILENAME));     
    // get locale from url 
    if (preg_match("/^\/([a-zA-Z]{2})($|\/)/", $_SERVER['REQUEST_URI'], $matches)) { 
     $lang = $matches[1]; 
    } else { 
     //if locale not exsist in url - get browser locale 
     $locale = new Zend_Locale(Zend_Locale::BROWSER); 
     $lang = $locale->getLanguage();  
    } 
    if (!$translate->isAvailable($lang)) {    
     $lang = 'en'; 
    }    
    $translate->setLocale($lang);  
    $front = $this->getResource('FrontController'); 
    $front->setBaseUrl('/' . $lang . '/');   
    Zend_Registry::set('Zend_Translate', $translate); 
    $locale = $translate->getLocale();   

    $source = APPLICATION_PATH . '/languages/'.$locale.'.mo';   

    $translate->addTranslation($source, $locale);   
} 
+0

當提供解決問題的代碼時,最好也至少給出一個關於它是如何工作的簡短解釋,以便讓人們閱讀時不必從頭到尾思路分析,以便理解差異。 – Fluffeh 2012-09-27 11:20:04

1

這是我正在做它,

bootstrap.php中

protected function _initTranslate() 
{ 
    $translate = new Zend_Translate(array(
     'adapter' => 'gettext', 
     'content' => APPLICATION_PATH . '/locale/en-US.mo', 
     'locale' => 'en' 
    )); 

    Zend_Registry::set('translate', $translate); 
    Zend_Form::setDefaultTranslator($translate); 

    $this->bootstrap('view'); 
    $view = $this->getResource('view'); 
    $view->translate = $translate; 
} 

如果非要從控制器發送消息。 。我做

AuthController.php

$this->view->message = 'success'; 

然後在視圖

login.phtml

if (isset($this->message)) { 
    echo $this->translate->_($this->message); 
} 

上面將輸出 'sucesss' 的翻譯的值來自'en-US.mo'文件。

希望有幫助!

1

這是我使用的解決方案:

代碼Plugin.php

// BEGIN: Translate 
    $validLang = $this->getRequest()->getParam('lang'); 
    $translate = new Zend_Translate('csv', 'data/lang/en.csv', 'en'); 
    $translate->addTranslation('data/lang/ro.csv', 'ro'); 
    if($validLang) 
    { 
     Zend_Registry::set('lang', $validLang); 
     $translate->setLocale($validLang); 
    } 
    else 
    { 
     Zend_Registry::set('lang', 'en'); 
     $translate->setLocale('en'); 
    } 
    Zend_Registry::set('translate', $translate); 
    // END: Translate 

代碼en.csv

front_user_menu-wall;Wall 

代碼ro.csv

front_user_menu-wall;Perete 

守則任何Zend的視圖文件

echo Zend_Registry::get('translate')->_('front_user_menu-wall'); 

而且一些解釋:

在文件夾中的數據/郎我有2個的.csv翻譯文件。結構是自解釋的,分號(;)將變量名(front_user_menu-wall)與變量值(Wall)分開。每個變量必須放在一個新行中,並且可以在行內添加行註釋(例如:#this是註釋)。 ro.csv文件是羅馬尼亞語翻譯文件,它具有相同的結構,但變量的值明顯不同。

裏面Plugin.php你有

$validLang = $this->getRequest()->getParam('lang); 

Zend的等效

$validLang = $_GET['lang']; 

在接下來的兩行代碼,我們用實例2翻譯的.csv文件的新一個Zend_Translate類。接下來我們檢查$ validLang是否爲空,如果不是它們,我們用翻譯文件設置Zend_Registry lang變量(Zend_Registry與$ _SESSION類似)。如果$ validLang爲空,那麼我們默認翻譯爲英文。

如果你做了以上所有步驟,你現在可以呼應

Zend_Registry::get('translate')->_('front_user_menu-wall'); 

獲得英語或羅馬尼亞語翻譯。

相關問題