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!老实说,我已经使用了上述解决方案。但是,我的经理希望我像上面提到的那样构建端点。所以,我想现在我有理由和他谈谈。谢谢你的帮助!如果它不知道的话。我认为这个答案很有用,因为它很好用。