diff --git a/docs/LOCALIZATION_PATTERN.md b/docs/LOCALIZATION_PATTERN.md new file mode 100644 index 0000000..3195294 --- /dev/null +++ b/docs/LOCALIZATION_PATTERN.md @@ -0,0 +1,623 @@ +# Localization Pattern - Citrus Platform + +## Genel Bakış + +Citrus Platform'da tüm modüller Laravel Localization sistemi kullanarak çoklu dil desteği sağlar. Bu dokümantasyon, localization pattern'ini ve Pages modülü örneğini detaylandırır. + +## Pattern Yapısı + +### 1. Dil Dosyası Organizasyonu + +``` +lang/ +├── tr/ # Türkçe çeviriler +│ ├── pages.php # Pages modülü çevirileri +│ ├── users.php # Users modülü çevirileri +│ └── common.php # Ortak çeviriler +├── en/ # İngilizce çeviriler +│ ├── pages.php # Pages modülü çevirileri +│ ├── users.php # Users modülü çevirileri +│ └── common.php # Ortak çeviriler +└── validation.php # Validation mesajları +``` + +### 2. Çeviri Anahtarı Yapısı + +```php +// Modül adı (kebab-case) + alt kategoriler +'module_name' => [ + 'title' => 'Modül Başlığı', + 'navigation_label' => 'Navigasyon Etiketi', + 'model_label' => 'Tekil Model Etiketi', + 'plural_model_label' => 'Çoğul Model Etiketi', + + // Actions + 'create' => 'Oluştur', + 'edit' => 'Düzenle', + 'delete' => 'Sil', + 'restore' => 'Geri Yükle', + 'force_delete' => 'Kalıcı Olarak Sil', + + // Form fields + 'field_name' => 'Alan Etiketi', + + // Status options + 'status_option' => 'Durum Seçeneği', + + // Messages + 'created_successfully' => 'Başarıyla oluşturuldu.', + 'updated_successfully' => 'Başarıyla güncellendi.', + 'deleted_successfully' => 'Başarıyla silindi.', + + // Table columns + 'table_column_name' => 'Sütun Başlığı', + + // Validation messages + 'field_required' => 'Bu alan zorunludur.', + 'field_unique' => 'Bu değer zaten kullanılıyor.', +]; +``` + +## Pages Modülü - Örnek Uygulama + +### 1. Resource Sınıfı Localization + +```php +label(__('pages.create')), + ]; + } +} +``` + +#### CreatePage.php +```php +label(__('pages.delete')), + ForceDeleteAction::make() + ->label(__('pages.force_delete')), + RestoreAction::make() + ->label(__('pages.restore')), + ]; + } + + // Başarı mesajı + protected function getSavedNotificationTitle(): ?string + { + return __('pages.updated_successfully'); + } +} +``` + +### 3. Form ve Table Localization + +#### PageForm.php +```php +schema([ + TextInput::make('title') + ->label(__('pages.title_field')) + ->required() + ->validationMessages([ + 'required' => __('pages.title_required'), + ]), + + TextInput::make('slug') + ->label(__('pages.slug_field')) + ->required() + ->validationMessages([ + 'required' => __('pages.slug_required'), + 'unique' => __('pages.slug_unique'), + ]), + + Textarea::make('content') + ->label(__('pages.content_field')) + ->required() + ->validationMessages([ + 'required' => __('pages.content_required'), + ]), + + Select::make('status') + ->label(__('pages.status_field')) + ->options([ + 'draft' => __('pages.status_draft'), + 'published' => __('pages.status_published'), + 'archived' => __('pages.status_archived'), + ]), + ]); + } +} +``` + +#### PagesTable.php +```php +columns([ + TextColumn::make('title') + ->label(__('pages.table_title')) + ->searchable() + ->sortable(), + + TextColumn::make('slug') + ->label(__('pages.table_slug')) + ->searchable(), + + BadgeColumn::make('status') + ->label(__('pages.table_status')) + ->colors([ + 'warning' => 'draft', + 'success' => 'published', + 'danger' => 'archived', + ]), + + TextColumn::make('created_at') + ->label(__('pages.table_created_at')) + ->dateTime() + ->sortable(), + + TextColumn::make('updated_at') + ->label(__('pages.table_updated_at')) + ->dateTime() + ->sortable(), + ]); + } +} +``` + +## Dil Dosyası Örnekleri + +### Türkçe (lang/tr/pages.php) +```php + 'Sayfalar', + 'navigation_label' => 'Sayfalar', + 'model_label' => 'Sayfa', + 'plural_model_label' => 'Sayfalar', + + // Actions + 'create' => 'Yeni Sayfa Oluştur', + 'edit' => 'Sayfayı Düzenle', + 'delete' => 'Sayfayı Sil', + 'restore' => 'Sayfayı Geri Yükle', + 'force_delete' => 'Kalıcı Olarak Sil', + + // Form fields + 'title_field' => 'Başlık', + 'slug_field' => 'URL Yolu', + 'content_field' => 'İçerik', + 'meta_title_field' => 'Meta Başlık', + 'meta_description_field' => 'Meta Açıklama', + 'status_field' => 'Durum', + 'published_at_field' => 'Yayın Tarihi', + + // Status options + 'status_draft' => 'Taslak', + 'status_published' => 'Yayınlandı', + 'status_archived' => 'Arşivlendi', + + // Messages + 'created_successfully' => 'Sayfa başarıyla oluşturuldu.', + 'updated_successfully' => 'Sayfa başarıyla güncellendi.', + 'deleted_successfully' => 'Sayfa başarıyla silindi.', + 'restored_successfully' => 'Sayfa başarıyla geri yüklendi.', + + // Table columns + 'table_title' => 'Başlık', + 'table_slug' => 'URL Yolu', + 'table_status' => 'Durum', + 'table_created_at' => 'Oluşturulma Tarihi', + 'table_updated_at' => 'Güncellenme Tarihi', + + // Validation messages + 'title_required' => 'Başlık alanı zorunludur.', + 'slug_required' => 'URL yolu alanı zorunludur.', + 'slug_unique' => 'Bu URL yolu zaten kullanılıyor.', + 'content_required' => 'İçerik alanı zorunludur.', +]; +``` + +### İngilizce (lang/en/pages.php) +```php + 'Pages', + 'navigation_label' => 'Pages', + 'model_label' => 'Page', + 'plural_model_label' => 'Pages', + + // Actions + 'create' => 'Create New Page', + 'edit' => 'Edit Page', + 'delete' => 'Delete Page', + 'restore' => 'Restore Page', + 'force_delete' => 'Force Delete', + + // Form fields + 'title_field' => 'Title', + 'slug_field' => 'URL Slug', + 'content_field' => 'Content', + 'meta_title_field' => 'Meta Title', + 'meta_description_field' => 'Meta Description', + 'status_field' => 'Status', + 'published_at_field' => 'Published At', + + // Status options + 'status_draft' => 'Draft', + 'status_published' => 'Published', + 'status_archived' => 'Archived', + + // Messages + 'created_successfully' => 'Page created successfully.', + 'updated_successfully' => 'Page updated successfully.', + 'deleted_successfully' => 'Page deleted successfully.', + 'restored_successfully' => 'Page restored successfully.', + + // Table columns + 'table_title' => 'Title', + 'table_slug' => 'URL Slug', + 'table_status' => 'Status', + 'table_created_at' => 'Created At', + 'table_updated_at' => 'Updated At', + + // Validation messages + 'title_required' => 'The title field is required.', + 'slug_required' => 'The URL slug field is required.', + 'slug_unique' => 'This URL slug is already taken.', + 'content_required' => 'The content field is required.', +]; +``` + +## Kullanım Örnekleri + +### 1. Blade Template'lerde +```blade + +