Posted in

Traducir el slug en el selector de idiomas con Mcamara

Si por ejemplo tenemos una sección con proyectos los cuales son accesibles con un slug personalizado para cada idioma recogidos en la base de datos, si accedemos a la ficha de un proyecto, la url podría ser la siguiente (si estamos en la versión inglesa):

http://localhost/en/project/1-one-day-in-ny-city

Si cambiamos mediante el selector de idiomas el castellano, nos aparecería por defecto la siguiente url:

http://localhost/es/proyecto/1-one-day-in-ny-city

Como se ve en el ejemplo, el slug 1-one-day-in-ny-city no cambia a 1-un-dia-en-nueva-york. Así que para conseguirlo modificaremos nuestro controlador que pasa los datos a la vista del proyecto y pasaremos una variable llamada route_attributes como en el siguiente ejemplo.

'route_attributes' => [
                'route_name' => 'routes.project',
                'ca' => ['friendly' => $project->id . '-' . \Str::slug($project->title_ca)],
                'es' => ['friendly' => $project->id . '-' . \Str::slug($project->title_es)],
            ]

El valor friendly es el nombre que usamos en nuestro ruta:

// lang/es/routes.php
"project" => "proyecto/{friendly}",

// routes/web.php
Route::get(LaravelLocalization::transRoute('routes.project'), 'FrontofficeController@getProject');

Y añadimos a nuestro selector de idioma en la vista lo siguiente:

@foreach(LaravelLocalization::getSupportedLocales() as $localeCode => $properties)
                                        @php
                                            $localizedUrl = isset($route_attributes)
                                            ? LaravelLocalization::getURLFromRouteNameTranslated(
                                                $localeCode,
                                                $route_attributes['route_name'],
                                                $route_attributes[$localeCode])
                                            : LaravelLocalization::getLocalizedURL($localeCode, null, [], true)
                                        @endphp
                                        <li{!! App::getLocale() == $localeCode ? ' class="language active"' : ' class="language"' !!}>
                                            <a rel="alternate" hreflang="{{ $localeCode }}" href="{{ $localizedUrl }}">
                                                {{ $localeCode }}
                                            </a>
                                        </li>
                                        @endforeach

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *


The reCAPTCHA verification period has expired. Please reload the page.