The solution, I've came up with relies on a specific middleware.
<?php
Route::get('', function() {
return redirect()->route('index', ['language' => App::getLocale()]);
});
Route::group([
'prefix' => '{lang}',
'where' => ['lang' => '(fr|de|en)'],
'middleware' => 'locale'
], function() {
Route::get('', ['as' => 'index', 'uses' => 'HomeController@getIndex']);
// ...
}
and the middleware.
<?php
namespace App\Http\Middleware;
use App;
use Closure;
use View;
class Localization {
public function handle($request, Closure $next) {
$language = $request->route()->parameter('lang');
App::setLocale($language);
// Not super necessary unless you really want to use
// number_format or even money_format.
if ($language == "en") {
setLocale(LC_ALL, "en_US.UTF-8");
} else {
setLocale(LC_ALL, $language."_CH.UTF-8");
}
View::share('lang', $language);
return $next($request);
}
}
As you can guess, this code was meant for a swiss application, hence the _CH
everywhere.