تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] مشكلة فى عمل البرنامج متعدد اللغات
#1
السلام عليكم

حاولت ان اعمل برنامج متعدد اللغات

واستخدمت هذا الطريقة

كود Visual Basic

 
كود :
#Region "API"

    Private Declare Auto Function GetPrivateProfileString Lib "kernel32" _
    (ByVal lpApplicationName As String, ByVal lpKeyName As String, _
     ByVal lpDefault As String, ByVal lpReturnedString As String, _
     ByVal nSize As Integer, ByVal lpFileName As String) As Integer

    Private Declare Auto Function WritePrivateProfileString Lib "kernel32" _
    (ByVal lpApplicationName As String, ByVal lpKeyName As String, _
     ByVal lpString As String, ByVal lpFileName As String) As Long

#End Region
#Region "INI File"

    Private Function Glini(ByVal a As String, ByVal b As String) As String
        Dim msr As String = Application.StartupPath & "\lang\" & My.Settings.lang & ".ini"
        Dim value As String = Space(255)
        GetPrivateProfileString(a, b, "Err", value, Len(value), msr)
        Me.LblTest.Text = value
        Return Me.LblTest.Text
    End Function

#End Region
#Region "Languages"
    Private Sub Lang_Ok()
        Me.Label2.Text = Glini("MGLOGIN", "001")
        Me.Label3.Text = Glini("MGLOGIN", "002")
        Me.Button1.Text = Glini("MGLOGIN", "003")
        Me.Button2.Text = Glini("MGLOGIN", "004")
        Me.Button3.Text = Glini("MGLOGIN", "005")

    End Sub
#End Region

    Private Sub rar_CheckedChanged(sender As Object, e As EventArgs) Handles rar.CheckedChanged
        If rar.Checked = True Then
            My.Settings.lang = "AR"
            Lang_Ok()
        End If
    End Sub

    Private Sub ren_CheckedChanged(sender As Object, e As EventArgs) Handles ren.CheckedChanged
        If ren.Checked = True Then
            My.Settings.lang = "EN"
            Lang_Ok()
        End If
    End Sub


وهو عبر ملف ini

مثل اشهر البرامج ومثل البرامج الكبيرة

ولكنى واجهت بعض المشاكل

1 - اذا كان زر عليه صورة + نص تختفى الصورة ويظهر النص فقط
2 - اذا كن فى ليبل او صندوق نص فيه كلام كثير ويجب ان يكون اكثر من سطر (new line)
لا يظهر سوى اول سطر فقط

-------------

مثال عن ملف ini


[MGLOGIN]
001="اسم المستخدم"
002="كلمة السر"
003="دخول"
004="خروج"
005="دخول تجريبي"



هذه بعض المشكلات التى واجهتنى لحد الان

فهل يوجد حل لهذه المشاكل؟
الرد }}}
تم الشكر بواسطة: الوادي
#2
للرفع ......
الرد }}}
تم الشكر بواسطة:
#3
هل من احد موجود؟
الرد }}}
تم الشكر بواسطة:
#4
؟؟؟؟؟؟؟؟؟؟؟؟؟؟
الرد }}}
تم الشكر بواسطة:
#5
عدم تجاوب الأعضاء غالباً لسبب أو أكثر من هذه الأسباب:
عدم وضوح المطلوب.
عدم تنظيم الموضوع.
عدم تنظيم الكود.
عدم وجود مشروع مرفق.
الرد }}}
#6
الأخ مسعد

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

فعلي سبيل المثال لا الحصر أصبح الأمر كالتالي: -  

الفكرة الأولي
1- تقوم ببناء كلاس يعبر عن المتغييرات أو البيانات المراد تخزينها و هذا سيتيح لك امكانية التحكم في المدخلات و أيضا سيتيح لك إمكانية تشفير البيانات قبل حفظها في ملف امتداده ini او أي امتداد اخر تحده مناسبا لك أ
نفس المنطق ينطبق علي تخزين المعلومات في ملف من النوع   xml وهنا سيختلف فقط اسلوب استرداد المعلومات من ملف  xml  لا غير  
2- تستخدم BinaryWriter  و BinaryReader في حفظ البيانات الي الملف و قراءة البيانات من الملف علي التوالي

الفكرة الثانية
تخزين المعلومات كما يحدث في  تخزين البيانات باستخدام الاكسس أو SQL و بالتالي تحفظها و تقرأها كما تقرأ أي بيانات

الفكرة الثالثة
تخزين البيانات المراد ترجمتها داخل كلاسات في البرنامج وغالبا هي ستكون عبارة عن String تتغير قيمته مع تغيير نوعية اللغة التي يختارها المستخدم

الفكرة الرابعة
تخزين المعلومات في البرنامج داخل Generic collection أو داخل Generic Dictionary و تسترد البيانات عند الحاجة الي تغيير اللغة

الفكرة الخامسة
تستخدم اسلوب مايكروسوفت و تترجم كل فورم علي حدة طبقا لنوع اللغة المستخدمة و علي ما أتذكر هنا البيانات سيتم تخزينها بشكل اتوماتيكي في Resources المشروع علي هيئة ملفات xml


طبعا بعض الأفكار المذكورة أعلاه قد تحتاج وقت لكتابة الكود الخاص بها و بعض الأفكار الأخري قد لا يحتاج إلا إلي وقت أقل و الأمر متروك لك لتختار الطريقة المناسبة طبقا لخبراتك البرمجية
الرد }}}
تم الشكر بواسطة: سعود , LoveVb , الوادي , asemshahen5
#7
بصراحة الاخ الاستاذ ([b]silverlight[/b])

قدم المفيد ...
لكن ان احببت اعتماد فكرة بسيطة جدا مهما تعددت اللغات فانظر هنا
الرد }}}
تم الشكر بواسطة: silverlight , LoveVb , الوادي , asemshahen5
#8
شكرا با أخي سعود بارك الله فيك و في مجهودك في الموقع .......  أخجلتم تواضعا

لكن الأمر أصبح مثل مصيبة كبيرة في الموقع حاليا لأن الناس لا تهتم بقراءة ما يسأل عنه الأخرين ولا حتي تهتم بقراءة ما يتم كتابته في المنتدي من أفكار وكل انسان يريد حل لمشكلته فقط لا غير و بطريقته و أسلوبه هو ..... و بالتالي تكررت الأسئلة و تضيع جهود من يرد علي اسئلة الناس هباء و المصيبة الأكبر أن البعض لا يهتم حتي بكتابة سؤاله بشكل لائق و بلغة عربية جيدة
وبسبب كل ذلك انا توقفت تقريبا عن الرد علي اسئلة الناس
الرد }}}
تم الشكر بواسطة: سعود , LoveVb , الوادي , asemshahen5 , asemshahen5
#9
(28-07-16, 12:24 AM)silverlight كتب : شكرا با أخي سعود بارك الله فيك و في مجهودك في الموقع .......  أخجلتم تواضعا

لكن الأمر أصبح مثل مصيبة كبيرة في الموقع حاليا لأن الناس لا تهتم بقراءة ما يسأل عنه الأخرين ولا حتي تهتم بقراءة ما يتم كتابته في المنتدي من أفكار وكل انسان يريد حل لمشكلته فقط لا غير و بطريقته و أسلوبه هو ..... و بالتالي تكررت الأسئلة و تضيع جهود من يرد علي اسئلة الناس هباء و المصيبة الأكبر أن البعض لا يهتم حتي بكتابة سؤاله بشكل لائق و بلغة عربية جيدة
وبسبب كل ذلك انا توقفت تقريبا عن الرد علي اسئلة الناس

بعتذر جدا على عدم تنسيقى للسؤال

ملحوظة اخى الكريم

اقسم بالله دئما فى اى مشكلة اواجها بحاول فيها اكتر من مرة
لو معرفتش ببحث فى جوجل عن المشكلة
لو ملقتش حل بسئل بعض الاصدقاء
لو معرفوش ببدء اسئل فى المنتديات

------------
ربما يكون فى طريقة مختلفة لما اطلبه ولكن انا دائما اريد ان اعرف ايه الخطا فى مشكلتى حتى اتعلم ولا اريد حل المشكلة بحل اخر انا فقط اريد فهم سبب المشكلة وكيفية حلها

تصور فى يوم من الايام لقدر الله لم يعد يوجد اى من المنتديات العربية التى تساعد فى حل المشاكل مثل هذا المنتدى الكريم

واصبح كل شخص يعتمد على نفسه فى حل مشاكله ماذا سيحدث ساعتها بالتاكيد لن استطيع حل اى مشكلة

لانى تعودت على حل مشاكل بطريقة اخرى ولم افهم حتى سبب مشكلتى الاساسية

اتمنى تكون فهمت وجهة نظرى

وشكرا لمرورك الكريم على سؤالى

ولا تحرمنى من رؤية ردودك اى اسئلتى فهذا شرف ليا انا اتعلم منك ومن الجميع

(27-07-16, 11:56 PM)silverlight كتب : الأخ مسعد

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

فعلي سبيل المثال لا الحصر أصبح الأمر كالتالي: -  

الفكرة الأولي
1- تقوم ببناء كلاس يعبر عن المتغييرات أو البيانات المراد تخزينها و هذا سيتيح لك امكانية التحكم في المدخلات و أيضا سيتيح لك إمكانية تشفير البيانات قبل حفظها في ملف امتداده ini او أي امتداد اخر تحده مناسبا لك أ
نفس المنطق ينطبق علي تخزين المعلومات في ملف من النوع   xml وهنا سيختلف فقط اسلوب استرداد المعلومات من ملف  xml  لا غير  
2- تستخدم BinaryWriter  و BinaryReader في حفظ البيانات الي الملف و قراءة البيانات من الملف علي التوالي

الفكرة الثانية
تخزين المعلومات كما يحدث في  تخزين البيانات باستخدام الاكسس أو SQL و بالتالي تحفظها و تقرأها كما تقرأ أي بيانات

الفكرة الثالثة
تخزين البيانات المراد ترجمتها داخل كلاسات في البرنامج وغالبا هي ستكون عبارة عن String تتغير قيمته مع تغيير نوعية اللغة التي يختارها المستخدم

الفكرة الرابعة
تخزين المعلومات في البرنامج داخل Generic collection أو داخل Generic Dictionary و تسترد البيانات عند الحاجة الي تغيير اللغة

الفكرة الخامسة
تستخدم اسلوب مايكروسوفت و تترجم كل فورم علي حدة طبقا لنوع اللغة المستخدمة و علي ما أتذكر هنا البيانات سيتم تخزينها بشكل اتوماتيكي في Resources المشروع علي هيئة ملفات xml


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

السلام عليكم

اولا بعتذر جدا عن اى تقصير فى كتابة السؤال

واعتذر عن لغتى وطريقتى فى الكتابة فقط تذكر ان اللغات العربية تختلف فى بعض الاشياء مثلا المصرية غير العراقية غير الاردنية الخ

اعتقد ان المصرين راح يفهموا لغتى بكفاءة

ولكن لا حرج عليك وعلى باقى الاعضاء الذين ليسوا بمصرين

فهذا فعلا خطئى فى المرة القادمة راح اكتب باللغة العربية وليس المصرية

ثانيا

انا استخدمت من قبل الطريقة الخامسة الخاصة بميكروسوفت وتقيمى لها 0% نظرا لما واجهته منها هذا رئيي فقط على حسب تجربتى لها

لانى جربتها من قبل وعملت لى الكثير من المشاكل ربما كان العيب منى فى استخدامها والله اعلى واعلم

وبصراحة انا حاولت استخدام طريقة ini
لانها ستكون مريحة بعض الشئ فى اضافة ترجمات لاى لغة جديدة او تعديل اى لغة من قبلى او من قبل اى مطور او مستخدم عادى لبرنامجى

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

وحاليا صديق لى مدنى بحل اخر وهو هذا الكود

كود :
Imports System.Text.RegularExpressions

Module Module1
  Dim _login, _start
  Sub getlang(lang As String)
  Dim _lib_ = FileIO.FileSystem.ReadAllText("\lang\" & lang & ".ini")
  _login = getval(_lib_, "001")
  setlang()
  End Sub
  Sub setlang()
  Form1.TextBox1.Text = _login
  End Sub
  Function getval(_lib_, _key_)
  Return Regex.Matches(_lib_, String.Format("(?<=" & _key_ & "=\s*"").+?(?=""[\r\n]*)"), RegexOptions.IgnoreCase).Item(0).Value
  End Function
End Module

سوف اجربه ولى رجعة لكم باذن الله

وبعتذر مرة تانية عن اى تقصير فى كتابة السؤال
الرد }}}
تم الشكر بواسطة: الوادي
#10
السلام عليكم

شكرا لكم يا شباب الحمدلله الطريقة الى صديقى بعتهالى نفعت وقامت بالمطلوب وزيادة

وهذا هو اخر تعديل للكود ليناسب استخدامى

الكود لربما يستفاد منه بعض الاخوة
كود :
Imports System.Text.RegularExpressions
Module Module1
Sub setlang()
Dim _lib_ = FileIO.FileSystem.ReadAllText(Application.StartupPath & "\lang\" & My.Settings.lang & ".ini")
frm_login.Label2.Text = getval(_lib_, "001")
frm_login.Label3.Text = getval(_lib_, "002")
frm_login.Button1.Text = getval(_lib_, "003")
frm_login.Button2.Text = getval(_lib_, "004")
frm_login.Button3.Text = getval(_lib_, "005")
MG_Control.Button21.Text = getval(_lib_, "006")
End Sub
Function getval(_lib_, _key_)
Return Regex.Matches(_lib_, String.Format("(?<=" & _key_ & "=\s*"").+?(?=""[\r\n]*)"), RegexOptions.IgnoreCase).Item(0).Value
End Function
End Module
الرد }}}


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  مشكلة فى Radiobutton عند وضع صورة فيه أبو جودة 3 80 15-04-24, 04:31 AM
آخر رد: Taha Okla
  استخدام فونت جديد في البرنامج Emam emam 5 91 14-04-24, 01:29 PM
آخر رد: عبد العزيز البسكري
  عدم القدرة على إغلاق البرنامج وظهور رسالة the operation could not be completed صالح عبدالله 2 62 12-04-24, 06:03 AM
آخر رد: صالح عبدالله
  [VB.NET] حفظ الفورم (Form) (البرنامج) بعد التغيير visualist2015 8 6,460 12-04-24, 04:07 AM
آخر رد: أبو جودة
  [سؤال] لدي مشكلة عند قراءة ملف نصي من خلال أداة RichBox , حيث تظهر لي علامات استفهام Mostchar 2 149 07-04-24, 02:51 PM
آخر رد: تركي الحلواني
  تغيير المسار الي مسار البرنامج في تقرير ميكروسوفت atefkhalf2004 2 107 02-04-24, 05:05 PM
آخر رد: atefkhalf2004
  مشكلة في التايمر assuhimi 3 126 23-03-24, 04:51 PM
آخر رد: Taha Okla
  [سؤال] مشكلة اتصال مفتوح dell 2 171 12-03-24, 09:46 PM
آخر رد: dell
  مشكلة عند نقل البرنامج من فيجوال 2013 الى فيجوال 2017 strongriseman 5 156 12-03-24, 10:37 AM
آخر رد: strongriseman
  مشكلة فى جمع عمود فى داتا جريد فيو احمد خطاب 3 162 06-03-24, 07:49 PM
آخر رد: احمد خطاب

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


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