PHP и GetText не работает должным образом на моем сервере - PullRequest
1 голос
/ 18 марта 2011

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

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

Звучит странно, я знаю.

Ничего в журналах apache.

потерялся: '(

Ответы [ 2 ]

2 голосов
/ 18 марта 2011

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 (остановите меру пропуска)
0 голосов
/ 28 октября 2012

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

?>
...