如何翻译 Yii 2 中的异常标题?

How to translate exception titles in Yii 2?

我的 Yii 2 应用程序(基于 app-basic 方案)在用户将站点语言切换到non-English。任何其他页面元素都已正确翻译。异常标题存储在哪里?我该如何解决这个问题?

我尝试搜索异常 类 (NotFoundHttpException > HttpException > UserException > Exception) 但一无所获。我浏览了基于翻译的文件,发现 /vendor/yiisoft/yii2/messages/ 文件只有 The requested view "{name}" was not found.Page not found. 字符串用于翻译。没有 Not FoundNot Found ( 字符串来正确翻译 non-English 语言中的 NotFoundHttpException(和其他)异常标题。

相关阅读:

没有错误或状态代码消息的内置翻译。可以实现自定义 ErrorAction 来翻译 HTTP 响应代码。 yii\web\ErrorAction 的文档包含如何进行的详细信息。

另一种解决方案是使用自定义 HttpException 并覆盖 getName 函数,但这需要您复制所有要使用的错误 类。

示例:

翻译特征:

namespace app\errors;

use Yii;

trait TranslateHttpCodes {
    public function getName()
    {
        return Yii::t('app', parent::getName());
    }
}

自定义错误:

namespace app\error;

class NotFoundHttpException extends \yii\web\NotFoundHttpException
{
   use TranslateHttpCodes;
}

对于错误消息,Yii 错误构造函数将消息作为可选参数,因此可以自由选择消息。

这意味着必须在 findModel 控制器方法中添加如下内容。

throw new NotFoundHttpException(\Yii::t('app', 'The requested page does not exist.');

gii 代码生成器不会自动执行此操作,即使它提供了 --enableI18N 命令行标志。这可能被认为是一个错误。