Solución:
La forma más limpia de conocer el idioma actual de su sitio web en Laravel parece ser:
Lang::locale();
https://laravel.com/api/5.8/Illuminate/Translation/Translator.html#method_locale
Es diferente a este comando que devolverá el idioma predeterminado de su sitio web:
Config::get('app.locale');
Una forma alternativa, un poco más corta, podría ser usar algo como esto:
app()->getLocale()
La ventaja de esto es que los IDE como PHPStorm reconocen esta función y pueden ayudarlo a desarrollarse mucho más rápido.
La respuesta de BenjaminRH es muy buena y su enfoque sugerido funciona perfectamente. He mejorado un poco el fragmento. Ahora detecta el idioma del navegador y comprueba si ese idioma es compatible de acuerdo con el archivo de configuración de la aplicación.
Es un truco rápido, pero funciona en mi aplicación. Tenga en cuenta que el idioma de la aplicación también está configurado ahora. Siéntete libre de usar o mejorarlo.
Route::filter('before', function()
{
// current uri language ($lang_uri)
$lang_uri = URI::segment(1);
// Set default session language if none is set
if(!Session::has('language'))
{
// use lang in uri, if provided
if(in_array($lang_uri, Config::get('application.languages')))
{
$lang = $lang_uri;
}
// detect browser language
elseif(isset(Request::server('http_accept_language')))
{
$headerlang = substr(Request::server('http_accept_language'), 0, 2);
if(in_array($headerlang, Config::get('application.languages')))
{
// browser lang is supported, use it
$lang = $headerlang;
}
// use default application lang
else
{
$lang = Config::get('application.language');
}
}
// no lang in uri nor in browser. use default
else
{
// use default application lang
$lang = Config::get('application.language');
}
// set application language for that user
Session::put('language', $lang);
Config::set('application.language', $lang);
}
// session is available
else
{
// set application to session lang
Config::set('application.language', Session::get('language'));
}
// prefix is missing? add it
if(!in_array($lang_uri, Config::get('application.languages')))
{
return Redirect::to(URI::current());
}
// a valid prefix is there, but not the correct lang? change app lang
elseif(in_array($lang_uri, Config::get('application.languages')) AND $lang_uri != Config::get('application.language'))
{
Session::put('language', $lang_uri);
Config::set('application.language', $lang_uri);
}
});