العربية ليست ترجمة: 17 اختبار RTL يجب أن ينجح فيها أي تطبيق قبل النشر

يمكن أن تكون كل الكلمات مترجمة بينما يبقى التطبيق غير عربي. المشكلة تظهر في سهم يرجع إلى الجهة الخطأ، أو رقم هاتف يتفكك، أو حركة انتقال تبدأ من حافة غير منطقية، أو زر يختفي عندما يكبر الخط.

اختبرت هذه الأنواع من الحالات أثناء بناء ونشر تطبيقات عربية على iOS و Android. الدرس المتكرر هو أن RTL حالة تشغيل كاملة، وليس قلب flexDirection في آخر يوم.

توفر React Native في I18nManager معلومات التحكم في RTL، لكن وثائقها نفسها تنبه إلى أن تغييرات allowRTL وforceRTL تحتاج إعادة تشغيل، وأن forceRTL مخصص للاختبار لا للإنتاج. كما أن iOS و Android يحددان الاتجاه وفق إعدادات مختلفة يجب تهيئتها بصورة صحيحة.

مرجع I18nManager الرسمي

1. تشغيل بارد بالعربية

غيّر لغة الجهاز إلى العربية، أغلق التطبيق تماماً، ثم افتحه. لا تعتمد على تبديل اللغة داخل جلسة واحدة، لأن بعض خصائص الاتجاه لا تتغير حتى إعادة التشغيل.

2. تشغيل بارد بالإنجليزية بعد العربية

الاختبار المعاكس يكشف الحالات التي بقي فيها اتجاه محفوظ أو قيمة مخزنة من الجلسة السابقة.

3. الشاشة بعرض ضيق

اختبر هاتفاً صغيراً مع النص الحقيقي. راقب العنوان والأزرار والشارات والنوافذ السفلية. لا تجعل الاختبار مقتصراً على أحدث جهاز كبير.

4. تكبير النص

ارفع حجم النص من إعدادات النظام. يجب ألا تتحول الأزرار إلى نص مقصوص أو يتداخل العنوان مع شريط التنقل.

5. النص المختلط

استخدم نصاً واقعياً:

رقم الطلب INV-2026-104، الإجمالي QAR 1,250.00
الدعم: support@example.com

تحقق من ترتيب الرمز والرقم وعلامات الترقيم. قد تحتاج أجزاء محددة إلى اتجاه صريح، لا الصفحة كلها.

6. أرقام الهاتف

اعرض الرقم بصرياً باتجاه ثابت، واجعل الرابط يستخدم صيغة دولية صحيحة. لا تقلب ترتيب الرقم لمجرد أن الحاوية RTL.

7. التاريخ والوقت

حدد هل المنتج يريد التقويم الميلادي أو الهجري، والأرقام العربية أو اللاتينية، والمنطقة الزمنية. اختبر عبور منتصف الليل لا لقطة واحدة فقط.

8. العملات

اختبر QAR و USD ومبالغاً سالبة وخصماً وضريبة. يجب أن يبقى معنى الرقم واضحاً في الجدول والإيصال والتنبيه.

9. الأسهم والأيقونات الاتجاهية

أيقونة البحث لا تتغير، لكن سهم الرجوع والتقدم والإرسال قد يتغير مع معنى الحركة. لا تقلب كل SVG آلياً.

10. حركة التنقل

افتح شاشة ثم ارجع بالسحب والزر. يجب أن تتفق الحركة مع ترتيب الشاشات واتجاه النظام، لا مع نسخة LTR من الحركة.

11. القوائم الجانبية

اختبر موضع الفتح والإغلاق ومنطقة السحب والطبقة التي تحجب المحتوى. الموضع الصحيح لا يكفي إذا بقي gesture من الحافة الأخرى.

12. الحواف المنطقية

استخدم start وend أو قراراً مبنياً على I18nManager.isRTL عندما تكون الخاصية اتجاهية. القيم الصريحة left وright ليست خطأ دائماً، لكنها يجب أن تكون مقصودة.

const backTransform = {
  transform: [{ scaleX: I18nManager.isRTL ? -1 : 1 }],
};

13. الصور والرسوم

لا تقلب شعاراً أو صورة منتج أو مخططاً يحمل نصاً. اقلب فقط العنصر الذي يحمل معنى اتجاهياً.

14. الحقول ولوحة المفاتيح

اختبر الاسم والبريد والهاتف والرقم السري والبحث. اتجاه الحقل ونوع لوحة المفاتيح وموضع زر المسح ليست قراراً واحداً.

15. قارئ الشاشة

شغل VoiceOver و TalkBack. راجع ترتيب التركيز، واسم كل زر، وما إذا كان قارئ الشاشة ينطق قيمة الحقل والخطأ والهدف بصورة مفهومة.

16. الشبكة والحالات غير المثالية

اختبر التحميل والفراغ والفشل وإعادة المحاولة وانتهاء الجلسة. كثير من فرق RTL تظهر في الرسائل التي لا يراها المصمم في المسار السعيد.

17. البناء الموقع على جهاز فعلي

شغل Release build، لا نسخة التطوير فقط. اختبر iPhone وجهاز Android فعليين إن كانا ضمن النطاق، مع رابط عميق وإشعار وصلاحيات وخلفية حقيقية.

يمكن رؤية أمثلة التطبيقات المنشورة من حسابي على App Store وGoogle Play. هذه الروابط تثبت الإصدار العام، لكنها لا تعني أن المتجر اختبر كل حالة RTL نيابة عن فريق المنتج.

اختر هذا الأسلوب عندما

  • العربية لغة أساسية أو متساوية مع الإنجليزية.
  • يوجد إدخال ونص مختلط ومحتوى طويل.
  • التطبيق يستخدم التنقل والحركات والإشعارات والروابط العميقة.
  • تريد تقليل أخطاء ما بعد النشر.

لا تكتفِ به عندما

  • التطبيق يتعامل مع دفع أو صحة أو صلاحيات حساسة تحتاج اختبارات مجال إضافية.
  • هناك أجهزة خاصة أو Wear أو واجهات سيارة.
  • المنتج يدعم أكثر من نظام كتابة واتجاه.

الخلاصة

اختبار RTL الجيد يراجع المعنى قبل المرآة. المطلوب ليس أن تبدو الشاشة معكوسة، بل أن يقرأ المستخدم ويتنقل ويدخل البيانات ويفهم الحالة دون مقاومة.

نزّل قائمة اختبار تطبيق عربي و RTL واستخدمها مع البناء الموقع قبل إرسال النسخة إلى المتاجر.