【问题标题】:Can't get gettext (php) on Ubuntu working无法在 Ubuntu 上运行 gettext (php)
【发布时间】:2011-03-10 09:12:21
【问题描述】:

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

?>

有人有什么想法吗?

【问题讨论】:

  • 操作系统本身是否正确设置了语言?看看我之前的问题也许可以帮助stackoverflow.com/questions/1431354/php-gettext-in-norwegian
  • 您是否为 sv_SE 生成了语言环境?如果不是,则将包含sv_SE.UTF-8 的行添加(或取消注释)到/etc/locale.gen,然后运行sudo locale-gen
  • sudo locale-gen sv_SE.UTF-8(然后重新启动 lig​​httpd)工作。您能否将其发布为该问题的答案,以便我将其标记为正确?谢谢!

标签: php ubuntu gettext php-gettext


【解决方案1】:

我也遇到了同样的问题。我将描述我在 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");

现在应该一切正常了。

【讨论】:

  • 在 Debian 上发现有一个名为 locales-all 的软件包,它可以提供一种更简单的方法,而无需手动执行 locale-gen。我还需要apt-get install locales
  • 太棒了!终于有办法了。非常感谢。
【解决方案2】:

虽然我遵循了已接受答案中概述的步骤,但我无法让它在 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"

(2) 我必须保持与安装的语言环境相同的文件夹名称。例如,我通过运行 sudo locale-gen kn_IN 安装了 Kannada。这产生了kn_IN.UTF-8。请注意 UTF-8 中的大写字母和连字符。我在我的 php 脚本中设置语言环境时使用了相同的名称,并使用了我放置 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 对文件夹和文件名区分大小写。因此,请确保如上所示保持大写字母。

【讨论】:

    猜你喜欢
    • 2015-11-22
    • 2011-06-06
    • 1970-01-01
    • 2016-05-06
    • 2017-09-22
    • 2012-09-27
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多