Home      Articles archive       Forum        Library       Contact us
  Main Menu
  اللغة
  Log in
Username:

Password:

Remember me



Lost Password?

Register now!
  Search
  Article Topics
  Last Posts
  New Books
 
  This Page Visitors
Today 17
Yesterday 55
Total 26694
  Site

Delphi -  دعم اللغة العربية وتنسيق يونيكود في دلفي
Posted by Orwah Issa on 2016/12/14 (1220 reads)
Delphi

المزيد حول دعم اللغة العربية وتنسيق يونيكود في دلفي

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

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

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

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



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

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

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

طريقة الضبط :

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

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

في المشاريع العادية اذا تأكدنا أن كل ملفات الوحدات (*.pas) بترميز UTF8 وأعدنا ترجمة المشروع , يصبح برنامجنا داعم لتنسيق يونيكود القياسي ولايفترض أن يواجه مشاكل مع اللغة حتى على الأجهزة التي لم تضبط الخيارات الأقليمية و system locale بشكل مناسب .

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


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

في بعض الحالات لايكفي تحويل تنسيق الملفات لإن الكود البرمجي يقوم بمعالجة الملفات أو النصوص بتنسيق خاص من ضمن الكود , يجب الانتباه لأي كود يستخدم تنسيقات Locale مخصصة ويجب إجراء تعديلات عليه بشكل صحيح .
بعض الأمور واضحة وسهلة مثلا :

Memo1.Lines.LoadFromFile(filename,TEncoding.UTF8);

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

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

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

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

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

Unicode in RAD Studio

Enabling Applications for Unicode

Delphi Unicode Migration

أطيب التحيات 
عروة عيسى
رابط المقالة الأصلي

Rating: 0.00 (0 votes)
**** Printer friendly page Send this story to a friend
Bookmark this article at these sites
Bookmark to Blinklist Bookmark to del.icio.us Bookmark to Digg Bookmark to Fark Bookmark to Furl Bookmark to Newsvine Bookmark to Reddit Bookmark to Simpy Bookmark to Spurl Bookmark to Yahoo Bookmark to Balatarin Bookmark to Facebook Bookmark to Twitter Bookmark to Scripstyle Bookmark to Stumble Bookmark to Technorati Bookmark to Mixx Bookmark to Myspace Bookmark to Designfloat Bookmark to Google Plus Bookmark to Google Reader Bookmark to Google Bookmarks
The comments are owned by the author. We aren't responsible for their content.
Author Thread




عروة نت 2003-2016 . بالاعتماد على زوبس