我正在翻译我的Laravel网站,该网站使用mcamara/laravel-localization包进行翻译。我发现如果有人输入了一种不存在的语言(f.e.http://localhost/de/test)页面上有一些错误。因为我不想检查和修复该错误的所有页面,所以我需要一些中间件或处理程序来检查所选语言是否在包含翻译的数组中,如果不在,则重定向到404页面。
不幸的是,我不确定在哪里进行检查?
if(!in_array($lang, $languages)) {
App::abort(404);
}
return true;非常感谢!
发布于 2019-04-20 06:23:47
您是否考虑过语言应该位于查询字符串上,而不是端点的一部分?例如,http://localhost/test?lang=de,我见过许多开发人员采用这种方法,我相信它更干净。
关于你的问题,似乎你已经对中间件有了正确的想法,所以创建一个新的并检查Illuminate\Translation\Translator,有几个方法可以帮助你确定翻译是否存在。
示例:
public function handle($request, Closure $next)
{
if (Illuminate\Support\Facades\Lang::hasForLocale($someKey,$request->lang)) {
abort(404);
}
return $next($request);
}$someKey可以是您总是配置为要翻译的字符串,$ request ->lang可以是请求的一部分,如果您使用(/de/$someKey)。
另一种方法是检查(!file_exists($path)) $path是否为您的转换文件,然后重定向。
希望这能有所帮助。
https://stackoverflow.com/questions/55768279
复制相似问题