如何翻译 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 Found
或 Not 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
命令行标志。这可能被认为是一个错误。
我的 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 Found
或 Not 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
命令行标志。这可能被认为是一个错误。