首页 > 解决方案 > 在哪里检查 Laravel 语言翻译是否存在?

问题描述

我正在翻译我的 Laravel 网站,该网站使用 mcamara/laravel-localization 包进行翻译。我发现如果有人键入不存在的语言(fe http://localhost/de/test),页面上会出现一些错误。因为我不想检查和修复所有页面的错误,所以我需要一些中间件或处理程序来检查所选语言是否在带有翻译的数组中,如果不是重定向到 404 页面。

不幸的是,我不确定在哪里进行检查?

if(!in_array($lang, $languages)) {
    App::abort(404);
}
return true;

非常感谢 !

标签: phplaravel

解决方案


您是否认为语言应该在查询字符串上而不是端点的一部分上?例如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 可以是您始终配置为翻译的字符串,如果您使用 (/de/test),则 $request->lang 可以是请求的一部分。

另一种方法可能是检查(!file_exists($path))$path 是您的翻译文件,然后重定向。

希望这可以帮助。


推荐阅读