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

