الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تقنية المرآة بدوت نت، كيف؟

بدأه roka في 1 يوليو 2003 · 10 رد · 4,740 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كنت قد قرأت فى مشاركة سابقة أن من ضمن التحديثات فى دوت نت، هو دمج تقنية المرآة باللغة دون الحاجة لاستدعاء اجراءات واجهة التطبيقات بالطريقة المعروفة، و ذلك عن طريق الخاصية RightToLeft و جربت ذلك مع أداة العرض الشجرى TreeView و لكن ما حدث هو تطبيق الخاصية على النص المعروض بالأداة ، أى اتجاة القراءة و ليس الشكل layout ، و جربت كل شئ تقريبا، لتطبيق هذه التقنية اعتماداً على امكانات اللغة العادية دون فائدة، غيرت لغة النموذج للعربية(مصر/السعودية...)، و تلاحظ أن كل أداة نسخة متفقة مع اللغة المحددة، و لذا كنت أتوقع أن تدعم كامل خصائص هذه اللغة و منها اتجاة رسم الأداة و العناصر child الموجودة بها، و لكن للأسف!!.

فهل حقاً تقنية المرآة مدعومة للأداوت فى دوت نت ضمنياً؟ و كيف يمكن ذلك؟ بحثت فى تعليمات اللغة، و لكن بدون فائدة، تفحصت بعض الـ Classes و لكن!!.

تعبت كثيرا فى هذا الموضوع، فهل يعرف أحد شئ عن هذا الموضوع؟

#2

توصلت للحل، حتى لا تشغلوا بالكم بالموضوع دون فائدة.

#3

السلام عليكم

هلاّ أخبرتنا بالحل مشكوراً

لفائدة الجميع

#4

للرفع مع عمر

#5

للرفع

#6

السلام عليكم

يا أخ Roka ترانا شاغلين بالنا جداً .. و دون فائدة

علمنا بالحل جزاك الله خير!(f)

#7

السلام عليكم

حمل الأمثلة

أخواني الكرام سأحاول الرد على استفساراتكم بما أعلم به في هذه التقنية (المرآة)

أولاً هنالك من اللغات ما تكتب من اليسار إلى اليمين كاللغة الإنجليزية والفرنسية و الألمانية وغيرهم

ولكن هنالك لغات أخرى تكتب من اليمين إلى اليسار كاللغة العربية واللغة العبرية

لذلك تجد الخاصية RightToLeft في النموذج form وفي معظم العناصر controls

كالعناوين labels و صناديق النصوص textboxes وغيرها الكثير .

و ببساطة هذه الخاصية تجعل محاذاة هذه العناصر من اليمين إلى اليسار .

وهنالك مصطلحين متعارف عليهما وهما localization و Globalization

لنبدأ أولاً بـ Globalization وهو أن هنالك خصائص لأي شيء كان متعارف عليه عالمياً

مثلاً وضع الفواصل بين كل ثلاثة أرقام في العدد هذا الأمر متعارف عليه والكل يقوم به

وهذا مثال 500,00 وبالعربية 500,00

هذه الفاصل يستخدمها الكل لذلك هي تسمى Globalization

أما الـ localization فمثلاً علامة ترميز العملة كالدولار والدرهم والريال وما شابه ذلك

وهذا مثالٌ عليه $500 و د.إ.‏ 500.00

ولهذه الأشياء المحلية locale و غيرها تم تقسم الـ localization إلى قسمين

وهما

1 - Culture وهذا معنيٍ لتهيئة البيانات كالأموال و التاريخ وغيريهما .

2 - UICulture وهذا واضح من اسمه حيث يحمل UI وتعني User Interface

وهي تعتني بالواجهة لتجعلها تناسب لغة الأشخاص الذين سيستخدمون هذا البرنامج

قبل أن أخوض في التفصيل

سنقوم بعمل مشروع صغير يقوم على تهيئة الأموال من اللغة الإنجليزية

إلى اللغة العربية وبالتحديد إلى العملة الإماراتية .

المشروع مرفق للتحميل في الأعلى باسم format my money

في الـ constructor للنموذج form والذي يسمى في فجول بيسك sub New()

ستجد النصوص البرمجية التالية

System.Threading.Thread.CurrentThread.CurrentCulture = _

New System.Globalization.CultureInfo("ar-AE")

هذا النص البرمجي يقوم باسناد قيمة الثقافة الحالية currentCulture وهي خاصية تركن في

الـ namespace system ثم نضع قيمة جديدة

في الـ CultureInfo التابع وهي فئة لـ Globalization namespace

ستعتمد الثقافة الحالية للمشروع

كتهيئة فقط للبيانات (سنتطرق للواجهة لاحقاً) الثقافة الإماراتية لكل البيانات الممكن تهيئتها

كالأموال والتاريخ و غير ذلك .

في الزر سنكتب التالي

Me.txtOutput.Text = Format(Me.txtInput.Text, "Currency")

تلاحظ أننا أسندنا قيمة النص المدخل txtInput.Text في قيمة النص المخرج txt.Output.Text

وستخدمنا الوظيفة Format وهي Function لتقوم بتهيئة البيانات

تركيبتها النصية كالتالي Format(object,style) الأول من نوع عنصر سواءً control أو

عنصر من عناصر اللغة كالوقت مثلاً لا حصراً Now() وبهذا الشكل

Format(Now(), "Long Time")

الممرر الثاني اختياري Optional و هو من نوع String أي بين علامتي التنصيص ""

النتيجة ستكون عند الضغط على الزر ستتحول تهيئة الأموال من التهيئة الافتراضية (الإنجليزية الأمريكية)

إلى العملة العربية الإماراتية .

الآن بعد ما عرفنا بعض من تقنية المرآة

المشروع الثاني ستجده باسم UAELocalization في المجلد start

في هذا المشروع سنقوم بعملية المرآة على عناصر النموذج .

ستجد في النموذج كل من العنوان label و زر واجهتهُ الافتراضية (اللغة الإنجليزية الأمريكية )

سنقوم بعملية المرآة له بحيث نود أن نجعل المشروع قابل للاستخدام في الإمارات العربية المتحدة

ستجد المشروع جاهز للبدء في عملية المرآة

سنقوم بالخطوات التالية لعمل لذلك بتعديل خصائص النموذج Form

1 – ضع قيمة الخاصية Localizable للقيمة True

2 – ضع الخاصية language للقيمة Arabic (U.A.E.)

3 – الآن قم بتعديل القيم لكل من العنوان label و الزر إلى القيمة ( اللغة العربية )

أي أكتب في خاصية الـ Text القيمة اللغة العربية

4 – ضع قيمة الخاصية RightToLeft تساوي Yes لكل من النموذج والعناصر التي به

عند وضعك لهذه الخاصية في النموذج بالقيمة Yes ستطبق على كل العناصر التي به

5 – الآن سنقوم بإرجاع قيمة language إلى القيمة Default ستلاحظ أن كل التعديل

رجع إلى القيمة الأصلية (الافتراضية) لكن تم إنشاء كل من الملفات التالية

شاهد الصورة هذه الملفات تعرف بالمصادر resource files وتنتهي بإمتداد resx

معلومة :

نستطيع معرفة قيم الثقافة الحالية لملف المصدر كما تشاهد في الصورة

showAllFiles.gif

مثلاً لو أردنا الثقافة للملكة العربية السعودية سنقوم بنفس الخطوات المذكورة في الأعلى

من تغير قيم عناصر النموذج ثم الذهاب للخاصية language و وضع اللغة العربية للملكة

بعدها سنجد القيم التي نسندها للخاصية CurrentCulture موجودة قبل الإمتداد resx

بهذا الشكل nameOfFile.ar-SA.resx

معلومة :

الملف resource المصدر هو من نوع XML نستطيع تعديل بياناته بأكثر من طريقة

البيانات التي به هي كل التعديلات التي وضعناها للهذه الثقافة من التحويل من اليسار إلى اليمين

ومن وضع قيم للعناصر كالـعناوين labels و غيرها . والتعديل يتم بطريقتين بثلاثة طرق

الأول : أن نذهب للخاصية language ونختار اللغة التي أخترناها ثم نقوم بالتعديل و غير ذلك

ملاحظة أي زيادة من أعداد العناصر controls في المشروع سيكون في كل الثقافات موجودة

فهذا ليس له علاقة بالثقافة .......................

الثانية ستكون بهذا الشكل بعد الضغط المزدوج عليه شاهد الصورة

localeData.gif

كما تشاهد في الصور نستطيع التعديل على البيانات باختيار الخانة ثم وضع القيمة المناسبة لها

الثالثة عن طريق اختيار الوضع XML في الأسفل ثم الذهاب للعناصر elements

والتعديل بها مباشرتاً شاهد الصورة

xmlLocale.gif

ملاحظة : هذا التعديل سيكون في الـ run Time أي أثناء التشغيل , لا وقت التصميم .

المهم أن هذه الملفات ستحمل قيم الثقافة الحالية للمشروع

وتكتب برمز اللغة ثم البلد وقد تكون أكثر من خانتين

كمثلاً Cy-uz-UZ وتعني دولة أوزبكستان اللغة الأوزبكية ثم الحروف الروسية Cyrillic

الآن سنضع النصوص البرمجية التي ستقوم بتعريف الثقافة الحالية لكل من الخاصيتين

CurrentCulture و

النصوص البرمجية ستكتب في Sub New()

System.Threading.Thread.CurrentThread.CurrentCulture = _

New System.Globalization.CultureInfo("ar-AE")

System.Threading.Thread.CurrentThread.CurrentCulture = _

New System.Globalization.CultureInfo("ar-AE")

هذه النصوص كما ذكرنا آنفً أنها تعني الثقافة لكل من البيانات والوجهة .

ستلاحظ الآن عند تشغيلك للمشروع بأن الثقافية التي ستعتمد هي الثقافة العربية

الخاصية بدولة الإمارات العربية المتحدة

المشروع الأخير (متقدم) Advanced

المشروع باسم localizeMyForm

في هذا المشروع سنقوم بعمل متطور بحيث نستطيع أن نعدل في البيانات بعد عملية الـ deployment

وهو عن طريق وضع الملف Application configuration والمعروف بـ App.exe. config

هذا الملف بهيئة XML سنعرف فيه سلوك معرفة

من قبل في هيئة XML يقوم على قراءة البيانات التي

سنضعها في هذا الملف وذلك عن طريق استنساخنا

لعنصر object من الفئة AppSettingsReader

من المعلوم أن الملف Application configuration

وجد أصلاً للقيام بتعديل المشروع بعد النشر

والتصدير after deployed وهذا مهم معرفة لمعرفة الفائدة من هذا الدرس .

والفائدة من هذه الطريقة هي لنفرض أن لدينا مشروع فيه ملفات resources لكل

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

سنصنع فقط ثلاثة ملفات Resources لكل دولة ملف معرف حسب عملتها

سنقوم فقط بعد عملية الـ deployment أن نذهب للملف config file ونضع القيم وهي عبارة عن

String قيم نصية وعند تشغيل المشروع سيقوم بقراءة هذه القيم وبموجبها سيضع الملف المصدر

Resource المناسب للمستخدمين في هذه الدولة .

لنبدأ المشروع

قم أولاً من القائمة project أختر Add new Item

ثم أختر الملف Application configuration ضع في هذا الملف العنصر التالي Element

الآن ضع هذه القيم بينهم بهذا الشكل

تم تعريف

الآن قم بالخطوات التي قمنا بها في الدرس السابقة من تعديل الخصائص للنموذج

كالخاصية localizable و language ثم تعديل قيم الـ controls في هذا النموذج

ثم الرجوع للقيمة الإفتراضية للخاصية language

الآن في الـ Sub New() أكتب التالي

Dim myReader As New System.Configuration.AppSettingsReader()

System.Threading.Thread.CurrentThread.CurrentCulture = _

New System.Globalization.CultureInfo(CType(myReader.GetValue("Culture", GetType(String)), String))

System.Threading.Thread.CurrentThread.CurrentUICulture = _

New System.Globalization.CultureInfo(CType(myReader.GetValue("UICulture", GetType(String)), String))

قمنا أولا باستنساخ عنصر من الفئة AppSettingsReader عملية instantiation

ثم في الفئة CultureInfo استخدمنا هذا العنصر ليضع القيمة في

الملف config عن طريق قراءتها كما هو مكتوب في الأعلى

لابد من تحويل قيمة cast العنصر AppSettingsReader

إلى النوع sting عند وضعه في الفئة CultureInfo

ثم استخدمنا السلوك GetValue وهذا السلوك يم إرثه inhertince

من الفئة AppSettingsReader كـ Base Class

الآن عند تشغيلنا للمشروع ستلاحظ أن القيم أصبحت

قابلة للثقافة العربية لدولة الإمارات العربية المتحدة

معلومة أخيره هو اذا تم تغير اسم النموذج بعد عملية الـ localization

ستبقى أسماء الملفات المصدرية resources بالأسماء القديمة

ولن تتغير إلى الاسم الجيد الذي اسند للنموذج وهذا يعني أنك ستفقد التحكم

بهذا الملفات كذلك لو قمت بتغير القيمة للخاصية language

إلى القيمة الموافقة لهذه الثقافة التي تحملها هذه الملفات المصدرية

سيتم إنشاء ملفات جديدة بنفس اسم النموذج الجديد .

تمت ترجمة هذه المعلومات من SDK document و MCAD Training Kit وهو كتاب .

هنالك الكثير من المعلومات لم أذكرها كالساتالايت و بعض الفئات

لكونها تحتاج إلى شرح مستقل لانها مبسطة اي (مطولة) نوعً ما .

هذا والله أعلى و أعلم

السلام عليكم

2

في المثال يتضح المقال

#8

شكرا اخي العزيز على هذا الشرح المفصل

للاسف الرابط لا يعمل

ارجو اصلاح رابط الامثلة

تحياتي

#9

مشكور اخي بس الرابط لايعمل

#10

شكرا لك

#11

شكرا جزيلا اخي الشهاب الحارق

الحمد لله رب العالمين 


ضاقت ولما استحكمت حلقاتها فرجت وكنت اظنها لن تفرج


مواضيع مشابهة