Mehrsprachigkeit die 2.
Im 2. Teil des Artikels befasse ich mich mit Wertelisten in Kombinationsfeldern und Listenfeldern. Außerdem gibt es bei diesem Thema noch ein paar Fallen, die es zu entschärfern gilt.
Wertelisten sind 1 bis n-Spaltig, wobei man nicht zuviel Spalten verwenden sollte. Der Aufbau einer 2-Spaltigen Werteliste mit Spaltenüberschriften ist wie folgt:
‚Überschrift1′;’Überschrift2′;’Wert1_Spalte1′;’Wert1_Spalte2′;’Wert2_Spalte2‘; usw.
Der Ablauf ist wie folgt. Man erstellt ein Kombinationsfeld bzw. Listenfeld und gibt im Dialog an selbst Werte einzutragen (Werteliste). Dann trägt man die codierten Textnummern in das Eingabefeld ein. In den Eigenschaften betrachtet sieht das z.B. wie folgt aus:
Um die Werteliste mit den Sprachtexten zu belegen erweitern wir unseren bekannten Code wie folgt:
Private Sub Form_Load() Dim ctl As Control, var1 As Variant, i As Long SetLang Set db = CurrentDb Set rs = db.OpenRecordset("Select ID, Wert From " & lang & " Order By ID", dbOpenDynaset) 'Form.caption If Left(Me.Caption, 1) = "[" Then Me.Caption = getText(rs, Me.Caption) For Each ctl In Me.Controls If ctl.Tag = "T" Then Select Case ctl.ControlType Case 104 'Buttons If ctl.Picture <> "(keines)" Then If Left(ctl.ControlTipText, 1) = "[" Then ctl.ControlTipText = getText(rs, ctl.ControlTipText) End If Else If Left(ctl.Caption, 1) = "[" Then ctl.Caption = getText(rs, ctl.Caption) End If End If Case 100 'Labels If Left(ctl.Caption, 1) = "[" Then ctl.Caption = getText(rs, ctl.Caption) End If Case 110, 111 'Listenfelder und Kombinationsfelder If ctl.RowSourceType = "Value List" Then var1 = Split(ctl.RowSource, ";") 'Werteliste zurücksetzen ctl.RowSource = "" 'Werteliste neu zusammensetzen For i = 0 To UBound(var1) ctl.RowSource = ctl.RowSource & getText(rs, CStr(var1(i))) & ";" Next i ctl.RowSource = Left(ctl.RowSource, Len(ctl.RowSource) - 1) End If End Select End If Next rs.Close Set rs = Nothing Set db = Nothing End Sub
Neu ist, dass db und rs nun global deklariert sind, und dass eine globale Funktion setLang, die u.a. das setzen der Sprache übernimmt, in unserem Modul vorhanden ist. Folgender Code im Modul:
Option Compare Database Option Explicit Public lang As String Public db As DAO.Database, rs As DAO.Recordset Public Sub SetLang() Set db = CurrentDb If lang = "" Then Set rs = db.OpenRecordset("Select Tabellennamen From Sprachen Where Auswahl = true", dbOpenDynaset) If rs.RecordCount = 0 Then db.Execute "Update Sprachen set Auswahl = True where Tabellennamen = 'Deutsch'" lang = "Deutsch" Else lang = rs!Tabellennamen End If rs.Close Set rs = Nothing End If Set db = Nothing End Sub
Ein wichtiger Aspekt bei der mehrsprachigen Entwicklung ist, dass der Sprachtext in der Länge nicht über die vorgegebene Grenze gehen darf. Abgeschnittene Texte sehen nicht nur unschön aus, sie sind potential für Fehlbedienungen der Mitarbeiter. Also immer versuchen dass der selbe Text in allen Sprachen ungefär die gleiche Größe hat, notfalls eine andere Textphrase verwenden.
AV 2008