عند بناء تطبيق متعدد اللغات في Laravel، أول ما يتبادر إلى الذهن هو ملفات الترجمة داخل مجلد lang.
لكن نظام الترجمة في Laravel أوسع من ذلك بكثير، وقد تطور عبر الإصدارات ليصبح أكثر مرونة.
Laravel لا يتعامل مع الترجمة كميزة سطحية، بل كجزء من بنية التطبيق نفسها. وهذا يظهر في الطرق المختلفة التي يمكن استخدامها لإدارة النصوص داخل التطبيق.
كيف يعمل نظام الترجمة في Laravel
نظام الترجمة يعتمد على فكرة بسيطة:
- كل نص قابل للترجمة يتم تعريفه بمفتاح (key)
- المفتاح يرتبط بقيمة مختلفة لكل لغة
مثال بسيط:
welcome => Welcome
وفي اللغة العربية:
welcome => مرحبًا
Laravel سيعرض النص الصحيح بناءً على اللغة النشطة داخل التطبيق.
مجلد الترجمة
الملفات الخاصة بالترجمة توجد عادة داخل:
resources/lang
هيكل المجلد يكون عادة:
lang
├── en
│ └── messages.php
└── ar
└── messages.php
الطريقة التقليدية للترجمة (PHP Arrays)
الطريقة الكلاسيكية في Laravel تعتمد على ملفات PHP تعيد مصفوفة.
مثال:
return [
'welcome' => 'Welcome',
'login' => 'Login'
];
وفي العربية:
return [
'welcome' => 'مرحبا',
'login' => 'تسجيل الدخول'
];
استدعاء النص داخل التطبيق:
__('messages.welcome')
أو:
trans('messages.welcome')
الترجمة باستخدام JSON
Laravel أضاف دعمًا لملفات JSON كطريقة أبسط لإدارة الترجمة.
بدل إنشاء مفاتيح قصيرة، يمكن استخدام النص نفسه كمفتاح.
مثال ملف:
resources/lang/ar.json
المحتوى:
{
"Login": "تسجيل الدخول",
"Welcome": "مرحبا بك"
}
استدعاء الترجمة:
__('Login')
هذه الطريقة مفيدة خصوصًا في المشاريع الصغيرة أو النصوص القليلة.
شرح الترجمة Json بالتفصيلاختيار اللغة داخل التطبيق
Laravel يحدد اللغة الافتراضية داخل:
config/app.php
'locale' => 'en'
يمكن تغيير اللغة أثناء التنفيذ:
App::setLocale('ar');
وهذا يسمح بتغيير اللغة حسب:
- اختيار المستخدم
- إعدادات الحساب
- المتصفح
الترجمة مع المتغيرات
أحيانًا تحتاج تمرير متغيرات داخل النص.
مثال:
'welcome_user' => 'Welcome :name'
الاستخدام:
__('messages.welcome_user', ['name' => $user->name])
الناتج:
Welcome Ahmed
Pluralization (الجمع)
Laravel يوفر نظامًا للتعامل مع النصوص التي تعتمد على العدد.
مثال:
'apples' => '{0} No apples|{1} One apple|[2,*] :count apples'
الاستخدام:
trans_choice('messages.apples', $count)
الفرق بين الترجمة القديمة والجديدة في Laravel
النظام القديم
- اعتماد كامل على ملفات PHP
- المفاتيح قصيرة مثل
messages.login - هيكلة ثابتة للملفات
النظام الحديث
- دعم ملفات JSON
- سهولة استخدام النص نفسه كمفتاح
- مرونة أكبر في إدارة الترجمة
لكن في المشاريع الكبيرة ما زالت ملفات PHP أكثر تنظيمًا.
ترجمة النصوص داخل Blade
داخل Blade يمكن استخدام:
{{ __('messages.login') }}
أو:
@lang('messages.login')
ترجمة رسائل Validation
Laravel يدعم ترجمة رسائل التحقق تلقائيًا.
الملف:
lang/ar/validation.php
مثال:
'email' => 'البريد الإلكتروني غير صالح'
ترجمة قواعد البيانات (Database Translation)
في بعض الأنظمة يتم تخزين الترجمة داخل قاعدة البيانات بدل الملفات.
يستخدم هذا الأسلوب عندما:
- يتم تعديل النصوص من لوحة التحكم
- يوجد عدد كبير من اللغات
لكن هذه الطريقة تحتاج طبقة إضافية لإدارة الكاش.
مشاكل شائعة في الترجمة
- تكرار المفاتيح داخل الملفات
- استخدام JSON في مشاريع كبيرة
- نسيان ترجمة رسائل validation
- تغيير اللغة بدون تخزين اختيار المستخدم