السلام عليكم ورحمة الله وبركاته
( في هذا الموضوع سنرى كيف يتم تحويل النص العربي الى نص مقبول لدى بعض برامج التي لا تدعم اللغة العربية)
هناك برامج لا تدعم اللغة العربية (واللغات التي تكتب من اليمين الى اليسار) مثل Photoshop , VideoStudio (غير نسخة Middle East طبعا) أو ProShow.
لو اردت ان تكتب كلمة او كلمتان بالعربية في Photoshop فهو من الامور "اليسيرة", تكتب في برنامج Paint مثلا و ثم تستخدم الملف في Photoshop. لكن ان زادت الكلمات فالامر سيكون مزعج، متعب و ربما مستحيل.
وهذا حدث لي في هذه الايام, كان علينا استخدام برنامج ProShow.
فلهذا البرنامج مشكلتان،
- لا يسمح بالكتابة من اليمين الى اليسار
- ولا يدعم كثير من حروف Unicode
بحثت لأرى هل من حل لهذه المشكلة ام لا, فوجدت بعض برامج و (هذا) البرنامج كان الافضل من بينهم، الافضل في واجهة المستخدم والبساطة. حل المشكلة!
جزاك الله خيرا يا موليان وداعا....
لحظة! البرنامج يستخدم بعض حروف Unicode للتشفير, التي لا يدعمها برنامج ProShow
دعوني اقول في البداية اني لست Professional Designer، أنا فقط مبرمج يرى بعينه ويأخذ نتيجة اما صحيحة أو لا ( ارتحت الأن (-; )
حسنا، سنحتاج ببرنامج محول لتحويل وتشفير الكلمات العربية و ايضا نوع خط خاص لهذا التشفير والذي يدعم حروف العربية.
أولاً لنرى كيف يعمل البرنامج المحول:
1- عندما نكتب بالحروف العربية (أو اي حرف الذي لا يُدعم) في المحول فهو يأخذ الحرف و يعيد حرف اخر الذي هو مقبول عند البرنامج الاخر.
مثلا عندما نكتب ك يحوله مع حرف معين اخر مثل Â.
نحتاج حرف خاص مثلا من الحروف اللاتينية لكل حرف من الحروف العربية.
2- في اللغة العربية ليس هناك شكل واحد لنفس الحرف و يفرق شكله عند تغيير مكانه في الكلمة ( ليس كل الحروف)
انظروا:
و على المحول ان يعرف اين يستخدم اي شكل من الحرف.
انا استخدمت هذه الحروف للتشفير:
private char[,] alphabetCharacters =
{ // isolated:0 beginning:1 middle:2 end:3
{'A','A','@','@'}, //آ
{'B','B','C','C'}, //ا
{'D','E','E','D'}, //ب
{'F','G','G','F'}, //پ
{'H','I','I','H'}, //ت
{'J','K','K','J'}, //ث
{'L','M','M','N'}, //ج
{'O','P','P','Q'}, //چ
{'R','S','S','T'}, //ح
{'U','V','V','W'}, //خ
{'X','X','X','X'}, //د
{'Y','Y','Y','Y'}, //ذ
{'Z','Z','Z','Z'}, //ر
{'a','a','a','a'}, //ز
{'b','b','b','b'}, //ژ
{'c','d','d','c'}, //س
{'e','f','f','e'}, //ش
{'g','h','h','g'}, //ص
{'i','j','j','i'}, //ض
{'k','k','k','k'}, //ط
{'l','l','l','l'}, //ظ
{'m','n','o','p'}, //ع
{'q','r','s','t'}, //غ
{'u','v','v','u'}, //ف
{'w','x','x','w'}, //ق
{'y','z','z','y'}, //ک
{'§','z','z','§'}, //ك
{'±','¶','¶','±'}, //گ
{'«','»','»','«'}, //ل
{'¼','½','½','¼'}, //م
{'¾','Œ','Œ','¾'}, //ن
{'œ','œ','œ','œ'}, //و
{'ƒ','"','#','&'}, //ه
{'\'','\'','*','*'}, //ة
{'®','-','-','<'}, //ی
{'©','-','-','>'}, //ي
{'[','[','[','['}, //ء
{']',']','^','^'}, //أ
{'`','`','¤','¤'}, //إ
{'¥','¥','¥','¥'}, //ؤ
{'~','¢','¢','£'}, //ئ
};ولذا البرنامج لن يدعم الحروف الانجليزية و بعض حروف اخر.
هناك حروف كثيرة في Unicode غير هذه الحروف و يمكننا استخدامهم لكن المشكلة ان هذه البرامج مثل برنامج ProShow لا يدعم هذه الحروف ايضا.
3- وايضا مشكلة Right to Left and Left to Right,
كلمة "كتاب" في برنامج ProShow ستظهر هكذا: ب ا ت ک . لحل هذه المشكلة في المحول نستبدل مكان الحروف.
الامر سهل بهض الشيء, يعني لو كان الحروف في مصفوفة, في C#:
Array.Reverse(characters);
لکن الخطوط ستكون من الاسفل الى الاعلى.
حول المحول كلمة "كتاب" بـ "DCIz" فماذا الان؟
علينا ان نستخدم خط خاص الذي يعرف تشفيرنا. لو استخدمنا خط Arial فهو يكتب كلمة كتاب بهذا الشكل: DCIz و هذا ليس ما نريد.
كيفية انشاء نوع الخط الخاص لتشفيرنا:
ان كان لديك حس تصميمي فلتصنع خط خاص بيدك, لكن يمكنك ايضا تبادل مكان الحروف في خط اخر مع برنامج لهذا الغرض.
يعني عندما قررنا نستخدم الحرف ب حسب مكانه (فصل\اول\وسط\آخر) هذه الحروف (D/E/E/D ) فنستبدله كذلك في نوع الخط ايضا.
ونتيجة عملنا:
إقرأ اكثر:
وبرنامج لإنشاء و تعديل الخط:
---------------------------------------------------------------------------------
وهذا برنامج بسيط للتحويل كتبته بسرعة و بدون توثيق (يعني dirty code ببساطة D: ). سأكتب الاكواد والخوارزميات قادما مع التوثيق (مع انه يمكن استخراج اكواد هذا البرنامج ايضا )
وايضا قمت بتغيير خط Arial ليعمل مع هذا البرنامج, والبرنامج فقط يعمل مع هذا الخط الجديد:
برنامج Converter:
خط خاص للبرنامج :
كم الامر كان سهل!
مع هذا اخذ مني 3 ايام :-)
السلام عليكم
