سؤال

أحتاج إلى تخزين المنتجات الخاصة بحل التجارة الإلكترونية في قاعدة بيانات.يجب أن يحتوي كل منتج على معلومات وصفية، مثل الاسم والوصف وما إلى ذلك.

أحتاج إلى ترجمة أي منتج إلى عدد x من اللغات.

ما قمت به حتى الآن هو إنشاء أي عمود يجب ترجمته و nvarchar(MAX) ثم أقوم بتخزين سلسلة XML مثل هذا:

<cultures>
    <culture code="en-us">Super fast laptop</culture>
    <culture code="da-dk">Super hurtig bærbar</culture>
</cultures>

وعندما أقوم بتحميله من قاعدة البيانات، إلى كائنات منطق الأعمال الخاصة بي، أقوم بتحليل سلسلة XML إلى ملف Dictionary<string, string> حيث المفتاح هو رمز الثقافة/اللغة.

لذلك عندما أرغب في عرض اسم منتج ما، أفعل هذا:

lblName.Text = product.Name["en-us"];

هل لديها أفضل حل؟

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

المحلول

يجب عليك تخزين اللغة الحالية في مكان ما (في ملف مفردة, ، على سبيل المثال) وفي خاصية اسم المنتج، استخدم إعداد اللغة للحصول على السلسلة الصحيحة.بهذه الطريقة، لن يتعين عليك سوى كتابة الكود الخاص باللغة مرة واحدة لكل حقل بدلاً من التفكير في اللغات في كل مكان يُستخدم فيه الحقل.

على سبيل المثال، بافتراض أن المفردة الخاصة بك محددة في فئة Localizer التي تخزن التعداد المطابق للغة الحالية:

public class Product
{
  private idType id;
  public string Name
  {
    get
    {
      return Localizer.Instance.GetLocalString(id, "Name");
    }
  }
}

حيث يبدو GetLocalString كما يلي:

  public string GetLocalString(idType objectId, string fieldName)
  {
    switch (_currentLanguage)
    {
      case Language.English:
        // db access code to retrieve your string, may need to include the table
        // the object is in (e.g. "Products" "Orders" etc.)
        db.GetValue(objectId, fieldName, "en-us");
        break;
    }
  }

نصائح أخرى

سلسلة البث عبر الإنترنت الخاصة بـ Rob Conery's MVC Storefront لديها فيديو حول هذه المسألة (يصل إلى قاعدة البيانات حوالي الساعة 5:30).يقوم بتخزين قائمة الثقافات، ثم يكون لديه جدول منتج للبيانات غير المترجمة وجدول ProductCultureDetail للنص المترجم.

ملفات الموارد

وهذا هو في الأساس النهج الذي اتبعناه مع Microsoft Commerce Server 2002.نعم، ستساعد المشاهدات المفهرسة في أدائك.

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