El siguiente desarrollo que vamos a realizar, es mediante un middleware detectar el idioma configurado por el usuario y establecerlo mediante las cadenas de textos de traducciones que definimos antes, además, también definimeros las siglas o etiqueta del lenguaje en la URL para devolver la traducción acorde; para ello:
$ php artisan make:middleware LanguagePrefixMiddleware
Que tendrá el siguiente contenido:
app\Http\Middleware\LanguagePrefixMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class LanguagePrefixMiddleware
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
$language = $request->segment(1);
if(!in_array($language,['es','en'])){
return redirect('/es/blog');
}
app()->setLocale($language);
return $next($request);
}
}
Con el código anterior, solamente se redirecciona cuando las etiquetas de idioma no están disponibles en la URL, luego, se establece el lenguaje correspondiente.
Y usamos el middleware en las rutas:
Route::get('/{lang}/mi-ruta', 'MiControlador@miMetodo');
Por ejemplo, en nuestra aplicación:
function routeBlog() {
Route::get('', [BlogController::class, 'index'])->name('blog.index');
Route::get('detail/{id}', [BlogController::class, 'show'])->name('blog.show');
}
Route::group(['prefix' => '{locale}/blog','middleware' => LanguagePrefixMiddleware::class], function () {
routeBlog();
});
Route::group(['prefix' => 'blog','middleware' => LanguagePrefixMiddleware::class], function () {
function () {
routeBlog();
});
Como puedes apreciar, creamos una función routeBlog() para agrupar las rutas a la cuales queremos verificar el uso del lenguaje, en este ejemplo, las del blog, para que se pueda consumir mediante el locale:
es/blog/*
en/blog/*
Y sin el locale, y en este caso, se redirecciona al idioma español según la redirección definida en el middleware:
blog/*
- Andrés Cruz
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter
Acepto recibir anuncios de interes sobre este Blog.
!Cursos desde!
4$
En Academia
Ver los cursos!Libros desde!
1$
Ver los libros