【问题标题】:Gettext doesn't work on my localhostGettext 在我的本地主机上不起作用
【发布时间】:2015-03-03 15:08:13
【问题描述】:

我尝试从 gettext() 开始,但它在我的本地主机上不起作用。

我的简单代码:

<?php
$language='en';
putenv("LANG=$language"); 
setlocale(LC_ALL,$language);

$domain='test';
bindtextdomain($domain,"languages"); 
textdomain($domain);

echo _("Simple string to translate");

我有文件夹语言,在这个文件夹中还有另一个文件夹 en,但没有创建文件。感谢您的帮助

【问题讨论】:

  • 在打开 PHP 标记后立即将错误报告添加到文件顶部,例如 &lt;?php error_reporting(E_ALL); ini_set('display_errors', 1);,然后是其余代码,以查看它是否产生任何结果,
  • 1) 文件不应该自己创建,您必须创建 .po 文件并使用 msgfmt 命令将其编译为 .mo。 2)请准确显示您的文件夹是什么。 3) 验证您尝试使用的语言环境是否存在于您的系统中。 (在控制台中,执行“locale -a”查看列表)。
  • 已添加,我没有看到任何错误,只有“要翻译的简单字符串”。在我的 xampp 文件夹中,htdocs/languages/en 是空的。
  • 同时检查文件夹权限设置。
  • Naomi: i.imgur.com/RRcVB2B.png - 我的 Windows 控制台没有“locale -a”命令:

标签: php localhost gettext


【解决方案1】:

这是设置语言并从.po 文件调用翻译的好方法。 PHP 仅读取.po,因此请确保具有该文件的扩展名。另外测试您的locale 系统是否支持xy_XY 格式或xy 格式:在Linux 下使用此行:locale -a,您将检查语言环境是如何编写和支持的。 windows下:check the system.io file

//get the location and set the languages
define('SESSION_LOCALE_KEY', 'ix_locale');
define('DEFAULT_LOCALE', 'en_US');
define('LOCALE_REQUEST_PARAM', 'lang');
define('WEBSITE_DOMAIN', 'messages');

if (array_key_exists(LOCALE_REQUEST_PARAM, $_REQUEST)) {
    $current_locale = $_REQUEST[LOCALE_REQUEST_PARAM];
    $_SESSION[SESSION_LOCALE_KEY] = $current_locale;
} elseif (array_key_exists(SESSION_LOCALE_KEY, $_SESSION)) {
    $current_locale = $_SESSION[SESSION_LOCALE_KEY];
} else {
    $current_locale = DEFAULT_LOCALE;
}

putenv("LC_ALL=$current_locale");
setlocale(LC_ALL, $current_locale);
bindtextdomain(WEBSITE_DOMAIN, dirname(__FILE__) . '/lang');
bind_textdomain_codeset(WEBSITE_DOMAIN, 'UTF-8');
textdomain(WEBSITE_DOMAIN);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-25
    • 2011-02-15
    • 2015-03-19
    • 2018-01-02
    • 2017-07-22
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多