gettext работает локально, но не на хост-сервере - PullRequest
1 голос
/ 11 марта 2011

У меня странная проблема с gettext в моем приложении PHP .Он работает на моих машинах для разработки (Ubuntu 10.10 32-битная, 2 x Windows 7 64-битная, Windows 7 32-битная, все работают под XAMPP) .

Рабочий сервер является платным хостом, на котором работаетаромат Linux 64 бит .Я не знаю точно, какой.Я могу попытаться выяснить, имеет ли это значение.

Вот как я инициализирую gettext:

//just FYI:
//$this->data['language'] == 'pl'
//dirname(__FILE__).'/../language/locale' ==
//'/home/mingos/public_html/example.com/application/controllers/../language/locale'

putenv('LANGUAGE='.$this->data['language']);
putenv('LANG='.$this->data['language']);
putenv('LC_ALL='.$this->data['language']);
setlocale(LC_ALL,$this->data['language']);

bindtextdomain($this->data['language'], dirname(__FILE__).'/../language/locale');
bind_textdomain_codeset($this->data['language'],'UTF-8');
textdomain($this->data['language']);

Я запустил phpinfo() на сервере и обнаружил, чтоgettext включен, а safe_mode выключен, исключая возможность неизменности LC_ALL (я думаю).

Скомпилированный каталог gettext:

/home/mingos/public_html/example.com/application/language/locale/pl/LC_MESSAGES/pl.mo

Таким образом, путь, заданный в bindtextdomain, является правильным.

Я не получаю никаких уведомлений или предупреждений, но gettext не извлекает переводы из моего каталога, возвращая просто те строки, в которые он подается, напримерgettext('About us') возвращает About us вместо O nas.

Сам каталог правильно скомпилирован с использованием poEdit и подтверждено, что он работает на моих машинах с 4 разработчиками.

Что может бытьдругие возможные причины этого?

Ответы [ 2 ]

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

gettext будет поддерживать только установленные локали.Если у вашего хостинг-провайдера есть оболочка, вы должны запустить 'locale -a', чтобы увидеть список установленных локалей.Возможно, вам придется связаться с вашим хостинг-провайдером, чтобы он установил необходимый языковой пакет для pl.

1 голос
/ 29 мая 2014

Старый вопрос, но я хотел объяснить, почему он работает на Windows, а не на Linux.Серверы Windows не используют те же имена локалей, что и серверы Linux.Например, в Windows у вас будет «en», а в Linux - «en_EN».То же самое с польским, в Windows это будет «pl», а в Linux - «pl_PL»Вам понадобится какой-то тип теста для вашего локального или живого сервера и соответственно измените строку локали.

...