Frage

Ich habe eine ASP.Net Website, die eine MySQL-Datenbank für das Backend verwendet. Die Website ist ein englische E-Commerce-System, und wir betrachten die Möglichkeit, es in etwa fünf andere Sprachen (Französisch, Spanisch usw.) zu übersetzen. Wir werden immer menschliche Übersetzer werden, um die Übersetzung auszuführen -. Wir automatisierte Dienste haben gesucht, aber diese sind nicht gut genug,

Der statische Text auf der Website (zum Beispiel Überschriften, Schaltflächen usw.) kann leicht in mehreren Sprachen über .Net eingebaute Lokalisierungsfunktionen (resx Dateien usw.) serviert werden.

Die Sache, die ich nicht so sicher bin, wie man am besten die mehrsprachige Inhalte in der Datenbank zu speichern und abzurufen. Zum Beispiel gibt es eine Produkttabelle, die diese Felder enthält ...

  • productId (int)
  • categoryId (int)
  • title (varchar)
  • Zusammenfassung (varchar)
  • Beschreibung (Text)
  • Funktionen (Text)

Der Titel, Zusammenfassung, Beschreibung und Funktionen Text müßte in allen verschiedenen Sprachen zur Verfügung steht.

Hier sind die zwei Optionen, die ich gekommen bin oben mit ...

Erstellen Sie zusätzliches Feld für jede Sprache Zum Beispiel könnten wir titleEn, titleFr, titleEs usw. für alle Sprachen haben, und wiederholen Sie diesen Schritt für alle Textspalten. Wir würden dann unseren Code anpassen das entsprechende Feld auf der gewählten Sprache abhängig zu verwenden. Das fühlt sich ein bisschen hacky, und auch einige sehr große Tabellen führen würde. Auch, wenn wir weitere Sprachen in der Zukunft hinzufügen wollten, es wäre Zeit noch mehr Spalten hinzufügen raubend.

Verwenden Sie eine Lookup-Tabelle Wir könnten eine neue Tabelle mit folgendem Format erstellen ...

textId | languageId | content
-------------------------------
10     | EN         | Car
10     | FR         | Voiture
10     | ES         | Coche
11     | EN         | Bike
11     | FR         | Vélo

Wir würden dann unsere Produkte Tisch passen die entsprechenden TEXTID für den Titel, Zusammenfassung, Beschreibung zu verweisen und verfügen stattdessen den Text in der Produkttabelle gespeichert zu haben. Das scheint viel eleganter, aber ich kann aus der Datenbank und auf die Seite ohne komplexe SQL-Anweisungen nicht denken Sie an eine einfache Möglichkeit, diese Daten zu bekommen. wäre sehr einfach im Vergleich zur vorherige Option natürlich auch in Zukunft neue Sprachen hinzuzufügen.

Ich wäre sehr dankbar für alle Vorschläge über die beste Art und Weise, dies zu erreichen! Gibt es eine „best practice“ Führung da draußen? Hat jemand zuvor getan?

War es hilfreich?

Lösung

In Ihrem Fall würde ich mit zwei Tabellen empfehlen:

Product
-------------------------------
ProductID  |  Price   |  Stock 
-------------------------------
10         |   10     |   15


ProductLoc
-----------------------------------------------
ProductID  | Lang   | Name      |  Description
-----------------------------------------------
 10        |  EN    | Bike      |  Excellent Bike 
 10        |  ES    | Bicicleta |  Excelente bici 

Auf diese Weise Sie verwenden können:

SELECT * FROM 
Product LEFT JOIN ProductLoc ON Product.ProductID = ProductLoc.ProductID 
                               AND ProductLoc.Lang = @CurrentLang

(LEFT JOIN nur für den Fall gibt es keine Aufzeichnungen für die aktuelle lang in der ProductLoc Tabelle)

Andere Tipps

Es ist nicht gute Idee, nur neue Spalten bestehende Tabelle hinzuzufügen. Es ist wirklich schwer, eine neue Sprache in der Funktion hinzuzufügen. Die Nachschlagtabelle ist viel besser, aber ich glaube, Sie Problem mit Leistung, da Anzahl der übersetzten Aufzeichnungen haben.

Ich denke beste Lösung ist es, einen gemeinsamen Tisch haben:

products: id, categoryid, 

und gleiche Tabellen für jede Sprache

products_en, products_de: product_id (fk), title, price, description, ...

Sie werden nur wählen Sie aus der gemeinsam genutzten ein und Join-Tabelle mit Ihrer Sprache. Der Vorteil ist, dass Sie auch den Preis der Kategorie lokalisieren können, ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top