0

第 1 部分:
假设我做了一些引发异常的事情,例如:

function do_something($somepar)
{
    if (inexistent())
        return TRUE;
    else
        return FALSE;
}
if (do_something("SMART"))
    echo "Everything went right";
else
    echo "Something failed";

我有

Fatal error: Call to undefined function inexistent() in xyz.php on line 123

是否可以本地化此消息?我希望

setlocale(LC_ALL,'it_IT');

可以这样做,但它没有。

第 2 部分:
这是您处理本地化错误的建议。假设我想创建一个通用函数以在网络上公开它,并且可以供希望它使用自己的语言的人使用。

function do_something($somepar)
{
    if (whatever())
    {
        return TRUE;
    }
    else
    {
        $error_message = localizeThis("How to translate this?");
        trigger_error($error_message, E_USER_ERROR);
        return FALSE;
    }
}
if (do_something("SMART"))
    echo "Everything went right";
else
    echo "Something failed";

另外如何设置正确的输出语言?

4

1 回答 1

3

您需要区分错误处理、调试/错误消息和用户可见的输出。PHP 触发的标准错误消息没有被 PHP 本地化。专供开发者看,帮助开发者调试应用程序,开发者要求会说英语。无论如何,PHP 语言的其余部分都是英文的。

由引发的异常或由引发的异常触发的消息trigger_error并不适合最终用户使用,因为大多数最终用户无论如何都不会理解它们。您需要在内部捕获这些错误,并在必要时通过任何类型的本地化系统通知用户发生了不好的事情。技术错误消息还可能包含不应向公众披露的敏感信息。所以:

set_error_handler(function ($errno, $errstr) {
    logErrorToFile($errstr);

    switch ($errno) {
        case E_ERROR :
            die(_('Sorry, something bad happened. Please read this comforting localized error instead'));
        case E_NOTICE :
            // decide what you want to do here
        ...
    }
});

和:

try {
    somethingThatThrowsExceptions();
} catch (Exception $e) {
    logErrorToFile($e->getMessage());
    die(_('Sorry, something bad happened. Please read this comforting localized error instead'));
}
于 2012-09-14T13:51:16.540 回答