php-gettext не работает на рабочем сервере. (Убунту)

У меня проблемы с gettext в PHP; у меня есть два сервера, один локальный (на котором я разрабатываю) в Windows (с vs.php) и работает, а другой в Amazon EC2 (обновлен Ubuntu 12.04), это рабочий сервер, и на этом сервере тот же код не т нашел.

Это мой код:

Я инициализирую gettext этим.

function initialize_i18n($locale) {
    $locales_root = "./librerias/noAuto/locale";
    putenv('LANG='.$locale);
    putenv("LC_ALL=" . $locale);
    setlocale(LC_ALL,$locale);
    $domains = glob($locales_root.'/'.$locale.'/LC_MESSAGES/messages*.mo');
    if (count ($domains) > 0)
    {
        $current = basename($domains[0],'.mo');
        $timestamp = preg_replace('{messages-}i','',$current);
        bindtextdomain($current,$locales_root);
        bind_textdomain_codeset( $current, "UTF-8" );
        textdomain($current);
        if ($locale == "en_US")
        {
            if( _("Modificar") === "Modify" ) {
                $system->setDebug( "Translated correctly");
            } else {
                $system->setDebug( "Gettext don't working");
            }
        }
    }
}
initialize_i18n("en_US");

Все файлы в моих проектах закодированы в UTF-8 (на испанском языке), а .mo и .po были сгенерированы с помощью poedit.

Я пытаюсь перезагрузить службу apache, но не работает.

Любая идея?


person gokuhs    schedule 04.09.2012    source источник


Ответы (2)


Новый день, новые идеи! У меня есть решение!

У вас такая же проблема, вам нужно проверить эти шаги.

1 - В вашем Linux установлен этот язык?

Вы можете проверить это:

 locale -a

Если ваш язык не указан, установите его, например, вы можете установить английскую локализацию следующим образом:

 # aptitude install language-pack-en

И перезапустите apache, когда закончите.

2 - Код вашего языка правильно указан в PHP?

Если вы перечислили список языковых кодов с помощью locale -a, вы увидите языковые коды, которые вы можете использовать, например, для английского в моей системе: [...] en_NG.utf8 en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US .utf8 [...] Одна моя ошибка, я использовал "en_US" вместо "en_US.utf8".

3 - Папка имеет то же имя, что и код языка. (вторая моя ошибка)

PD> Извините за мой плохой английский

person gokuhs    schedule 05.09.2012
comment
Спасатель! Мне потребовались бы часы, чтобы даже подумать в этом направлении :) Спасибо! - person Shai Mishali; 26.02.2013

Если он не работает в другой среде, вам лучше проверить, успешно ли обрабатываются ключевые функции.

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

person akky    schedule 04.09.2012
comment
Спасибо за ваше время, я попробовал ваши предложения, и это де вывод: UTF-8 ----- textdomain($current) -> messages ---- Ожидается? - person gokuhs; 05.09.2012