Настройка gettext для php под ubuntu

Что я пробовал:

  1. sudo apt-get установить php-gettext
  2. sudo apt-get установить gettext
  3. sudo apt-get установить локали

Мои файлы перевода (*.mo, *.po) находятся под /usr/local/php/include/myapp/i18n/locale/, например /usr/local/php/include/myapp/i18n/locale/da_DK/LC_MESSAGES/generic.mo

Я поставил /etc/php5/conf.d/gettext.ini

extension=gettext.so

Перезапуск apache2 дает мне эту ошибку:

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/gettext.so' - /usr/lib/php5/20090626/gettext.so: cannot open shared object file: No such file or directory in Unknown on line 0

Что я делаю неправильно? Насколько я помню, это стандартный способ установки расширения под linux. Это отлично работает в моей локальной системе, но не на экземпляре Amazon.

php --version PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/gettext.so' - /usr/lib/php5/20090626/gettext.so: cannot open shared object file: No such file or directory in Unknown on line 0 PHP 5.3.10-1ubuntu3.10 with Suhosin-Patch (cli) (built: Feb 28 2014 23:14:25) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies

пожалуйста, помогите мне настроить это расширение на Ubuntu.


person sakhunzai    schedule 17.03.2014    source источник
comment
да я это уже сделал.   -  person sakhunzai    schedule 17.03.2014
comment
Вы можете попробовать locate gettext.so, чтобы узнать, был ли он построен в другом месте. Если это так, попробуйте изменить директиву в файле php.ini.   -  person halfer    schedule 17.03.2014
comment
есть причина понизить голос?   -  person sakhunzai    schedule 17.03.2014
comment
Кроме того, вы уверены, что /etc/php4 правильно? Вы используете 5.3.x, а не версию 4.   -  person halfer    schedule 17.03.2014
comment
У меня есть вырезание из командной строки для php --version. это php5, это опечатка, извините   -  person sakhunzai    schedule 17.03.2014
comment
locate gettext.so дает /usr/lib/perl5/auto/Locale/gettext/gettext.so   -  person sakhunzai    schedule 17.03.2014
comment
Это не будет вашим модулем PHP gettext, так как он находится в папке Perl — возможно, вам потребуется обновить базу данных locate. apt-get install php-gettext вернул какие-либо ошибки?   -  person halfer    schedule 17.03.2014
comment
нет ошибки для php-gettext: php-gettext is already the newest version.   -  person sakhunzai    schedule 17.03.2014
comment
Итак, вам нужно выяснить, где был построен gettext.   -  person halfer    schedule 17.03.2014
comment
Я попробовал updatedb, а затем locate gettext.so выдал тот же результат.   -  person sakhunzai    schedule 17.03.2014
comment
Попробуйте удалить php-gettext, а затем переустановить?   -  person halfer    schedule 17.03.2014
comment
locate php-gettext дать /usr/share/php/php-gettext /usr/share/php/php-gettext/gettext.inc /usr/share/php/php-gettext/gettext.php /usr/share/php/php-gettext/streams.php   -  person sakhunzai    schedule 17.03.2014
comment
Кажется, он не устанавливает модуль gettext.so вместо его оболочки вокруг gettext sth, как это   -  person sakhunzai    schedule 17.03.2014


Ответы (1)


Итак, эта загадка разрешилась превосходным SOQ.

Один из комментариев для gettext на php.net гласит:

Warning for Linux (Ubuntu) users!  Your system will *only* support the locales installed on your OS, in the *exact* format given by your OS.  (See also the PHP setlocale man page.)  To get a list of them, enter locale -a, which will give you something like this:

C
en_US.utf8
ja_JP.utf8
POSIX

So this machine only has English and Japanese!  To add eg. Finnish, install the package:

sudo apt-get install language-pack-fi-base

Rerun locale -a, and "fi_FI.utf8" should appear.  Make sure you're using the same name in your PHP code:

setlocale(LC_ALL, "fi_FI.utf8");

Adjust your po paths so that they match, e.g. "./locale/fi_FI.utf8/LC_MESSAGES/messages.po".

Now restart Apache, and it should finally work.  Figuring this out took quite a while...

Моя проблема решена точно, выполнив следующие действия:

  1. sudo apt-get install языковой пакет-да-база (датский)
  2. locale -a (подтверждено, что локаль da_DK загружена)
  3. mv da_DK da_DK.utf8 (переименован каталог локалей) bind_textdomain_codeset('messages', 'UTF8');

    Одной из точек отладки для меня было setlocale(LC_ALL, 'da_DK.utf8');, которое возвращало false для недопустимых/несуществующих локалей.

Как насчет расширения gettext.so:

Установка php, которую я получил через apt-get, кажется, имеет расширение, добавленное во время компиляции. Мы можем видеть, является ли gettext скомпилированным модулем, например, php -m |grep gettext, что кажется правдой! Мне не нужен gettext.ini, который нужен только тогда, когда PHP компилируется --with-gettext=shared, что здесь не так.

person sakhunzai    schedule 18.03.2014
comment
Я столкнулся со своей справедливой долей проблем с настройкой gettext для различных сред, а именно в Ubuntu и в Windows на XAMPP (включая локаль здесь). Я задокументировал их все в статье в своем блоге для всех, кто все еще борется с этими проблемами: blog.terresquall.com/2020/09/troubleshooting-php-gettext - person John Doe; 31.12.2020