Laravel Starter Kit Hakkında
Laravel Starter Kit Hakkında
Laravel Project’in başlangıcında kullanılabilecek bazı temel işlevsellikler sunan Starter Kit’ler, uygulamanızın ilk lansmanında hızlı bir şekilde gerekli olan işlevsellikleri sağlamaktadır. Bu işlevsellikler şunları içerir:
- Layoutlar
- Tipik bir yan menü layout’u
- Tipik bir başlık layout’u
- Breadcrumb’lar
- Kimlik Doğrulama
- Temel oturum yönetimi
- Şifre hatırlatmaları
- Kendiliğinden kayıt
- TOTP tabanlı 2FA
- Kullanıcı Ayarları
- Profil
- Aydınlık mod / karanlık mod geçişi
- Hesap silme
- Basit bir dashboard

Sağlanan kimlik doğrulama ekranı

Kullanıcı ayarlarının bir kısmı
Bu nedenle, bir projeyi başlatmak için son derece kullanışlıdır. Ancak özellikle Japonca konuşulan bölgelerde, bu fonksiyonların benimsenmesinin oldukça yavaş ilerlediği görülüyor. Bunun bir nedeni, işlevselliğin anlaşılması biraz zor olmasıdır. Bir diğer önemli faktör ise Japonca yerelleştirme için gereken çabadır. Günümüzde AI programlamasıyla, İngilizce arayüzleri tanımlamak ve yeniden yazmak çok zor değil. Ancak herkes bu AI geliştirme ajanlarına erişemiyor ve AI ile sürekli her şeyi çevirmek oldukça yorucu. Eğer OSS olarak çok dilli desteklemeye yönelik iddialı bir girişimde bulunuyorsanız, Laravel Starter Kit’lerinin yerelleştirme sorunlarıyla karşılaşması kaçınılmazdır.
Laravel Starter Kit İki Temel Formatla Geliyor
Laravel Starter Kit İki Temel Formatla Geliyor
“Laravel Starter Kit” dediğimizde, şu anda dört ana seçenek bulunmaktadır. Öncelikle bunları düzenlemek istiyorum.
- Livewire tabanlı
- Inertia.js tabanlı
Genel olarak baktığımızda işler önce Livewire ve Inertia.js’e ayrılmaktadır ve Inertia.js altında üç başka seçenek daha vardır. Bu çok sayıda varyasyon, projeye özgü bir özelliktir. Livewire ve Inertia.js arasındaki yerelleştirme durumu farklılık gösterdiğinden, önce bu ayrımı anlamak önemlidir.
Özetle: Eğer projenizi Livewire ile tamamlamayı planlıyorsanız, çok dilli destek sağlamak çok da zor değil ve bazı alt yapılar zaten mevcuttur. Ancak Inertia.js’i yerelleştirmeye çalışırsanız, Starter Kit’in varsayılan durumda çeviri mekanizması bulunmamaktadır.
Laravel için i18n Projeleri
Laravel için i18n Projeleri
Laravel’in Yerleşik Çeviri Mekanizması
Laravel’in Yerleşik Çeviri Mekanizması
Arka uç tarafında, Laravel’ın kendisi zaten yerelleştirme işlevselliğine sahiptir ve bu işlevselliği Laravel Lang ile sağlanan ek kaynaklar ile güçlendirilmiştir.
Laravel 13 Yerelleştirme Dokümantasyonu:
https://laravel.com/docs/13.x/localization
Laravel-Lang Hakkında
Laravel-Lang Hakkında
Aslında uzun zamandır var olan bir proje olan Laravel-Lang, bazı çok dilli destek mekanizmaları sunmaktadır.
https://laravel-lang.com/basic-usage.html
Dokümantasyonu takip ederek:
composer require laravel-lang/common
Bu, aşağıdaki bağımlılıkları çözer ve kurar:
- laravel-lang/publisher
- laravel-lang/lang
- laravel-lang/attributes
- laravel-lang/http-statuses
- laravel-lang/starter-kits
İlk bakışta, bu paketin bir şekilde Starter Kit yerelleştirmesini sihirli bir biçimde halledeceği gibi görünüyor, ancak gerçek durum bu kadar basit değildir. Daha sonra buna bakacağız. Paketi sadece yüklemek, vendor/ altında dosyaları genişletir, bu nedenle bu aşamada aslında kullanılabilir bir şey yoktur.
lang:add Komutu ile Gerçek Projeye Yayınlama
lang:add Komutu ile Gerçek Projeye Yayınlama
Bu komutu şu şekilde çalıştırırsınız. Burada sadece ja dilini yaygınlaştıracağız.
php artisan lang:add ja
Bu komutun uygulanması, önceden çözülen bağımlılık laravel-lang/publisher tarafından gerçekleştirilir ve aşağıdaki işleri yapar:
- Hedef yerelleştirici belirlenir
- Plugin listesinden yalnızca etkin olanlar seçilir
source/...içindeki anahtar listesi okunurlocales/{locale}/...içindeki değerler okunur- Bunlar
lang/{locale}.jsonveyalang/{locale}/*.phpiçine yazılır
Her durumda, bu komut çalıştırıldığında, şunlardan oluşur:
INFO Çeviriler toplanıyor...
LaravelLang\Actions\Plugin ............................................................................. 2.37ms TAMAM
LaravelLang\Attributes\Plugin .......................................................................... 0.83ms TAMAM
LaravelLang\HttpStatuses\Plugin ........................................................................ 1.28ms TAMAM
LaravelLang\Lang\Plugin ................................................................................ 5.90ms TAMAM
LaravelLang\StarterKits\Plugin ......................................................................... 1.37ms TAMAM
INFO Değişiklikler kaydediliyor...
ja.json ................................................................................................ 5.04ms TAMAM
ja/actions.php ......................................................................................... 4.65ms TAMAM
ja/auth.php ............................................................................................ 0.45ms TAMAM
ja/http-statuses.php ................................................................................... 2.02ms TAMAM
ja/pagination.php ...................................................................................... 0.55ms TAMAM
ja/passwords.php ....................................................................................... 0.52ms TAMAM
ja/validation.php
Yerelleştirme Yapılandırması
Yerelleştirme Yapılandırması
Bu, resmi belgelerde açıklandığı gibi, APP_LOCALE ortam değişkeni ile belirlenir ve kullanılabilir değilse APP_FALLBACK_LOCALE‘a geri döner. Bu nedenle, Japonca yerelleştirme için yapılandırma genellikle şöyle görünür:
#APP_LOCALE=en
APP_LOCALE=ja
APP_FALLBACK_LOCALE=en
APP_FAKER_LOCALE=en_US
Bu ayar arka ucu yerelleştirir.

Örneğin, paketi yükledikten ve yerelleştirme yapılandırmasını yaptıktan sonra, 404 sayfaları bile hemen Japoncaya çevrilir. Ancak bu bir arka uç işlevselliğidir.
Ön Uç Desteği
Ön Uç Desteği
İşte burada sorun başlar.
Önceden belirttiğimiz gibi, durum Livewire ve Inertia.js arasında farklılık gösterir. Öncelikle şunu belirtmek gerekir ki: şu anda düzgün çalışan tek şey Livewire’dır. Dolayısıyla Livewire tarafıyla başlayalım.
Laravel-Lang Çeviri Dosyalarını Nasıl Oluşturuyor
Laravel-Lang Çeviri Dosyalarını Nasıl Oluşturuyor
Aslında çeviri dosyalarının iki ana türü vardır: .json ve .php. Ön uç genelde .json dosyalarını kullandığı için burada onlara odaklanacağım.
Bu noktada, laravel-lang/common bağımlılık çözümlemesi, aşağıdaki dört dosyayı genişletmiş olmalıdır:
vendor/laravel-lang/starter-kits/locales/ja/json.json
vendor/laravel-lang/lang/locales/ja/json.json
vendor/laravel-lang/http-statuses/locales/ja/json.json
vendor/laravel-lang/actions/locales/ja/json.json
Bu dosyalar birleştirilerek nihayet lang/ja.json dosyası oluşturulur. Ancak, her şey körü körüne kopyalanmaz; aslında bir filtreleme aşaması vardır. Örneğin, Livewire için durumu inceleyelim.
Sadece burada listelenen anahtarlar yakalanır ve içsel olarak genişletilir, bu nedenle bu mekanizma gereksiz anahtarları filtrelemek için tasarlanmış görünüyor.
Bu arada, mevcut React durumu şöyle görünmektedir:
…Evet.
Şimdi Livewire Starter Kitinin nasıl çevrildiğine bakalım ve giriş ekranını inceleyelim.
Livewire Starter Kit Giriş Ekranını Çevirme
Livewire Starter Kit Giriş Ekranını Çevirme
Bu durumda, çeviri kancaları zaten başlangıçtan itibaren kullanıcı arayüzüne yerleştirilmiştir. Örneğin:
name="remember" :label="__('Beni hatırla')" :checked="old('remember')" />
class="flex items-center justify-end">
Görüldüğü gibi, PHP’nin çeviri sisteminden __() aracılığıyla geçerek işler. Livewire, arka uçla sıkı bir şekilde entegre olduğu için (kısaca Blade benzeri bir yapıda çalışır), bu yaklaşım mümkündür.
Livewire’ın Japonca Kaynaklarının Kalitesi
Livewire’ın Japonca Kaynaklarının Kalitesi
Peki, dil paketini yüklemek her şeyi çözüyor mu? Ne yazık ki, hayır. Mevcut durumda çeviri kalitesi son derece düşük veya çoğu kısım çevrilmemiştir.
Çeviri dosyaları bunun üzerine inşa edildiğinden, bunu düzeltmenin bir yolu yoktur. Ben PR’lar göndermekte ve tartışmalara katılmaktayım, bu nedenle belki bir nebze olsa düzelir ama bilemiyorum…
Giriş için geçerli test:
[email protected]/password
Inertia.js Arayüzleri React Gibidir
Inertia.js Arayüzleri React Gibidir
Yine giriş ekranına bakalım. Daha önce Beni Hatırla kısmını karşılaştırdığımız için, işte bununla ilgili kısım:
Dizeler doğrudan kaynak koduna yazıldığı için, üstelik Japonca ya da başka bir dilde herhangi bir şey doğrudan çevrilmez (doğal olarak).
Sonuç
Sonuç
Laravel Starter Kit’lerdeki mevcut yerelleştirme (i18n) durumu budur. Livewire dışında, her şey oldukça karmaşık. İngilizce konuşan kullanıcılar için bu durum genelde büyük bir sorun olmamakta; ancak bu durum dışında, problemler oldukça belirgin hale gelmektedir. Sanırım herkes, şiddetle UI’ları AI gibi araçlarla yeniden yazma konusunda baskı yapıyor, ama bunun daha iyi bir şekilde ele alınmasını diliyorum. Şu ana kadar bazı Japonca kaynakları PR ile katkıda bulunmaya çalıştım, ama sonunda burada ne olacağını bilemiyorum.
Kaynak: Orijinal Makale


