[Python-de] Übersetzung von Datenbank-Einträgen

Felix Schwarz felix.schwarz at web.de
Mi Sep 12 17:59:24 UTC 2007


Hallo,

ich entwerfe derzeit ein Datenmodell für eine größere Anwendung. Später
sollen auch andere Sprachen als Deutsch möglich sein, selbst wenn das in dieser
Projektstufe noch nicht geplant ist. Ich will daher sicher gehen, dass die
Grundstruktur eine Lokalisierung ohne größere Krämpfe zulässt. An dieser Stelle
interessiert mich nur die Übersetzbarkeit, andere Aspekte wie unterschiedliche
Datums-, Zahlen- und Adressformate machen mir derzeit weniger Kopfschmerzen.

Mein konkretes Problem dreht sich um Strings in Datenbanken: Und zwar habe ich
viele Vorgänge, die jeweils in einer Tabellenzeile repräsentiert sind. Jeder
Vorgang hat einen Status ("neu", "in Arbeit", "abgeschlossen"). Ein erster,
naiver Ansatz war, dass die Status-Einträge in einer separaten Tabelle
gespeichert werden und jeder Vorgang nur eine Referenz auf den entsprechenden
Status-Eintrag besitzt.

Vorgangs-Tabelle
| ID | Vorgangsbezeichnung | Status-ID |

Status-Tabelle:
| ID | Bezeichnung |

Allerdings ist dieses Schema aus meiner Sicht nicht gut übersetzbar. Eine
Erweiterung dieses Schemas, die ich oft gesehen habe, war, dass die
Status-Tabelle um eine Spalte "Sprache" ergänzt wurde, also in etwa so:

Status-Tabelle:
| ID | Sprache | Bezeichnung |

Entsprechend hat dann jede Sprache eine ID, der Abruf einer Status-Bezeichnung
geschieht dann über ID+Sprach-ID.

Der zweite Ansatz löst das Problem zunächst, jedoch verwende ich ansonsten in
meiner Applikation gettext und würde eigentlich gern den Übersetzungsprozess
vereinheitlichen und mich nicht mit zwei verschiedenen Systemen herumschlagen
müssen.

Zum Zugriff auf die Datenbank verwende ich einen ORM, entsprechend habe ich
für jede Tabelle (in etwa) ein Objekt meiner Programmiersprache und kann
alle Datenrepräsentationen auch entsprechend kapseln. Daher kam mir die Idee,
in der Vorgangstabelle eine Aufzählung zu verwenden. Im Vorgangs-Objekt kann
ich dann in einem switch/case statement der getter-Methoden die korrekten
Bezeichner ausgeben. Weil eine Sprache hart kodiert ist, funktioniert jetzt
auch gettext ganz wunderbar.

Mich würde interessieren, wie dieser doch recht häufige Anwendungsfall
"üblicherweise" gelöst wird? Dazu muss es doch eigentlich "best practices" geben.

An meinem letzten Ansatz stört mich noch etwas, dass jedes Hinzufügen oder
Löschen eines Eintrags einen Eingriff in den Quellcode erfordert. Idealerweise
gäbe es eine einfache Schnittstelle, über die Benutzer neue Einträge hinzufügen
könnten.

Wie löst ihr die o.g. Probleme?

Vielen Dank,
Felix Schwarz

-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : smime.p7s
Dateityp    : application/x-pkcs7-signature
Dateigröße  : 3299 bytes
Beschreibung: S/MIME Cryptographic Signature
URL         : http://python.net/pipermail/python-de/attachments/20070912/383d7be7/attachment.bin