سؤال

صديق لي الآن بناء تطبيق ويب مع J2EE و الدعامات و انها سوف تكون على استعداد لعرض الصفحات في عدة لغات.

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

welcome.english = "Welcome!"
welcome.spanish = "¡Bienvenido!"
...

هذا الحل هو موافق, ولكن ماذا يحدث إذا كان الموقع يعرض الأخبار أو شيء من هذا القبيل (بلوق)?أعني محتويات غير ثابتة ، الذي يتم تحديثه في كثير من الأحيان...الناس التي تحافظ على الموقع أن أكتب كل دخول جديد في كل لغة معتمدة و تخزين كل نسخة من الدخول في قاعدة البيانات.تحميل التطبيق فقط إدخالات المستخدم في اللغة المختارة.

كيف يمكنك تصميم قاعدة البيانات لدعم هذا النوع من التنفيذ ؟

شكرا

هل كانت مفيدة؟

المحلول

أنها الطريقة لقد صممت قاعدة البيانات قبل أن يكون نيوز-جدول يتضمن معلومات أساسية مثل NewsID (int) ، NewsPubDate (التاريخ والوقت), NewsAuthor (varchar/الباحث) ومن ثم يكون جدول مرتبط NewsText أن هذه الأعمدة:NewsID(int) ، NewsText(النص) ، NewsLanguageID(الباحث).و في الأخير لديك لغة-جدول يحتوي LanguageID(الباحث) و LanguageName(varchar).

ثم, عندما كنت تريد أن تظهر للمستخدمين الأخبار-الصفحة يمكنك القيام به:

SELECT NewsText FROM News INNER JOIN NewsText ON News.NewsID = NewsText.NewsID
WHERE NewsText.NewsLanguageID = <<Session["UserLanguageID"]>>

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

نصائح أخرى

تحذير:أنا لست جافا القراصنة ، لذلك YMMV ولكن...

المشكلة مع استخدام قائمة "خصائص" هو أن كنت في حاجة الى الكثير من الانضباط.في كل مرة قمت بإضافة سلسلة ينبغي أن يكون الناتج إلى المستخدم سوف تحتاج لفتح خصائص الملف ، ونتطلع إلى معرفة ما إذا كان هذا السلسلة (أو شيء تقريبا ما يعادل ذلك) هو بالفعل في الملف ثم اذهب و إضافة خاصية جديدة إذا لم يكن.علاوة على ذلك, يجب أن الأمل خصائص الملف كان إلى حد ما الإنسان للقراءة / للتحرير إذا أردت أن تعطيه خارجي فريق الترجمة للتعامل مع.

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

واحد إلى حد ما التكنولوجيا القديمة التي لا يزال يعمل بشكل جيد حقا ، هو استخدام gettext.Gettext أو بعض البديل يبدو أن تكون متاحة لمعظم اللغات و المنصات.الفرضية الأساسية هي أن كنت التفاف الإخراج الخاص بك في استدعاء دالة مثل ذلك:

echo _("Please do not press this button again");

ثم تشغيل gettext أدوات أكثر من شفرة المصدر الخاصة بك سيتم استخراج جميع الحالات ملفوفة مثل ذلك في "بو" الملف.هذا سوف تحتوي على إدخالات مثل:

#: myfolder/my.source:239
msgid "Please do not press this button again"
msgstr ""

و يمكنك إضافة الترجمة إلى المكان المناسب:

#: myfolder/my.source:239
msgid "Please do not press this button again"
msgstr "s’il vous plaît ne pas appuyer sur le bouton ci-dessous à nouveau"

تشغيل اللاحقة من gettext أدوات ببساطة تحديث ملفات po.حتى أنك لا تحتاج إلى استخراج po الملف من المصدر.إذا كنت تعرف أنك قد أريد ترجمة موقع الويب الخاص بك أسفل الخط ثم يمكنك فقط استخدام الصيغة المبينة أعلاه (أكد) وظيفة مع جميع الإخراج الخاص بك.إذا كنت لا توفر ملف po سيكون مجرد العودة مهما كنت وضعت في الاقتباس.gettext هو مصمم للعمل مع لغات حتى المستخدمين لغة استخدامها لاسترداد المناسبة ملف po.هذا يجعل من السهل حقا لإضافة ترجمات جديدة.

Gettext الايجابيات

  • لا تحصل في طريقك في حين الترميز
  • من السهل جدا لإضافة ترجمة
  • PO الملفات يمكن جمعها لأسفل سرعة
  • هناك المكتبات المتاحة لمعظم اللغات / منصات
  • هناك جيدة عبر منصة أدوات التعامل مع الترجمات.هو في الواقع من الممكن الحصول على ترجمة فريق إعداد أداة مثل poEdit أن تجعل من السهل جدا بالنسبة لهم لإدارة مشاريع الترجمة

Gettext سلبيات

  • يحل موقع الويب الخاص بك "الأثاث" ، ولكن عادة لا تزال تريد قاعدة بيانات نهج الخاص بك قاعدة بيانات مدفوعة المحتوى

لمزيد من المعلومات حول gettext ترى هذه صفحة ويكيبيديا

جافا تطبيقات ويب دعم تدويل باستخدام جافا القياسية بطاقة المكتبة.

لقد حصلت على 2 مشاكل.ثابتة المحتوى و المحتوى الديناميكي.

محتوى ثابت يمكنك استخدام jstl.فإنه يستخدم جافا ResourceBundles لإنجاز هذا.لقد تمكنت من الحصول على Databased المدعومة من حزمة العمل مع مساعدة من هذا الموقع.

المشكلة الثانية هي المحتوى الديناميكي.لحل هذه المشكلة سوف تحتاج إلى تخزين البيانات بحيث يمكنك استرداد ترجمات مختلفة استنادا إلى لغة المستخدم.(لغة يشمل البلد واللغة).

انها ليست تافهة, ولكن هو شيء يمكنك القيام به مع القليل من التخطيط مقدما.

@أورو

هذا ما نطبقه على.تطبيقات لدينا هي كل PHP, ولكن gettext لديها تراث طويل.

يبدو أن هناك جيد تنفيذ جافا

الوسم المكتبات على ما يرام إذا كنت تستخدم JSP, ولكن يمكنك أيضا تحقيق I18N باستخدام قالب القائمة على التكنولوجيا مثل FreeMarker.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top