laravel-5 - multi - laravel 5.7 lang es
Cómo detectar la preferencia de idioma en Laravel 5 (1)
Para obtener simplemente la configuración regional del encabezado, puede obtener el valor de http-accept-language
de la solicitud. Esto es accesible a través de una fachada o puede usar la variable de solicitud en su middleware:
Request::server(''HTTP_ACCEPT_LANGUAGE'')
// OR
$request->server(''HTTP_ACCEPT_LANGUAGE'');
Esto devuelve una cadena que se ve así: en-GB,en;q=0.8
. A continuación, puede analizarlo (¿tal vez usando explode()
?) Y tomar el idioma desde allí.
Sin embargo, este tipo de cosas a veces puede complicarse. Si necesita hacer algo más avanzado, hay un paquete que puede hacer todo esto por usted:
Deseo detectar el idioma de mi cliente obteniendo el idioma recomendado por el navegador.
Por ejemplo, si abres el navegador en Japón, me dará el código de país o el nombre del país que el usuario actual abrió como "en-jp" o "japón".
Intento este código pero parece mostrar el idioma que seleccioné previamente y de manera predeterminada es inglés.
Configuré un Middleware y necesito excluir la parte api porque tengo algunos enrutadores que hacen ping a esta dirección y el enrutador no tiene información de idioma que bloquee el sistema.
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 */
Gracias por tu ayuda.