Domanda

Ho bisogno di archiviare i prodotti per una soluzione di e-commerce in un database.Ogni prodotto dovrebbe avere informazioni descrittive, come nome, descrizione ecc.

Ho bisogno che qualsiasi prodotto venga localizzato in un numero x di lingue.

Ciò che ho fatto finora è creare qualsiasi colonna che dovrebbe essere localizzata e nvarchar(MAX) e poi memorizzo una stringa XML come questa:

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

E quando lo carico dal database, nei miei oggetti di logica aziendale, analizzo la stringa XML in a Dictionary<string, string> dove la chiave è il codice della cultura/lingua.

Quindi, quando voglio visualizzare il nome di un prodotto, faccio questo:

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

Qualcuno ha una soluzione migliore?

È stato utile?

Soluzione

Dovresti memorizzare la lingua corrente da qualche parte (in un file singleton, ad esempio) e nella proprietà product.Name utilizzare l'impostazione della lingua per ottenere la stringa corretta.In questo modo devi scrivere il codice specifico della lingua solo una volta per ciascun campo invece di pensare alle lingue ovunque venga utilizzato il campo.

Ad esempio, supponendo che il tuo singleton sia definito nella classe Localizer che memorizza un'enumerazione corrispondente alla lingua corrente:

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

Dove GetLocalString assomiglia a qualcosa del tipo:

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

Altri suggerimenti

La serie di webcast MVC Storefront di Rob Conery ha un video su questo argomento (arriva al database intorno alle 17:30).Memorizza un elenco di culture e quindi dispone di una tabella Product per i dati non localizzati e di una tabella ProductCultureDetail per il testo localizzato.

file di risorse

Questo è fondamentalmente l'approccio che abbiamo adottato con Microsoft Commerce Server 2002.Sì, le visualizzazioni indicizzate aiuteranno le tue prestazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top