[英]Can't get gettext (php) on Ubuntu working
以下示例适用于使用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");
?>
有人有主意吗?
我遇到了同样的问题。 我将描述我在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(否则将找不到新生成的语言环境),
sudo service apache2 restart
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用于charset:
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"
(2)我必须保持与安装的语言环境相同的文件夹名称。 例如,我通过运行sudo locale-gen kn_IN
安装了Kannada。 这生成了kn_IN.UTF-8
。 注意UTF-8中的大写字母和连字符。 我在php脚本中设置locale时使用了相同的名称,并在我放置messages.mo文件的文件夹名称中使用了相同的名称:
PHP脚本:
// 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
Ubuntu对文件夹和文件名区分大小写。 因此,请确保如上所示维护大写字母。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.