السلام عليكم ورحمة الله وبركاته
هناك أساليب كثيرة لتجعل واجهة التطبيق الخاصة ببرامجك تدعم أكثر من لغة غير اللغة الإنجليزية
وفي اللينك التالي ستجدون واحدا من هذه الاساليب التي يمكن استخدامها لكي تجعل من برنامجك عالميا ويدعم أكثر من لغة
في هذا الموضوع سوف نناقش فكرة كيفية أن تجعل واجهة التطبيق الخاصة بك أو الخاصة ببرامجك تدعم أكثر من لغة غير اللغة الإنجليزية وذلك عن طريقة كتابة مجموعة من الكلاسات التي يمكن أن تستخدم في تغيير اللغة الخاصة بواجهة التطبيق
الفكرة و ببساطة شديدة تنحصر في كتابة كلاسات تضع بها جميع Resources الخاصة بكل لغة لتستخدم مع واجهة التطبيق الخاص بنا
عموما يجب ان نضع في اعتبارنا أننا سوف نتعامل مع ثوابت في واجهة التطبيق وهذه الثوابت قد تكون الفورم او الباتون او اي كونترول اخر قبالتالي سنجد انفسنا نحتاج الي تغيير Text الخاص بكل كونترول طبقا لنوعية اللغة المستخدمة في واجهة التطبيق
لذلك سوف نحتاج الي تخزين البياانات الخاصة بكل لغة بشكل ما ثم نسترجعها عندما يريد المستخدم تغيير اللغة الخاصة بواجهة التطبيق ثم نقوم بتغيير كل البيانات الخاصة بكل كونترول موجود في واجهة التطبيق ليناسب اللغة التي اختارها المستخدم
وبشكل عام الفكرة التي سوف نستخدمها يمكن أن نضيف لها الكثير و الكثير لتدعم أشياء اخري غير اللغة حيث يمكن استخدام نفس الفكرة لتغيير شكل الكونترول و لون خلفيته و الصور المستخدمة مع الكونترول و أشياء كثيرة اخري بالنهاية الأمر متروك لمخيلتكم
الكلاسات المستخدمة في المشروع هذا ستكون كالتالي:
01 - الكلاس Languages و هو عبارة عن Enum يوجد به أسماء اللغات مثل العربية و الانجليزية و الروسية و يمكنكم أن تضيفوا لغات أخري طبقا لإحتياجات مشاريعكم
02 - الكلاس Language و هو يمثل الكلاس الاساسي لأي لغة سوف نستخدمها ومنه تتفرع كل اللغات الخاصة بواجهة التطبيق
03 - الكلاس ArabicLanguage و هو كلاس تم توريثه من الكلاس Language و كما هو واضح من اسمه فهو الكلاس الذي سوف يدعم اللغة العربية و به سوف نقوم بتخزين كل ما له علاقة بترجمة واجهة التطبيق الي العربية
04 - الكلاس EnglishLanguage و هو كلاس تم توريثه من الكلاس Language و كما هو واضح من اسمه فهو الكلاس الذي سوف يدعم اللغة الإنجليزية و به سوف نقوم بتخزين كل ما له علاقة بترجمة واجهة التطبيق الي الإنجليزية
05 - الكلاس SpanishLanguage و هو كلاس تم توريثه من الكلاس Language و كما هو واضح من اسمه فهو الكلاس الذي سوف يدعم اللغة الأسبانية و به سوف نقوم بتخزين كل ما له علاقة بترجمة واجهة التطبيق الي الأسبانية
06 - الكلاس RussianLanguage و هو كلاس تم توريثه من الكلاس Language و كما هو واضح من اسمه فهو الكلاس الذي سوف يدعم اللغة الروسيىة و به سوف نقوم بتخزين كل ما له علاقة بترجمة واجهة التطبيق الي الروسية
07 - الكلاس LanguageContext و هو عبارة عن Collection سوف تستخدم لتخزين جميع الكلاسات الخاصة باللغة
08 - الكلاس LanguagedChangedEventArgs و كلاس عبارة عن EventArgs سوف نستخدمها لإطلاق EventHandler جين تتغير اللغة الخاصة بواجهة التطبيق
09 - الكلاس LanguagedChangedEventHandler وهو جدث سوف يستخدم لتغيير واجهة التطبيق بشكل اتوماتيكي عندما يقوم المستخدم بتغيير اللغة المستخدمة
10 - الكلاس LanguageController وهو الكلاس المسئول عن عمل initialize لجميع اللغات الموجودة في مشروعنا وهذا الكلاس سوف نستخدمه للتحكم في تغيير اللغة عند إطلاق الحدث LanguagedChangedEventHandler
الكود :
01 - الكلاس Language
وفي هذا الكلاس قمت فقط بتحديد اسم الفورم و يمكنكم أن تضيفوا أي Property أخري وبنفس الاسلوب طبقا لحاجاتكم ثم تقوموا بتغيير بياناتها في كل كلاس يتم توريثه من هذا الكلاس
PHP كود :
Friend MustInherit Class Language
Friend Overridable ReadOnly Property Name() As String
Get
Return MyBase.GetType().Name.Replace("Language", "")
End Get
End Property
Friend MustOverride ReadOnly Property FormText As String
End Class
02 - الكلاس Languages
PHP كود :
Public Enum Languages
Arabic
English
Russian
Spanish
End Enum
03 - الكلاس ArabicLanguage
PHP كود :
Friend Class ArabicLanguage
Inherits Language
Friend Overrides ReadOnly Property FormText As String
Get
Return "فيجوال بيسك لكل العرب"
End Get
End Property
End Class
04 - الكلاس EnglishLanguage
PHP كود :
Friend Class EnglishLanguage
Inherits Language
Friend Overrides ReadOnly Property FormText As String
Get
Return "Visual Basic For Arab"
End Get
End Property
End Class
05 - الكلاس SpanishLanguage
PHP كود :
Friend Class SpanishLanguage
Inherits Language
Friend Overrides ReadOnly Property FormText As String
Get
Return "Visual Basic Para Árabe"
End Get
End Property
End Class
06 - الكلاس RussianLanguage
PHP كود :
Friend Class RussianLanguage
Inherits Language
Friend Overrides ReadOnly Property FormText As String
Get
Return "Visual Basic для арабских"
End Get
End Property
End Class
07 - الكلاس LanguageContext
PHP كود :
Friend Class LanguageContext
#Region " Field "
Private _languages As List(Of Language)
#End Region
#Region " Constructor "
Public Sub New()
Me._languages = New List(Of Language)
End Sub
Public Sub New(capacity As Integer)
Me._languages = New List(Of Language)(capacity)
End Sub
#End Region
#Region " Property "
Protected ReadOnly Property Languages As List(Of Language)
Get
Return Me._languages
End Get
End Property
Default Friend Property Item(Index As Integer) As Language
Get
Return CType(Me.Languages(Index), Language)
End Get
Set(value As Language)
Me.Languages(Index) = value
End Set
End Property
Friend Property Capacity() As Integer
Get
Return Me.Languages.Capacity
End Get
Set(value As Integer)
Me.Languages.Capacity = value
End Set
End Property
Friend ReadOnly Property Count() As Integer
Get
Return Me.Languages.Count
End Get
End Property
#End Region
#Region " Method "
Friend Sub Add(item As Language)
Me.Languages.Add(item)
End Sub
Friend Sub AddRange(items As Language())
For i As Integer = 0 To items.Length - 1
Dim item As Language = items(i)
Me.Languages.Add(item)
Next
End Sub
Friend Sub Remove(item As Language)
Me.Languages.Remove(item)
End Sub
Friend Sub Insert(index As Integer, item As Language)
Me.Languages.Insert(index, item)
End Sub
Friend Function Contains(item As Language) As Boolean
Return Me.Languages.Contains(item)
End Function
Friend Function GetEnumerator() As IEnumerator
Return Me.Languages.GetEnumerator()
End Function
#End Region
End Class ' LanguageContext
08 - الكلاس LanguagedChangedEventArgs
PHP كود :
Public Class LanguagedChangedEventArgs
Inherits EventArgs
Private _languages As Languages
Public Sub New(language As Languages)
Me._languages = language
End Sub
Public ReadOnly Property Language As Languages
Get
Return Me._languages
End Get
End Property
End Class
09 - الكلاس LanguagedChangedEventHandler
PHP كود :
Friend Delegate Sub LanguagedChangedEventHandler(sender As Object, e As LanguagedChangedEventArgs)
10 - LanguageController
PHP كود :
Public Class LanguageController
Private _context As LanguageContext
Private _lock As Object = New Object
Friend ReadOnly Property List As LanguageContext
Get
If (Me._context Is Nothing) Then
SyncLock Me._lock
If (Me._context Is Nothing) Then
Me.InitializeLanguages()
End If
End SyncLock
End If
Return Me._context
End Get
End Property
Friend Sub InitializeLanguages()
Me._context = New LanguageContext
Dim arabic As Language = New ArabicLanguage
Dim english As Language = New EnglishLanguage
Dim russian As Language = New RussianLanguage
Dim spanish As Language = New SpanishLanguage
_context.Add(arabic)
_context.Add(english)
_context.Add(russian)
_context.Add(spanish)
End Sub
Friend Function GetLanguage(index As Languages) As Language
Return CType(List.Item(index), Language)
End Function
End Class
كيف نستخدم الأكواد أعلاه
وبما أننا هنا نتحدث عن تغيير واجهة التطبيق لذلك سوف اوضح كيفية استخدام الأكواد اعلاه لتغيير Text الخاص بالفورم طبقا لأي لغة سيختارها المستخدم
يمكنكم تنزيل المرفقات التي بها جميع الكواد اعلاه و هي مكتوبة بنسخة الفيجوال استوديو 2012
ولمن يريد اي توضيحات اضافيه يمكنه ان يضع سؤالا في التعليقات ولسوف أجيب عليه