【问题标题】:Where to check if Laravel language translation exists?在哪里检查 Laravel 语言翻译是否存在?
【发布时间】:2019-04-20 06:33:47
【问题描述】:

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

很遗憾,我不确定在哪里进行检查?

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

非常感谢!

【问题讨论】:

  • 我认为显示 404 页面可能不是最佳做法。您是否愿意考虑创建一种后备/默认语言并始终在那里重定向而不是 404?

标签: php laravel


【解决方案1】:

您是否考虑过语言应该在查询字符串上而不是端点的一部分上?例如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 是您的翻译文件,然后重定向。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2012-04-22
    • 2012-09-03
    • 2023-01-25
    • 2016-10-27
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    相关资源
    最近更新 更多