هذا هو شكل قاعدة البيانات الخاصة بالمشروع
عندما أحاول ترجمة كلمة (you) تتم بنجاح
ولكن مثلاً لو حاولت مع كلمة (your) فالبرنامج يترجم (you) ويترك r هكذا (rأنت)
أعرف أن الخلل فى طريقة replace ولكنى لا أعرف طريقة أخرى
لأن البرنامج يفترض أن يترجم جمل كاملة وليست كلمات
وبالتالى يجب أن يبحث عن كل كلمة على حدة ويستبدلها داخل الجملة
البرنامج بالكامل فى المرفقات
السلام عليكم ورحمة الله وبركاته
اخي الكريم هل الترجمة ستكون لكلمة واحد فقط في كل مرة ؟
ان كان كذلك فلا داع لكل هذ التعقيد
فقط جملة استعلام مثل البحث
كود :
Private Sub BtnTranslate_Click(sender As Object, e As EventArgs) Handles BtnTranslate.Click
Dim tbl As New DataTable
Dim adp As New OleDbDataAdapter("SELECT * FROM [Translations] where English ='" & EnglishTextbox.Text & "'", cnn)
adp.Fill(tbl)
If tbl.Rows.Count > 0 Then
ArabicTextbox.Text = tbl.Rows(0)(1)
End If
End Sub
اما اذا كانت الترجمة لجملة وفيها كلمات فالموضوع يختلف وليس لدي اي فكرة
فقط استبدل كود For بهذا الكود
كود :
For Each row As DataRow In tbl.Rows
content = content.Replace(row.Item("English"), row.Item("Arabic"))
Next
يرجي الانتباه ان التحول هنا سيتم التعامل طبقاً للكتابة اذا كان حرفاً كبير او صغير
أخى ابراهيم ايبو
للأسف ما أريده هو ترجمة الجمل وإلا لكانت طريقتك المقترحة هى اختيارى
أخى kiki
لا يوجد أى فرق بين الكود الذى اقترحته والموجود بالفعل
يعطى نفس النتيجة عند التنفيذ
يعطى ما تريده وليس نفس النتيجة
لان هنا هو يعتمد على التطبيق الكلى للكلمة اللى موجوده فى العمود الانجليزيى ليحوله للعربي
ويجب ان يكون متطابق كلياً للكتابة التى كتبت الا اذا كنت ستقوم بالاضافة لاكواد مثل تحول الحروف الكبيرة الى صغيرة والعكس وما شبه
شكراً أخى لاهتمامك
أريد التطابق الكلى أيضاً مع الكلمة الموجودة فى textbox
لو راجعت الموضوع ونظرت للمثال الذى وضعته ستفهم مقصدى بسهولة
وللتوضيح قم بترجمة كلمة your كمثال وسترى النتيجة
سيتبقي فقط وضع الجمل والكلمات فى قاعدة الباينات
ومن ثمي حتى لا تقوم باعادة ترتيب المدخلات بقاعدة البيانات من عدد الاحرف الاكبر للاقل
فقط تعال فى كود الاستعلام واضف له هذا
ORDER BY Len(English) DESC
بكده لما يعمل استبدال للكلمات سيقوم باستبدال كلمة your اولاً قبل ما يطبق استبدال you
فكرة جيدة وإضافة رائعة أخى
ولكن مازال هناك مشكلة صغيرة
لو كانت كلمة your مثلاً غير مسجلة بقاعدة البيانات وفقط you موجودة
سيحدث نفس الخطأ السابق
هل يمكن مثلاً وضع شرط أن يتعرف البرنامج على الكلمة أو حتى الجملة
فقط عندما يسبقها و يليها مسافة أو سطر جديد
وشكراً لمساعدتك
(23-06-20, 01:19 AM)Doctor GME كتب : [ -> ]فكرة جيدة وإضافة رائعة أخى
ولكن مازال هناك مشكلة صغيرة
لو كانت كلمة your مثلاً غير مسجلة بقاعدة البيانات وفقط you موجودة
سيحدث نفس الخطأ السابق
هل يمكن مثلاً وضع شرط أن يتعرف البرنامج على الكلمة أو حتى الجملة
فقط عندما يسبقها و يليها مسافة أو سطر جديد
وشكراً لمساعدتك
بكل تاكيد يمكنك ذلك كل كا علك ان تعجل الكود بهذا الشكل
كود :
content = content.Replace(row.Item("English") & Space(1), row.Item("Arabic") & Space(1))
والامر الثاني حتى لا تجبر المستخدم ان ينهي الكتابة فى الكتابة بمسافة
ان تجعل كود الزر بهذا الشكل
كود :
ArabicTextbox.Text = GetExactSubtitles(EnglishTextbox.Text & Space(1))
هذا هو الشكل النهائى
كود :
content = content.Replace(Space(1) & row.Item("English") & Space(1), Space(1) & row.Item("Arabic") & Space(1))
ويعمل بشكل جيد إذا كانت الكلمة أو الجملة يليها ويسبقها مسافة
ولكن إذا كان يسبقها أو يليها سطر جديد لا تعمل
حاولت مع هذه الصيغة:
كود :
content = content.Replace(Space(1) Or vbCrLf & row.Item("English") & Space(1) Or vbCrLf, Space(1) Or vbCrLf & row.Item("Arabic") & Space(1) Or vbCrLf)
ولكن تعطى خطأ:
Conversion from string to type long is not valid