Nice example but struggled a couple of days to implement for using default authentication method provided by laravel 5. Apart from that I have some routing which does not require localization. So I modified the above example a little bit.
Please see my answer at http://stackoverflow.com/questions/29279977/laravel-5-multilanguage-support/39384200#39384200.
Step 1: Add your locales
In config/app.php add skip_locals line below locales
'locales' => ['en' => 'English', 'sv' => 'Swedish'],
'skip_locales' => ['admin','auth','etc'],
Step 2: Prefix your routes
change the map method to the following
public function map(Router $router, Request $request)
{
$locale = $request->segment(1);
$this->app->setLocale($locale);
$skip_locales= $this->app->config->get('app.skip_locales');
// If the locale is added to to skip_locales array continue without locale
if (in_array($locale, $skip_locales)) {
$router->group(['namespace' => $this->namespace], function($router)
{
require app_path('Http/routes.php');
});
}
else {
$router->group(['namespace' => $this->namespace, 'prefix' => $locale], function($router) {
require app_path('Http/routes.php');
});
}
}
Step 3: Create a language middleware
Change the contents with this one
namespace App\Http\Middleware;
use Closure;
use Illuminate\Routing\Redirector;
use Illuminate\Http\Request;
use Illuminate\Foundation\Application;
use Illuminate\Contracts\Routing\Middleware;
class Language implements Middleware
{
public function __construct(Application $app, Redirector $redirector, Request $request)
{
$this->app = $app;
$this->redirector = $redirector;
$this->request = $request;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// Make sure the current local exists
$locale = $request->segment(1);
// If the locale is added to to skip_locales array continue without locale
if (in_array($locale, $this->app->config->get('app.skip_locales'))) {
return $next($request);
} else {
// If the locale does not exist in the locales array continue with the fallback_locale
if (! array_key_exists($locale, $this->app->config->get('app.locales'))) {
$segments = $request->segments();
array_unshift($segments, $this->app->config->get('app.fallback_locale'));
// $segments[0] = $this->app->config->get('app.fallback_locale');
return $this->redirector->to(implode('/', $segments));
}
}
$this->app->setLocale($locale);
return $next($request);
}
}
Hope this will help!