Laravel - 用翻译好的验证规则服务于API请求

2023-06-01 00:00:00 laravel

如果开发一个移动应用程序(或一个网站),通过API连接到Laravel CMS的动态内容。

现在, 这个应用程序可以是一个多语言的应用程序, 它希望从CMS接收一个翻译的内容.

通常, 在我们公司, 我们指示我们的前端开发人员在每一个请求中发送一个语言查询参数,以便提供正确的翻译内容.


例如:

GET /api/blogs?lang=en

然而, Laravel的验证并没有意识到这一点, 它总是根据应用程序的locale(或fallback locale)来返回验证错误信息.

因此,我们创建了一个路由中间件,它将所有的API路由分组,

并根据lang查询参数来设置应用程序的locale。

<?php
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class ChangeLocale
{
    /**
     * Handle an incoming request.
     */
    public function handle(Request $request, Closure $next): Response
    {
        $locale = $request->query('lang');
       
        if ($locale) {
            app()->setLocale($locale);
        }
       
        return $next($request);
    }
}


并在路由文件中:

// routes/api.php
use App\Http\Middleware\ChangeLocale;
use Illuminate\Support\Facades\Route;

Route::middleware(ChangeLocale::class)->group(function (): void {
    // ROUTES
});


现在你的验证信息将采用所要求的语言。

如果你不喜欢通过查询参数来处理这个问题,你总是可以使用一个头或其他东西,

例如:

$locale = $request->header('Accept-Language');

相关文章