我们正在教中文(普通话)课。对于我们的学生来说,如果运行php(在命令行上)的错误输出可以用普通话本地化,那么它会更容易(并且对他们更有意义)。有没有办法配置我们的PHP设置来支持这个(即编辑一个php.ini文件)?有没有一种方法来本地化PHP的错误输出?
回答
我已经下载了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 Translate或Microsoft Translate。
在所有情况下,您必须用新的错误字符串替换现有的错误字符串。有一个原生的PHP函数,称为set_error_handler()
。这使您可以设置自定义错误处理功能。如果你想翻译现有的错误字符串,你应该在那里做。这里的一个设置,你可以使用(我还没有彻底测试此):
<?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;
}
?>
剩下的就是包括这段代码你的脚本,你应该是所有好!
准确地说,我正在寻找的答案(呃...不完全,但它告诉我,没有一些工作就无法完成)。谢谢蒂姆! – Avery 2012-07-25 00:31:55
@AveryChan我已经编辑了我的答案,并提供了一些您可能会喜欢的附加信息! – 2012-07-25 13:07:55
你可以尝试,这可能工作
/* Set locale to Dutch */
setlocale(LC_ALL, 'nl_NL');
这是行不通的;这只是为了字符串功能。 – Avery 2012-07-21 01:17:41
- 1. CkEditor:有没有一种方法来输出输入内容
- 2. 有没有一种方法来解析print_r的输出
- 3. MongoDB:有没有一种方法来调整输出?
- 4. 有没有一种方法来编码PHP中的错误消息
- 5. 有没有一种方法来查看本地PHP类与他们所有的方法和属性?
- 6. 有没有一种方法来优化C++的doxygen?
- 7. jQuery JavaScript有没有一种方法来监听cookies的变化
- 8. 有没有一种方法来比较PHP中的多个值
- 9. 有没有一种好的方法(PHP类)来访问Gmail Contacs?
- 10. 有没有一种方法来简化函数签名playframework
- 11. 有没有一种方法来优化这个SQL Server查询?
- 12. 有没有一种方法来优化此更新查询?
- 13. 有没有一种方法来初始化整数Java中
- 14. 有没有一种方法来优先化Ruby订单列?
- 15. 有没有一种方法来优化下面给出的查询
- 16. 有没有一种方法可以本地化更多的英语语言?
- 17. 有没有一种方法来创建PHP
- 18. 有没有一种方法使用传单来突出道路?
- 19. 有没有一种方法来存储阈值操作输出特征(C++)?
- 20. 有没有一种方法来版本HTTP Cookie?
- 21. 有没有一种方法来版本化整个开发环境?
- 22. mpdf没有输出和php错误mpdf.php
- 23. 有没有一种方法来操纵包含JS没有eval()?
- 24. 有没有一种方法来单元测试异步方法?
- 25. 有没有一种有效的方法来读取bash中的行输入?
- 26. 有没有一个程序来自动化xcode的本地化?
- 27. 在Spring MVC中,有没有一种方法来实现错误级别?
- 28. 有没有一种快速的方法来做输出到标准输出的cksum?
- 29. 有没有一种标准的方法来检测方向性?
- 30. 有没有一种简单的方法来使ASP.NET中的弹出框出现?
据我所知,PHP错误总是用英文。如果我冒犯了你,但不是中国人接受过英语教育,我很抱歉吗?再次,不好意思,如果我是刻板印象或任何东西。 – 2012-07-19 08:04:48
这是一个合理的问题。中国的教育系统确实强调英语。但由于中国规模庞大,教育质量参差不齐。但事实是,由于该国没有实用的英语(与印度这样的国家相比),大多数中国人的英语能力相当低。 – Avery 2012-07-21 01:12:21
本地化对我来说似乎是一个坏主意,他们将无法搜索网络上的错误消息(和男孩,PHP有一些神秘的错误信息......致命错误:在0行未知的情况下抛出没有堆栈帧的异常','解析错误:语法错误,意外的T_PAAMAYIM_NEKUDOTAYIM') – 2012-07-23 09:09:59