gpt4 book ai didi

php - 有没有办法本地化 php 的错误输出?

转载 作者:行者123 更新时间:2023-12-04 18:16:36 25 4
gpt4 key购买 nike

我们正在用中文(普通话)教授一个类。对于我们的学生来说,如果运行 php(在命令行上)的错误输出可以本地化为普通话,会更容易(并且对他们更有意义)。有没有办法配置我们的 php 设置以支持这一点(即编辑 php.ini 文件)?

最佳答案

我已经下载了 PHP 源代码并搜索了源代码如何处理它的错误。在浏览了几个(随机挑选的)文件后,到处都发现了这些行:

// warning for the sleep() function
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of seconds must be greater than or equal to 0");

// warning for the constant() function
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't find constant %s", const_name);

// warning for the mysql_free_result() function
php_error_docref("function.mysql-free-result" TSRMLS_CC, E_WARNING, "%lu result set(s) not freed. Use mysql_free_result to free result sets which were requested using mysql_query()", MySG(result_allocated));

// error for the mysql-escape-string function()
php_error_docref("function.mysql-escape-string" TSRMLS_CC, E_DEPRECATED, "This function is deprecated; use mysql_real_escape_string() instead.");

这种情况一直持续下去,这让我得出结论,错误是硬编码的,因此在任何其他语言中都不可用......

太糟糕了 :(

经过数小时的搜索(准确地说是 5 小时 45 分钟) - 我找到了一些可能不值得但我该判断的解决方案。

翻译通常保存在扩展名为 .po 的文件中。这些文件包含一堆原始字符串和翻译后的字符串。这意味着您必须手动翻译每个字符串。您可以使用 PoEdit 创建文件.

然后你需要解析这些文件。您可以构建具有 Gettext 的 PHP 版本模块安装。或者,Zend 框架也能够解析这些文件。

显然,您不想手动翻译每个可能的字符串。最后一种选择是使用翻译服务,例如 Google TranslateMicrosoft Translate .

在所有情况下,您都必须用新的错误字符串替换现有的错误字符串。有一个名为 set_error_handler() 的原生 PHP 函数.这允许您设置自定义错误处理功能。如果你想翻译现有的错误字符串,你应该在那里做。这是您可以使用的设置(我没有彻底测试过):
<?php
set_error_handler('error_handler');

function error_handler($errno, $errstr, $errfile, $errline, $errcontext) {
// Get the correct string for the error type
switch($errno){
case E_ERROR:
$type = 'Error';
break;
case E_WARNING:
$type = 'Warning';
break;
case E_PARSE:
$type = 'Parse Error';
break;
case E_NOTICE:
$type = 'Notice';
break;
case E_CORE_ERROR:
$type = 'Core Error';
break;
case E_CORE_WARNING:
$type = 'Core Warning';
break;
case E_COMPILE_ERROR:
$type = 'Compile Error';
break;
case E_COMPILE_WARNING:
$type = 'Compile Warning';
break;
case E_USER_ERROR:
$type = 'User Error';
break;
case E_USER_WARNING:
$type = 'User Warning';
break;
case E_USER_NOTICE:
$type = 'User Notice';
break;
case E_STRICT:
$type = 'Strict Notice';
break;
case E_RECOVERABLE_ERROR:
$type = 'Recoverable Error';
break;
default:
$type = 'Unknown error (' . $errno . ')';
break;
}

// translate text
$type = error_handler_translate($type);
$str = error_handler_translate($errstr);
$in = error_handler_translate('in');
$line = error_handler_translate('on line');

// echo the error in "default" PHP format
echo '<br /><b>'. $type .':</b> ' . $str . ' '. $in .' <b>' . $errfile . '</b> '. $line .' <b>' . $errline . '</b><br />';

// ignore the original PHP error handling
return true;
}

function error_handler_translate($str) {
// translate $str here

return $str;
}
?>

剩下的就是将此代码包含到您的脚本中,您应该一切都好!

关于php - 有没有办法本地化 php 的错误输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11556375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com