22
33namespace CodeZero \LocalizedRoutes ;
44
5- use Illuminate \Database \ Eloquent \ Model ;
5+ use Illuminate \Contracts \ Routing \ UrlRoutable ;
66use Illuminate \Support \Collection ;
77use Illuminate \Support \Facades \App ;
88use Illuminate \Support \Facades \Config ;
@@ -331,6 +331,12 @@ protected function prepareParameters($locale, $parameters)
331331 $ parameters = $ parameters ($ locale );
332332 }
333333
334+ foreach ($ parameters as $ key => $ parameter ) {
335+ if ($ parameter instanceof UrlRoutable) {
336+ $ parameters [$ key ] = $ this ->getLocalizedRouteKey ($ parameter , $ locale );
337+ }
338+ }
339+
334340 return $ parameters ;
335341 }
336342
@@ -350,17 +356,30 @@ protected function replaceParameters($locale, $uri, array $parameters)
350356
351357 foreach ($ paramKeys as $ index => $ key ) {
352358 $ value = $ parameters [$ key ] ?? $ parameters [$ index ];
353-
354- if ($ value instanceof Model) {
355- $ originalLocale = App::getLocale ();
356- App::setLocale ($ locale );
357- $ value = $ value ->getRouteKey ();
358- App::setLocale ($ originalLocale );
359- }
360-
361359 $ uri = str_replace ("{ {$ key }} " , $ value , $ uri );
362360 }
363361
364362 return $ uri ;
365363 }
364+
365+ /**
366+ * Get the localized route key from a model.
367+ *
368+ * @param \Illuminate\Contracts\Routing\UrlRoutable $model
369+ * @param string $locale
370+ *
371+ * @return string
372+ */
373+ protected function getLocalizedRouteKey (UrlRoutable $ model , $ locale )
374+ {
375+ $ originalLocale = App::getLocale ();
376+
377+ App::setLocale ($ locale );
378+
379+ $ routeKey = $ model ->getRouteKey ();
380+
381+ App::setLocale ($ originalLocale );
382+
383+ return $ routeKey ;
384+ }
366385}
0 commit comments