Доброго Вам времени суток. Вопрос в следющем: Имеется 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. Если не представляется возможным поменять язык, то как обратиться к классам, отвечающие за вывод сообщений об ошибках валидации. Прошу помощи, с советом, либо ссылкой на источник для саморазвития. Заранее благодарен.
ставишь 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 решений
Благодарю Вас, все получилось. С боем конечно, но не могу понять одного. Нафига нужно так сильно усложнять, не Вам конечно, а разработчикам? Кстати, Вы не знаете по какой причине на сайте перидично, когда ищешь мануал по библиотеке выпадает надпись с кодом ошибки 404. Надпись примерно следующая при переводе: "мы слушали что в symfony нет такой проблемы". Я изучил zend 1 и Zend 2, но пришел к выводу что они пришли в тупик, даже главный разработчик ушел в другой проект. По сей причине пристально изучаю CI, мануалов куча, так же на русском и все просто и доступно. В любом случае я Вас благодарю.
лично я не стал бы менять 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