GetText и Yii
29 июня 2010
Возможности для создания многоязычных приложений в Yii довольно широки. В том числе реализована поддержка переводов в формате GNU GetText. Для этого используется CGettextMessageSource.
Для использования GetText надо настроить соответствующий компонент в main.php:
'components' => array( 'messages' => array( 'class' => 'CGettextMessageSource', // … ) )
Плюсы самого GetText, думаю, описывать не стоит. Вместо этого лучше дать ссылку на старую, но до сих пор актуальную статью на phpclub: «Многоязычные приложения. Профессиональная работа».
Утилита для редактирования и компиляции переводов переехала на http://www.poedit.net/.
Комментарии RSS по email OK
По моему CPhpMessageSource плюс команда message ничем не хуже :)
Или я ошибаюсь?
Производительность у gettext будет побольше.
Когда я последний раз смотрел сорцы этого класса, то я был в шоке от того, что Yii использует не gettext. С этом классе реализован тупой разбор файла перевода в формате GNU gettext (.po, либо .mo) в массив и дальнейшая замена строк при помощи той же ф-ии Yii::t().
Разочаровало меня это несказанно =) Честно говоря, до сих пор не понимаю данного решения. В таком случае выгоднее использование CPHPMessageSource (с точки зрения производительности).
В то время задумался о расширении для Yii, реализовывающего именно поддержку gettext. Хотя бы из-за ngettext, т.к. текущая альтернатива Yii для вывода сообщений, зависимых от числа - это полный %$#@!& (видели, что нужно написать в каждой строке для перевода, исходя из численных форм для русского языка?)
Итог: на данный момент данный класс имеет лишь одно преимущество - это формат .mo/.po, что позволяет использовать специализированный софт для локализации вашего приложения (poEdit, например).
hybroid
Спасибо. Забыл глянуть в исходник. Действительно реализовано при помощи аналога Pear.
Да, не радует.
Займусь этими вопросами после релиза.
Я тоже задумался этим вопросом. Займусь в ближайшее время. После поделюсь своей реализацией. Может почерпнёте что-то..
Меня ещё задевает за живое использование Yii::t() =) Это жесть какая-то, ИМХО. По-моему использование __() - это почти стандарт.
Я вообще недавно стал посматривать на Yii. У вас, разработчиков, есть какой-то issue-трекер? Что-то в первого взгляда не нашёл. Или искал плохо.
PS: Подписывание на комменты кажется не сработало.
Пардон, как-то не заметил Google Code =)
Спасибо за ссылку на PHP FAQ по gettext, сейчас очень актуально для меня.
Добрый день! Если Вы заинтересованы в локализации web-ПО, ПО для персональных компьютеров, ПО для мобильных устройств либо иного вида программного обеспечения, я рекомендую Вам использовать этот инструмент на базе web: poeditor.com/ POEditor является интуитивным, хорошо проработанным инструментом, обладающим рядом полезных свойств, которые помогают организовать процесс управления переводом. Он поддерживает множество популярных форматов файлов и обладает собственным API, что обеспечивает лучшую автоматизацию. Желаю Вам больших успехов в Ваших проектах!