PHP и GetText не работает должным образом на моем сервере

Я пытаюсь настроить gettext для перевода своего веб-сайта, но продолжаю получать странное поведение на моем сервере.

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

Это звучит безумно, я знаю.

Ничего в логах apache.

Помогите, я потерялся:'(

2 ответа

Gettext в PHP имеет проблемы. http://bugs.php.net/search.php?cmd=display&search_for=gettext&x=0&y=0 - Возможно, вы столкнулись с одним из них.

Я не могу предложить ни исправление, ни хороший подход к отладке, но:

  • Сделайте тестовый скрипт, прогоните все известные строки. Тест с разными кодировками.
  • Попробуйте обновить - с 5.2 до php 5.3, если это так.
  • Или выгрузите модуль gettext в php.ini. И вместо этого загрузить его динамически через dl(),
    • Плохая производительность, но может уменьшить ошибки времени выполнения / памяти. (Что это звучит как.)
  • Не используйте gettext.so, но реализации сценариев php-gettext или upgradephp gettext.php (остановите зазор)

1a) Проверьте с помощью "locale -a", существует ли локаль на вашем веб-сервере.
1b) Без оболочки попробуйте этот код, если вы можете установить локаль

echo setlocale(LC_ALL, 0);     // read the current locale
setlocale(LC_ALL, "fa");       // try to write your locale
echo setlocale(LC_ALL, 0);     // check if your was accepted

2a) Если локаль отсутствует, добавьте ее, например, с помощью "apt-get install locales".
2b) Если у вас нет прав root, используйте https://launchpad.net/php-gettext в качестве замены.

<?php

$locale = "fa";

// Define location and domain of translations
$directory = realpath('./') .'/translations/LOCALES';
$domain    = 'php-addressbook';
$default_locale = $locale;
$supported_locales = array($locale);


// Prepare "php-gettext"
require_once('gettext/gettext.inc');


// Prepare "native gettext" setup
T_setlocale(LC_ALL, $locale);
T_bindtextdomain($domain, $directory);
T_textdomain($domain);
T_bind_textdomain_codeset($domain, 'UTF-8');

echo T_gettext('ADDRESS');

if (!locale_emulation()) {
    print "<p>locale '$locale' is supported by your system, using native gettext implementation.</p>\n";
}
else {
    print "<p>locale '$locale' is _not_ supported on your system, using the default locale '". $default_locale ."'.</p>\n";
}

?>
Другие вопросы по тегам