delphi4arab منتديات دلفي للعرب

نسخة كاملة : المزيد حول دعم اللغة العربية وتنسيق يونيكود في دلفي
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
دعم اللغة العربية وتنسيق يونيكود في دلفي 
قديما , وعند تشغيل برامج مصممة على دلفي على اجهزة ويندوز لم يتم تحديد خيارات اللغة فيها بشكل مكتمل , وبالتحديد خيار :
change system locale في الإعدادات الإقليمية ضمن خيارات لوحة التحكم (region and Language) . 
لم تكن تظهر النصوص المكتوبة باللغة العربية بشكل مثالي , إلا بعد ضبط الخيارات الإقليمية المتقدمة للغة وهذا ما كان يغفلة الكثير من مستخدمي النظام . 
ومع انه شيء هام ومفيد لإنه سيؤثر على طريقة عرض التاريخ والوقت والعملات والأرقام والترتيب وخيارات لوحة المفاتيح الخ .. ولكن لانريد ان يظهر برنامجنا وكأنه غريب على نظام التشغيل اذا لم تكن الخيارات مضبوطة بشكل مثالي ,  خاصة أن المستخدم سيرى ان الكثير من البرامج الأخرى تعمل بلا مشاكل مع اللغة وسيعتبر ان هذه مشكلة في برنامجنا لاغير .

الإصدارات الحديثة من دلفي حلت بشكل كبير المشكلة والآن تظهر معظم النوافذ وخياراتها بشكل صحيح باللغة العربية وذلك بسبب الانتقال من تنسيق Ansi إلى UTF القياسي في البيئات الجديدة , ولكن بقيت بعض المشاكل تظهر هنا وهناك وبالأخص النصوص التي تولد برمجيا في زمن التشغيل أو رسائل الخطأ أو غير ذلك فهي تبقى تظهر بشكل غير سليم إذا لم تكن خيارات اللغة مضبوطة .

ما هو سبب هذه المشكلة وما هو حلها ؟

سبب المشكلة هو موضوع دعم تنسيق UTF , وهو التنسيق الافتراضي عالميا , الذي يجعل البرامج تعمل بشكل قياسي على كل الأجهزة بلا مشاكل.
قديما كان تنسيق ملفات الدلفي هو ANSI وهو تنسيق غير قياسي خاص بوندوز يعتمد على ملفات اللغة المنصبة (System Locale) وهي مختصة بالتعامل مع البرامج التي لاتدعم يونيكود .

أما في الإصدارات الحديثة من دلفي فقد تم دعم يونيكود , وتم حل معظم المشكلة مع اللغة العربية وغيرها كاليابانية والصينية , ولكن بقيت تظهر اللغة بشكل غير قياسي في حالات خاصة .
السبب ان البيئة دعمت خيار اليونيكود وإمكانية اختيار نوع تنسيق الملف من المحرر , ولكنها لم تقم بضبط الخيار افتراضيا وبقي على المطور أن يقوم بهذه الخطوة بشكل يدوي .

عند إنشاء فورم جديد فإن النسخ الحديثة من دلفي تجعل تنسيق ملفي DFM و PAS افتراضيا إلى UTF .
ولكن بعد الكتابة بالعربية ضمن ملف الوحدة البرمجية PAS فإن الملف يحفظ بتنسيق ANSI بعد أن تعرف على محارف غير قياسية , وهذا ما يسبب مشاكل عدم ظهور اللغة العربية بشكل صحيح. 
لإن ملف الوحدة البرمجية Pas في معظم الأحيان بحفظ بتنسيق ANSI القديم بعد الكتابة بالعربية ضمن الكود .

طريقة الضبط:
لإجبار البيئة على استخدام تنسيق يونيكود UTF8 في الملف, نضغط بالزر الأيمن ضمن محرر الكود لملف الوحدة  ونختار File Formate إلى UTF8 , 
سيقوم المحرر بتعليم الملف كUTF بسلسلة محارف BOM وبالتالي سيتعامل معه كل مرة على أنه UTF .
يفضل ان يتم ذلك قبل الكتابة على الملف , لإن تحويل الملفات القديمة من ANSI إلى UTF قد لايحدث دائما بشكل الي وبصورة سليمة , ويمكن القيام بذلك عن طريق محرر خارجي (NotePad++ مثلا).

اذا حولنا كل ملف pas الى UTF8 وأعدنا ترجمة المشروع , يصبح برنامجنا داعم لتنسيق يونيكود القياسي 
ويمكن تجربة ذلك على نظام تشغيل لم يتم ضبط خيارات اللغة عليه أو بإالغاء تنصيب System Locale من الخيارات الإقليمية في لوحة التحكم وسنلاحظ أن البرنامج سيعمل باللغة العربية بلا اي مشاكل .


مشكلة وحل :
مشكلة بسيطة أن البيئة لم تدعم في اعداداتها حتى الآن خيار جعل UTF8 هو التنسيق الافتراضي لكل الملفات , ويجب تكرار عملية تحويل File Formate لكل ملفات الوحدات في المشروع . 
قام بعض المطورين بإيجاد حلول جيدة , مثلا قام مطور ياباني بإعداد إضافة للبيئة IDE PlugIn سهلة التنصيب , تقوم بتحويل جميع الملفات الجديدة إلى UTF وبالتالي تحل المشكلة بشكل جيد .
رابط تحميل الإضافة : 
utf8ize-0.0.3

في بعض الحالات لايكفي تحويل تنسيق الملفات لإن الكود البرمجي يقوم بمعالجة الملفات أو النصوص بتنسيق خاص من ضمن الكود , يجب الانتباه لأي كود يستخدم تنسيقات Locale مخصصة ويجب إجراء تعديلات عليه بشكل صحيح .
بعض الأمور واضحة وسهلة مثلا :
كود :
Memo1.Lines.LoadFromFile(filename,TEncoding.UTF8);
والبعض الآخر يحتاج تعديلات في طريقة التعامل مع النصوص , بحسب نوع البرنامج وماذا يستخدم . يمكن الإطلاع على المزيد في الروابط بالأسفل .



المزيد حول دعم اللغة العربية 
قمت في وقت سابق بإنشاء حلول مفيدة لزيادة دعم اللغة العربية في دلفي عن طريق التعديل على ملفات VCL القياسية في الدلفي , وتعريب العديد من الملفات والرسائل التي تظهر في زمن التشغيل وأيضا تحسين الكثير من المكونات لتظهر بشكل يناسب اللغة العربية "من اليمين لليسار" عن طريق خاصية BidiMode مثل TreeView و PageControl وغيرها .
وميزة هذه الطريقة عن الطرق السابقة التي جربناها أنها لاتحتاج إلى تنصيب أي مكون أو إلى إضافة أي كود إلى المشروع ويكفي وضع الوحدات إلى جانب وحدات المشروع وسيتم الربط معها اليا بدلا من الوحدات الأصلية . أو يمكن إضافتها إلى مسارات البيئة وستصبح افتراضية لكل المشاريع . الملفات الحالية مخصصة لإصدارة Delphi 10.1 Berline لإني لا املك غيرها على جهازي 

لمعرفة المزيد يمكن الإطلاع على التفاصيل هنا : Arabic-Delphi-VCL-Units

للحصول على آخر نسخة من الملفات حمل من هنا 
(الملفات تتعدل بشكل دوري , احرص على تنصيب اخر نسخه منها لأفضل دعم للغة العربية)


للإطلاع على المزيد:
هذه بعض الروابط المفيدة بالأنكليزية

Unicode in RAD Studio


Enabling Applications for Unicode


Delphi Unicode Migration


أطيب التحيات 
عروة عيسى
رابط المقالة الأصلي
السلام عليكم
أسعدتنا عودتك للكتابة أستاذ عروة. أستفدت من مقالتك. شكرا لك.
دلفي ومنذ بداياتها ومن خلال فلسفة تصميمها أتاحت للمبرمج إمكانية التحويرفي مكوّناتها أو التعديل في سلوكها. لذلك تمكنّا من تعريب معظم مكوناتها عندما كانت تفتقد خاصية ال BidiMode في إصدارها الأول.
مشكور اخ عروة
مشكور اخ خالد
كلكما قدم الكثير للمجتمع الدلفي العربي