Функция PHP gettext возвращает только исходную непереведенную строку


Я пытаюсь использовать gettext добавить поддержку локализации на мой сайт. Я следовал различным руководствам по настройке gettext и сделал следующее:

Я создал следующие файлы и каталоги в корне моего проекта dir:

test.php

locale/
  de_DE
    LC_MESSAGES
       messages.mo
       messages.po

  en_GB
    LC_MESSAGES
       messages.mo
       messages.po

Я использовал Poedit для создания вышеописанного .файлы ПО и МО. Я заставил sue it использовать Unix-окончания строк, UTF-8 и установить язык и страну соответственно.

Затем я создал PHP-скрипт под названием test.php, который имеет следующий код:

<?php

  define('LOCALE', 'de_DE');

  // Set up environmental variables
  putenv("LC_ALL=" . LOCALE);
  setlocale(LC_ALL, LOCALE);
  bindtextdomain("messages", "./locale");
  bind_textdomain_codeset("messages", LOCALE .".utf8");
  textdomain("messages");

  die(gettext('This is a test.'));

?>

Я импортировал текст "это тест."чтобы Поедить и снабдить переводом и сохранить его.

Но почему-то тест.php скрипт будет выводить только исходный текст без перевода. Он отказывается загружать версию для файлов перевода.

Стоит отметить, что сервер работает под управлением Linux (Ubuntu), Апач 2.2.11 и PHP 5.2.6-3ubuntu4.5. Я проверил phpinfo(), и gettext включен.

3 7

3 ответа:

Ваша проблема может быть связана с отсутствием локали в вашей системе. Пожалуйста, установите немецкий язык, и все должно работать:

sudo apt-get install language-pack-de-base

Затем выполните следующую команду, и вы увидите немецкие локали:

locale -a

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

  <?php

  setlocale(LC_ALL, 'de_DE.UTF-8');
  bindtextdomain('messages', './locale');
  textdomain('messages');

  echo gettext('This is a test.');

  ?>

Да, да, PHP снова поддерживает gettext. Просто намек, который может быть или не быть полезным для вас:

Из-за ужасной реализации PHP gettext многие проекты с открытым исходным кодом, такие как WordPress, перешли на этот: http://savannah.nongnu.org/projects/php-gettext/ и полностью обойти исходную версию.

Я тоже это сделал в одном из своих проектов, и не могу сказать, что я что-то упустил.

Недостаток для коммерческих проектов: это под GPL.

Попробуйте следующее

<?php

  define(LC_MESSAGES, 'de_DE');

  // Set up environmental variables
  putenv("LANGUAGE=de_DE");
  bindtextdomain("*", dirname(__FILE__).'/locale');
  bind_textdomain_codeset("messages", 'UTF-8');      

  die(gettext('This is a test.'));

?>