Question

J'ai besoin de stocker des produits pour une solution e-commerce dans une base de données.Chaque produit doit avoir des informations descriptives, telles que le nom, description, etc.

J'ai besoin d'un produit à être localisée à un nombre x de langues.

Ce que j'ai fait jusqu'à présent, est de faire toute la colonne qui doit être localisée et nvarchar(MAX) puis-je stocker une chaîne de caractères XML comme ceci:

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

Et quand je le charger à partir de la base de données, dans mon entreprise, la logique des objets, je parse le XML chaîne Dictionary<string, string> où est la clé de la culture/code de langue.

Alors, quand je veux afficher le nom d'un produit, je fais ceci:

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

Quelqu'un aurait-il une meilleure solution?

Était-ce utile?

La solution

Vous devez stocker le langage courant quelque part (dans un singleton, par exemple) et dans le produit.Nom de la propriété, utiliser le réglage de la langue pour obtenir la bonne chaîne.De cette façon, vous n'avez qu'à écrire la langue de code spécifique pour chaque champ, plutôt que de penser aux langues partout le champ est utilisé.

Par exemple, en supposant que votre singleton est défini dans l'Alignement de la classe qui stocke un enum correspondant à la langue en cours:

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

Où GetLocalString ressemble à quelque chose comme:

  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;
    }
  }

Autres conseils

Rob Conery MVC Vitrine de la série de webcasts a une vidéo sur cette question (il arrive à la base de données autour de 5:30).Il stocke une liste de cultures, et ensuite on a une table de Produit pour les non-localisée de données et un ProductCultureDetail table pour le texte localisé.

fichiers de ressources

C'est fondamentalement l'approche que nous avons pris avec Microsoft Commerce Server 2002.Ouais vues indexées aidera votre performance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top