Showing posts with label برمجة. Show all posts
Showing posts with label برمجة. Show all posts

Wednesday, May 25, 2011

أجمل وأسوأ ما فيك يا كود


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


لكن الانطباع اللي اقترح عليه إنه يدركه هو إن خلف كل كود مكتوب أو كاتب للكود فيه كوكتيل كامل من المواقف والمشاعر وشريط من الأحداث مكتوب بين السطور ..

فأنت ككاتب للأكواد (Coder) تمارس دور المفكر والمبدع .. ترجع الكرسي لورا في عصف ذهني (Brainstorm) وتفكر إزاي تحول أفكارك إلى شيء ملموس إلى أن تنتهي من إيجاد الطريقة المثلى وتتضح لك خطة العمل (Work plan) فتنط من على الكرسي في سعادة كأي مخترع وتقول : وجدتها وجدتها.

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

تعبير العزف مش تعبير مجازي .. دا حقيقي وجربه .. افتح النوت باد (NotePad) جرب تعمل لصق (Paste) لكلمة باستخدام الكيبورد ثم اضغط فراغ (Space) اعمل (Paste) تاني ثم اضغط (Enter) .. كرر العملية دي عدة مرات واستمع إلى صوت الكيبورد

ويصاحب متعة العزف (Typing) متعة أخرى تشبه متعة مشاهدة مبارة لكرة قدم لا تعرف النتيجة النهائية، تحبس أنفاسك مع كل اختبار للكود (Test) واللي كأنه هجمة يإما لك أو عليك .. وتفرح وتزأطط مع كل جون (Build successfully) وتهتم وتغتم مع كل جون يدخل فيك (Build Failed).

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

ولا تنتهي المتع مع كتابة الأكواد بانتهاء حركات أصابعك على المفاتيح بل تبدأ مرحلة أخرى من المتعة .. مرحلة النشر (Publishing) وتحول أفكارك وعزفك وحلولك إلى فيلم مثير تنتظر آخر دقيقة لتعرف كيف تكون النهاية .. اللي ممكن تكون سعيدة لما نتاج الكود (Final Product) يلقى القبول والاستحسان .. أو مفاجئة غير سعيدة برفضه أو طلبات التعديل التي لا تنتهي، لتبدأ من جديد تغيير سيناريو الأحداث أو بالأحرى تصنع سيناريو جديد ولكن بحماس أقل وشعور بالمتعة أقل.

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

هذه الحياة المثالية لو أخذها كاتب الأكواد معه في عالمه الإنساني فإنه سيعاني معاناة أكبر من كل المتع اللي ممكن ينالها بسبب الأكواد.

تخيل قاعدة مثل قاعدة (if) البرمجية وهي قاعدة من أوائل قواعد البرمجة التي تدرس ونصها كالتالي:

if (جملة شرطية) then
....
else if (جملة شرطية أخرى)
....
else
....
end if

والجملة الشرطية أي حاجة بتقول آه (True) أو لا (False) .. زي مثلا ..
هل تاريخ انهاردة هو 25/5/2011 ??:

If (Date.Now = 25/5/2011) then
{
.... سكوب 1 فيه شوية اكواد ....
}
else If (Date.Now = 24/5/2011) then
{
.... سكوب 2 فيه شوية أكواد تانية ....
}
else
{
.... سكوب 3 فيه أكواد تالتة خالص....
}
end if

في عالم البرمجة المثالي .. الجملة الشرطية مالهاش اجابة غير آه (True) أو لا (False) .. وبس .. كمان لا يمكن تتحقق جملة شرطية فيتنفذ سكوب غير السكوب بتاعها .. مش ممكن تكون الإجابة على جملة آه ويدخل في السكوب بتاع لأ .. مستحيل .. وطبعا جملة (if) لازم تنتهي عند (enf if) .. مفيش بعدها كلام ولا تعقيب ولا بس ولا لكن ...

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

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

مثلاً حتلاقي جملة شرطية بسيطة وواضحة وسهلة زي :

if (هل أنا بحب جوزي وبحترمه ونفسي يكون اسعد إنسان) then
أوفر له سبل السعادة اللي تريحه .. واخليه يشعر بثقتي واحترامي ليه
else
إهمال كامل وكل يوم مشكلتين تلاتة
end if

مع بساطتها فلو إجابة الجملة الشرطة لا فعند التنفيذ (Run) .. حتلاقيه بيدخل في السكوب التاني بتاع لأ .. العجيب بقا إن لو إجابة الجملة الشرطية نعم برضه التنفيذ بيدخل في السكوب التاني .. تحاول تفهم .. مش حتفهم ..

أو مثلا:

if (هل أنا مقتنع إن الإسلام حق وإن الله حكيم عليم وزي ما له الخلق له الأمر ومن لم يحكم بما أنزل الله فأولئك هم الكافرون) then
نطبق الشريعة
else
مش حينفع نطبق الشريعة
end if

برضه سواء كانت الإجابة على جملة الشرط بنعم أو لا برضه التنفيذ دايما بيدخل في السكوب التاني .. وعادي جدا جدا.

أو مثلاُ:

if (هل السجاير دي ملعونة بتهد صحتي ومضيعة فلوسي وضراني مع مراتي ) then
حبطل السجاير واكون انسان جديد
else
مش حبطل
end if


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

ساعات تضطر إنك تغير في جملة الشرط عشان تخلي الدخول العجيب في السكوب التاني منطقي فتخلي جملة الشرط مثلا

if(هل انا بحب جوزي and بحبه 4 كمان معاه)
أو
if(هل السجاير ملعونة and انا مجنون عقليا)

لكن المشكلة إن الشروط اللي بتزودها عشان التنفيذ يكون مفهوم ومنطقي بتكون مرفوضة من اللي حواليك ودايما أنت غلط ومش مقدر ومش فاهم حاجة.

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

ديوان المسائل أحمد مطر

Sunday, June 29, 2008

طرائف محاضري الأي تي

هذه المواقف حدثت معي أومع زملاء لي في مجال المحاضرات والتدريس ....

باشمهندس انت قلت لنا نفتح قائمة File ونقول open عشان نفتح فايل جديد .. انا روحت البيت وفتحت قائمة File وقعدت اقول Open Open وبرضه مفيش حاجة اتفتحت .. دا درس للباشمهندس عشان بعد كده يختار ألفاظه بعناية وما يقولش قول open ويقول اختار open

المحاضر للمتدرب الذي مسك الماوس ووضعها على الشاشة : حضرتك بتعمل ايه ؟؟ .. فرد عليه المتدرب : هو مش أنت قلت حطوا الماوس على قائمة File ؟؟!! ودا درس تاني للمحاضر عشان يفكر الف مرة قبل ما يقول كلمة زي (حط الماوس على ..) دي

هو لو انا عملت Static Member داخل class وناديت عليه من جوا الـ Class من Non-Satatic Method وعملت object من الـ Class دي ومن الـ Object ناديت على الـ Non-Static Method هل الـ Static Constructor حيتنفذ ولا لأ ؟؟ .. دا سؤال من نوعية اسئلة التعذيب بالكهربا وجلد الذات .. حرام عليك يا بني بتعمل فينا كده ليه ؟؟!!

هو ايه الفرق بين الـ Void والـ Array ... حسبي الله ونعم الوكيل

هو ليه القوسين في آخر الـ C# Method مدورين () ومش مربعين [] .. معلش ظروفهم كده

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

هي مش الـ Metod مش بتـ Return حاجة ... إيه لازمة الـ Void بقا ؟؟؟!! الله يسامحهم اللي عملوا الـ Void

الطالب : هي الـ HTMLControls عاملة زي الـ abstract Class ..
المحاضر : نعم ؟؟؟!! ..
الطالب : آآقصدي الـ Interface ..
المحاضر : افندم ؟؟؟!! ..
الطالب : لا لا ولا حاجة

الطالب خريج الجامعة المصرية لمحاضر البرمجيات .. ايه ده هو كله فهم فهم مفيش حاجة حفظ ؟؟!! .. معلش تعال كمان يومين اكون جهزت لك حاجة تتحفظ

طالب آخر لنفس المحاضر : أفففف .. أنا زهقت من التفكير !!! والمحاضر في ذهنه :: XXXX التعليم واللي جابوا التعليم


Monday, June 23, 2008

إنترنت إكسبلور vs فايرفوكس


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

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



ولو استخدمت الشريحة في خلية حيكون الكود كالتالي

<table width="200" align="center" background="bg.png"><tr><td
valign="Top">نص الموضوع .... نص الموضوع </td></tr></table>

نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع

المشكلة حتظهر مع عدم توقعنا لارتفاع الخلية المعتمد على كمية الكتابة الموجود داخلها .. يعني لو كان الموضوع اكبر من كده حتلاقي الشكل كالتالي :

نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع

بمعنى إن تدرج اللون مش حيطول معاك مع تغير ارتفاع الخلية ... وحتى لو حاولت
تمنع التكرار باستخدام الـ Styles بمعنى إن الكود يبقى كده :

<table style="background-repeat:repeat-x"width="200" align=center background="bg.PNG"><tr><td valign=top>نص الموضوع نص الموضوع .... نص الموضوع</td></tr></table>



نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص
الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص
الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع


طيب وايه الحل ???

الحل بمنتهى البساطة هو الاستغناء عن الشريحة واستخدام الكود التالي
لتدرج الألوان :



<table style="FILTER:
progid:DXImageTransform.Microsoft.gradient (GradientType=0,
startColorstr=#0000FF, endColorstr=#FFFFFF);"

width="200" align=center><tr><td valign=top>نص الموضوع .... نص
الموضوع</td></tr></table>


واللي حيطلع لي النتيجة التالية :
نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع نص الموضوع


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

نوع آخر من الإمكانيات أتاحه لي استخدام حضرتك للانترنت اكسبلورر بدلا من غيره
من المتصفحات .. وهو اللعب بالصور .. زي تكبير وتصغير الصور


onclick="document.images['ImageID'].width -=25;document.images['ImageID'].height -=25;"
onclick="document.images['ImageID'].width +=25;document.images['ImageID'].height +=25;"


اتفرج على المزيد من اللعب في كثافة الصورة وتدويرها وعمل ميرور ليها وحاجات تانية

واتفرج كمان على اللعب بالظلال

ياسلام على الصورة لما تتعمل على شكل موجات .. ايه الجمال ده

اتفرج على عمل سليدز زي الباور بوينت بالظبط وكله سكريبتات


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


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

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

ونفس الميزة تنطبق على موضوع الآمان .. فأنا استخدم برامج الحماية المتعلقة بالـ Internet Security واللي وظيفتها الأمان عند تصفح النت بغض النظر عن نوع متصفحك

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


Sunday, April 15, 2007

موقع متعدد اللغات

المبرمج كريم كان اقترح فكرة إني اكتب مقال تقني مرة كل شهر واخترت يوم 15 عشان يكون موعده .. ولأني طبعاً لم يسبق لي كتابة موضوع كامل قبل كده فالبوست دا عبارة عن دردشة بصوت عالي ..

إحنا دلوقتي عايزين نعمل موقع بكذا لغة باستخدام ASP.net بحيث يكون واجهة الموقع بالشكل التالي


الاسمما علينا
الوظيفةمطور مواقع
العنوانمصر

الكلمات باللون الأخضر دي ثابتة في الصفحة والكلمات المقابلة حتيجي من داتا بيز وتتحط في Labels

طيب إحنا حنتكلم على نقطتين في الموضوع ده :

أول حاجة شكل قاعدة البيانات حيبقى عامل إزاي
إزاي حبني قاعدة البيانات بتاعتي لموقع متعدد اللغات هل حعمل الـ structure واحد لقاعدة بيانات وبعد كده اعمل قاعدة بيانات لكل لغة ولا اعمل نفس قاعدة البيانات واخلي فيها Fields مستقلة لكل لغة .. طبعاً الطريقة الأولانية حتكون اسهل كتير بالنسبة لي كمبرمج لأني عند استدعاء اي صفحة بأي لغة كل اللي حيختلف عندي ساعتها هو الـConnection String أما الكود اللي أنا كاتبه فحيفضل زي ما هو .. وممكن الـ Connection String يتنادى مرة واحدة بس في بداية الـ session أو في ال Constractor لو أنا عامل Class

وبالمرة حكون عامل بروجيكت لكل لغة عندي ويبقى الروابط زي ما بنشوفها في المواقع الـ ٍStatic

لو عايز تعرض الصفحة العربي يبقى

http://.......................com/arabic/index.aspx

ولو الإنجليزي يبقى

http://.......................com/English/index.aspx

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

لكن الطريقة دي رغم إني مش حتعب كتير فيها كمبرمج إلا إني حدفع تمن داتا بيز زيادة ومالهاش لازمة وكمان حضاعف المساحة المستغلة .. ولأنك غالباً واخد من السيرفر اللي أنت عامل عليه هوست عدد محدد من الداتا بيز .. ولو إن دلوقتي السيرفرات بتدي عدد غير محدود من الداتا ييز .. لكن برضه الأفضل الأصل إن لكل مشروع ولكل موقع قاعدةبيانات واحدة بس .. وكمان لو فرضنا إن موقعك زاد عدد اللغات فيه فمش معقول لموقع واحد تعمل 5 أو 6 قواعد بيانات .. و5 أو 6 أضعاف المساحة

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

يعني مثلاُ لو قلنا عندنا جدول العملاء اللي باين في المثال فيه

CustomerID (index , Primary Key , Identity),

CustomerName_A (الاسم بالعربي), CustomerName_E(الاسم بالإنجليزي),

CustomerJob_A(الوظيفة بالعربي), CustomerJob_E(الوظيفة بالإنجليزي),

Address_A(العنوان بالعربي), Address_E(العنوان بالإنجليزي)

وطبعا الـ Fields العربي Unicode وعملية ال Insert حتكون باستخدام الـ Parameters وإلا حتلاقي الناتج على كتير من السيرفرات ؟؟؟؟؟؟؟؟؟

وحيكون لعبنا بالحرف الأخير لأنك حتحط session للغة


Session("langauge") = "A"

أو

Session("langauge") = "E"


في الـ Session start في البرنامج حتبدأ مثلاً بالعربي وفي زرار تغيير اللغة تبدأ تغير ما بين اللغتين

If Session("langauge") = "A" then

Session("langauge") = "E"

Else

Session("langauge") = "A"

End if

لو عايز تجيب البيانات باللغة العربي يبقى الـQuery بالشكل ده حتجيب dr اللي هو عبارة عن datarow لل Record المطلوب عرضه

Lbl_CustomerName.text = dr("CustomerName_" & Session("langauge"))

Lbl_CustomerJob.text = dr("CustomerJob_" Session("langauge"))

Lbl_Address.text = dr("Address_" Session("langauge"))

دا شكل كودك .. شكل موحد يختلف حسب الـ session


تاني حاجة
بالنسبة للكلمات اللي باللون الأخضر في المثال واللي هي حتتغير حسب اللغة المختارة فببساطة فيه كذا حل ليها ..

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

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

الطريقة الثالثة المفضلة عندي ... وهي استخدام namespace اسمها Resources ونقوم بالخطوات التالية :
1- انشأ ملف Resourc وليكن اسمه Langauge_A وآخر Langauge_E وبطريقة كتابة الـ XML ادخل نفس المفاتيح في كلا الملفين ولكن بقيم مختلف كمثل التالي

في العربي :

<data name="CN">

<value>الاسم : value>

<data>

في الإنجليزي

<data name="CN">

<value>Name :value>

</data>

2- في كود صفحتك إنشأ object من الـ namespace المذكورة وليكن كالتالي

Public SafLang As System.Resources.ResourceManager
SafLang = New System.Resources.ResourceManager("Ma_3lina.Langauge" & Session("Langauge"), System.Reflection.Assembly.Load("Ma_3lina"))

نلاحظ أن الـ object سيختار الـ Resource الخاص باللغة الذي سيستعمله من الـ session وحسب حالتها Ma_3lina هي الـ NameSPace الذي نعمل تحته

أيضاً لا حظ أن الـ object اللي سمناه
SafLang سماحيته Public .. لماذا ؟؟؟

3- في صفحات الديزين يمكن وضع الـ object المسمى SafLang والحصول على القيم داخله

<td><%=SafLang.GetString("CN")%></td>


ففي حالة الحصول على البيانات من ملف العربي تظهر الكتابة بالعربي وفي حالة الإنجليزي تظهر بالإنجليزي يمكن عندها إضافة عدد كبير من ملفات الـ Resource وسيبقى الكود كما هو .. لن يتغير إلا زر تغيير اللغة فقط بعد إضافة Fields للغات في الداتا بيز

ياريت تعذروني لو الموضوع متلخبط شوية بس أرجو أن يكون فيه فايدة ولا تبخلوا علينا بالنصح