Mehrsprachige Datenbank entwickeln

Sie möchten eine Access-Anwendung als deutsche und englische Version entwickeln, dabei aber nicht zwei separate Anwendungen getrennt pflegen. Deshalb soll nur eine einzige Anwendung beide Sprachversionen vereinen.

Die folgende Lösung arbeitet mit zwei Tabellen und einer VBA-Prozedur. Die Beispiel-Datenbank zum Tipp finden Sie zusammen mit den Listings auf der Heft-CD unter CHIP-Code Tipps.

Die erste Tabelle »tblConfig« enthält nur einen Datensatz mit dem Feld »Sprache«. Dort tragen Sie ein, in welcher Sprache die Datenbank arbeiten soll; im Beispiel also »Deutsch« oder »Englisch«. Die zweite Tabelle »tblTexte« speichert alle in der Datenbank verwendeten Texte in verschiedenen Sprachversionen. In Formularen und VBA-Listings greifen Sie auf diese Texte zu. Dies geschieht über einen selbst definierten, eindeutigen Schlüssel im Feld »KEY«. Den Schlüssel des Tipptextes der Kombinationsbox »cboKombinationsbox« (Eigenschaft »SteuerelementTip-Text« auf dem Formular »frmDemo«) können Sie zum Beispiel aus den Namen von Formular, Steuerelement und Eigenschaft zusammensetzen: »FRM_DEMO.CBO_KOMBINATIONSBOX.CONTROLTIPTEXT«. Für jede Sprachversion enthält die Tabelle »tblTexte« jeweils eine Spalte. Die Namen dieser Spalten müssen mit den Einträgen in der Tabelle »tblConfig« identisch sein, in unserem Beispiel also »Deutsch« und »Englisch« lauten.

In Formularen und Quelltexten ermitteln Sie die Textdarstellung in der aktivierten Sprachversion über »getText()«.

Public Function getText strKey As String) As String

Dim rst As ADODB.Recordset
Dim strLanguage As String
Dim strKriterien As String
æ Sprache ermitteln
Set rst = New ADODB. Recordset
strKriterien = “SELECT tblConfig.Sprache FROM tblConfigö
rst.Open strKriterien, CurrentProject.Connection
strLanguage = rst!Sprache
rst.Close
Set rst = Nothing
æ Texte lesen
Set rst = New ADODB. Recordset
strKriterien = “SELECT tblTexte.ö & strLanguage & “ FROM tblTexte WHERE (((tblTexte.KEY)=Æö & strKey & “æ))ö
rst.Open strKriterien, CurrentProject.Connection
getText = rst.Fields(0).Value
rst.Close
Set rst = Nothing
End Function
Diese Prozedur können Sie in einem beliebigen Modul definieren. Sie arbeitet mit einem Recordset und zwei Datenbankzugriffen via SQL. Der erste SQL-Befehl kopiert die in »tblConfig« eingetragene Sprache – zum Beispiel »Deutsch« – in die Variable »strLanguage«. Der zweite SQL-Befehl greift auf Basis dieser Variable auf die entsprechende Spalte und über das Feld »KEY« auf die entsprechende Zeile der Tabelle »tblTexte« zu. Dabei muss der Inhalt von »KEY« dem an »getText()« übergebenen Parameter »strKey« entsprechen. Mit »getText = rst.Fields(0).Value« liest die Prozedur den Inhalt des Recordsets aus.

Wenn die Datenbank-Anwendung einen Text anzeigen oder ausgeben soll, übergibt sie den eindeutigen Schlüssel des Textes an die Prozedur »getText()«. Diese Funktion liefert dann den entsprechenden Text in der aktivierten Sprache zurück. Damit sich Ihre Formulare automatisch anpassen, füllen Sie in der Ereignisprozedur »Beim Öffnen« alle enthaltenen Textelemente mit den zugehörigen Inhalten. Der Befehl, der dem Tipp-Text der Kombinationsbox »cboKombinationsbox« in der Ereignisprozedur »Beim Öffnen« seinen tatsächlichen Text zuweist, sieht folgendermaßen aus:
Me.cboKombinationsbox.ControlTipText = getText(“FRM_DEMO.CBO_KOMBINATIONSBOX.CONTROLTIPTEXTö)
Diese Lösung ist völlig flexibel. Wenn Sie zusätzlich noch eine französische Version bereitstellen möchten, müssen Sie nur die Tabelle »tblTexte« um eine Spalte »Französisch« erweitern, die verschiedenen Datensätze der Tabelle entsprechend aktualisieren und in das Feld »Sprache« der Tabelle »tblConfig« den Text »Französisch« eintragen.

! Achtung: Diese Lösung hat keinen Einfluss auf Standardobjekte von Windows und Access wie Dialoge zum Öffnen und Speichern oder die Schaltflächen »Ja« und »Nein« des Befehls »MsgBox«.