Mehrsprachigkeit die 3.

By , 16. September 2008

Im letzten Teil der Serie geht es nun darum wie man in der Praxis die Mehrsprachigkeit realisiert. In der Regel ist es so, dass man zuerst die Formulare und Berichte ganz normal in Deutscher Sprache erstellt.
Um nun die Sprachcodes zu handhaben kann man mit einem Blatt Papier anfangen und Code mit Sprache als Liste aufschreiben. Oder man macht das z.B. in Excel. Wichtig bei dieser Sache ist, dass der Sprachcode fortlaufend ist und dass keine doppelten Codes vorhanden sind.
Hat man alle Deutschen Texte und Sprachcodes erfasst, ändert man nun im Formular/Bericht die Beschriftungen bzw. ControlTipText ab.
OK, das ist mir persönlich zu mühselig, und ich habe daher kurzerhand eine Funktion erstellt, die das automatisch für mich macht.

Erstellt ein neues Modul und fügt folgenden Code ein:

Option Compare Database
Option Explicit
Dim lastID As Long

Public Sub fillLangTable(SFormular As String)
    Dim checkTable As String
    Dim ctl As Control, frm As Form
    Set db = CurrentDb
    Set rs = db.OpenRecordset("Select Tabellennamen From Sprachen Where Auswahl = true", dbOpenDynaset)
    If rs.RecordCount > 0 Then
        checkTable = rs!Tabellennamen
        Set rs = db.OpenRecordset("Select max(ID) AS lastID From " & checkTable, dbOpenDynaset)
        If rs.RecordCount = 0 Then
            lastID = 1
        Else
            lastID = rs!lastID + 1
        End If
    Else
        checkTable = "Deutsch"
        lastID = 1
    End If

    DoCmd.OpenForm SFormular, acDesign
    Set frm = Forms(SFormular)
    For Each ctl In frm.Controls
        If ctl.Tag = "no" Then GoTo nextLoop
        Select Case ctl.ControlType
        Case 104    'Buttons
            If ctl.Picture <> "(keines)" Then
                db.Execute "Insert into " & checkTable & " (ID, Wert) Values (" & lastID & ",'" & ctl.ControlTipText & "')"
                ctl.ControlTipText = "[" & lastID & "]"
                lastID = lastID + 1
            Else
                db.Execute "Insert into " & checkTable & " (ID, Wert) Values (" & lastID & ",'" & ctl.Caption & "')"
                ctl.Caption = "[" & lastID & "]"
                lastID = lastID + 1
            End If
        Case 100    'Labels
            db.Execute "Insert into " & checkTable & " (ID, Wert) Values (" & lastID & ",'" & ctl.Caption & "')"
            ctl.Caption = "[" & lastID & "]"
            lastID = lastID + 1
        End Select
nextLoop:
    Next
    DoCmd.Close acForm, frm.Name, acSaveYes
End Sub

Der Aufruf der Funktion könnt ihr z.B. aus einem „Dummy-Formular“ machen, wo ihr nur das Ereignis Beim Laden verwendet. Darin schreibt ihr folgenden Code:

Private Sub Form_Load()
    Call fillLangTable("Name des Formulars")
End Sub

Aber Vorsicht!
Macht unbedingt eine Sicherungskopie der Datenbank bevor ihr anfangt und führt diesen Code pro Formular auch nur 1x aus!

Die Praxis hat gezeigt, dass es sowohl Befehlsschaltflächen gibt, die kein Bild haben, aber der Text dennoch nicht mehrsprachig sein soll. Z.B. Navigationsbuttons mit < oder << als Beschriftung. Setzt bei diesen als Eigenschaft Marke ein no. die anderen Steuerelemente benötigen doch keine Marke, dies habe ich wieder entfernt. Man kann jetzt noch mehr machen, z.B. die Texte automatisch übersetzen lassen. Dazu findet ihr einen Interessanten Bericht bei Access-im-Unternehmen.de: Texte automatisch übersetzen lassen per VBA

AV 2008

Leave a Reply

You must be logged in to post a comment.

OfficeFolders theme by Themocracy