Gettext не работает, никаких сообщений об ошибках, используя php 5.3 - PullRequest
2 голосов
/ 19 января 2012

Я уже несколько дней безуспешно отыкаюсь в этом. Я просто хочу, чтобы gettext работал.

В результате получается, что строка, записанная в php-файле, печатается, а не переведенная. То есть если я делаю "echo gettext (" Service ");" затем печатается «Сервис», а не шведский «Tjänster».

В httpd / error_log нет абсолютно никаких сообщений об ошибках. Не при запуске приложения или (пере) запуске apache.

Использование Centos 6.2 и php 5.3.

Это моя структура каталогов:

/path/to/locale/sv_SE.utf8/LC_MESSAGES/messages.mo
/path/to/setlocale.php

Мой файл messages.po:

msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-01-18 20:09+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: setlocale.php:29
msgid "Service"
msgstr "Tjänst"

#: setlocale.php:30
msgid "Name"
msgstr "Tjänst"

setlocale.php:

<?php
  if (!function_exists("gettext"))
    {
        echo "gettext is not installed";
    }
    else
    {
        echo "gettext is supported";
    }

    echo "Exist?: ".setlocale(LC_MESSAGES, 'sv_SE.utf8').";  //Prints 'sv_SE.utf8, hence it exist in the system. 

    bindtextdomain('messages', '/var/www/html/smic/modules/core/localization/locale');
    textdomain('messages');
    bind_textdomain_codeset('messages', 'UTF-8');

    echo gettext("Service");
    echo _("Name");

?>

Поскольку напечатано "gettext is support", gettext по крайней мере работает в некоторой степени.

'sv_SE.utf8' также печатается, следовательно, он существует в системе

Я делал все возможное, чтобы установить правильные пакеты (ну, по крайней мере, насколько я понимаю, но, конечно, здесь могут быть некоторые проблемы). PHP 5.3 поставляется с int как часть ядра. Мне не удалось скомпилировать с помощью ./configure --enable-intl. Я получаю сообщение об ошибке при попытке использовать это, и я думаю, это потому, что это часть php 5.3. Я прав?

Я не могу найти ни один intl.so (updatedb сделал и искал его), чтобы добавить его в файл php.ini, расширение не добавлено = intl.so. Я также сделал это без успеха, но если я не могу найти intl.so, я думаю, что нет смысла добавлять extension = intl.so?

В некоторых потоках упоминаются некоторые пакеты для установки, и я тоже попробовал:

yum install libicu-devel
yum install libicu

Было бы замечательно, если кто-то может помочь, я не вижу, как двигаться вперед, и большинство постов / потоков обсуждают, как установить, используя PHP 5.2, в котором intl не является частью. Но я даже не знаю, связана ли проблема с настройкой системы или чем-то еще.

1 Ответ

0 голосов
/ 09 ноября 2012

Не уверен, что это может помочь вам, но этот фрагмент работал для меня.

$lang_path = FCPATH.APPPATH.'language/locale';
putenv('LANG='.$code.'.UTF-8');
setlocale(LC_ALL, $code.'.UTF-8');
bindtextdomain('lang', $lang_path);
textdomain('lang');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...