2011-12-24 9 views
3

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

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

ответ

1

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

resources.translate.data = APPLICATION_PATH "/translations/nl/" 
resources.translate.locale = "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

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

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

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

Zend эквивалент

$validLang = $_GET['lang']; 

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^