طريقة جعل برنامجك عالميا ويكون باكثر من لغة

السلام عليكم ورحمة الله وبركاته

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

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

الفكرة و ببساطة شديدة تنحصر في كتابة كلاسات تضع بها جميع 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 Integeritem As Language)
 
       Me.Languages.Insert(indexitem)
 
   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 ObjectAs 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 NothingThen
                SyncLock Me
._lock
                    If 
(Me._context Is NothingThen
                        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

ولمن يريد اي توضيحات اضافيه يمكنه ان يضع سؤالا في التعليقات ولسوف أجيب عليه