طريقة استخدام التوطين في Laravel لإنشاء تطبيقات ويب متعددة اللغات
المقدمة
التوطين (Localization) هو عملية تكييف تطبيقات البرمجيات للعمل في مناطق ولغات متعددة. يدعم Laravel التوطين بشكل مدمج، مما يتيح لك بسهولة ترجمة النصوص الثابتة، رسائل التنبيه، وأجزاء أخرى من التطبيق إلى لغات متعددة. باستخدام التوطين في Laravel، يمكنك بناء تطبيقات ويب متعددة اللغات تقدم تجربة مستخدم مخصصة لمختلف المستخدمين حول العالم. إن توطين التطبيقات يعد خطوة هامة لجذب جمهور أوسع وتحقيق انتشار أكبر، خاصة في الأسواق التي تتحدث لغات مختلفة.
الخطوة 1: إعداد ملفات اللغة
يستخدم Laravel ملفات اللغة لتخزين الترجمات. توجد هذه الملفات في مجلد resources/lang
. بشكل افتراضي، يأتي Laravel مع مجلد en
للغة الإنجليزية، والذي يحتوي على ملفات ترجمة مثل auth.php
وpagination.php
وغيرها. لترجمة التطبيق إلى لغات أخرى، يمكنك إنشاء مجلدات جديدة لتلك اللغات.
لنقم بإنشاء مجلد لغة عربية وإضافة ملف ترجمة. افتح سطر الأوامر واستخدم الأمر التالي:
mkdir -p resources/lang/ar
بمجرد إنشاء المجلد، يمكنك إضافة ملفات الترجمة الخاصة بك. لننشئ ملفًا جديدًا باسم messages.php
داخل المجلد ar
:
<?php
return [
'welcome' => 'مرحبا بك في موقعنا!',
'login' => 'تسجيل الدخول',
'logout' => 'تسجيل الخروج',
'register' => 'تسجيل حساب جديد',
];
ملفات الترجمة عبارة عن مصفوفات (arrays) تحتوي على أزواج مفتاح/قيمة، حيث المفتاح هو النص الأصلي باللغة الافتراضية، والقيمة هي الترجمة المقابلة. يمكنك إنشاء المزيد من ملفات الترجمة حسب الحاجة، مثل auth.php
، validation.php
، وغيرها. هذا يوفر لك فصلًا واضحًا بين الترجمات المختلفة وتسهيل إدارتها.
الخطوة 2: استخدام التوطين في التطبيق
لاستخدام الترجمات في تطبيقك، يمكنك استخدام الدالة __()
أو @lang
في ملفات العرض (Blade). هذه الدوال تقوم بتحميل النصوص المترجمة من ملفات اللغة بناءً على اللغة الحالية. على سبيل المثال، لعرض رسالة ترحيب، يمكنك استخدام الكود التالي في ملف العرض:
<!-- resources/views/welcome.blade.php -->
<h1>{{ __('messages.welcome') }}</h1>
<a href="/login">{{ __('messages.login') }}</a>
<a href="/logout">{{ __('messages.logout') }}</a>
ستقوم الدالة __()
بجلب الترجمة المناسبة من ملفات اللغة بناءً على اللغة الحالية المحددة في التطبيق. إذا كانت اللغة الحالية هي العربية، سيتم عرض النصوص باللغة العربية. يمكنك استخدام @lang
بنفس الطريقة:
<h1>@lang('messages.welcome')</h1>
هذا يجعل من السهل استبدال النصوص الثابتة في تطبيقك بترجمات متعددة، مما يساعد في توفير تجربة مستخدم متسقة ومتعددة اللغات.
الخطوة 3: التبديل بين اللغات
لتغيير اللغة الحالية للتطبيق، يمكنك استخدام الدالة App::setLocale()
. هذه الدالة تتيح لك ضبط اللغة الحالية للتطبيق بناءً على اختيار المستخدم. يمكنك إضافة خيار التبديل بين اللغات في تطبيقك من خلال واجهة المستخدم، مثل قائمة منسدلة تسمح للمستخدمين باختيار لغتهم المفضلة.
لنقم بإضافة مسار (route) لتغيير اللغة:
<?php
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Route;
Route::get('/set-language/{lang}', function ($lang) {
if (in_array($lang, ['en', 'ar'])) {
App::setLocale($lang);
session()->put('locale', $lang);
}
return redirect()->back();
});
في هذا المثال، نستخدم App::setLocale($lang)
لتغيير اللغة الحالية وحفظ اللغة المحددة في جلسة المستخدم (session) ليتم استخدامها في الطلبات المستقبلية. بعد ذلك، يمكننا استخدام هذه الجلسة لضبط اللغة الحالية للتطبيق. تأكد من تضمين الكود التالي في AppServiceProvider
لضبط اللغة بناءً على الجلسة:
<?php
namespace App\Providers;
use Illuminate\Support\Facades\App;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
$locale = session('locale', 'en');
App::setLocale($locale);
}
}
هذا يضمن أن يتم تطبيق لغة المستخدم المختارة في كل الطلبات التي يقوم بها في التطبيق.
الخطوة 4: تعيين اللغة الافتراضية في Laravel
يمكنك تعيين اللغة الافتراضية للتطبيق في ملف config/app.php
. هذه اللغة ستستخدم بشكل افتراضي لكل المستخدمين الذين لا يملكون إعدادات لغة مخصصة في جلساتهم. لتغيير اللغة الافتراضية إلى العربية، قم بتحديث المفتاح locale
كما يلي:
'locale' => 'ar',
يمكنك أيضًا تعيين لغة احتياطية (fallback) تُستخدم في حال لم تكن الترجمة المطلوبة متاحة في اللغة المحددة:
'fallback_locale' => 'en',
هذا يضمن أن التطبيق سيعرض النصوص باللغة الاحتياطية إذا لم يتم العثور على الترجمة في اللغة الحالية.
الخطوة 5: استخدام لغات متعددة مع الترجمة الديناميكية
يمكنك استخدام الترجمات الديناميكية لتقديم نصوص تعتمد على القيم أو الشروط. على سبيل المثال، يمكنك استخدام دالة trans_choice()
لتقديم ترجمات تعتمد على العد:
<?php
return [
'apples' => 'لا يوجد تفاح|تفاحة واحدة|:count تفاحتين|:count تفاحات',
];
ثم استخدم دالة trans_choice()
لتحديد الترجمة المناسبة بناءً على العدد:
{{ trans_choice('messages.apples', 0) }} // لا يوجد تفاح
{{ trans_choice('messages.apples', 1) }} // تفاحة واحدة
{{ trans_choice('messages.apples', 2) }} // 2 تفاحتين
{{ trans_choice('messages.apples', 5) }} // 5 تفاحات
هذه الطريقة تسمح لك بتقديم ترجمات مخصصة استنادًا إلى العدد أو الشروط الأخرى، مما يعزز من قابلية التطبيق للتكيف مع مواقف مختلفة.
الخطوة 6: الترجمة في قواعد البيانات
في بعض الأحيان، قد تحتاج إلى ترجمة محتويات تُخزن في قاعدة البيانات، مثل أسماء المنتجات أو وصفها. لتحقيق ذلك، يمكنك استخدام نمط “الترجمات المباشرة” عن طريق حفظ الترجمة مباشرة في قاعدة البيانات مع الإشارة إلى اللغة.
يمكنك إنشاء جدول للترجمات يحتوي على حقول مثل content_id
، locale
، وtext
. عند استرجاع البيانات، يمكنك استخدام App::getLocale()
لجلب الترجمة المناسبة للمحتوى بناءً على اللغة الحالية.
الخاتمة
يعد التوطين في Laravel أداة قوية تتيح لك بناء تطبيقات متعددة اللغات تقدم تجربة مستخدم مخصصة. من خلال إعداد ملفات اللغة، استخدام دوال الترجمة، وتوفير واجهة لتبديل اللغات، يمكنك تحسين تجربة المستخدم بشكل كبير وجعل تطبيقك أكثر توافقًا مع الجمهور العالمي. استمر في استكشاف ميزات Laravel لتحسين تطبيقاتك وتوسيع نطاق وصولها العالمي.
بالإضافة إلى ذلك، فإن دمج الترجمة مع البيانات المخزنة في قواعد البيانات يوفر مرونة أكبر وتخصيصاً لتجربة المستخدم. سواء كنت تبني تطبيقًا محليًا أو عالميًا، فإن إتقان التوطين يمكن أن يكون عنصرًا حاسمًا في نجاح مشروعك.
اترك تعليقاً