Die dritte Option sieht großartig aus. Die Hibernate-Zuordnung ist gegeben, aber nicht das Datenbankschema - wenn es das ist, was Ihnen fehlt, dann skizziere ich es hier:
dictionary
----------
ID: int - identity
name: nvarchar(255)
phrase
------
dictionary_id:int (fkey dictionary.ID)
culture_id:int (LCID)
phrase:nvarchar(255) - this is the default size - seems too small
によると dieser Blogeintrag 255 ist die Standard-Stringlänge für String-Werte. Um die kurze Zeichenfolgenlänge für den Phrasentext zu überwinden, können Sie die <element>
Tag an
<element column="phrase" type="String" length="4001"></element>
Um dies in Ihrem Domänenmodell zu verwenden, fügen Sie eine PhraseDictionary
Eigenschaft zu Ihrer Entität, wo Sie übersetzbaren Text wünschen. Z.B. die Eigenschaft title oder decription.
Ich denke, der Artikel beschreibt einen großartigen Ansatz und ist derjenige, den ich wählen würde. wählen würde.
EDIT: Als Antwort auf die Kommentare sollten Sie die Länge auf weniger als 4001 festlegen, wenn Sie wissen, dass die absolute Maximalgröße geringer ist, da dies in der Regel schneller ist. Außerdem holt NHibernate die Auflistung nach und nach, aber möglicherweise werden alle Elemente auf einmal geholt. Sie können ein Profil erstellen, um festzustellen, ob dies Auswirkungen auf die Leistung hat. (Wenn Sie nur eine Handvoll Sprachen haben, werden Sie kaum einen Unterschied feststellen). Wenn Sie viele Sprachen haben (z. B. 50+), kann es sich lohnen, benutzerdefinierte Eigenschaften zu erstellen, um den lokalisierten Text abzurufen. Diese geben Abfragen aus, um genau den benötigten Text abzurufen. Noch wichtiger ist, dass Sie den gesamten Text für eine bestimmte Entität in einer einzigen Abfrage abrufen können, anstatt jede lokalisierte Texteigenschaft in einer separaten Abfrage.
Beachten Sie, dass dieser zusätzliche Aufwand nur erforderlich ist, wenn die Profilerstellung Anlass zur Sorge über die Leistung gibt. Die Chancen stehen gut, dass die Implementierung in diesem Artikel in der vorliegenden Form mehr als ausreichend funktioniert.