Mehrsprachigkeit die 2.

By , 13. September 2008

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

Leave a Reply

You must be logged in to post a comment.

OfficeFolders theme by Themocracy