2011-12-24 6 views
3

私は、zend_translateとzend_localeの簡単な小さな アプリケーションのためのフォルダstrustureとコードを提供してください。zend_translateとzend_locale

私はそれについていくつか考えています。 私はframework.zendを参照しましたが、コントローラ、インデックス、ブーストラップでも言及すべきことが何であるか理解できませんでした。 私はzend_translateとzend_localeで作業するのが面倒です。 私を助けてください。

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

そして/翻訳/ NL /ディレクトリの中に私は1つのまたは複数の翻訳ファイルを持っている(の.php:私は私のapplication.iniで定義された以下のいる簡単な翻訳のために、あなたの例を与えることを

答えて

1

、.ini、...)。

これは基本的に必要なものです。私は、コントローラからのメッセージを送信する必要がある場合は

、これは私がそれをやっている方法です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; 
} 

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

は、それは私のソリューションです。 。私は 'sucesss' の翻訳値

AuthController.php

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

そしてビューで

login.phtml

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

上記の意志の出力を行います「en-US.mo」ファイルから。

希望に役立ちます!

+0

問題を解決するコードを提供するときには、人の読書がその違いを理解するために行ごとに精神的に解析する必要がないように、動作の仕方について少なくとも簡単な説明を与えることが最善です。 – Fluffeh

1

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

そして、いくつかの説明ファイルのコード:フォルダのデータ/ LANGで

を私は2つの.CSV翻訳ファイルを持っています。構造は自明ですが、セミコロン(;)は変数名(front_user_menu-wall)と変数値(Wall)を区切ります。各変数は新しい行に置く必要があり、内部に行コメントを付けることができます(例:#これはコメントです)。 ro.csvファイルはルーマニアの翻訳ファイルですが、構造は同じですが、明らかに変数の値が異なります。

インサイドPlugin.phpあなたは、コードの次の2行に

$validLang = $_GET['lang']; 

ため

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

のZend相当するものがあり、私たちは2、翻訳の.csvファイルを使用して、新しいZend_Translateのクラスをインスタンス化します。次に、$ validLangが空でないかどうかをチェックし、そうでなければZend_Registry lang変数(Zend_Registryは$ _SESSIONと似ています)を変換ファイルに設定します。 $ validLangが空の場合、デフォルトの翻訳は英語になります。

あなたは上記のすべての手順を行った場合、あなたは今、英語やルーマニア語の翻訳を取得するには

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

をエコーすることができます。

関連する問題