40% de descuento en todos los planes

4d: 22h: 34m:11s'
Cesar Parrales
Cesar Parrales
Laravel
Comparte:

Ayuda, Problema al cambiar idioma en rutas dinámicas

Implemente multilenguaje con Localization, funciona bien en rutas estáticas, el problema surge cuando desde la vista news que lista los post intento ir a la vista show para mostrar el post individual, recibo un mensaje de que falta un parámetro
Código del enlace desde el show hasta el view
<h2 class="font-size-regular"><a href="{{ route('news.show', [app()->getLocale(), $post]) }}">{{ $post->title }}</a></h2>
El mensaje:
Missing required parameters for [Route: news.show] [URI: {language}/news/{post}]
El selector de idioma esta en el layout dentro de un partial header, este es el código
<li class="has-children">
    <a href="services.html"><span class="icon-globe"></span></a>
    <ul class="dropdown">
        <li><a href="{{ route(Route::currentRouteName(), '/es') }}" class="pl-3 pr-3"><img src="/images/icons/spanish-language.png"></a></li>
        <li><a href="{{ route(Route::currentRouteName(), '/en') }}" class="pl-3 pr-3"><img src="/images/icons/english-language.png"></a></li>
    </ul>
</li>
De antemano gracias por su ayuda.
Jorge Davila
Jorge Davila (0 xp)
Parámetros lo que veo,estas intentando cambiar el idioma pasándole la ruta actual con el locale que necesitas pero,si das click en alguno de esos anchor te rediriges a la misma ruta,sin embargo no estas pasándole el id del post que estas usando.Observa tu ruta:URI: {language}/news/{post}Esta ruta te esta pidiendo 2 según y solo le estas pasando una al hacer click en el enlace de cambio de idioma.Puedes hacer 2 cosas:

1.- Usar un prefijo de ruta.
Route::prefix('es')->group(function () {
    Route::get('users', function () {
        // Matches Parámetros "/admin/users" URL
    });

});Route::prefix('en')->group(function () {
    Route::get('users', function () {
        // Matches Parámetros "/admin/users" URL
    });
});

Crear rutas con prefijos,y en base al prefijo cargar el idioma 


2.-Cargar el idioma  por sesion;

Crear un controlador que maneje los idiomas algo asi

public function __invoke(Request $request)
{
    if(!blank($request->language))
   {
       Session::set('language',$request->language);   
   }
}



Y en tus vistas simplemente verificas el lenguaje seleccionado para inyectar el partial que necesitas o lo que sea que haces con esa información,algo asi:

@if(Session::has('language'))

 //has algo aquí
@endif