无法在Ubuntu上运行gettext(php)

pth*_*lin 15 php ubuntu gettext php-gettext

以下示例适用于使用Apache的Mac OS X,即我将已翻译的字符串回显.但是在使用lighttpd的Ubuntu上,我得到原始文本"非活动帐户".我已经尝试了各种各样的环境varialbes组合而没有任何运气.它不是文件权限,因为我可以回显.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");

?>
Run Code Online (Sandbox Code Playgroud)

有人有主意吗?

Ser*_*ano 35

我遇到了同样的问题.我将描述我在Ubuntu 10.10上修复它所做的事情.

1)确保你安装了'gettext',

sudo apt-get install gettext
Run Code Online (Sandbox Code Playgroud)

或者,如果无法安装'gettext',则可以安装'php-gettext'.如果您已安装'gettext',则不需要包'php-gettext'.

2)然后为您的语言生成语言环境.在这个例子中,我将使用'sv_SE'.在'/ usr/share/i18n/SUPPORTED'中查找支持的语言环境,

less /usr/share/i18n/SUPPORTED
Run Code Online (Sandbox Code Playgroud)

你会发现多行以'sv_SE'开头,

sv_SE.UTF-8 UTF-8
sv_SE ISO-8859-1
sv_SE.ISO-8859-15 ISO-8859-15
Run Code Online (Sandbox Code Playgroud)

这意味着您有多个选项可用于生成sv_SE的语言环境.其中一个选项的名称中没有句点(.)(即sv_SE ISO-8859-1); 这是该语言环境的默认字符集.要为默认字符集生成语言环境,请运行以下命令:

sudo locale-gen sv_SE
Run Code Online (Sandbox Code Playgroud)

如果要为UTF-8字符集生成该语言环境,请运行此命令,

sudo locale-gen sv_SE.UTF-8
Run Code Online (Sandbox Code Playgroud)

生成语言环境后重新启动Apache(否则将找不到新生成的语言环境),

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

3)最后,更新PHP脚本以匹配您生成的语言环境.如果您为'sv_SE'生成了区域设置,

setlocale(LC_ALL,"sv_SE");

但是,如果您生成了与该语言环境等效的UTF-8,请使用,

setlocale(LC_ALL,"sv_SE.UTF-8");

一切都应该现在奏效.

  • 在Debian上有一个名为`locales-all`的软件包可以提供一种更简单的方法,而无需手动执行`locale-gen`.我还需要`apt-get install locales` (4认同)