Ответ 1
Это произошло потому, что у меня не было установленных локалей.
Там есть некоторые обучающие материалы для 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-windows/96
Я цитирую с веб-страницы:
На серверах Linux (или на любых других серверах окна), способ сделать это это:
setlocale(LC_MESSAGES, "en_US");
Правильный способ установки местоположения на windows это:
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");
?>
После всего этого вы должны создать папку локали, папку en_US (или другой язык), папку LC_MESSAGES, а затем поместить файл messages.po.