gpt4 book ai didi

laravel-5 - 如何检测 Laravel 5 中的语言偏好

转载 作者:行者123 更新时间:2023-12-04 09:00:13 27 4
gpt4 key购买 nike

我想通过获取浏览器推荐的语言来检测我的客户端语言。

例如,如果您在日本打开浏览器,它将为我提供当前用户打开的国家代码或国家名称,如“en-jp”或“japan”。

我尝试了这段代码,但它似乎显示了我之前选择的语言,默认情况下是英语。

我设置了一个中间件,我需要排除 api 部分,因为我有一些路由器 ping 这个地址,而路由器浏览器没有语言信息,这会使系统变砖。

class BeforeMiddleware
{

/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/

protected $except_urls = [
'api/*'
];

public function handle($request, Closure $next)
{
$langArr = array("en", "fr");
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
$languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
} else {
$languages[0] = "en";
}
if (Session::has('locale')) {
App::setLocale(Session::get('locale'));
} else {
if (in_array($languages[0], $langArr))
App::setLocale($languages[0]);
}
return $next($request);
}


} /* end class */

谢谢你的帮助。

最佳答案

或者您可以使用 Illuminate\Http\Request::getPreferredLanguage
像这样,在中间件中:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Session\Session;
use Illuminate\Http\Request;

class Locale {

const SESSION_KEY = 'locale';
const LOCALES = ['en', 'cs'];

public function handle(Request $request, Closure $next) {
/** @var Session $session */
$session = $request->getSession();

if (!$session->has(self::SESSION_KEY)) {
$session->put(self::SESSION_KEY, $request->getPreferredLanguage(self::LOCALES));
}

if ($request->has('lang')) {
$lang = $request->get('lang');
if (in_array($lang, self::LOCALES)) {
$session->put(self::SESSION_KEY, $lang);
}
}

app()->setLocale($session->get(self::SESSION_KEY));

return $next($request);
}
}

关于laravel-5 - 如何检测 Laravel 5 中的语言偏好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36986236/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com