Zend Framework 2 l18n/translator

Discussion in 'PHP' started by kanai, 12 Feb 2015.

  1. kanai

    kanai New Member

    Joined:
    22 Aug 2012
    Messages:
    4
    Likes Received:
    4
    Reputations:
    0
    Доброго Вам времени суток.
    Вопрос в следющем:
    Имеется Zend Framework 2. Создал Form, сделал Filter к нему, однако при фильтрации ошибки отобрражаются на en(английском языке).
    Google и Yandex спрашивал, получил следующее:
    Цитата с сайта ссылка
    Code:
    Не нужно. Как я понял, Вы же не создаёте свой валидатор.
    Если нужно перевести все ошибки существующих в поставке Зенда валидаторов, то это уже сделали за Вас в папочке
    /resources/languages/ru, например. Собственно, это и есть ответ на Ваш вопрос. Далее в onBootstrap вызываем из сервис-локатора сервис транслятора, добавляем к нему ссылку на наш файл(он, кстати, phpArray, а не *.mo, что доказывает, что делался он вручную) вызовом метода addTranslationFile. И, так как у нас все валидаторы наследуются от абстрактного, то для него вызываем статический метод setDefaultTranslator - Zend\Validator\AbstractValidator::setDefaultTranslator. Дальше Зенд сам разберётся.
    Готово.
    
    Но не могу понять как это реализовать.
    Так же в сети люди предлагают просто поменять в Application/config/modul.config.php с такого:
    Code:
    'translator' => array(         'locale' => 'en_US',         'translation_file_patterns' => array(             array(                 'type'     => 'gettext',                 'base_dir' => __DIR__ . '/../language',                 'pattern'  => '%s.mo',             ),         ),     ),
    На 'locale' => 'ru_RU', но эффекта 0.
    Если не представляется возможным поменять язык, то как обратиться к классам, отвечающие за вывод сообщений об ошибках валидации.

    Прошу помощи, с советом, либо ссылкой на источник для саморазвития.
    Заранее благодарен.
     
  2. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    140
    Reputations:
    4
    ставишь intl.dll для винды или sudo apt-get install php5-intl.
    потом
    use Zend\I18n\Translator\Translator;
    потом в методе который рендорит форму
    $this->setLocale();
    сам метод
    public function setLocale () {
    $loc = $this->getServiceLocator();
    $translator = new Translator();
    $user_session = new Container('user');
    if($user_session->user) {
    $lang = $user_session->user->lang;
    $translator->addTranslationFile("phparray",$_SERVER["DOCUMENT_ROOT"]."/../config/language/"."lang.array.".$lang.'.php',false,$lang);
    $translator->setLocale($lang);
    $loc->get('ViewHelperManager')->get('translate')
    ->setTranslator($translator);

    }



    }
    как видишь надо добавить файлы с переводами и покдлючить их.
    $lang можно передать во вьюху или написать хелпер который его дернет .
    и во вьюхе
    <?php echo $this->translate("Search","false",$lang);?>
    но это довольно некрасивый способ есть наверняка более изящные решения. но это зенд . у одной задачи 100500 решений
     
  3. kanai

    kanai New Member

    Joined:
    22 Aug 2012
    Messages:
    4
    Likes Received:
    4
    Reputations:
    0
    Благодарю Вас, все получилось. С боем конечно, но не могу понять одного. Нафига нужно так сильно усложнять, не Вам конечно, а разработчикам? Кстати, Вы не знаете по какой причине на сайте перидично, когда ищешь мануал по библиотеке выпадает надпись с кодом ошибки 404.
    Надпись примерно следующая при переводе: "мы слушали что в symfony нет такой проблемы". Я изучил zend 1 и Zend 2, но пришел к выводу что они пришли в тупик, даже главный разработчик ушел в другой проект. По сей причине пристально изучаю CI, мануалов куча, так же на русском и все просто и доступно. В любом случае я Вас благодарю.
     
  4. 5maks5

    5maks5 Elder - Старейшина

    Joined:
    29 Aug 2010
    Messages:
    452
    Likes Received:
    265
    Reputations:
    40
    CI? Вы не застряли года на 3-4, нет?
    Node.js наше все
     
  5. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    140
    Reputations:
    4
    лично я не стал бы менять ZF2 не на ci ни на node js.javascript как по мне говяжий язык который кроме как для ui ни на что и не годится. и ci вообще не фреймворк а поделка какая то. а насчет усложнять. так тут вопрос выбора инструмента. настоящему программисту все = на чем писать. бывает заказчик диктует технологии. просто на laravel я не стану писать ничего большого а zf как раз для глобальных сложных проектов. это можно сравнить с отверткой и шуруповертом. 1 шуруп можно и отверткой закрутить ( laravel) а вот шкаф собрать лучше с помощью шуруповерта (zf)

    ps чтобы нормально писать на zf надо знать патерны проектирования.
    к примеру можно использовать abstract factory и все действия по переводу перенести в конструктор родителя. и вообще забыть о нем. в дочерних контроллерах
    вот в этой книге все хорошо описано про ооп в php.
    http://rutracker.org/forum/viewtopic.php?t=4212311
     
    #5 barnaki, 19 Mar 2015
    Last edited: 19 Mar 2015