النقاش حول تعدد اللغات في الموقع على مستوى المحتوى فبالنسبة لتعدد اللغات بالنسبة لهيكلة الموقع فأغلب أُطر العمل توفر ميزة سهلة لترجمة واجهة الموقع لعدة لغات أخرى.
صادفت كثير من المواقع تستخدم إما نطاقات فرعية أو نطاقات أُخرى لتعددية اللغات بشكل كامل على مستوى الموقع سواء الهيكلة والمحتوى وهذا ما يعني إستنساخ البرمجية لكل لغة على حدة بمعنى آخر يكون لدينا عدة مواقع على حسب عدد اللغات هذه الفكرة لا أُحبذها ولكني أراها مُستخدمة على نطاق واسع!
ما أفكر القيام به هو توفير الموقع باللغة الإفتراضية وهي الإنجليزية وإنشاء جداول للغات بحيث يتم إضافة ترجمة اللغة رويداً رويداً حتى تنتهي وحينما يتم تغيير لغة الموقع من جهة الزائر يتم الكشف عن وجود ترجمة للمحتوى باللغة المُختارة ليتم إظهاره وإلا يقوم بشكل تلقائي بإظها اللغة الإفتراضية للمحتوى الغير مُترجم بعد، أرى هذه الطريقة ستوفر الكثير من العمل على الموقع من جهة فريق الإدارة للموقع حيث أن الوحدات في الموقع ثابتة ولكنها تُعرض بعدة لغات أي ما يكفي الفريق هو تغيير سعر وحدة أو إضافة عرض وأو إجراء أي تغيير آخر عليها سيكون هذا التغيير بمثابة تغيير عام يظهر في جميع الترجمات لأن مصدر الوحدة واحد بخلاف الطريقة التي تفصل اللغات كمواقع منفصلة أي العمل المطلوب عليها سيتضاعف بمقدار عدد اللغات التي سيتم تضمينها في الموقع.
هذا الفكرة هي ما اخترتها فهل هناك اسلوب أفضل أو طريقة ذات فاعلية أكثر في هذا الموضوع يُمكن اتباعها؟
تعدد اللغات في الموقع على مستوى المحتوى
نعم هنالك الكثير من الطرق .
اولاً يجب ان نميز باننا نملك نوعين من المحتوى داخل اي موقع ,
1 - محتوى ثابت (اي لا يمكن تغييره من قاعدة البيانات) على سبيل المثال هنا في حسوب I/O الكلام على الازرار مثل (اضف رداً, عاين, التعليقات) الخ ..
2 - محتوى متغيير وهو ما يتم تخزينه في قاعدة البيانات واسترجاعه (حسب اللغة المُختارة من المستخدم).
للحالة الاولى يمكن اتباع اكثر من طريقة (تخزيينها في مصفوفات, او ملفات json او xml) - لن اشرح كثيراً في هذه النقطة.
اما الحالة الثانية فهي تعتمد عليك او على (مصمم قاعدة البيانات).
الطريقة التي ذكرتها اضيف عليها بعض الطرق المُتبعة (علماً ان لكل منها ايجابيات وسلبيات)
(ساذكر الطريقة واذكر ان كانت مستحسنة ام لا وهذا رأيي الشخصي).
1 - انشاء جدول واحد خاص للترجمة : حيث يحتوي هذا الجدول على id الخاص بالصف واسم الجدول وجميع الاعمدة الاخرى يتم حفظها داخل عمود واجد بصيغة json . (غير مستحسن).
2 - انشاء عمود لكل لغة داخل الجدول نفسه ,
اي لو كان لدينا (id, title, content, .....) سيصبح (id, ar_title, en_title, ar_content, en_content) وهكذا (مستحسن في حال لا تريد اضافة او حذف اللغات بشكل مستمر).
هذا موضوع قد يفيدك (اللغة الانجليزية)
هذه مكتبة لُغاتي من برمجتي ممكن ان تفيدك (اتبع بها الاسلوب الثاني في قاعدة البيانات, سهلة التعديل والتطوير)
يمكنك مشاهدة التوثيق (انجليزي, عربي)
وتحميلها من github
شكراً لك على ردك الغني سأطلع على الروابط التي أرسلتها
نعم ما أتحدث عنه هو النوع الثان الخاص بالمحتوى المُخزن في قواعد البيانات، غير أنه يُمكن حفظ تعددية اللغات للنوع الأول الخاص بهيكلة الموقع في قواعد البيانات إن كان الموقع كبير ويقوم عليه عدد كبير في عملية الترجمة وليست له دخل بالنسبة لمجال التطوير حتى لا تحدث مُشكلات ولكن الأفضل هو كتابة برمجية ترجمة تقوم بتوليد ملفات الترجمة بشكل تلقائي لإستخدامها داخل التطبيق لتقليل الضغط على الخادم في أمور غير مُتغيرة.
بالنسبة للطريقة الثانية جيدة ولكنها لن تكون مناسبة لحالتي حيث أن العمل سينتهي بشكل كامل بالنسبة للغة الإنجليزية، ومن ثم نبدأ العمل على اللغات الأخرى فأريد أن تكون الترجمات منفصلة عن هيكلة قاعدة البيانات الأساسية، سأعتمد على إنشاء جدول أخر لكل جدول به محتوى قابل للترجمة مع مفاتح غريب من الجدول الأساسي وكود اللغة، هذا غير أن عدد اللغات التي من الممُكن إضافتها للتطبيق غير معروف بشكل مُحدد بعد فلهذا أبحث عن وسيلة أكثر فاعلية لعملية إضافة اللغات فيما بعد.
تحياتي
شكرًا لك، هل قمت بقياس سرعة الترجمة بين طريقتي Json و MySQL و أيهما أسرع؟ مع ان جيسون أحسن بخلاف قاعدة بيانات لسرعة تعديلك لها مباشرة دون مشاكل كبيرة.
من كثرة استخدامي لملفات Json ربما سأحولها لقاعدة بيانات ههه. أراها مساعدة بشكل جيد للقراءة فقط.
- التعامل مع الملفات في هذه الحالة أسرع، قواعد بيانات MongoDB تعتمد على مبدأ قواعد البيانات اللاعلاقية وتنسيق JSON لحفظ البيانات وأداءها ممتاز مع أحجام البيانات الكبيرة.
Mongodb لم أجربها بعد، عندي ملف Json احفظ فيه تشعب علاقة بيانات مثلا:
عندي جدول به بيانات كل بيان يحوي بيان أخر، البيان الأخير يحوي اربع متغيرات و واحد مصفوفة، و المصفوفة تحوي تعريف + قيمة.
صحيح يمكن عملها بال MySQL لكن متعبة، فاستعنت بجزء من الأخير و ملف Json يحوي المطلوب، طريقتي صحيح سهلة لكن تستهلك وقت كبير في التنفيذ.
هل توجد أفكار اخرى مثلا لتنفيذ المطلوب بسهولة؟
التعليقات