موتو باي تتحدث الآن ست لغات
مشترٍ في إسطنبول يفتح رابط دفع من متجر في مدريد. تظهر الصفحة بالتركية. يدفع، فيصل إشعار الويبهوك إلى التاجر، وفي لوحة تحكمه في مدريد تظهر العملية بالإسبانية. ولم يضطر أحد لاختيار اللغة.
هذا ما أطلقناه هذا الشهر. صفحة الدفع التي يراها الزبون، وصفحة “ادفع لي”، ولوحة التاجر بالكامل، أصبحت كلها مترجمة إلى ست لغات: الإنجليزية والعربية والإسبانية والتركية والأرمنية والروسية. وموقع التسويق (وهذه المدونة من ضمنه) متوفر بالست نفسها.
ما الذي تُرجم
جانب الزبون:
- صفحة الدفع المستضافة على
/pay/:id - صفحة رابط “ادفع لي” (
/pay/me/:slug) - كل نصوص تدفّق المحفظة: الاتصال، التوقيع، التأكيد، إعادة المحاولة، حالات الخطأ
- نصوص التسعير ومقارنة المسارات
- تعليمات الإرسال اليدوي، شرح رمز QR، وتنبيهات مبلغ الغبار (dust amount)
- إشعار التحويل لاعتماد الهوية (KYC)، وحالة “يحتاج مراجعة يدوية” النادرة
جانب التاجر:
- الشريط الجانبي للوحة وكل صفحة تحت
/dashboard/* - الإعدادات: مفاتيح API، سر الويبهوك، القنوات، المفتاح الرئيسي، تجاوز التسوية
- معالج الإعداد الأولي
- قائمة المدفوعات، المرشحات، تفاصيل العملية، شارات الحالة
- إعداد روابط “ادفع لي”
- كل رسائل التحقق من النماذج والأخطاء
لوحة الإدارة (/admin/*) تبقى بالإنجليزية حالياً. هي داخلية ولا يراها الزبون.
كيف تُختار اللغة
في الزيارة الأولى نقرأ لغة المتصفح من navigator.language. إن طابقت إحدى اللغات الست، تُحمَّل الواجهة بها. ثم نحفظ الاختيار في localStorage كي لا تتكرر عملية الكشف في الزيارة التالية.
يوجد مبدّل لغة في تذييل صفحة الدفع، وصفحة “ادفع لي”، والشريط الجانبي للوحة التاجر. اختيار لغة من المبدّل يلغي الكشف التلقائي ويُحفظ بالطريقة نفسها.
أما التاجر المسجَّل دخوله، فتُحفظ تفضيلاته على سجل التاجر مباشرة، فينتقل اختيار اللغة من الحاسوب إلى الهاتف من دون إعادة ضبط.
دعم الكتابة من اليمين إلى اليسار للعربية
العربية تقلب التخطيط بالكامل. النص يُحاذى لليمين، والشريط الجانبي ينتقل إلى الحافة اليمنى، وتنعكس الأيقونات والأسهم. أما حقول المبالغ فتبقى أرقامها بترتيبها الطبيعي من اليسار إلى اليمين. وموقع المحتوى في Astro (المدونة، سجل التحديثات، الصفحة الرئيسية) يُعرض بالطريقة نفسها تحت /ar/*.
إن كنت تقرأ هذه التدوينة بالعربية، فعنوانها /ar/blog/multilingual-checkout. الاسم نفسه موجود في كل اللغات.
تاجر بلغة، وزبون بلغة أخرى
صفحة الدفع ولوحة التاجر مستقلتان. يستطيع تاجر يتحدث الإسبانية تشغيل لوحته بالإسبانية، بينما يرى كل زبون من زبائنه صفحة الدفع بلغة متصفحه هو. لا يوجد قفل لغة مرتبط بالتاجر يفرض على الزبون.
هذا الفرق مهم في التجارة العابرة للحدود. وكالة في يريفان تبيع لعملاء في تركيا وروسيا وإسبانيا لا تحتاج صفحات دفع منفصلة. رابط واحد، ثلاث لغات، تلقائياً.
لماذا هذه اللغات الست
الاختيار عملي وليس شاملاً. اخترنا اللغات التي رأينا فيها طلباً حقيقياً من المستخدمين أو فرصة سوق واضحة:
- الإنجليزية هي اللغة الافتراضية ولغة توثيق الواجهة البرمجية
- العربية تغطي الخليج وشمال أفريقيا، حيث اعتماد العملات المستقرة مرتفع
- الإسبانية كانت ثاني أكثر لغة طلباً للزبائن في أشهرنا الأولى
- التركية تخدم قاعدة التجار الذين دفعتهم تقلبات الليرة نحو دعم USDT على شبكة TRC-20
- الأرمنية هي البيت: موتو باي تُبنى في يريفان
- الروسية تفتح الباب لشتات ما بعد السوفيات وللتقاطع الأرمني الروسي في قاعدة مستخدمينا
إن كان سوقك خارج هذه القائمة وكنت ستستخدم موتو باي لو كان مدعوماً، راسلنا. إضافة لغة سابعة هي ملف ترجمة وإدخال في المبدّل، وليست إعادة كتابة.
ما الذي تغيّر في البنية
لمن يهتم بالتفاصيل: تطبيق React يستخدم react-i18next مع كتالوج JSON لكل لغة. وموقع المحتوى في Astro يستخدم إعداد i18n المدمج مع خريطة ui.ts ومجموعات محتوى منفصلة لكل لغة (blog/en، blog/ar، blog/es، وهكذا). تطابق الـ slug بين اللغات يولّد بدائل hreflang في خريطة الموقع، فتعرف محركات البحث أن هذه الصفحات ترجمات لبعضها.
ذاكرة الترجمة تعيش في content/src/i18n/ui.ts وفي كتالوجات React لكل صفحة. إضافة نص في أي مكان تتطلب وجود المفتاح نفسه في الملفات الستة، ويُفرض هذا عبر فحص أثناء البناء.
جرّبها
افتح أي رابط دفع. اضغط مبدّل اللغة في التذييل. أو غيّر لغة متصفحك المفضّلة وأعد تحميل الصفحة.
إن لاحظت ترجمة تبدو في غير محلها (نصاً حرفياً جداً، أو كلمة لا تناسب السياق المحلي، أو شذوذاً إنجليزياً تسرّب) أخبرنا. الكتالوجات صغيرة بما يكفي لتصل التصحيحات في الأسبوع نفسه.