منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[VB.NET] مشكلة فى عمل البرنامج متعدد اللغات - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [VB.NET] مشكلة فى عمل البرنامج متعدد اللغات (/showthread.php?tid=16591)

الصفحات: 1 2


مشكلة فى عمل البرنامج متعدد اللغات - الماجيك مسعد - 26-07-16

السلام عليكم

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

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

كود 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="دخول تجريبي"



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

فهل يوجد حل لهذه المشاكل؟


RE: مشكلة فى عمل البرنامج متعدد اللغات - الماجيك مسعد - 26-07-16

للرفع ......


RE: مشكلة فى عمل البرنامج متعدد اللغات - الماجيك مسعد - 27-07-16

هل من احد موجود؟


RE: مشكلة فى عمل البرنامج متعدد اللغات - الماجيك مسعد - 27-07-16

؟؟؟؟؟؟؟؟؟؟؟؟؟؟


RE: مشكلة فى عمل البرنامج متعدد اللغات - الوادي - 27-07-16

عدم تجاوب الأعضاء غالباً لسبب أو أكثر من هذه الأسباب:
عدم وضوح المطلوب.
عدم تنظيم الموضوع.
عدم تنظيم الكود.
عدم وجود مشروع مرفق.


RE: مشكلة فى عمل البرنامج متعدد اللغات - silverlight - 27-07-16

الأخ مسعد

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

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

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

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

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

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

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


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


RE: مشكلة فى عمل البرنامج متعدد اللغات - سعود - 28-07-16

بصراحة الاخ الاستاذ ([b]silverlight[/b])

قدم المفيد ...
لكن ان احببت اعتماد فكرة بسيطة جدا مهما تعددت اللغات فانظر هنا


RE: مشكلة فى عمل البرنامج متعدد اللغات - silverlight - 28-07-16

شكرا با أخي سعود بارك الله فيك و في مجهودك في الموقع .......  أخجلتم تواضعا

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


RE: مشكلة فى عمل البرنامج متعدد اللغات - الماجيك مسعد - 28-07-16

(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

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

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


RE: مشكلة فى عمل البرنامج متعدد اللغات - الماجيك مسعد - 28-07-16

السلام عليكم

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

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

الكود لربما يستفاد منه بعض الاخوة
كود :
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