我正在翻译我的Laravel网站,该网站使用mcamara/laravel本地化包进行翻译。我发现如果有人键入不存在的语言(例如 http://localhost/de/test(,页面上会有一些错误。因为我不想检查和修复所有页面的错误,所以我需要一些中间件或处理程序来检查所选语言是否在带有翻译的数组中,如果不重定向到 404 页面。
不幸的是,我不确定在哪里进行检查?
if(!in_array($lang, $languages)) {
App::abort(404);
}
return true;
非常感谢 !
您是否考虑过该语言应该位于查询字符串上而不是端点的一部分? 例如 http://localhost/test?lang=de 我看到许多开发人员采用这种方法,我相信它更干净。
关于您的问题,您似乎已经对中间件有了正确的想法,因此请创建一个新中间件并检查IlluminateTranslationTranslator
有几种方法可以帮助您确定翻译是否存在。
例:
public function handle($request, Closure $next)
{
if (IlluminateSupportFacadesLang::hasForLocale($someKey,$request->lang)) {
abort(404);
}
return $next($request);
}
$someKey可以是始终配置为翻译的字符串,但如果使用 (/de/test(,$request->lang 可以是请求的一部分。
另一种方法是检查(!file_exists($path))
$path是翻译文件,然后重定向。
希望这有帮助。