2008-08-26 11 views
3

Ich muss Produkte für eine E-Commerce-Lösung in einer Datenbank speichern. Jedes Produkt sollte beschreibende Informationen wie Name, Beschreibung usw. haben.Globalisierung Architektur

Ich brauche ein Produkt, das nach x Anzahl der Sprachen lokalisiert werden soll.

Was ich bisher getan haben, ist jede Spalte zu machen, die lokalisiert werden soll und nvarchar(MAX) und dann speichere ich eine XML-Zeichenfolge wie folgt aus:

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

Und wenn ich es aus der Datenbank geladen werden, in Meine Business-Logik-Objekte, parse ich die XML-Zeichenfolge auf Dictionary<string, string>, wo der Schlüssel der Kultur/Sprache-Code ist.

Also, wenn ich den Namen eines Produkts angezeigt werden soll, kann ich dies:

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

Hat jemand eine bessere Lösung?

Antwort

2

Sie sollten die aktuelle Sprache irgendwo zu speichern (in einem singleton, zum Beispiel) und in der product.Name Eigenschaft, um die Spracheinstellung verwenden, um die richtige Zeichenfolge zu erhalten. Auf diese Weise müssen Sie den sprachspezifischen Code nur einmal für jedes Feld schreiben, anstatt über Sprachen nachzudenken, wo das Feld verwendet wird.

Zum Beispiel wird Ihren Singleton unter der Annahme, in der Localizer-Klasse definiert, die eine ENUM speichert die aktuelle Sprache entsprechen:

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

Wo GetLocalString wie etwas aussieht:

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

Rob Conerys MVC Storefront Webcast-Serie hat a video on this issue (er wird um 5:30 in die Datenbank). Er speichert eine Liste von Kulturen und verfügt dann über eine Produkttabelle für nicht lokalisierte Daten und eine ProductCultureDetail-Tabelle für lokalisierten Text.

+0

Gute Idee, "Kultur" im Tabellennamen zu lassen, um den Inhalt der Tabelle als lokalisierte Daten und nicht als etwas anderes zu unterscheiden. – y0mbo

1

Ressourcendateien

+0

Beste Lösung, schlechteste Antwort :) – Ropstah

0

Dies ist im Grunde des Ansatz, den wir mit Microsoft Commerce Server 2002 genommen haben. Yeah indizierte Ansichten werden Ihre Leistung unterstützen.