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";
}
?>