تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيف تجعل برنامجك عالميا و يدعم أكثر من لغة
#1
السلام عليكم ورحمة الله وبركاته

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

اللينكـــــــــــــــــــــــــــــ

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

الفكرة و ببساطة شديدة تنحصر في كتابة كلاسات تضع بها جميع 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

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



تقبلوا تحياتي

أخوكم عمر


الملفات المرفقة
.rar   Test_LanguageLocalization.rar (الحجم : 80.47 ك ب / التحميلات : 332)
الرد }}}
تم الشكر بواسطة: ربيع , Sajad , Sajad , zinom , رضوان الجماعي
#2
الله يعطيك العافية  ...
على فكرة انت خامه  برمجية جيده  لكن محتاج تطوير  يبدوا لي أن أهتماماتك   كلها GDI

تعال عايز أكلمك   ...
العنوان  هنــــــــــا 
Abu Ehab : Microsoft Partner  & Systems Developer
 Youtube   Facebook    Twitter   
الرد }}}
تم الشكر بواسطة:
#3
شكرا يا يا أخي الفاضل علي مرورك وعلي ردك

فعلا انا كل اهتماماتي تنحصر في +GDI و Collection و بناء الكونترول

عموما الأمر مجرد هواية لا أكثر و لا أقل
وان شاء الله نتحدث قريبا وهذا وعد مني
الرد }}}
تم الشكر بواسطة:
#4
شكرا على الشرح ولكن لماذا لا تستخدم خيار language الموجود لكل فورم... اسهل بكثير
الرد }}}
تم الشكر بواسطة:
#5
الأخ الفاضل HASAN6.0

لو نظرت الي الموضوع وقرأته جيدا ستجد أن الاسلوب المتبع هنا ليس الهدف منه اللغة فقط لا غير
برجاء لا تنظر تحت قدميك و أنت تفكر في الأمور ولو أنت تفضلت بمراجعة الكلام ستجد انني اقول انها طريقة فقط لا غير لكن يمكن أن تستخدم ما تشاء و ما تراه مريحا لك
عموما الهدف هنا أكبر من موضوع اللغة وعليك أن تعلم أن الكلاسات المكتوبة لها هدف اكبر فهي سوف تعمل مثل Resources Manager الموجود في الدوت نت
الرد }}}
تم الشكر بواسطة: ربيع , Miloud
#6
شكرا لك رائع
(( نحن قوم أعزنا الله بالإسلام فمهما ابتغينا العزة بغيره أذلنا الله )) .. 











الرد }}}
تم الشكر بواسطة:
#7
شكرا موضوع رائع 




شكرا جدا  على الموضوع الاكثر من رائع










_______________________________________________
التسامح الحق لا يستلزم نسيان الماضي بالكامل..

سينما كلوب
ايجي بست
شاهد فور يو

سيرا اون لاين


مشاهدة فيلم
الرد }}}
تم الشكر بواسطة: elgokr


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيف تتعامل مع برنامج الإكسيل من برنامجك rinawi 7 6,643 12-11-22, 12:11 AM
آخر رد: خالد العصاوي
  الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (الأقواس المتعددة) !! أنس محمود 10 7,836 19-07-22, 12:15 AM
آخر رد: StartLight4000
Exclamation [VB.NET] التحقق من المدخلات النصية Textbox Validation - لبرنامج أكثر امانا Anas Mahmoud 1 4,552 23-08-20, 10:11 AM
آخر رد: Anas Mahmoud
  طريقة تقسيم كودك البرمجة الي سطرين أو أكثر كم تريد dametucorazon 1 3,934 06-09-19, 12:55 AM
آخر رد: سعود
  طريقة استخدام مكتبة internet download manager في برنامجك kslawy 3 5,362 30-07-19, 07:06 AM
آخر رد: سعود
Brick جعل برنامجك يعمل بوضعية المدير أو المسؤول - Administrator YousefOkasha 2 2,897 24-10-18, 02:58 PM
آخر رد: حريف برمجة
  حصرياً ( إطبع على الوورد من خلال برنامجك ) ( شرح بالصور ) m.sami.ak 21 12,539 23-02-18, 11:04 AM
آخر رد: احمد نعمة عبد السلام
  كيف تجعل الـ Text Box ذكي !! يترجم العمليات الحسابية ويخرج الناتج !! بالداخل المزيد !! أنس محمود 1 6,884 11-02-18, 02:37 PM
آخر رد: komar
  موضوع الاستاذ رامي مثال \ لطريقة تفعيل برنامجك عند العميل وتغيير كلمة مرور اRamilove سعود 8 7,699 06-10-17, 01:43 AM
آخر رد: حمادة دراز
  [مقال] دمج كل ملفات برنامجك الى ملف تنفيذى واحد ali.alfoly 25 21,879 02-12-16, 04:04 PM
آخر رد: ali.alfoly

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم