Как сделать Zend_Locale с БД и откатом? - PullRequest
1 голос
/ 10 января 2011

Итак, я google'd и нашел способ заставить мое приложение работать с адаптером 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!!! */

?>

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

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

1 Ответ

1 голос
/ 13 апреля 2011

Zend_Translate поддерживает резервную функциональность. Вот в примере, что откат от де до en

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

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

...