ِ Write Custom Classes To Localize Windows Forms Application
هناك أساليب كثيرة لنجعل واجهة التطبيق الخاصة ببرامجنا تدعم أكثر من لغة غير اللغة الإنجليزية
وفي اللينك التالي ستجدون واحدا من هذه الاساليب التي يمكن استخدامها لكي نجعل من برامجنا برامج عالمية وتدعم أكثر من لغة
اللينكــــــــــــــــــــــــــ
في هذا الموضوع سوف نكتب فكرة لكيفية أن تجعل واجهة التطبيق الخاصة بنا أو الخاصة ببرامجنا تدعم أكثر من لغة غير اللغة الإنجليزية وذلك عن طريقة كتابة مجموعة من الكلاسات التي يمكن أن تستخدم في تغيير اللغة الخاصة بواجهة التطبيق
الفكرة و ببساطة شديدة تنحصر في كتابة كلاسات تضع بها جميع البيانات الخاصة بكل لغة ثم نستخدمها مع واجهة التطبيق الخاص بنا
يجب ان نضع في اعتبارنا أننا سوف نتعامل مع ثوابت في واجهة التطبيق وهذه الثوابت قد تكون الفورم او الباتون او اي كونترول اخر قبالتالي سنجد انفسنا نحتاج الي تغيير التكست الخاص بكل كونترول طبقا لنوعية اللغة المستخدمة في واجهة التطبيق
أيضا سوف نحتاج الي تخزين البيانات الخاصة بكل لغة بشكل ما ثم نسترجعها عندما يريد المستخدم تغيير اللغة الخاصة بواجهة التطبيق ثم نقوم بتغيير كل البيانات الخاصة بكل كونترول موجود في واجهة التطبيق ليناسب اللغة التي اختارها المستخدم
بشكل عام الفكرة التي سوف نستخدمها يمكن أن نضيف لها الكثير و الكثير لتدعم أشياء اخري غير اللغة حيث يمكن استخدام نفس الفكرة لتغيير شكل الكونترول و لون خلفيته و الصور المستخدمة مع الكونترول و أشياء كثيرة اخري بالنهاية الأمر متروك لمخيلة القارئ
لكلاسات المستخدمة في المشروع هذا ستكون كالتالي:
01 - Languages Enumeration
يوجد به أسماء اللغات مثل العربية و الانجليزية و الروسية و يمكن أن تضيف له الزيد من اللغات أخري طبقا لإحتياجاتنا
02 - Language Class
و هو يمثل الكلاس الاساسي لأي لغة سوف نستخدمها ومنه تتفرع كل اللغات الخاصة بواجهة التطبيق
03 - ArabicLanguage Class
كما هو واضح من اسمه فهو الكلاس الذي سوف يدعم اللغة العربية و به سوف نقوم بتخزين كل ما له علاقة بترجمة واجهة التطبيق الي العربية
04 - EnglishLanguage Class
كما هو واضح من اسمه فهو الكلاس الذي سوف يدعم اللغة الإنجليزية و به سوف نقوم بتخزين كل ما له علاقة بترجمة واجهة التطبيق الي الإنجليزية
05 - SpanishLanguage Class
كما هو واضح من اسمه فهو الكلاس الذي سوف يدعم اللغة الأسبانية و به سوف نقوم بتخزين كل ما له علاقة بترجمة واجهة التطبيق الي الأسبانية
06 - RussianLanguage Class
كماهو واضح من اسمه فهو الكلاس الذي سوف يدعم اللغة الروسيىة و به سوف نقوم بتخزين كل ما له علاقة بترجمة واجهة التطبيق الي الروسية
07 - LanguageContext Class
و هو عبارة عن مصفوفة سوف تستخدم لتخزين جميع الكلاسات الخاصة باللغة
08 - LanguagedChangedEventArgs Class
و هو كلاس سوف يستخدم مع الجدث الخاص بتغير لغة واجهة التطبيق
09 - LanguagedChangedEventHandler Class
وهو حدث سوف يستخدم لتغيير واجهة التطبيق بشكل اتوماتيكي عندما يقوم المستخدم بتغيير اللغة المستخدمة
10 - LanguageController Class
وهو الكلاس المسئول عن عمل تهيئة لجميع اللغات الموجودة في المشروع و هذا الكلاس سوف يستخدم للتحكم في لغة التطبيق عند إطلاق الخدث الخاص بتغير لغة واجهة التطبيق
Codes:
Code Usage:
Download :
To Download the full code please visit the below link:
Download Link
وفي اللينك التالي ستجدون واحدا من هذه الاساليب التي يمكن استخدامها لكي نجعل من برامجنا برامج عالمية وتدعم أكثر من لغة
اللينكــــــــــــــــــــــــــ
في هذا الموضوع سوف نكتب فكرة لكيفية أن تجعل واجهة التطبيق الخاصة بنا أو الخاصة ببرامجنا تدعم أكثر من لغة غير اللغة الإنجليزية وذلك عن طريقة كتابة مجموعة من الكلاسات التي يمكن أن تستخدم في تغيير اللغة الخاصة بواجهة التطبيق
الفكرة و ببساطة شديدة تنحصر في كتابة كلاسات تضع بها جميع البيانات الخاصة بكل لغة ثم نستخدمها مع واجهة التطبيق الخاص بنا
يجب ان نضع في اعتبارنا أننا سوف نتعامل مع ثوابت في واجهة التطبيق وهذه الثوابت قد تكون الفورم او الباتون او اي كونترول اخر قبالتالي سنجد انفسنا نحتاج الي تغيير التكست الخاص بكل كونترول طبقا لنوعية اللغة المستخدمة في واجهة التطبيق
أيضا سوف نحتاج الي تخزين البيانات الخاصة بكل لغة بشكل ما ثم نسترجعها عندما يريد المستخدم تغيير اللغة الخاصة بواجهة التطبيق ثم نقوم بتغيير كل البيانات الخاصة بكل كونترول موجود في واجهة التطبيق ليناسب اللغة التي اختارها المستخدم
بشكل عام الفكرة التي سوف نستخدمها يمكن أن نضيف لها الكثير و الكثير لتدعم أشياء اخري غير اللغة حيث يمكن استخدام نفس الفكرة لتغيير شكل الكونترول و لون خلفيته و الصور المستخدمة مع الكونترول و أشياء كثيرة اخري بالنهاية الأمر متروك لمخيلة القارئ
لكلاسات المستخدمة في المشروع هذا ستكون كالتالي:
01 - Languages Enumeration
يوجد به أسماء اللغات مثل العربية و الانجليزية و الروسية و يمكن أن تضيف له الزيد من اللغات أخري طبقا لإحتياجاتنا
02 - Language Class
و هو يمثل الكلاس الاساسي لأي لغة سوف نستخدمها ومنه تتفرع كل اللغات الخاصة بواجهة التطبيق
03 - ArabicLanguage Class
كما هو واضح من اسمه فهو الكلاس الذي سوف يدعم اللغة العربية و به سوف نقوم بتخزين كل ما له علاقة بترجمة واجهة التطبيق الي العربية
04 - EnglishLanguage Class
كما هو واضح من اسمه فهو الكلاس الذي سوف يدعم اللغة الإنجليزية و به سوف نقوم بتخزين كل ما له علاقة بترجمة واجهة التطبيق الي الإنجليزية
05 - SpanishLanguage Class
كما هو واضح من اسمه فهو الكلاس الذي سوف يدعم اللغة الأسبانية و به سوف نقوم بتخزين كل ما له علاقة بترجمة واجهة التطبيق الي الأسبانية
06 - RussianLanguage Class
كماهو واضح من اسمه فهو الكلاس الذي سوف يدعم اللغة الروسيىة و به سوف نقوم بتخزين كل ما له علاقة بترجمة واجهة التطبيق الي الروسية
07 - LanguageContext Class
و هو عبارة عن مصفوفة سوف تستخدم لتخزين جميع الكلاسات الخاصة باللغة
08 - LanguagedChangedEventArgs Class
و هو كلاس سوف يستخدم مع الجدث الخاص بتغير لغة واجهة التطبيق
09 - LanguagedChangedEventHandler Class
وهو حدث سوف يستخدم لتغيير واجهة التطبيق بشكل اتوماتيكي عندما يقوم المستخدم بتغيير اللغة المستخدمة
10 - LanguageController Class
وهو الكلاس المسئول عن عمل تهيئة لجميع اللغات الموجودة في المشروع و هذا الكلاس سوف يستخدم للتحكم في لغة التطبيق عند إطلاق الخدث الخاص بتغير لغة واجهة التطبيق
Codes:
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
Public Enum Languages
Arabic
English
Russian
Spanish
End Enum
Friend Class ArabicLanguage
Inherits Language
Friend Overrides ReadOnly Property FormText As String
Get
Return "فيجوال بيسك لكل العرب"
End Get
End Property
End Class
Friend Class EnglishLanguage
Inherits Language
Friend Overrides ReadOnly Property FormText As String
Get
Return "Visual Basic For Arab"
End Get
End Property
End Class
Friend Class SpanishLanguage
Inherits Language
Friend Overrides ReadOnly Property FormText As String
Get
Return "Visual Basic Para Árabe"
End Get
End Property
End Class
Friend Class RussianLanguage
Inherits Language
Friend Overrides ReadOnly Property FormText As String
Get
Return "Visual Basic для арабских"
End Get
End Property
End Class
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 RegionEnd Class ' LanguageContext
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
Friend Delegate Sub LanguagedChangedEventHandler(sender As Object, e As LanguagedChangedEventArgs)
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 FunctionEnd Class
Code Usage:
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Text = Nothing
Me.SetApplicationData(CType(Me.Controller.GetLanguage(Me._language), Language))
End Sub
Private _language As Languages = Languages.English
Public Property Languge As Languages
Get
Return Me._language
End Get
Set(value As Languages)
If Me._language <> value Then
Me._language = value
Me.OnLanguageChanged(New LanguagedChangedEventArgs(Me._language))
End If
End Set
End Property
Private _controller As LanguageController = New LanguageController
Friend ReadOnly Property Controller As LanguageController
Get
Return _controller
End Get
End Property
Private Sub SetApplicationData(currentLanguage As Language)
Me.Text = currentLanguage.FormText
End Sub
Protected Sub OnLanguageChanged(e As LanguagedChangedEventArgs)
RaiseEvent LanguageChanged(Me, e)
Me.SetApplicationData(CType(Me.Controller.GetLanguage(e.Language), Language))
End Sub
Friend Event LanguageChanged As LanguagedChangedEventHandler
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Me.Languge = Languages.Arabic
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Me.Languge = Languages.English
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Me.Languge = Languages.Spanish
End Sub
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
Me.Languge = Languages.Russian
End Sub
End Class
Download :
To Download the full code please visit the below link:
Download Link
Comments
Post a Comment