التدويل (i18n) في PHP: دليل شامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التدويل (i18n) في PHP: كيفية جعل الموقع متعدد اللغات



التدويل (i18n) هو عملية تصميم البرمجيات بحيث يمكن تكييفها بسهولة مع لغات ومناطق مختلفة دون إجراء تغييرات في الكود. في PHP، توجد عدة أدوات قوية تسمح بفصل الكود عن النص، ثم تحميل اللغة المطلوبة ديناميكيًا.



في هذه المقالة، سنستعرض الأساليب والمكتبات الرئيسية لتنفيذ i18n في PHP، بما في ذلك الدوال المدمجة gettext، والإضافة intl، والمكتبات الشائعة مثل Symfony Translation.



1. المفاهيم الأساسية لـ i18n



قبل الانتقال إلى الأدوات، من المهم فهم المصطلحات الرئيسية:



  • الإعداد المحلي (locale) — مزيج من اللغة والمنطقة (مثل ru_RU، en_US، de_DE).
  • الترجمة — استبدال السلسلة النصية الأصلية بما يعادلها بلغة أخرى.
  • الجمع (Pluralization) — التصريف الصحيح للكلمات حسب العدد (مثل "ملف واحد"، "ملفان"، "10 ملفات").
  • التنسيق — تكييف التواريخ والأرقام والعملات وفقًا للإعداد المحلي.


2. المكتبة المدمجة gettext



gettext هي أداة كلاسيكية لـ i18n، مدمجة في PHP. تستخدم ملفات .po (Portable Object) و .mo (Machine Object) لتخزين الترجمات.



التثبيت والإعداد



تأكد من تفعيل إضافة gettext في ملف php.ini:



extension=gettext


مثال على الإعداد الأساسي:



<?php// تعيين الإعداد المحليsetlocale(LC_ALL, 'ar_SA.UTF-8');// تحديد النطاق (اسم ملف .mo)bindtextdomain('messages', './locale');// ترميز الأحرفbind_textdomain_codeset('messages', 'UTF-8');// اختيار النطاقtextdomain('messages');

// استخدام الترجمةecho gettext("Hello, World!"); // سيطبع "مرحبًا بالعالم!"// أو بشكل مختصرecho _("Hello, World!");?>


هيكل الملفات



يجب أن تكون ملفات الترجمة في مجلد locale:



locale/├── ar_SA/│   └── LC_MESSAGES/│       └── messages.po│       └── messages.mo└── en_US/    └── LC_MESSAGES/        └── messages.po        └── messages.mo


مثال على ملف messages.po:



msgid "Hello, World!"msgstr "مرحبًا بالعالم!"

msgid "Files: %d"msgstr "الملفات: %d"


لتجميع .po إلى .mo استخدم الأداة msgfmt:



msgfmt messages.po -o messages.mo


3. الإضافة intl (Internationalization Functions)



توفر الإضافة intl إمكانيات أكثر حداثة للعمل مع الإعدادات المحلية، بما في ذلك تنسيق الأرقام والتواريخ والرسائل.



التثبيت



sudo apt-get install php-intl  # لأنظمة Ubuntu/Debian


تنسيق الرسائل باستخدام MessageFormatter



<?php$locale = 'ar_SA';$message = '{0} يرحب بـ {1}!';$fmt = new MessageFormatter($locale, $message);echo $fmt->format(['PHP', 'العالم']);// سيطبع: PHP يرحب بـ العالم!?>


الجمع (Pluralization)



<?php$locale = 'ar_SA';$pattern = '{0, plural, one {# ملف} two {# ملفان} few {# ملفات} other {# ملفًا}}';$fmt = new MessageFormatter($locale, $pattern);echo $fmt->format([1]); // 1 ملفecho $fmt->format([2]); // 2 ملفانecho $fmt->format([10]); // 10 ملفات?>


تنسيق التواريخ والأرقام



<?php$locale = 'ar_SA';$fmt = new NumberFormatter($locale, NumberFormatter::DECIMAL);echo $fmt->format(1234567.89); // 1٬234٬567٫89

$dateFmt = new IntlDateFormatter($locale, IntlDateFormatter::LONG, IntlDateFormatter::NONE);echo $dateFmt->f

توصيات