Temel Kullanım
Çevrilebilir Alanları Tanımlama
Modelinize $translatableFields özelliğini ekleyin:
php
use PolyglotModel\Contracts\TranslatableContract;
use PolyglotModel\Traits\HasTranslations;
class Post extends Model implements TranslatableContract
{
use HasTranslations;
protected array $translatableFields = [
'title',
'description',
'content',
];
}Çevirileri Ayarlama
php
// Tek bir çeviri ayarla
$post->setTranslate('title', 'tr', 'Türkçe Başlık');
// Çeviriyi silmek için null ayarla
$post->setTranslate('title', 'tr', null);Çevirileri Alma
php
// Belirli bir dili al
$post->getTranslate('title', 'tr');
// Geçerli dili al (sihirli getter)
$post->title;
// Tercih edilen dil ile al
$post->setPreferredLanguage('de')->title;Yedek (Fallback) Davranışı
Bir çeviri bulunamadığında:
- İstenen dili kontrol eder
- Yedek dili kontrol eder (yapılandırmadan)
- Orijinal alan değerini döndürür
php
// Fransızca çeviri yok
App::setLocale('fr');
$post->title; // İngilizce (yedek) veya orijinal değeri döndürürÇeviriden Hariç Tutma
Bir model örneğini hariç tutulmuş olarak işaretleyin:
php
class Post extends Model implements TranslatableContract
{
use HasTranslations;
public function isTranslationExcluded(): bool
{
return $this->is_draft || $this->is_private;
}
}Eager Loading (İlişkileri Önceden Yükleme)
Daha iyi performans için çevirileri önceden yükleyin:
php
// Tekli ilişki
$posts = Post::with('translations')->get();
// Belirli bir dil filtresi ile (gerekirse)
$posts = Post::with(['translations' => function ($query) {
$query->where('locale', 'tr');
}])->get();Tüm Çevirileri Alma
php
// Tüm alanlar, tüm diller
$post->getAllTranslations();
// Tek alan, tüm diller
$post->getFieldTranslations('title');
// ['en' => 'English', 'tr' => 'Türkçe', 'de' => 'Deutsch']
// Eksik çevirileri bul
$post->getMissingLocales('title');
// ['fr', 'es'] - çevirisi olmayan dillerBlade Entegrasyonu
blade
{{-- Blade şablonunuzda --}}
<h1>{{ $post->title }}</h1>
{{-- Belirli bir dili zorla --}}
<h1>{{ $post->getTranslate('title', 'tr') }}</h1>
{{-- Çevrilip çevrilmediğini kontrol et --}}
@if($post->hasTranslation('title', app()->getLocale()))
<span class="badge">Translated</span>
@endifAPI Yanıtı
php
// Controller veya Resource içinde
return [
'title' => $post->title, // Accept-Language başlığına göre otomatik çevrilir
'translations' => $post->getAllTranslations(),
];