PHP gettext в Windows

Есть несколько учебных пособий для gettext (w / Poedit) … к сожалению, это в основном для среды UNIX. И еще более неудачным является то, что я запускаю свой WAMP-сервер в Windows XP (но я разрабатываю среду UNIX), и ни одно из учебников не может заставить gettext работать правильно для меня. На странице man ( http://us3.php.net/manual/en/book.gettext.php ), похоже, что это другой процесс в среде Windows. Я пробовал некоторые из решений в комментариях, но я до сих пор не могу заставить его работать! Прошу, я потратил много часов на это, надеюсь, кто-то может указать мне в правильном направлении, чтобы заставить эту работу работать! (и я уверен, что есть другие, которые разделяют мое разочарование). Пока с моей настройкой, я получаю только вывод «Hello World!». тогда как я должен получить переведенную строку.

Вот моя настройка / код:

<?php // test.php if (!defined('LC_MESSAGES')) { define('LC_MESSAGES', 6); } $locale = "deu_DEU"; // apparently the locales are different on a WINDOWS platform putenv("LC_ALL=$locale"); setlocale(LC_ALL, $locale); bindtextdomain("greetings", ".\locale"); textdomain("greetings"); echo _("Hello World"); ?> 

Структура папок

 root: C: \ Program Files \ WampServer 2 \ www
 test.php: C: \ Program Files \ WampServer 2 \ www \ site
 .po: C: \ Program Files \ WampServer 2 \ www \ site \ locale \ deu_DEU \ LC_MESSAGES \ greetings.po
 .mo: C: \ Program Files \ WampServer 2 \ www \ site \ locale \ deu_DEU \ LC_MESSAGES \ greetings.mo

Пожалуйста, порекомендуйте! Спасибо за ваше время 🙂

Я столкнулся с проблемами при работе с gettext на моей локальной машине, и после некоторого поиска я нашел эту страницу, которая решила мою проблему: http://www.kipras.com/getting-gettext-to-work-in-apache-on- окна / 96

Я цитирую с веб-страницы:

На серверах Linux (или на любых других серверах, расположенных отдельно от окон) способ сделать это:

 setlocale(LC_MESSAGES, “en_US”); 

Правильный способ установки локальности в окнах:

 putenv(“LC_ALL=en_US”); 

У меня была такая же проблема, и я потратил почти день или около того на нее. Наконец, я нашел очень простое решение, а именно удалить WAMP Server (версия 2.1) и установить более новую версию (WampServer 2.1e – 32 бит). Странно, но он полностью решил проблему.

Вот пример кода, который работал для меня:

 <?php $locale = "deu_DEU"; putenv("LC_ALL=$locale"); setlocale(LC_ALL, $locale); bindtextdomain("greetings", "./locale"); textdomain("greetings"); echo _("Hello World"); ?> 

Надеюсь, поможет.

Я не сделал полного расследования по этому вопросу, но я уверен, что одна из ваших ошибок заключается в том, что вы использовали неверные коды языка – даже в Windows коды локалей одинаковы – это локали gettext, и они являются кросс-платформенными.

Попробуйте использовать только «de» в качестве кода языка, он должен работать. Также убедитесь, что ваш PHP имеет расширение gettext и активировано (проверьте с помощью phpinfo).

Может быть, слишком поздно, но у меня были подобные проблемы, пока я не включил «короткий открытый тег» в моих настройках php WAMP

Это решение, которое сработало для меня. Это работает на последнем wampserver. (источник: http://www.extradrm.com/blog/?p=1035 )

1) Загрузите php-gettext отсюда: https://launchpad.net/php-gettext/+download и разархивируйте его

2) Добавьте следующие файлы, найденные в корневом каталоге пакета, в ту же папку, что и test-language.php: – gettext.inc – gettext.php – streams.php

3) Откройте php.ini и закомментируйте wampserver php_gettext.dll:

;extension=php_gettext.dll

4) Это новый тестовый файл test-language.php

 <?php error_reporting(E_ALL | E_STRICT); // define constants define('PROJECT_DIR', realpath('./')); define('LOCALE_DIR', 'C:/wamp/www/test/locale'); define('DEFAULT_LOCALE', 'es_ES'); require_once('gettext.inc'); $supported_locales = array('en_US', 'sr_CS', 'de_CH','es_ES'); $encoding = 'UTF-8'; $locale = (isset($_GET['lang']))? $_GET['lang'] : DEFAULT_LOCALE; //var_dump($locale);die(); // gettext setup T_setlocale(LC_MESSAGES, $locale); // Set the text domain as 'messages' $domain = 'messages'; bindtextdomain($domain, LOCALE_DIR); // bind_textdomain_codeset is supported only in PHP 4.2.0+ if (function_exists('bind_textdomain_codeset')) bind_textdomain_codeset($domain, $encoding); textdomain($domain); echo gettext("HELLO_WORLD"); ?> 

После всего этого вы должны создать папку locale, папку en_US (или другого языка), папку LC_MESSAGES, а затем поместить файл messages.po.

Это потому, что у меня не было установленных локалей.