Вопрос

Есть несколько руководств по gettext (с Poedit)...к сожалению, это в основном для среды UNIX.И еще более прискорбно то, что я запускаю свой сервер WAMP в Windows XP (но я разрабатываю для среды UNIX), и ни одно из руководств не может заставить gettext работать должным образом для меня.Со справочной страницы (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

Пожалуйста, посоветуйте!Спасибо за ваше время :)

Это было полезно?

Решение 6

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

Другие советы

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

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

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

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).

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

Это решение, которое сработало для меня.Это работает на последней версии 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top