routes/web.php:
// tr, en, de... şeklindeki segmenti alalım
$locale = request()->segment(1);
// Paketin içerisinde yer almayan bir dil ise uygulamanın ana dilini kullansın
if (!in_array($locale, config('translatable.locales'))) {
$locale = config('app.locale');
}
// Uygulamanın dilini değiştirelim
app()->setLocale($locale);
// Bu rotalar dile göre değişen rotalar olacak. Dil segmentine göre grupladık.
// tr ve haber segmentlerini çevirmede sorun yok demişsiniz ama ben örnek
// yarım kalmasın diye yine de ekliyorum
Route::prefix($locale)->group(function () {
Route::get(__('routes.news').'/{slug}')->uses('NewsController@show')->name('news.show');
});
NewsController::show($slug) ateşlendiğinde artık uygulamanın dili de segmente göre değişmiş oluyor. Bunu sizin kullandığınız laravel-translatable paketi anlıyor. O yüzden show yöntemi içerisinde şöyle yapabilirsiniz:
public function show($slug)
{
$newsItem = News::whereTranslation('slug', $slug)->firstOrFail();
// ...
}
Şablon içerisinde de link oluştururken:
<!--
Kullandığınız pakete göre burada $newsItem->slug ve $newsItem->title değeri
uygulamanın diline göre gelecek
-->
<a href="{{ route('news.show', $newsItem->slug) }}">{{ $newsItem->title }}</a>