zend_translate и zend_locale - PullRequest
       18

zend_translate и zend_locale

3 голосов
/ 24 декабря 2011

Пожалуйста, предоставьте мне структуру папки и код для простого небольшого приложения для zend_translate и zend_locale.

Так что у меня будет некоторое представление об этом.Я ссылался на framework.zend, но не мог понять, что я должен упомянуть в представлении «контроллер», «индекс», «кабриолет».Мне кажется, что мне не терпится поработать с zend_translate и zend_locale.Пожалуйста, помогите мне.

Ответы [ 4 ]

1 голос
/ 03 сентября 2012

Это решение, которое я использую:

Код для 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).Каждая переменная должна быть помещена в новую строку, и вы можете иметь строковые комментарии внутри (например: # это комментарий).Файл ro.csv - это файл перевода на румынский язык, он имеет ту же структуру, но, очевидно, разные значения для переменных.

Внутри Plugin.php у вас есть

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

Zend эквивалент для

$validLang = $_GET['lang'];

В следующих двух строках кода мы создаем новый класс Zend_Translate, используя 2 переводных CSV-файла.Затем мы проверяем, не является ли $ validLang не пустым, если это не они, мы устанавливаем переменную lang Zend_Registry (Zend_Registry аналогично $ _SESSION) с файлом перевода.Если $ validLang пуст, тогда мы по умолчанию переводим на английский.

Если вы выполнили все вышеперечисленные шаги, вы можете теперь повторить

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

, чтобы получить английский или румынский перевод.

1 голос
/ 28 августа 2012

Вот как я это делаю,

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 голос
/ 07 января 2012

В качестве примера, для простых переводов в моем application.ini определено следующее:

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

А внутри каталога / translations / nl / у меня есть один или несколько файлов перевода (.php, .ini, ...).

Это все, что вам нужно, по сути.

0 голосов
/ 15 августа 2012

Это мое решение:

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