التدويل في PHP (i18n): دليل عملي للمطورين

Yee
Aug 03, 2024

اجعل موقعك الإلكتروني المبني بـ PHP عالميًا: حل أكثر كفاءة لدعم التعدد اللغوي
إذا كنت مثلِي وتدير مشاريع PHP بسيطة لا تعتمد على أطر العمل الكبيرة (مثل Laravel أو Symfony)، فمن المحتمل أن دعم التعدد اللغوي (i18n) كان دائمًا نقطة إزعاج مستمرة، وإن كانت بسيطة.
الحل التقليدي، gettext
، رغم قوته، إلا أنه مرهق جدًا في الإعداد. خاصة في المشاريع الصغيرة، يبدو الأمر وكأنك "تستخدم مطرقة ثقيلة لكسر جوزة". ما نحتاجه فعلاً هو طريقة يمكن تنفيذها بسرعة دون إدخال الكثير من التعقيد.
بعد الكثير من التجربة والخطأ عبر عدة مشاريع، طورنا حلاً خفيف الوزن لدعم التعدد اللغوي يعتمد على ملفات مصفوفات PHP وأدوات الترجمة عبر الإنترنت. هذا الأسلوب ليس سهل النشر فقط، بل يتميز أيضًا بتكاليف صيانة منخفضة للغاية. اليوم أشارككم هذا الحل بالكامل، بدون أي شروط.
دليل عملي: كيف أتقنت دعم التعدد اللغوي في PHP باستخدام O.Translator
فكرتنا الأساسية بسيطة جدًا: كل لغة تقابلها ملف PHP يحتوي على عبارة return
تعيد مصفوفة ترابطية. هذه الطريقة بسيطة، بديهية، ولا تستهلك الكثير من الموارد.
الخطوة 1: خطط هيكلية المجلدات الخاصة بك
هيكلية المجلدات الواضحة هي نصف النجاح. للحفاظ على التنظيم، سنضع جميع ملفات اللغات في نفس المجلد ونسميها باستخدام رموز اللغات، كما يلي:
project_root/
├── index.php // Your main logic file
├── i18n/ // Folder for all language files
│ ├── lang.cn.php // Chinese language pack
│ ├── lang.en.php // English language pack
│ └── lang.fr.php // French language pack
الخطوة 2: أنشئ "ترسانة اللغات" الخاصة بك
بعد ذلك، سنقوم بإنشاء ملف اللغة الأساسي. لنستخدم الصينية كمثال وننشئ ملف lang.cn.php
. محتوى الملف عبارة عن مصفوفة PHP بسيطة، حيث تكون المفاتيح معرفات فريدة والقيم هي النصوص المقابلة.
مثال على lang.cn.php: تبقى المفاتيح ثابتة، بينما تتغير القيم حسب اللغة
الخطوة 3: ادخل إلى عالم الترجمة مع O.Translator
هل تقوم بترجمة عشرات أو مئات الإدخالات يدويًا؟ هذا هو النوع من الأعمال المتكررة الذي يكرهه المبرمجون أكثر من غيره. هنا يأتي دور سلاحنا السري، O.Translator.
إنها منصة ترجمة مستندات احترافية عبر الإنترنت تدعم ملفات PHP بشكل مثالي، مما يسمح لها بقراءة المصفوفة مباشرة وترجمتها إلى أكثر من 70 لغة.
العملية في غاية البساطة:
- قم بزيارة الصفحة الرئيسية لـ O.Translator وارفع ملف اللغة الأساسي الخاص بك (مثلاً:
lang.cn.php
). - اختر اللغات المستهدفة، مثل الإنجليزية والفرنسية.
- انقر على ترجمة، انتظر قليلاً، وستكون ملفات الترجمة
lang.en.php
وlang.fr.php
جاهزة لك.
ما أعجبني أكثر هو أن O.Translator يتيح لك معاينة جزء من الترجمة مجاناً. إذا كنت راضياً عن النتائج، يمكنك حينها أن تقرر ما إذا كنت ستدفع مقابل الترجمة الكاملة. كما يقولون: "لا تدفع أبداً مقابل منتج لست راضياً عنه."
الخطوة 4: اجعل الكود ينبض بالحياة
كل شيء جاهز؛ كل ما نحتاجه هو اللمسة الأخيرة. الآن، دعنا نعدل ملف index.php
الرئيسي ليتمكن من تحميل حزمة اللغة المناسبة ديناميكياً بناءً على اختيار المستخدم.
<?php
// 1. Determine the current language (using a GET parameter for demonstration)
$supported_langs = ['en', 'cn', 'fr'];
$default_lang = 'en';
$lang = isset($_GET['lang']) && in_array($_GET['lang'], $supported_langs) ? $_GET['lang'] : $default_lang;
// 2. Load the corresponding language file
// Use a global variable like $_ or a specific variable like $TEXTS to store the strings
$_ = require_once __DIR__ . "/i18n/lang.{$lang}.php";
?>
في قالب HTML الخاص بك، يمكنك بعد ذلك استدعاء النصوص بسهولة بهذا الشكل:
<!DOCTYPE html>
<html lang="<?php echo htmlspecialchars($lang); ?>">
<head>
<meta charset="UTF-8">
<title><?php echo htmlspecialchars($_['heading_home']); ?></title>
</head>
<body>
<header>
<h1><?php echo htmlspecialchars($_['heading_home']); ?></h1>
<nav>
<ul>
<li><?php echo htmlspecialchars($_['heading_about']); ?></li>
<li><?php echo htmlspecialchars($_['button_read_more']); ?></li>
</ul>
</nav>
</header>
</body>
</html>
وهكذا، أصبح لديك موقع متعدد اللغات بكل بساطة!
اعتبارات وتفكير متقدم
على الرغم من أن هذا الحل خفيف الوزن، هناك بعض النقاط التي يجدر أخذها في الاعتبار قبل النشر في بيئة الإنتاج:
- كيف تكتشف لغة المستخدم؟ المثال يستخدم معامل GET مثل
?lang=en
. في تطبيق حقيقي، يمكنك أيضًا استخدام$_SESSION
أو$_COOKIE
أو تحليل ترويسة طلب المتصفحAccept-Language
للكشف التلقائي. - اعتبارات الأداء: بالنسبة للمواقع الصغيرة إلى المتوسطة، فإن الحمل الناتج عن استخدام
require_once
لملف PHP في كل طلب يعتبر ضئيلاً. إذا كان موقعك يشهد حركة مرور عالية، فكر في استخدام تقنيات تخزين البايت كود المؤقتة مثل APC أو OPcache لمزيد من التحسين. - قابلية التوسع: مع زيادة عدد اللغات أو النصوص، قد تصبح إدارة الملفات يدويًا أمرًا معقدًا. في هذه المرحلة، قد تحتاج إلى استكشاف حلول i18n أكثر احترافية، مثل امتداد gettext في PHP أو مكونات التوطين التي توفرها الأطر.
- اتساق الترجمة: لضمان الاتساق في أسماء العلامات التجارية والمصطلحات عبر جميع النسخ اللغوية، يُوصى بشدة باستخدام ميزة القاموس في O.Translator.
- الاستراتيجية عالية المستوى: تركز هذه المقالة على التنفيذ التقني. إذا كنت ترغب في معرفة المزيد حول الاستراتيجية الشاملة لدعم التعدد اللغوي للمواقع الإلكترونية، يمكنك قراءة مقالتنا المتعمقة الأخرى.