интернационализация веб-приложений Php с помощью Gettext();

В настоящее время я разрабатываю веб-приложение PHP, которое должно быть доступно на французском и английском языках. Я осмотрелся и обнаружил, что функциональность Gettext() обеспечивает наилучшую производительность.

Я создал свой файл .pot с помощью команды

 xgettext PhpFileToTranslate.php -o NameOfTemplateFile.pot

и успешно сгенерировал файл .pot. Я использовал PoEdit для создания файла messages.po и создал messages.mo.

Вот файлы моего сервера:

/app
    /locale
        /en_US
              /LC_MESSAGES
              messages.po
              messages.mo
        /fr_FR
              /LC_MESSAGES
              messages.po
              messages.mo
        template.pot

И я установил локаль в файле php следующим образом:

$language = $_SESSION['language'];  //session contains 'fr_FR.UTF-8' or 'en_US.UTF-8'
setlocale(LC_ALL, $language);
bindtextdomain('messages', './locale');  
textdomain('messages');

но я вижу только метку, а не перевод... Я пытался поставить "fr_FR" вместо "fr_FR.UTF-8" и всевозможные строки, но это не работает.

Я что-то упускаю? Мой сервер - Ubuntu 12.04 Server с Apache и php5.


person William Fortin    schedule 15.08.2012    source источник


Ответы (2)


Чтобы скомпилировать ваши файлы .mo в Linux, вам необходимо установить локали на сервере и на машине, которая их компилирует. Локали — это языки, поддерживаемые вашей ОС.

Как указано в этом руководстве: http://dev.jimdo.com/archive-old-blog/tutorial-for-the-easy-use-of-gettext-for-internationalization-of-php-apps/ Убедитесь, что у вас установлены локали на вашем Linux

Убедитесь, что локали, которые вы хотите использовать, установлены в вашем Linux и что вы используете .UTF-8 (вы хотите i18n, поэтому используйте UTF!):

# Example for debian
dpkg-reconfigure locales

-- Для установки новых локалей в Linux

Перечислите языки, фактически установленные в вашей системе:

locale -a

Пример установки fr_FR:

#List the available i18n locales
less /usr/share/i18n/SUPPORTED

Установить локаль (здесь fr_FR.utf8)

locale-gen fr_FR.utf8

Перенастройте локали в вашей системе

sudo  dpkg-reconfigure locales

Перекомпилируйте файл .mo с помощью PoEdit, и это должно помочь. Убедитесь, что вы установили локали как на сервере, так и на вашем компьютере, компилируя файлы .mo.

надеюсь, это поможет

person Bruno Gagnon-Adam    schedule 15.08.2012
comment
Действительно, у меня не было установленного fr_FR.utf8 на моем компьютере и на моем сервере... Теперь он работает! Большое спасибо за помощь. - person William Fortin; 15.08.2012

В дополнение к тому, что сказал Бруно, не забудьте перезагрузить конфигурацию Apache (например, перезагрузка службы apache2). Я потратил некоторое время на то, чтобы выяснить, почему он не работает, просто чтобы обнаружить, что конфигурация Apache должна быть перезагружена после установки нового языка/локали.

person François    schedule 20.03.2013