تقييم الموضوع :
  • 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 ك ب / التحميلات : 145)
الرد }}}}
تم الشكر بواسطة: ربيع , Sajad , Sajad , zinom
#2
الله يعطيك العافية  ...
على فكرة انت خامه  برمجية جيده  لكن محتاج تطوير  يبدوا لي أن أهتماماتك   كلها GDI

تعال عايز أكلمك   ...
العنوان  هنــــــــــا 

Abu Ehab : Microsoft Partner  & Systems Developer
الرد }}}}
تم الشكر بواسطة:
#3
شكرا يا يا أخي الفاضل علي مرورك وعلي ردك

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

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

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











الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [مقال] دمج كل ملفات برنامجك الى ملف تنفيذى واحد ali.alfoly 25 7,883 02-12-16, 04:04 PM
آخر رد: ali.alfoly
  حصرياً ( إطبع على الوورد من خلال برنامجك ) ( شرح بالصور ) m.sami.ak 20 1,981 20-08-16, 11:53 PM
آخر رد: الوادي
  الاستفادة من بارمترات الاخراج من SQL Server داخل برنامجك ابو ليلى 1 201 20-08-16, 02:16 AM
آخر رد: الوادي
Star [VB.NET] شرح عمل امتداد خاص لبرامجك وجعل برنامجك يقرأ هذة الملفات mohammed_gamal381 22 7,398 01-06-16, 02:55 PM
آخر رد: ابراهيم كركوكي
  طريقة مميزة لعمل إعدادات Setting لحفظ اعدادات برنامجك بدون أكواد kslawy 6 1,652 26-05-16, 12:07 PM
آخر رد: CLARO
  حصرياً على اليوتوب,,, إطبع على الوورد من خلال برنامجك ( شرح بالفيديو ) مبرمج أوتار 5 1,822 15-05-16, 05:06 PM
آخر رد: CLARO
  موضوع الاستاذ رامي مثال \ لطريقة تفعيل برنامجك عند العميل وتغيير كلمة مرور اRamilove سعود 7 2,048 26-01-16, 08:07 PM
آخر رد: سعود
Question [مثال] كيف تضيف اكثر من لغة الى برنامجك HASAN6.0 3 425 26-11-15, 11:20 PM
آخر رد: hamada558
  كيف تتعامل مع برنامج الإكسيل من برنامجك rinawi 6 1,786 25-06-15, 05:49 AM
آخر رد: Nadir_Nabous
  كيفية عمل setup للبرنامج المعمول بالفيجول بيسك2008 يدعم العربيه hosney 3 857 31-12-14, 10:55 AM
آخر رد: hosney

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


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