0

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

{{base_url}}/localize/{lang}

所以,控制器

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

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

4

1 回答 1

0

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

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);
    }
}

您可以选择自己的本地化类型,例如enoren_US或其他。然后只需将标头添加到您的所有请求中,例如:Accept-Language: es

于 2020-10-05T13:05:08.377 回答