Monday, May 3, 2010

История о локализации - pootle

Как мы делали локализацию сайта.
Если не вдаваться в технические подробности вкручивания локализации в перловый код, то самое интересное было в установке и настройке системы для переводчиков - pootle.

Прикольная штука, местами тупая до безобразия, а местами вполне даже ничего, только привыкнуть к ней надо...
Итак, pootle - система представляющая веб-интерфейс для редактирования файлов локализации. Поддерживает несколько форматов, чуть-чуть умеет работать с VCS (разными), написана на питоне и заточена под linux.

Из особенностей собственно процесса перевода:
 - переводчик может смотреть / переводить / предлагать варианты перевода / коммитить
 - на все отдельные права
 - в качестве "исходного" языка может показывать любой язык - не только msgid

Неочевидная вещь - разные режимы просмотра файлов:
 - режим просмотра / перевода - все записи показываются по-порядку, по 10 на странице (не настраивается)
 - режим проверки / поиска - записи показываются все, но кнопки "Пропустить" ("Skip") / "Назад" ("Back") переводят не на след / пред запись, а на след / пред запись отвечающую условиям поиска. Проверка - это тоже поиск, по условиям "у записи есть предложение перевода" + "у записи стоит флаг 'неточно' ('fuzzy')"

Потратив некоторое время заставили ее нормально взлететь на FreeBSD, потратив еще какое-то время - настроили проекты. Основная проблема тут была в том чтобы объяснить pootle'у что файлы проекта надо еще и с VCS связать. Он такие схемы понимает только если структура каталогов выглядит как po/project_id/lang.po или po/lang/project_id.po. Отдельно доставляет то, что обновлять файлы из него, хоть он вроде и умеет, приводит к непредсказуемым последствиям - может появится набор предложений перевода для служебных записей, или у последних в файле или еще что.

Коммитить из него вроде проблем не составляет... разве что он упорно всех переводчиков хотел называть по именам - без фамилий. Но это легко поборолось. А вот никаких средств против race между разными переводчиками - это зло. Перед коммитом нельзя посмотреть diff - т.е. если переводчиков много, а права коммита только у координатора - то, что именно будет закоммичено можно узнать только постфактум. Впрочем, даже если бы diff был (мы его в результате добавили) - никаких lock'ов все равно нет - так что между diff и commit от координатора содержимое все равно может измениться.

Еще одна веселая особенность - связь с ldap. Поддержка есть из коробки, но странная - фильтры на поиск можно задавать только не содержащие ldap специфичных знаков - строка фильтра прогоняется через ldap.filter.escape_filter_chars... т.е. задать фильтр вида (&(objectClass=myOrgPerson)(uid=%s)(memberOf=cn=tranlators)) нельзя. Пришлось и тут поправить.
На этом веселье не заканчивается - он не пользуется ldap постоянно - только при первом логине, после чего копирует из ldap всю информацию, которая ему нужна (имя, фамилия, email) в свой локальный cache и дальше пользуется им... более того - даёт менять в нем...  Т.е. ничто не мешает переводчику подписываться в коммитах не своим именем-фамилией-адресом, а любым произвольным... президента компании, например :)

Итого: система сырая, требует напильника. Но с другой стороны - это проще чем руками сводить результаты редактирования файлов от 5 людей, ни один из которых не имеет представления о VCS... Так что впечатления положительные. Особенно повеселил посимвольный diff для предложений перевода (и зачем-то анимация при принятии и отклонении предложений).

No comments:

Post a Comment