2011-01-10 4 views
1

Итак, я google'd и нашел способ заставить мое приложение работать с адаптером db для локализации (что отлично работает), теперь следующей проблемой роста является резервное копирование. Вот сценарий:Как сделать Zend_Locale с db и резервным?

  • Приложение имеет переводы для английского, немецкого, французского и корейского языков.
  • Английский на 100%, другие нет.
  • Если строка не локализована на немецком, французском или корейском потребности в Откат на английский
  • Адаптер использует и ID не локализованы строки

Пример:

<?php 

    // This is init'd in the bootstrap 
    try { 
     $locale = new Zend_Locale(Zend_Locale::BROWSER); /* Q1!!! */ 
    } catch (Zend_Locale_Exception $e) { 
     $locale = new Zend_Locale('en_US'); 
    } 

    $translate = new Zend_Translate(
     'XYZ_Translate_Adapter_Db', // My adapter 
     $data,      // Populated variable 
     $locale->getLanguage(),  // Returns en, de, fr or ko 
     array()      // Options to pass to the adapter, none. 
    ); 

    // This is called from the view 
    echo $translate->_(123); /* Q2!!! */ 

?> 

эхо 'd будет отображаться соответствующий текст для ID 123. Теперь на Q1 !!! комментарий, как я могу проверить только en/de/fr/ko locales? И для Q2 !!! комментарий, как я могу отступить на английском языке в случае ID 123 не найден для использования на других языках.

Также я буду обрабатывать даты и валюты, поэтому я хотел бы проверить для fr_FR, de_DE, ko_KO, а не варианты, такие как fr_CA или de_AT. Поэтому для первой части мне нужно проверить, соответствуют ли локали из страны/языка, которые мне нужны, или если они являются хотя бы действительным языком (и принуждают их к соответствующей стране); и для последней части мне нужно проверить, что если перевод не находится на db, вернитесь на английский язык.

ответ

1

Zend_Translate поддерживает функции возврата назад. Вот в примере, откаты от де к ан параметра

$translate = new Zend_Translate(
array(
    'adapter' => Zend_Translate::AN_XLIFF, 
    'content' => APPLICATION_PATH . '/../data/locales/', 
    'locale' => $locale->getLanguage(), 
    'scan' => Zend_Translate::LOCALE_FILENAME, 
    'useId' => true, 
    'route' => array('de' => 'en') 
    ) 
); 

Примечание «маршрута», что позволит вам установить правила замещающего. Вам не нужно беспокоиться о том, что код региона обрабатывается автоматически. Подробнее в разделе маршрутизации Zend_Translate http://framework.zend.com/manual/en/zend.translate.additional.html#zend.translate.additional.rerouting