使用php 5.3,Gettext无法正常工作,没有错误消息

时间:2012-01-18 21:49:47

标签: php linux localization php-5.3 gettext

我已经在这里蹦了几天,现在没有任何成功。我只是想让gettext工作。

会发生的是打印在php文件中的字符串,而不是翻译的字符串。即如果我做“echo gettext(”服务“);”然后打印“服务”,而不是瑞典语“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”,gettext至少在某种程度上起作用。

'sv_SE.utf8'也被打印出来,因此它存在于系统中

为了安装正确的包装,我一直在尽我所能(好吧,至少根据我的理解但当然这里可能存在一些问题)。 PHP 5.3附带了intl作为核心的一部分。我还没有设法使用./configure --enable-intl进行编译。我试图使用它时会出现错误,我想这是因为它是php 5.3的一部分。我对吗?

我找不到任何intl.so(updatedb已完成并搜索它)以添加到php.ini文件中,没有添加extension = intl.so。我没有成功也做到了,但是如果我找不到intl.so我想加入extension = intl.so是没有意义的吗?

有些线程提到了一些要安装的软件包,我也试过了:

yum install libicu-devel
yum install libicu

如果有人可以提供帮助会很棒,我不会看到如何前进,大多数帖子/线程正在讨论如何在使用PHP 5.2时安装,其中intl不是其中的一部分。但我甚至不知道问题是否与系统设置或其他任何问题有关。

1 个答案:

答案 0 :(得分:0)

不确定这是否对您有所帮助,但此片段对我有用。

$lang_path = FCPATH.APPPATH.'language/locale';
putenv('LANG='.$code.'.UTF-8');
setlocale(LC_ALL, $code.'.UTF-8');
bindtextdomain('lang', $lang_path);
textdomain('lang');