понедельник, 8 февраля 2010 г.

Проблема с интернационализацией.

В процессе написания небольшого скрипта на PHP решил, что будет хорошо, если скрипт будет поддерживать несколько языков.
По первому взгляду вопрос решается обычным ассоциативным массивом. Но в этом мире и без меня достаточно изобретателей велосипедов, поэтому следовало посмотреть gettext. Инструмент мне понравился, особенно утилита xgettext, но его настройка пока мне не дается.
Возникли таки проблемы:
  1. Хороший плагин для eclipse gted по-умолчанию формирует .po/.mo-файлы в папке ./locale/<код_языка>, а скрипт (считай модуль апача) подтягивает файлы из папки ./locale/<код_языка>/LC_MESSAGES. Неудобно то, что файлы приходится перекладывать.
  2. На моем EasyPHP  файлы перевода подтягиваются только после перезагрузки сервера. Понятно, что для продакшн-сервера это будет неудобно.
  3. Ну, и никто таки не смог мне внятно объяснить смысл установки локали (setlocale) и переменной окружения (putenv, LANG). Этот вопрос явно мной недокурен в достаточной степени.
Если эти вопросы не решатся, то мой велосипед будет функцией, которая парсит .po-файлы. Удобно тем, что можно использовать тот же xgettext, но не нужен отдельный модуль для Apache. С другой стороны быстродействие... Не знаю, не знаю...

P.S.: Кстати, для модуля i18n, например для drupal, файлы перевода это только .po-файлы. К чему бы это?

P.P.S.: Я был прав насчет перегрузки сервера. Но есть интересный хак при помощи которого можно обойти кеширование .mo-файлов. И с локалью все стало понятно.

3 комментария:

Green FiLin комментирует...

Я его все-таки добью. Щас узнаем у автора плагина о LC_MESSAGES
https://sourceforge.net/projects/gted/forums/forum/648470/topic/3546479

Green FiLin комментирует...

Вот, еще кое-что:
http://www.php.net/manual/en/book.gettext.php#91650

MCNet комментирует...

test

Отправить комментарий