النقاش حول تعدد اللغات في الموقع على مستوى المحتوى فبالنسبة لتعدد اللغات بالنسبة لهيكلة الموقع فأغلب أُطر العمل توفر ميزة سهلة لترجمة واجهة الموقع لعدة لغات أخرى.
صادفت كثير من المواقع تستخدم إما نطاقات فرعية أو نطاقات أُخرى لتعددية اللغات بشكل كامل على مستوى الموقع سواء الهيكلة والمحتوى وهذا ما يعني إستنساخ البرمجية لكل لغة على حدة بمعنى آخر يكون لدينا عدة مواقع على حسب عدد اللغات هذه الفكرة لا أُحبذها ولكني أراها مُستخدمة على نطاق واسع!
ما أفكر القيام به هو توفير الموقع باللغة الإفتراضية وهي الإنجليزية وإنشاء جداول للغات بحيث يتم إضافة ترجمة اللغة رويداً رويداً حتى تنتهي وحينما يتم تغيير لغة الموقع من جهة الزائر يتم الكشف عن وجود ترجمة للمحتوى باللغة المُختارة ليتم إظهاره وإلا يقوم بشكل تلقائي بإظها اللغة الإفتراضية للمحتوى الغير مُترجم بعد، أرى هذه الطريقة ستوفر الكثير من العمل على الموقع من جهة فريق الإدارة للموقع حيث أن الوحدات في الموقع ثابتة ولكنها تُعرض بعدة لغات أي ما يكفي الفريق هو تغيير سعر وحدة أو إضافة عرض وأو إجراء أي تغيير آخر عليها سيكون هذا التغيير بمثابة تغيير عام يظهر في جميع الترجمات لأن مصدر الوحدة واحد بخلاف الطريقة التي تفصل اللغات كمواقع منفصلة أي العمل المطلوب عليها سيتضاعف بمقدار عدد اللغات التي سيتم تضمينها في الموقع.
هذا الفكرة هي ما اخترتها فهل هناك اسلوب أفضل أو طريقة ذات فاعلية أكثر في هذا الموضوع يُمكن اتباعها؟
تعدد اللغات في الموقع على مستوى المحتوى
نعم هنالك الكثير من الطرق .
اولاً يجب ان نميز باننا نملك نوعين من المحتوى داخل اي موقع ,
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 يحوي المطلوب، طريقتي صحيح سهلة لكن تستهلك وقت كبير في التنفيذ.
هل توجد أفكار اخرى مثلا لتنفيذ المطلوب بسهولة؟
هناك طرق عدة، ذكر الأخ محمد بعضاً منها، وأطرح طريقة أخرى أستخدمها :
المحتوى الثابت : أعتمد على ملفات PHP (أو حسب اللغة، مثلاً جافاسكربت سيكون ملف js) تعيد المحتوى كمصفوفة واعتمد على عدت ملفات حسب مكان الترجمة أو محتواها مثلاً (header.php / error.php) وهكذا .
المحتوى المتغير : أعتمد جدولين بدل واحد، مثلاً الفئات يكون هناك جدول باسم categories والأخر categories_content، الأول يحتوي على المعرف والأعمدة الثابتة التي لا تتأثر باللغة، الثاني يحتوي على الأعمدة الاخرى التي يتغير محتواها حسب اللغة، مضافاً لها عامود جديد حسب ما تفضله LangID أو LangCode، لتميز سطر المحتوى لأي لغة تابع .
هذا الأسلوب يفيدك في حالة كانت اللغات تضاف أيضاً بشكل مستمر، أي فقط يتم إضافة اللغة في جدول اللغات، ثم ستظهر كخيار جديد لإضافة محتوى لهذه اللغة .
أيضاً كما ذكرت، لكن أفضل حين يعرض صفحة بأحد اللغات ولا تكون متوفرة، أن يتم إظهار رسالة له تخبره بذلك، وزر لعرض المحتوى باللغة الافتراضية، كي لا يشعر المستخدم أن هناك مشكلة تعيد توجيهه للغة الافتراضية .
بخصوص التعليقات، إن كنت تود فصلها حسب اللغة، الأفضل أن تقوم بإضافاتها للغة التي يتصفح بها الزائر الموقع وليس جعله يختار أي لغة بنفسه .
بالنسبة للمحتوى الثابت فأنا استخدم إطار العمل Laravel فهو يوفر تعددية اللغات بطريقة سلسة عبر Localization ولكن سأقوم بتوفير أداة للمترجمين بحيث يتم الترجمة وتوليد تلك الملفات تلقائياً بدل من ارسال ملفات الترجمة لهم لإعادة ترجمتها.
- بالضبط نفس الفكرة التي جالت في خاطري حول الأمر واراها الأنسب حتى الآن وشرحتها في ردي على الأخ محمد
ملاحظة جيدة بخصوص التعليقات سأعتمدها لتعيين لغة الردود وفلترتها حسب اللغة، وأيضاً كما أشرت في إظهار إشعار بعدم توفر الترجمة للصفحة الحالية للغة المحددة حتى لا يظن أن هناك خطأ ما
شكراً لك، تحياتي
صحيح فـ Laravel يحتوي على نفس الأمر، فالفكرة أخذت من أسلوب الإطار تقريباً .
يمكنك إضافة صفحة تقوم بسحب المصفوفة من صفحات php، ثم تعرضها على شكل حقول ضمن نموذج، وعند الحفظ يتم إعادة تخزين البيانات في المصفوفة ثم حفظها بنفس الملف الخاص بها، بذلك إن قمت بتعديل على أحد الملفات يدوياً وإضافة صف جديد للمصفوفة، سيظهر كحقل بشكل تلقائي بصفحة الترجمة دون عناء إضافته .
ممتاز، ولكن خطر لدي سؤال، في حال تم إضافة رد بالعربية بصفحة الإنجليزية بسبب عدم توافر الترجمة، بعد توافر الترجمة هل سيتم نقل التعليق للعربية أم يبقى كما هو ؟
العفو صديقي ^^
-رُبما في هذه الحالة كتابة كود للتعرف على لغة الردود وتوجيهها بشكل تلقائي للغتها مع إضافة إمكانية النقل للإداريين في حال صادفوا هذا أثناء تصفحهم الموقع.
سيكون صعب ذلك، فقد تكون أول كلمة انجليزية والباقي باللغة أخرى مثلاً، أو يحتوي على لغتين في الرد وما إلى ذلك، يفضل تركها حسب اللغة التي كان يتصفح بها المستخدم، ويتم نقلها في حال صادفها أحد المدراء .
- يمكن مثلاً تطوير خاصية في حال إضافة لغة ما للمشروع، أن يتم البحث في تعليقات عن تعليقات تحتوي نصوص من تلك اللغة، ثم فلترتها من قبل المدراء أو بطريقة برمجية ونقل غير المناسب لمكانه الجديد .
بالطبع سيتم إختيار لغة التعليق من اللغة الحالية ولكن كما أشرت أنت لفلترة ردود بلغات أُخرى فيما بعد أو الإعتماد على العنصر البشري في هذه الحالة أو عمل برمجية أفضل عبر حساب النسبة الأكبر من النص لصاحب آي لغة ثم توجيه الرد لتك اللغة ربما يكون الأمر مُعقد قليلاً ولكن ربما يظهر أكثر بعد العمل على إضافة كهذه.
أرى في بعض المواقع يتم عرض جميع التعليقات بكل اللغات ولكن يتم إعادة ترتيبها على حسب اللغة الحالية بحيث تظهر التعليقات للغة الحالية في البداية.
الأسلوب البرمجي قد يحتاج لعدة معايير، مثلاً هل النص ضمن اقتباس أم لا، فمثلاً قد يكون التعليق باللغة العربية وبه اقتباس بالانجليزي طويل، وبذلك سيكون النص الإنجليزي أطول مثلاً، لكن إحتمالية ذلك ليست بالكبيرة .
قد يكون السبب عائد لإستخدام إضافة ما لتعليقات، أو خدمة خارجية، لأنه لا فائدة من وجود تعليقات باللغات الأخرى في حين أن الزائر قد لا يجيد سوى اللغة الأم، يمكن وضع ذلك كخيار للإطلاع .
على جانب خدمة مثل يوتيوب تقدم تعدد اللغات للواجهة، لكنها لا تقدم دعم لتعدد المحتوى، بل نفس المحتوى يتبع ترجمة داخلية، أتوقع هذا الأسلوب قد يكون منحصر على المحتوى المرئي أو ما يتم صنعه من قبل المستخدمين (مثلاً فيس بوك يقدم ميزة تجريبية لترجمة النص للغات الاخرى ويظهر النص باللغة الخاصة بالمستخدم في حال توافرها)، كذلك التعليقات على هكذا نظام تكون موحدة مهما كانت اللغة المكتوب بها .
رغم أن علمي سطحي بتطوير الويب. ولكن أرى أن أفضل طريقة هي التي يبعها بينج وجوجل (وهناك مواقع غيرها، ولكن هذه أشهرها)، إذ هي تسأل عن اللغة المفضلة في المتصفح، وتظهر الصفحة على أساسها، دون الحاجة إلى نطاق فرعي أو صفحة مختلفة، فالمحتوى في النهاية واحد والتصميم متقارب (مع اختلاف اليمين واليسار، وهذا أمر لا يغيير جوهر التصميم).
أضف إلى هذا أن لا حاجة لجعل اللغة الإفتراضية هي الإنجليزية؛ فالكثير من المواقع ليست أمريكية الأصل، ومترجمة للغات أخرى. بل هي مواقع في دول لغتها ليست إنجليزية، هنا الأولى البدأ باللغة الأم، وجعل بقية اللغات نافلة فقط.
الحكم بالشيء فرع عن تصور، وأنا لا أعلم ما هو هذا الموقع لأقول لك غير كلامي السابق؛ فالتوجه العالمي لا يعني أن تضع لغتك المحلية من الدرجة الثانية، بل أن تقدم محتوًا بجودة عالمية.
- الموقع عبارة عن نشاط سياحي للمزات الخاصة بالبلد، فأغلب مُستخدمي الموقع غير محليين فلهذا توفيره باللغة المحلية كلغة أساسية أمر ليس في صالح الموقع بما أنه موقع تجاري فالهدف الأول هو الوصول للشريحة الأكبر ربحية أولاً.
ولتحديد الشريحة الأكبر، لا بد من دراسة من هم أكثر الناس الذين يأتون للسياحة، وليس الحكم الأولي بالإنجليزية حتى دون معرفة من هم المستهدفون الأوائل.
- اللغة العالمية المُستخدمة بكثرة هي الإنجليزية، فالأغلبية تكون اللغة الثانية بعد لغتهم الأم هي اللغة الإنجليزية، ففرضاً أن النسب هي 30% أسبان و15% روس 15% ألمان و13% إيطاليين و17% فرنسيين و 20% لغات أخرى فليس من الحكم أن أضع اللغة الرسمية للموقع هي اللغة الإسبانية لأن أكبر عدد من يأتي من الأسبان مُتجاهلاً اللغة اللتي تجميع بين الجميع.
السطر الأخير يعني حتى وإن كان أكبر عدد يأتي من متحدثين اللغة الإسبانية فإن الذين لا يفقهو اللغة الأسبانية باقي النسبة فالعبرة بالنسبة الأكبر لفهم ما يحويه الموقع ولكن إن تم إختيار اللغة الإنجليزية كلغة أساسية فنسبة كبيرة من الأسبان اللغة الثانية لهم هي الإنجليزية وبالتالي يستطيعوا فهم الموقع حتى ولو بشكل بسيط ولكن هذا لن يحدث عن إختيار لغة أخرى.
قائمة الدول التي بها اللغة الرسمية هي الإنجليزية
كلامك صحيح إلى حدٍ ما، ولكن الإنبطاح على لغة واحدة، خاطئ، سواء أكانت إنجليزية أم إسبانية. وفي رأيي: جعل اللغة الأساسية للموقع هي اللغة المحلية للبلد، ثم الترجمة إلى كافة اللغات المشهورة؛ فالنص الإنجليزي أو الإسباني أو الفغنسي المتقن يحتاج إلى مترجمين حقيقيين، وليس مجرد تقنيين فقط، في حين اللغة المحلية في الأغلب سيكون المبرمجون قادرين على الكتابة بها بسهولة، وبأقل عددٍ من الأخطاء.
السودان أصبح لغته الرسمية الوحيدة هي العربية، وقد أضيفت الإنجليزية أثناء الوحدة بطلب من الجنوبيين، أما بعد الإنفصال فالجنوب فقط هو الذي يعتمدها لغة رسمية له.
الغرض هو اختيار لغة يفهمها أغلبية الزوار المُستهدفين وفي حالة هذا الموقع هي اللغة الإنجليزية.
بالنسبة للمحتوى الداخلي للموقع فلن يكتبه تقني بل مُختص في المجال وستتم الترجمة للمحتوى أيضاً من جهة مُختصين في تلك اللغات، أما بالنسبة للغة الخاصة بالهيكلة الداخلية ورسائل الموقع التي يكتبها المطور يٌمكن حصرها لمراجعتها من جهة مترجم مختص.
في asp.net يمكن جعل أي موقع تدعم تعدد اللغات بالنسبة للمواقع الاستيتاكية يتم وضع عنصر نص literal داخل وسم HTML ثم يتم اضافة ملفات مصدرية لكل لغة وكتابة معرف عنصر التحكم literal والترجمة المصاحبة
عندما ينقر المستخدم فوق احدى اللغات يتم حفظ اللغة في ملف تعريف الارتباط فعندما يرجع المستخدم الى الصفحة سيتم عرض الصفحة باللغة التي تم اختيارها
المواقع الديناميكية لا تختلف كثيرا
ويتم عرض اللغة حسب اعدادات المستخدم لبرنامج التصفح
التعليقات