# Translation System - Quick Start Guide ## 🚀 5 Dakikada Başlangıç ### 1️⃣ Admin Panel'e Git ``` http://your-domain.com/admin/languages ``` ### 2️⃣ Dilleri Aktifleştir - 🇹🇷 Türkçe (TR) - Zaten aktif (varsayılan) - 🇬🇧 İngilizce (EN) - Zaten aktif - 🇩🇪 Almanca (DE) - İsterseniz aktif edin - 🇫🇷 Fransızca (FR) - İsterseniz aktif edin ### 3️⃣ İlk Çeviriyi Ekle #### Tinker ile (Terminal): ```bash php artisan tinker # Blog çevirisi ekle $blog = App\Models\Blog::first(); $blog->setTranslation('title', 'en', 'My First Blog Post', 'published'); $blog->setTranslation('content', 'en', 'This is my blog content in English...', 'published'); # Kontrol et echo $blog->translate('title', 'en'); ``` #### Kod ile: ```php use App\Models\Blog; $blog = Blog::find(1); // İngilizce çeviri ekle $blog->setTranslation('title', 'en', 'My Blog Title', 'published'); $blog->setTranslation('content', 'en', 'Blog content here...', 'published'); $blog->setTranslation('excerpt', 'en', 'Short description', 'published'); // Oku echo $blog->translate('title'); // Mevcut dilde echo $blog->translate('title', 'en'); // İngilizce echo $blog->translate('title', 'tr'); // Türkçe ``` ### 4️⃣ Translation Progress Kontrol Et ```php $blog = Blog::find(1); // İlerleme yüzdeleri $progress = $blog->getTranslationProgress(); print_r($progress); // ['tr' => 100, 'en' => 60, 'de' => 0] // Eksik çeviriler $missing = $blog->getMissingTranslations('en'); print_r($missing); // ['meta_title', 'meta_description'] // Durum echo $blog->getTranslationStatus('en'); // 'partial' ``` ### 5️⃣ Kullanıcıya Dil Yetkisi Ver ```php use App\Models\User; $user = User::find(1); // Türkçe içerik yöneticisi $user->assignLanguage('tr', canCreate: true, canEdit: true, canApprove: true, canPublish: true ); // İngilizce çevirmen (yayınlayamaz) $user->assignLanguage('en', canCreate: true, canEdit: true, canApprove: false, canPublish: false ); // Kontrol if ($user->canManageLanguage('tr')) { echo "User can manage Turkish!"; } ``` ## 💡 Yaygın Kullanım Örnekleri ### Örnek 1: Blog Oluştur ve Çevir ```php // 1. Türkçe blog oluştur $blog = Blog::create([ 'title' => 'Laravel Eğitimi', 'slug' => 'laravel-egitimi', 'content' => 'Laravel hakkında detaylı bilgi...', 'excerpt' => 'Laravel nedir?', 'status' => 'published', 'author_id' => 1, ]); // 2. İngilizce çevirisi ekle $blog->setTranslation('title', 'en', 'Laravel Tutorial', 'published'); $blog->setTranslation('content', 'en', 'Detailed info about Laravel...', 'published'); $blog->setTranslation('excerpt', 'en', 'What is Laravel?', 'published'); // 3. Almanca çevirisi ekle (draft olarak) $blog->setTranslation('title', 'de', 'Laravel Tutorial', 'draft'); $blog->setTranslation('content', 'de', 'Detaillierte Informationen über Laravel...', 'draft'); // 4. Çevirileri kullan echo $blog->translate('title'); // Mevcut dilde echo $blog->translate('title', 'en'); // İngilizce echo $blog->translate('title', 'de'); // Almanca (draft, yayında değil) ``` ### Örnek 2: Translation Workflow ```php $blog = Blog::find(1); // Çeviri oluştur (draft olarak başlar) $translation = $blog->setTranslation('title', 'en', 'My Title', 'draft'); // Workflow adımları $translation->submitForReview(); // Draft → Review $translation->approve(auth()->id()); // Review → Approved $translation->publish(auth()->id()); // Approved → Published // Veya direkt yayınla $translation->publish(); // Draft/Review/Approved → Published // Geri al $translation->unpublish(); // Published → Approved $translation->reject(); // Review → Draft ``` ### Örnek 3: Yeni Model Ekle ```php // 1. Model oluştur class Product extends Model { use HasTranslations; protected $fillable = [ 'name', 'slug', 'description', 'price', 'sku' ]; protected $translatable = [ 'name', 'description', ]; } // 2. Migration Schema::create('products', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('slug')->unique(); $table->text('description'); $table->decimal('price', 10, 2); $table->string('sku')->unique(); $table->timestamps(); }); // 3. Kullan $product = Product::create([ 'name' => 'Laptop', 'slug' => 'laptop', 'description' => 'Yüksek performanslı laptop', 'price' => 15000, 'sku' => 'LAP-001' ]); $product->setTranslation('name', 'en', 'Laptop', 'published'); $product->setTranslation('description', 'en', 'High performance laptop', 'published'); // Artık Product'da çeviri var! 🎉 echo $product->translate('name', 'en'); // "Laptop" ``` ### Örnek 4: Tüm Çevirileri Getir ```php $blog = Blog::find(1); // Bir alanın tüm dillerdeki çevirileri $titleTranslations = $blog->getTranslations('title'); foreach ($titleTranslations as $langCode => $translation) { echo "{$langCode}: {$translation->field_value}\n"; } // tr: Laravel Eğitimi // en: Laravel Tutorial // de: Laravel Tutorial // Bir dilin tüm alan çevirileri $enTranslations = $blog->getTranslationsForLanguage('en'); foreach ($enTranslations as $fieldName => $translation) { echo "{$fieldName}: {$translation->field_value}\n"; } // title: Laravel Tutorial // content: Detailed info about Laravel... // excerpt: What is Laravel? ``` ### Örnek 5: Helper Functions ```php // Mevcut dil $currentLang = current_language(); // Language model $currentCode = current_language_code(); // 'tr' // Varsayılan dil $defaultLang = default_language(); $defaultCode = default_language_code(); // 'tr' // Aktif diller $languages = available_languages(); // Collection [TR, EN] $codes = available_language_codes(); // ['tr', 'en'] // Dil değiştir switch_language('en'); app()->setLocale('en'); // Model çevirisi $title = translate_model($blog, 'title', 'en'); // Çeviri var mı? if (has_translation($blog, 'title', 'en')) { echo "English translation exists!"; } // İlerleme $progress = translation_progress($blog, 'en'); // 75 // Kullanıcı dilleri $userLanguages = user_managed_languages(); // Collection $userCodes = user_managed_language_codes(); // ['tr', 'en'] // Dil bilgileri echo get_language_flag('tr'); // 🇹🇷 echo format_language_name('tr'); // Turkish (Türkçe) ``` ## 🎯 Sık Sorulan Sorular ### 1. Varsayılan dilde çeviri lazım mı? Hayır! Varsayılan dil (TR) için veritabanındaki orijinal değer kullanılır. Sadece diğer diller için çeviri eklemeniz yeterli. ### 2. Çeviri yoksa ne olur? Fallback mekanizması devreye girer: 1. İstenen dilde ara 2. Yoksa varsayılan dilde ara 3. Yoksa model'deki orijinal değeri kullan ### 3. Draft çeviriler görünür mü? Hayır, sadece `published` çeviriler görünür. Ama parametre ile draft'ları da alabilirsiniz: ```php $translation = $blog->getTranslation('title', 'en', published: false); ``` ### 4. Toplu çeviri nasıl yapılır? ```php // TR'den EN'e tüm alanları kopyala $blog->duplicateTranslation('tr', 'en'); // Tüm diller için placeholder oluştur $blog->syncTranslations(['tr', 'en', 'de']); ``` ### 5. Performans nasıl? - ✅ Indexed queries - ✅ Eager loading desteği - ✅ Tek query ile tüm çevirileri çek - ✅ Cache-ready yapı ## 📊 Dashboard Özet Örneği ```php // Admin dashboard widget örneği $stats = [ 'total_languages' => Language::active()->count(), 'total_translations' => Translation::published()->count(), 'pending_approvals' => Translation::review()->count(), 'translation_progress' => [] ]; foreach (Language::active()->get() as $language) { $stats['translation_progress'][$language->code] = [ 'name' => $language->name, 'flag' => $language->flag, 'count' => Translation::forLanguage($language->code)->published()->count(), ]; } ``` ## 🎨 Blade Template Kullanımı ```blade {{-- Mevcut dilde --}}