3

zend_translate と zend_locale の単純な小さなアプリケーションのフォルダ構造とコードを提供してください。

それで、私はそれについていくつかの考えを持っています。私はframework.zendを参照しましたが、コントローラー、インデックス、ブーストラップ、さらにはビューで言及すべきことが何であるかを理解できませんでした。zend_translate と zend_locale を使用するのは大変なことのようです。私を助けてください。

4

4 に答える 4

1

例を挙げると、簡単な翻訳の場合、application.iniで次のように定義されています。

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

そして、/ translations / nl /ディレクトリ内に1つ以上の翻訳ファイル(.php、.ini、...)があります。

基本的に、必要なのはそれだけです。

于 2012-01-06T20:07:19.667 に答える
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 View ファイルのコード

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

そしていくつかの説明:

フォルダー data/lang には、2 つの .csv 翻訳ファイルがあります。構造は一目瞭然で、セミコロン (;) は変数名 (front_user_menu-wall) と変数値 (Wall) を区切ります。各変数は新しい行に配置する必要があり、内部に行コメントを含めることができます (例: #this is a comment)。ro.csv ファイルはルーマニア語の翻訳ファイルで、構造は同じですが、変数の値が明らかに異なります。

あなたが持っているPlugin.phpの中に

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

Zend に相当する

$validLang = $_GET['lang'];

次の 2 行のコードでは、2 つの翻訳 .csv ファイルを使用して新しい Zend_Translate クラスをインスタンス化します。次に、$validLang が空でないかどうかを確認します。空でない場合は、翻訳ファイルで Zend_Registry lang 変数 (Zend_Registry は $_SESSION に似ています) を設定します。$validLang が空の場合、デフォルトで英語に翻訳されます。

上記のすべての手順を実行すると、echo ができるようになります

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

英語またはルーマニア語の翻訳を取得します。

于 2012-09-03T12:18:52.480 に答える
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);
}

上記は、「en-US.mo」ファイルから「成功」の翻訳値を出力します。

それが役立つことを願っています!

于 2012-08-27T22:27:25.820 に答える
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);        
}
于 2012-08-15T17:42:39.153 に答える