Nos podemos encontrar con el problema que Google replique el mismo contenido de dominio.com en dominio.com/es, así que lo ideal es que siempre se muestre el idioma en la url. Para ello usaremos la librería mcamara/laravel-localization y se añadirá siempre, mediante redirección, el idioma en la barra de direcciones.
Laravel 4.2
Añadiremos a nuestro composer.json
"mcamara/laravel-localization": "0.15.*",
Y ahora el provider y aliases en nuestro archivo config/app.php
'Mcamara\LaravelLocalization\LaravelLocalizationServiceProvider',
'LaravelLocalization' => 'Mcamara\LaravelLocalization\Facades\LaravelLocalization',
Añadiremos a nuestro archivo routes.php lo siguiente:
Route::group(
array(
'prefix' => LaravelLocalization::setLocale(),
'before' => 'LaravelLocalizationRoutes|LaravelLocalizationRedirectFilter'
),
function() {
// Las rutas a las cuales se les forzará el idioma en la url
}
);
Laravel 5.8
composer require mcamara/laravel-localization
Crearemos nuestro archivo de configuración en la carpeta config
php artisan vendor:publish --provider="Mcamara\LaravelLocalization\LaravelLocalizationServiceProvider"
Añadiremos a nuestro archivo app/Http/Kernel.php lo siguiente:
protected $routeMiddleware = [
/* las rutas declaracdas que haya por defecto y añadimos las siguientes: /*
'localize' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRoutes::class,
'localizationRedirect' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRedirectFilter::class,
'localeSessionRedirect' => \Mcamara\LaravelLocalization\Middleware\LocaleSessionRedirect::class,
'localeViewPath' => \Mcamara\LaravelLocalization\Middleware\LaravelLocalizationViewPath::class,
'localize' => 'Mcamara\LaravelLocalization\Middleware\LaravelLocalizationRoutes'
];
Y en nuestro enrutador routes/web.php
Route::group(
[
'prefix' => LaravelLocalization::setLocale(),
'middleware' => [ 'localeSessionRedirect', 'localizationRedirect', 'localeViewPath', 'localize' ]
],
function() {
// Las rutas a las cuales se les forzará el idioma en la url
});
