Я успешно использовал GNU Gettext во многих проектах, в которых работал, но на своей последней работе я неожиданно оказался вынужденным работать с действительно неловкой системой локализации.
Текущая система хранит переводы в базе данных, и добавление нового перевода выглядит примерно так:
- добавить вызов функции с ключом перевода в исходный код, например,
print translate('foo');
- добавить несколько операторов SQL INSERT в файл
translations.sql
.
- создать файл с именем
(current revision nr + 1).sql
- выполнить файл .sql в базе данных.
- зафиксировать ваши изменения (до того, как кому-то еще удастся зафиксировать и изменить текущий номер ревизии).
Весь этот процесс полностью ручной, и вы должны повторить почти все, даже если вам нужно исправить небольшую опечатку. Нет поддержки множественных форм. Вся база переводов находится в беспорядке, поскольку переводы почти никогда не удаляются из нее - только добавляются и обновляются.
Я попробовал несколько аргументов, чтобы убедить других разработчиков (особенно одного конкретного разработчика):
- Я говорил о том, что Gettext является стандартом, и что для работы с PO-файлами доступно множество инструментов.
- Я пытался объяснить, что хранение переводов в базе данных не имеет преимуществ по сравнению с сохранением их в текстовом файле - мы просто извлекаем переводы из базы данных по ключу, ничего более.
- Другой разработчик работает над PHP-частью нашего приложения, и в PHP встроен Gettext. Я работаю над JavaScript, у которого нет поддержки Gettext, но в прошлом я создавал свои собственные инструменты для этого.
- Наше приложение не такое большое, что преобразование из старой системы в Gettext заняло бы много времени, даже если это было сделано вручную, и я совершенно уверен, что его можно легко автоматизировать.
- Я даже успешно использовал Gettext для одного небольшого приложения в нашей компании.
Но люди все еще не убеждены. Что я могу делать не так?
Edit:
Через несколько месяцев после публикации этого вопроса мы наконец-то перешли на Gettext. Когда нам нужно было поддерживать более двух языков, недостатки нашей нынешней системы стали более очевидными для тех, кто до сих пор сопротивлялся.