Laravel 如何为API动态设置语言?

Laravel 如何为API动态设置语言?,laravel,laravel-localization,Laravel,Laravel Localization,我有一个端点来切换语言: {{base_url}}/localize/{lang} 那么,控制器呢 class LocalizationController { if (!is_null($lang) && !empty($lang)) { App::setLocale(request('lang')); } } 但是,它似乎不适用于API。非常感谢您的帮助,如果您有任何想法,请帮助我。我更喜欢使用标题来完成该任务。 创建新的中间件并检查所有请求 na

我有一个端点来切换语言:

{{base_url}}/localize/{lang}
那么,控制器呢

class LocalizationController 
{
 if (!is_null($lang) && !empty($lang)) {
       App::setLocale(request('lang'));
   }
}

但是,它似乎不适用于API。非常感谢您的帮助,如果您有任何想法,请帮助我。

我更喜欢使用标题来完成该任务。 创建新的中间件并检查所有请求

namespace App\Http\Middleware;

use Closure;

class Localization
{
    protected const ALLOWED_LOCALIZATIONS = ['en', 'es', 'ru'];
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $localization = $request->header('Accept-Language');
        $localization = in_array($localization, self::ALLOWED_LOCALIZATIONS, true) ? $localization : 'en';
        app()->setLocale($localization);

        return $next($request);
    }
}
您可以选择自己的本地化类型,如
en
en_US
或其他任何类型。
然后只需在所有请求中添加标题,如:
Accept Language:es

感谢@V-K的帮助。无论如何,可以通过创建上面的新端点来处理它吗?当然,但这不是一个好计划。如果您通过新端点执行此操作,则必须存储类似state的内容,以便为下一个请求进行本地化。但API并没有cookie或类似的东西,所以您必须将其存储在db或某个文件中,并每次检索。这是一个糟糕的方法,我建议使用上面的方法。谢谢@V-K!老实说,我已经使用了上述解决方案。但是,我的经理希望我像上面提到的那样构建端点。所以,我想现在我有理由和他谈谈。谢谢你的帮助!如果它不知道的话。我认为这个答案很有用,因为它很好用。