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:
ローカライズされたエラーを処理するための推奨事項です。Web 上で公開するための一般的な機能を作成し、独自の言語を使用したい人が使用できるとしましょう。

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 に答える