Can';无法在Ubuntu上运行gettext(php)

Can';无法在Ubuntu上运行gettext(php),php,ubuntu,gettext,php-gettext,Php,Ubuntu,Gettext,Php Gettext,下面的示例在使用Apache的Mac OS X上工作,也就是说,我得到了翻译后的字符串。但是在使用lighttpd的Ubuntu上,我得到了原始文本“InactiveAccount”。我尝试过各种环境变量的组合,但都没有成功。这也不是文件权限,因为我可以回显.mo文件的内容 <?php //$locale = 'sv_SE.UTF-8'; $locale = 'sv_SE'; $dir = dirname(__FILE__); // File permission is appara

下面的示例在使用Apache的Mac OS X上工作,也就是说,我得到了翻译后的字符串。但是在使用lighttpd的Ubuntu上,我得到了原始文本“InactiveAccount”。我尝试过各种环境变量的组合,但都没有成功。这也不是文件权限,因为我可以回显.mo文件的内容

<?php

//$locale = 'sv_SE.UTF-8';
$locale = 'sv_SE';

$dir = dirname(__FILE__);

// File permission is apparantly not a problem as this works...
//echo file_get_contents($dir . '/sv_SE/LC_MESSAGES/flattr.mo');

putenv("LANG=$locale");
putenv("LANGUAGE=$locale");
putenv("LC_ALL=$locale");
putenv("LC_MESSAGES=$locale");
setlocale(LC_ALL, $locale);
setlocale(LC_MESSAGES, $locale);
//setlocale(LANG, $locale);
//setlocale(LANGUAGE, $locale);

bindtextdomain('flattr', $dir);
//bind_textdomain_codeset("flattr", 'UTF-8');
textdomain('flattr');

echo _("Inactive account");

?>


有人有什么想法吗?

我也面临着同样的问题。我将描述我在Ubuntu 10.10上修复它所做的事情

1) 确保已安装“gettext”

sudo apt-get install gettext
或者,如果无法安装“gettext”,则可以安装“php gettext”。如果已经安装了“gettext”,则不需要“php gettext”包

2) 然后为您的语言生成区域设置。在本例中,我将使用“sv_SE”。在“/usr/share/i18n/supported”中查找受支持的区域设置

less /usr/share/i18n/SUPPORTED
您将发现多行以“sv_SE”开头

sv_SE.UTF-8 UTF-8
sv_SE ISO-8859-1
sv_SE.ISO-8859-15 ISO-8859-15
这意味着您可以使用多个选项为sv_SE生成区域设置。其中一个选项的名称中没有句号(.)(即
sv_SE ISO-8859-1
);这是该区域设置的默认字符集。要生成默认字符集的区域设置,请运行以下命令

sudo locale-gen sv_SE
如果要为UTF-8字符集生成该区域设置,请运行以下命令

sudo locale-gen sv_SE.UTF-8
在生成区域设置后重新启动Apache(否则将找不到新生成的区域设置)

3) 最后,更新PHP脚本以匹配生成的区域设置。如果为“sv_SE”生成了区域设置

setlocale(LC_ALL,“sv_SE”)

但是如果您生成了该区域设置的UTF-8等价物,请使用

setlocale(LC_ALL,“sv_SE.UTF-8”)


现在一切都应该正常了。

尽管我遵循了公认答案中概述的步骤,但我无法让它在Ubuntu 14.04 LTS上运行。我必须做两件重要的事情:

(1) 在生成messages.mo文件之前,我必须在message.po中明确指定字符集的UTF-8:

msgid   ""
msgstr  "Project-Id-Version: PACKAGE VERSION\n"
        "Report-Msgid-Bugs-To: \n"
        "POT-Creation-Date: 2016-12-19 16:28+0530\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"
        "Language: \n"
        "MIME-Version: 1.0\n"
        "Content-Type: text/plain; charset=UTF-8\n"    <---------change here
        "Content-Transfer-Encoding: 8bit\n"
文件夹名称:

project_folder
    /Locale
        /kn_IN.UTF-8      <------change here
            /LC_MESSAGES
                /messages.mo
project\u文件夹
/地点

/kn_IN.UTF-8是否在操作系统中正确设置了该语言?请看我前面的问题,也许可以帮助您生成sv_SE的区域设置?如果没有,则在
/etc/locale.gen
中添加(或取消注释)包含
sv_SE.UTF-8的行,然后运行
sudo locale gen
。sudo locale gen sv_SE.UTF-8(然后重新启动lighttpd)工作。你能把它贴出来作为这个问题的答案,这样我就可以把它标记为正确的吗?谢谢在Debian上,有一个名为
localeall
的包,它可以提供一种更简单的方法,无需手动执行
localegen
。我还需要
apt安装locales
Awesome!最后是一个解决方案。谢谢。
// I18N support information
$locale = "kn_IN.UTF-8";       <----------change here
putenv("LANG=".$locale); 
putenv("LC_ALL=".$locale);
setlocale(LC_ALL, $locale);

$domain = 'messages';
bindtextdomain($domain, "./Locale");
bind_textdomain_codeset($domain, 'UTF-8');
textdomain($domain);
project_folder
    /Locale
        /kn_IN.UTF-8      <------change here
            /LC_MESSAGES
                /messages.mo