Zend framework, gettext, poedit и человеческий язык, на котором написаны ключевые строки - PullRequest
2 голосов
/ 27 сентября 2010

Я пишу веб-сайт с использованием ZendFramework и решил использовать систему gettext для интернационализации своего контента. По моему мнению, я пишу строку на французском языке и на данный момент предоставляю только один файл "en.mo" для перевода предложений на английский. Я хотел бы избежать сохранения файла "fr.mo", который переводит только предложение в точно такое же предложение.

Есть ли способ сообщить Zend или gettext, что когда языковой стандарт - "fr" или "fr_FR", тогда нет необходимости искать файл перевода, и строка ключа должна просто возвращаться как есть? Или, может быть, есть причина для создания файла «перевода идентичности» fr.mo?

Ключевые цитаты из моего кода на данный момент:

Извлечение моего бутстрапа:

 protected function _initTranslations() {
        $config = $this->getApplication()->getOptions();

        Zend_Locale::setDefault('en'); // fallback if detection fails completely

        $locale = new Zend_Locale();
        if ( !in_array($locale->getLanguage(), explode(',',$config['available_translations']))) {
            $locale->setLocale('en'); // requested language is not available => use english
        }

        $translate = new Zend_Translate(array(  'adapter' => 'gettext',
                                                'content' => APPLICATION_PATH.'/../languages/gda-'.$locale->getLanguage().'.mo',
                                                'locale' => $locale));


        $translate->setLocale($locale);

        $this->bootstrap('view');
        $this->getResource('view')->getHelper('translate')->setTranslator($translate);
    }

содержание / languages ​​/:

gda-en.mo
gda-fr.mo  <== this one I would like to avoid maintaining

спасибо

1 Ответ

2 голосов
/ 28 сентября 2010

Fluxine,

При использовании адаптера gettext Zend_Translate вам потребуется:

  • gda.pot, содержащий все ваши msg-id (в вашем случае на французском)
  • gda-fr.po , содержащий хотя бы один перевод для генерации gda-fr.mo (который будет почти пустым ...)
  • некоторые другие файлы перевода
    • gda-en.po для генерации gda-en.mo
    • gda-de.po для генерации gda-de.mo
    • ....
    • gda-XX.po для генерации gda-XX.mo

Важным фактом здесь является:

Ваш «перевод личности», как вы его называете, должен существовать, иначе Zend будет жаловаться на то, что «fr» (в вашем случае) недоступен

В poEdit просто переведите одну маленькую строку в ту же строку, сгенерируйте соответствующий файл *.mo, сохраните его и забудьте об этом.

Вам больше не нужно обновлять файл gda-fr.po и не обновлять обновленный файл gda-fr.po.

Адаптер вернет оригинальную французскую строку, потому что в gda-fr.mo

для него нет перевода.
...