app()->getLocale() kullanmalısınız. Burada yaptığımız sadece tr ya da en diye dil kısaltmasına ulaşmak değil biz tüm uygulamanın yerelini değiştiriyoruz. Böylece dile istediğimiz gibi ulaşabileceğimiz gibi frameworkün de çok dilli özelliklerini kullanabiliyoruz, örneğin trans() yöntemi gibi. Örnekteki lang değişkenini kullanmaya gerek yok.
Şöyle yapın,
app/Http/Controllers/Controller.php dosyasına şu şekilde ekleme yapın (Laravel 5.3):
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
protected $locale;
public function __construct()
{
$this->locale = app()->getLocale();
}
public function localizedView($view = null, $data = [], $mergeData = [])
{
// resources/views/tr, resources/views/en şeklinde dile göre görünümleriniz olduğunu varsayarsak:
return view($this->locale.'.'.$view, $data, $mergeData);
}
}
daha sonra tüm controllerlar içerisinden dile ulaşabilir, dile göre görünümleri getirebilirsiniz. Örneğin:
app/Http/Controllers/HomeController.php
public function index()
{
// Burada istersek $this->locale ile dile ulaşabiliriz. Örneğin şu anki değeri tr olsun yani Türkçe
// Örneğin posts tablomuzda locale alanı olsun ve bu alanda dili saklıyor olalım.
// Elbette bunu model içerisinde scope kullanarak yapmak daha uygun olacaktır. Sadece $this->locale ile kullanıma örnek vermek istedim
// Türkçe yazılardan son eklenenden ilk eklenene doğru 10 tanesini çekelim
$posts = Post::where('locale', $this->locale)->latest()->take(10)->get();
// Daha sonra veriyi aktif dilin görünümüne gönderelim. Mesela görünüm resources/views/tr/home.blade.php ise şu yeterli olacaktır
return $this->localizedView('home', compact('posts'));
}
Yani onlarca seçenek var, nasıl yapacağınızı projenize, size bağlı.