当前位置: 首页 > 知识库问答 >
问题:

如何调试在PHP中不工作的gettext?

怀浩大
2023-03-14

我试图使用PHP gettext扩展在PHP 5.5(在win2008服务器上,使用IIS7)。我正在这样做:

<?php

$locale = "es";
if (isSet($_GET["locale"])) $locale = $_GET["locale"];
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("messages", "./locale");
textdomain("messages");

echo gettext("Hello world");

?>

有了这个文件夹结构:

locale/es/LC_MESSAGES/messages.mo

但它总是只是返回Hello world,而不是正确的翻译,目前(基于我缺乏西班牙语技能)在messages.po文件中是这样的:

msgid ""
msgstr ""
"Project-Id-Version: TestXlations\n"
"POT-Creation-Date: 2014-04-19 08:15-0500\n"
"PO-Revision-Date: 2014-04-19 09:18-0500\n"
"Language-Team: \n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.6.3\n"
"X-Poedit-Basepath: .\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SearchPath-0: c:/dev\n"

msgid "Hello world"
msgstr "Hola World"

这从cmd线路和通过IIS失败。所以我看到gettext调用,等等,并执行它,但它没有读取翻译文件。即使删除翻译文件,我得到相同的行为。

共有3个答案

娄阳舒
2023-03-14

在Linux上也有同样的问题,我得出了这样的结论:即使您提供自己的*。对于项目的mo文件,操作系统必须知道区域设置本身。

在系统级安装请求的区域设置修复了我的问题。

请参见:locale-gen

它可能对实际调试gettext没有帮助,但至少你可以尝试一下。

洪凯定
2023-03-14

您是否在区域设置-a的输出中找到"es"?如果没有,则需要运行以下命令。

 sudo locale-gen es
孟雪风
2023-03-14

您应该检查返回值并知道哪个函数失败。它不是特定于i18n的,但对于任何PHP脚本或任何编程语言调试都很有用。

<?php
$locale = 'es';
if (isset($_GET["locale"])) $locale = $_GET["locale"];

$domain = 'messages';

$results = putenv("LC_ALL=$locale");
if (!$results) {
    exit ('putenv failed');
}

// http://msdn.microsoft.com/en-us/library/39cwe7zf%28v=vs.100%29.aspx
$results = setlocale(LC_ALL, $locale, 'spanish');
if (!$results) {
    exit ('setlocale failed: locale function is not available on this platform, or the given local does not exist in this environment');
}

$results = bindtextdomain($domain, "./locales");
echo 'new text domain is set: ' . $results. "\n";

$results = textdomain($domain);
echo 'current message domain is set: ' . $results. "\n";

$results = gettext("Hello world");
if ($results === "Hello world") {
    echo "Original English was returned. Something wrong\n";
}
echo $results . "\n";
 类似资料:
  • 我一直在尝试建立一个PHP网站。不管我怎么努力,我都无法让gettext开始工作。 我正在运行一个ubuntu apache服务器上的流浪框,我需要的所有区域设置都是可用的和生成的(使用区域设置-a检查)。 已安装并启用Gettext(使用phpinfo()检查) 这是我的PHP: 这是我的/vagrant/build/locale/en_US/LC_MESSAGES/en_US。采购订单文件:

  • 我正在使用PHPStorm开发我的PHP网页。我的Apache服务器XDebug和一个简单的web PHP项目都运行良好。没问题。 但是,当我尝试使用 调试 Laravel 5.1 Web 项目时,我无法调试断点。这就像 使用另一台服务器...... 在我的PHPStom上,我总是看到: 等待使用 ide 键“(randomNumberHere)”的传入连接 我已经在PHPStorm中配置了所有内

  • 我正在使用Maven和Spring Boot。我使用运行应用程序。 https://flywaydb.org/documentation/plugins/springboot说应该在Spring Boot启动时调用Flyway。 所以我的pom.xml包含对Flyway的依赖关系。 当Spring Boot启动(加载并使我的web应用程序可用)时,没有来自Flyway的日志。我觉得Flyway被忽

  • 我在Android Studio工作,多年来一直在正常模式和调试模式下愉快地运行。突然,调试模式对我来说停止了工作。 如果我尝试单击调试按钮(带有“播放”三角形的小错误),它会尝试在模拟器中启动,但应用程序永远不会打开。 在模拟器上,我得到了“等待调试器”的警告,以及“强制关闭”的选项。在Android Studio本身,底部的调试窗口反复显示“等待应用程序上线:”然后“无法连接到远程进程。正在中

  • 问题内容: 这真令人难以置信…当我在包含文本文件的打包JAR文件上运行Java时,我可以使getResource()和getResourceAsStream()正常工作。(有关参考,请参见有关访问资源的Sun文档)。即使我将文本文件与编译的.class文件放在同一棵树中,当在Eclipse中运行该程序时,我似乎也无法使其正常运行。 你们中的一个可以指出我的任何微妙之处,以确保getResource

  • 问题内容: 我不知道PHP如何在内部处理 正确/错误 比较。我知道true定义为1,false定义为0。执行此操作时,它会回显“ true ”。PHP如何将“ a”识别为1? 问题答案: PHP文档中包含有关布尔值和类型比较表的内容。 转换为布尔值时,以下值为FALSE: 布尔值本身 整数(零) 浮点数(零) 空字符串和 字符串 零元素数组 成员变量为零的对象(仅PHP 4) 特殊类型(包括未设置