我們正在教中文(普通話)課。對於我們的學生來說,如果運行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