4 Stimmen

Wie geht man am besten mit mehreren Sprachen in Datenbankanwendungen um?

Ich habe eine Reihe von Eigenschaftsdateien, die verwendet werden, um Nachrichten in verschiedenen Sprachen anzuzeigen.
Je nach den aktuellen Spracheinstellungen kann eine Meldung also auf Englisch, Französisch oder Deutsch usw. angezeigt werden.
In meiner Datenbank habe ich verschiedene Datensätze, und anstelle des tatsächlichen Werts habe ich den Schlüssel der Eigenschaftsdatei angegeben, so dass ich beim Abrufen eines Datensatzes mit diesem Datum die Meldung in der entsprechenden Sprache anzeigen kann.
In meiner Datenbank könnte z.B. ein Datensatz wie folgt vorhanden sein:

John| Smith| AQ| etc

Wo AQ in der entsprechenden Eigenschaftsdatei könnte wie folgt angezeigt werden Doctor ou Arzt etc.
Mein Problem ist, dass ich gelegentlich nach diesen Attributen sortieren muss, deren Werte in der Datenbank jedoch die Codes sind, so dass eine Sortierung in der Datenbank nicht möglich ist.
Von hier Ich habe den Vorschlag, temporäre Tabellen zu verwenden und zu sortieren, aber das ist für mich für 1 Attribut in Ordnung.
Ich bin auf der Suche nach einer allgemeineren Lösung, um mehrere Eigenschaftsdateien zu handhaben und wenn möglich Prüfungen im Code zu vermeiden:
z.B.. if this query sorts on X create this temp table etc.
Gibt es eine allgemeine Lösung für dieses Problem?

4voto

dan1111 Punkte 6504

Anstatt die Sprachinformationen in Eigenschaftsdateien zu speichern, sollten Sie sie in Tabellen in Ihrer Datenbank ablegen. Dann kann alles ganz einfach erledigt werden.

Records:
first | last  | messageid |
John  | Smith | 1         |

Messages:
messageid | language | message |
1         | English  | Mr.     |
1         | Spanish  | Sr.     |
2         | English  | Doctor  |
etc...

Eine Abfrage, die nach Nachrichten in der Landessprache sortiert ist, würde dann wie folgt aussehen:

select first, last, message from records r
    inner join messages m on m.messageid = r.messageid
    where language = [your current language]
    order by message

1voto

Neville Kuyt Punkte 28114

Gute Frage!

IMHO sollten Sie weiterhin Eigenschaftsdateien für die Lokalisierung dieser Art von Zeichenketten verwenden - so können Sie die eingebauten IL8N-Funktionen von Java nutzen, und das spart Ihnen eine Menge Zeit.

Im Allgemeinen empfehle ich, lokale Zeichenfolgen für Domänenobjekte in der Datenbank zu speichern - wenn Sie beispielsweise eine Produktdatenbank haben und die Produktnamen speichern müssen, ist das eindeutig ein Teil der Domäne; die Personen, die die Produkte verwalten, müssen auch die Produktnamen verwalten, und Sie wollen in der Lage sein, Geschäftslogik und referenzielle Integrität durchzusetzen.

Man könnte argumentieren, dass dies auf das von Ihnen genannte Beispiel zutrifft - Titel sind Teil des Bereichs "Person" und sollten in der Datenbank verwaltet werden.

Für Elemente der Benutzeroberfläche - den Text auf einer Schaltfläche, den Namen eines Menüpunkts - sind Eigenschaftsdateien absolut richtig.

Wenn Sie den "Titel" als Teil der Benutzeroberfläche betrachten oder ihn nicht verschieben wollen, weil Sie einen etablierten Lokalisierungsprozess haben, empfehle ich, die Sortierung in Java statt in SQL vorzunehmen; je nachdem, wie Sie sich mit der Datenbank verbinden, gibt es viele Möglichkeiten dafür.

0voto

SpaceTrucker Punkte 12246

Beim Start der Anwendung könnten Sie Tabellen synchronisieren, die den Schlüssel, das Gebietsschema und die aktuelle Nachricht enthalten. Dies wären normale Tabellen, auf die Sie mit den üblichen SQL-Abfragen zugreifen können.

Ich würde aber empfehlen, die von Ihnen beschriebene Sortierung immer in der Anwendung vorzunehmen, da dies wirklich nach Anwendungslogik aussieht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X