كل واحد من هذه الأخطاء صدر في منتج حقيقي. ومعظمها صغير منفرداً، ومجتمعةً هي الفرق بين تطبيق يثق به المستخدم العربي وآخر يصفه بأنه «مترجَم».
مرتّبة بحسب تكرار وقوعها لا بحسب خطورتها. أما للمنهج الكامن خلفها، فراجع الدليل الكامل لتعريب التطبيقات والمواقع.
1. تطبيق تباعد الحروف على العربية
العَرَض: النص العربي يبدو مكسوراً — الحروف تظهر منفصلة كأن الكلمة قُطّعت.
السبب: قيمة letter-spacing موروثة من نظام تصميم بُني للخط اللاتيني.
ولماذا يهم أكثر مما يبدو: العربية خط متصل. الحروف ترتبط وتتغير أشكالها بحسب موضعها. وإضافة تباعد الحروف تقطع تلك الروابط، فلا يكون النص متباعداً بغرابة فحسب — بل خاطئاً بصرياً بشكل يلاحظه كل قارئ أصلي فوراً.
الحل: letter-spacing: 0 لكل نص عربي. ودقّق رموز التصميم لديك، فهذا يأتي عادةً من نمط عناوين عام لا من قرار مقصود.
2. ملف أنماط RTL منفصل
العَرَض: تخطيط RTL صحيح للمكوّنات القديمة ومكسور لكل ما أُضيف في الأشهر الأخيرة.
السبب: ملف styles-rtl.css يتجاوز الخصائص الفيزيائية. فكل مكوّن جديد يحتاج تنفيذين، ولا يُختبَر إلا أحدهما.
الحل: خصائص CSS المنطقية. margin-inline-start بدل margin-left، ملف أنماط واحد صحيح في الاتجاهين. أضف قاعدة lint تمنع الخصائص الفيزيائية في الكود الجديد، وحوّل المكوّنات القائمة كلما لمستها.
3. عكس ما لا يجب عكسه
العَرَض: زر التشغيل يتجه يساراً. الساعة تعمل بالعكس. أرقام الهواتف تُعرض ومفتاح الدولة في الطرف الخطأ.
السبب: transform: scaleX(-1) مطبّق على كل الأيقونات تحت RTL بلا تمييز.
الحل: اعكس الأيقونات الاتجاهية فقط — أسهم الرجوع، والتالي/السابق، والإرسال. أما أزرار الوسائط والساعات والرسوم ذات المحور الزمني وكل ما يحمل ترتيب محارفه معنى فتبقى كما هي.
4. خلط نظامي الأرقام
العَرَض: سعر بـ١٢٣ بجوار رقم طلب بـ123.
السبب: غياب قرار واحد بشأن الأرقام، فاختار كل مطوّر ما يراه.
الحل: اختر نظاماً واحداً، وضعه في إعدادات اللغة، ولا تكتب رقماً داخل الكود أبداً. واستخدم Intl.NumberFormat بنظام ترقيم صريح — راجع الأرقام والعملات والصيغ.
5. مكوّنات بارتفاع ثابت
العَرَض: نص عربي مقطوع في الأزرار والبطاقات، أو يفيض عن حاويته.
السبب: مكوّنات مقاسة حول النص الإنجليزي. والعربية أقصر في عدد الأحرف غالباً لكنها أطول في الارتفاع المعروض، وتحتاج تباعد أسطر أكبر.
الحل: min-height بدل height، واختبر كل مكوّن بمحتوى عربي حقيقي — لا بنص لاتيني وهمي يخفي المشكلة تماماً.
6. نصوص مكتوبة داخل الكود تُكتشف في الاختبار
العَرَض: نص إنجليزي يظهر في واجهة عربية بالكامل، يُكتشف متأخراً ومتناثراً في كل مكان.
السبب: غياب طبقة i18n في البداية، فذهبت النصوص مباشرة إلى المكوّنات.
الحل: ابنِ طبقة i18n في المرحلة الأولى. وافحص المواضع التي تختبئ فيها النصوص: رسائل التحقق، وقوالب البريد، ومعالجات الأخطاء، وتسميات الرسوم، ومولّدات PDF، ونصوص الإشعارات.
7. صيغتا جمع بدل ست
العَرَض: الكميات العربية تُقرأ خاطئة نحوياً عند المتحدثين الأصليين، خصوصاً للعنصرين.
السبب: إعداد i18n يعالج المفرد والجمع فقط، لأن هذا ما تحتاجه الإنجليزية. والعربية لها ست فئات جمع في CLDR: صفر، ومفرد، ومثنى، وقليل، وكثير، وأخرى.
الحل: تحقّق من دعم مكتبتك لقواعد جموع CLDR وعرّف الصيغ الست. وصيغة المثنى للاثنين تحديداً هي الأكثر ظهوراً عند غيابها.
8. دمج أجزاء الجمل
العَرَض: جمل عربية بكلمات في ترتيب بلا معنى.
السبب: بناء الجمل من قطع — t("youHave") + count + t("items") — وهذا يفترض ترتيب الكلمات الإنجليزي.
الحل: نص واحد لكل جملة مع متغيرات استيفاء مسمّاة. ولا تركّب الجمل من أجزاء مترجمة أبداً.
9. ترقيم ثنائي الاتجاه مكسور
العَرَض: نقطة تظهر في بداية السطر، أو رمز عملة في الجهة الخطأ من السعر.
السبب: نص لاتيني أو أرقام مُضمَّنة في العربية بلا عزل. فخوارزمية الاتجاه تحسم المحارف المحايدة مقابل السياق المحيط.
الحل: غلّف المحتوى المُضمَّن بـ<bdi>، وثبّت dir="ltr" على أرقام الهواتف والآيبان، واستخدم Intl.NumberFormat للعملة بدل دمج رمز مع رقم.
10. ترجمة آلية تُنشر بلا مراجعة
العَرَض: نص صحيح تقنياً ويُقرأ كإنتاج آلة. والمستخدمون الأصليون يصفون المنتج بأنه غير جاد.
السبب: معاملة الترجمة كخطوة ميكانيكية لا كخطوة محتوى.
الحل: الترجمة الآلية مسودة أولى معقولة للمحتوى الكبير. واعرضها دائماً على متحدث متمكن قبل الإصدار. فهي لا تستطيع اتخاذ قرارات مستوى اللغة ولا تكييف الأمثلة، وهناك تكمن الجودة المُدرَكة.
11. سطوح الباك إند متروكة بالإنجليزية
العَرَض: تطبيق عربي بالكامل يرسل رسائل تأكيد بالإنجليزية وفواتير PDF إنجليزية.
السبب: حصر التعريب في الواجهة وحدها.
الحل: ضمّن البريد والرسائل النصية ومستندات PDF ورسائل أخطاء الواجهات في نطاق الترجمة من البداية. وهذا أكثر سطح يُغفَل على الإطلاق.
12. SEO عربي ككلمات إنجليزية مترجمة
العَرَض: محتوى عربي لا يرتّب على شيء.
السبب: ترجمة قائمة الكلمات المفتاحية الإنجليزية حرفياً. فالمستخدم العربي يبحث بصياغات مختلفة، ويخلط العربية بالإنجليزية في الاستعلام الواحد كثيراً.
الحل: ابحث عن الكلمات المفتاحية العربية بشكل مستقل، كعمل أصيل لا كترجمة. راجع SEO مقابل GEO. وينطبق الأمر نفسه داخل منتجك — راجع البحث العربي لتعرف لماذا تفشل المطابقة الحرفية.
النمط الكامن خلف الاثني عشر
عشرة من هذه الاثني عشر رخيصة المنع باهظة الإصلاح، والسبب واحد في كل حالة: إنها قرارات تجمّدت في الأسابيع الأولى من المشروع.
فرموز التصميم، وأعراف خصائص الأنماط، وطبقة i18n، ونطاق الترجمة كلها تُضبط مبكراً ويلمسها كل ما يأتي بعدها. وتغييرها لاحقاً يعني مراجعة كل مكوّن.
والعادات الثلاث التي تمنع معظم هذه القائمة:
- ابنِ طبقة i18n في المرحلة الأولى، أياً كانت لغة إطلاقك.
- استخدم الخصائص المنطقية من أول مكوّن.
- اختبر بـRTL في الأسبوع الأول، بنص عربي حقيقي لا بنص لاتيني وهمي.
ولا شيء منها يكلف وقتاً يُذكر في البداية. ومجتمعةً تزيل معظم ما ورد أعلاه.
اقرأ أيضاً
- الدليل الكامل لتعريب التطبيقات والمواقع — الطبقات الست والتكلفة.
- RTL في CSS — الخصائص المنطقية بعمق.
- i18n للمنتجات العربية — الجموع وسير العمل.
- الأرقام والعملات والصيغ — الأرقام والعملة والنص ثنائي الاتجاه.
- البحث العربي — لماذا يُغفل البحث نتائج بديهية.
- دعم العربية وRTL في React Native — خصوصيات الموبايل.
الأسئلة الشائعة
لماذا يبدو نصي العربي منفصل الحروف؟
تباعد الحروف. العربية خط متصل، فالحروف ترتبط وتتغير أشكالها بحسب موضعها، وأي تباعد حروف غير صفري يقطع تلك الروابط. اضبط letter-spacing: 0 للنص العربي، وافحص رموز التصميم لديك — فهذا يأتي عادةً من نمط عناوين عام لا من اختيار مقصود.
ما أشيع خطأ في التعريب؟
تطبيق تباعد الحروف على النص العربي، يليه مباشرة الاحتفاظ بملف أنماط RTL منفصل. وكلاهما ناتج عن تطبيق عادات الطباعة وCSS اللاتينية على خط يعمل بشكل مختلف، وكلاهما قابل للتفادي بقرار عرفي واحد في البداية.
لماذا يُقطع نصي العربي في الأزرار؟
المكوّن بارتفاع ثابت مقاس حول النص الإنجليزي. والعربية تُعرض أطول وتحتاج تباعد أسطر أكبر، فتفيض أو تُقطع. استخدم min-height بدل height، واختبر بمحتوى عربي حقيقي لا بنص لاتيني وهمي يخفي المشكلة.
لماذا أحتاج صيغتي جمع بالإنجليزية وستاً بالعربية؟
النحو العربي يميّز صفر ومفرد ومثنى وقليل وكثير وأخرى كفئات منفصلة، بما فيها صيغة مثنى خاصة للاثنين تحديداً. وإعداد i18n المبني للإنجليزية يعالج المفرد والجمع فقط، فينتج عربية خاطئة نحوياً لمعظم الكميات — والخطأ غير مرئي للمراجعين الذين لا يقرأون العربية.
هل أستطيع إصلاح هذه المشكلات بعد الإطلاق؟
بعضها بثمن رخيص — تباعد الحروف وعكس الأيقونات سريعان. لكن المكلفة منها معمارية: طبقة i18n وخصائص الأنماط الفيزيائية والمكوّنات ذات الارتفاع الثابت قرارات يلمسها كل جزء من الكود. والإضافة المتأخرة تكلف عادةً ثلاثة أضعاف البناء الصحيح من البداية.
لماذا لا يرتّب محتواي العربي في البحث؟
غالباً لأن الكلمات المفتاحية تُرجمت من قائمة إنجليزية بدل البحث عنها مستقلاً. فالمستخدم العربي يبحث بصياغات مختلفة ويخلط العربية بالإنجليزية في الاستعلام الواحد، فالترجمة الحرفية للكلمات الإنجليزية تنتج محتوى يطابق استعلامات لا يكتبها أحد.
ما أول ما أفعله إن كان تطبيقي العربي يعاني هذه المشكلات أصلاً؟
أصلح مشكلات الطباعة أولاً — تباعد الحروف وتباعد الأسطر سريعان وينتجان أوضح تحسّن. ثم أضف قاعدة lint تمنع خصائص CSS الفيزيائية الجديدة، لتتوقف المشكلة عن النمو بينما تحوّل المكوّنات القائمة كلما لمستها.
الخلاصة
معظم هذه القائمة يُحسم في أول أسبوعين من المشروع. فرموز التصميم وأعراف CSS وطبقة i18n ونطاق الترجمة كلها قرارات مبكرة يعتمد عليها كل ما بعدها.
وأخطاء الطباعة أوضحها وأرخصها إصلاحاً. فإن كان تطبيقك العربي يعاني اليوم، ابدأ بتباعد الحروف وتباعد الأسطر.
واختبر بـRTL بمحتوى عربي حقيقي في الأسبوع الأول. فكل بند أعلاه تقريباً ظاهر من النظرة الأولى لمن يقرأ العربية على جهاز حقيقي — وشبه خفي على فريق يراجع نصاً لاتينياً وهمياً.
تريد مراجعة لمنتجك العربي؟ تواصل معنا — نبني بالعربية أولاً، فهذه القائمة قائمة تحقق نمرّ عليها لا مشكلات نكتشفها. اطّلع على خدمات تطبيقات الموبايل وتطوير الويب.