tre*_*der 4 php translation internationalization yii yii2
我的 Yii 2 应用程序(基于app-basic方案)仍然显示英文标题,例如NotFoundHttpException,当用户将站点语言切换为非英语时。任何其他页面元素都已正确翻译。例外的标题存储在哪里?我该如何解决这个问题?
我尝试搜索异常类 ( NotFoundHttpException> HttpException> UserException> Exception) 却一无所获。我浏览了基于翻译的文件,发现/vendor/yiisoft/yii2/messages/文件只有The requested view "{name}" was not found.和Page not found.用于翻译的字符串。没有Not Found或Not Found (字符串可以NotFoundHttpException在非英语语言中正确翻译(和其他)例外的标题。
相关阅读:
没有错误或状态代码消息的内置翻译。可以实现一个自定义ErrorAction来转换 HTTP 响应代码。的文档中yii\web\ErrorAction有如何进行的详细信息。
另一种解决方案是使用自定义HttpExceptions 并覆盖该getName函数,但这需要您复制要使用的所有错误类。
例子:
翻译特点:
namespace app\errors;
use Yii;
trait TranslateHttpCodes {
public function getName()
{
return Yii::t('app', parent::getName());
}
}
Run Code Online (Sandbox Code Playgroud)
自定义错误:
namespace app\error;
class NotFoundHttpException extends \yii\web\NotFoundHttpException
{
use TranslateHttpCodes;
}
Run Code Online (Sandbox Code Playgroud)
对于错误消息,Yii 错误构造器将消息作为可选参数,因此可以自由选择消息。
这意味着必须在findModel控制器方法中放入如下内容。
throw new NotFoundHttpException(\Yii::t('app', 'The requested page does not exist.');
Run Code Online (Sandbox Code Playgroud)
该gii代码生成器不会自动执行此操作,即使它提供了一个--enableI18N命令行标志。这可能被认为是一个错误。