Ziel: Mehrsprachige Benutzeroberfläche ohne Formularchaos

Access kennt nur eine Sprache pro Frontend.
Wenn Du Englisch und Polnisch und Deutsch brauchst, musst Du selbst ran.
Geht. Sauber. Und ohne 3× jedes Formular zu bauen.

Variante 1: Sprachtext-Tabelle

Tabelle tblSprachtexte mit:

  • Formularname
  • Steuerelement
  • Sprache (de, en, pl)
  • Text

Beispielinhalt:

FormularnameSteuerelementSpracheText
frmKundenlblNamedeName
frmKundenlblNameenName
frmKundenlblNameplImię i nazwisko

Variante 2: Sprachcode speichern

Z. B. in TempVar, INI, Registry oder Tabelle.

TempVars("Sprache") = "de"

Oder abrufbar per Funktion:

Public Function AktuelleSprache() As String
    AktuelleSprache = Nz(TempVars("Sprache"), "de")
End Function

Variante 3: Übersetzungsroutine

Public Sub UebersetzeFormular(frm As Form)
    Dim rs As DAO.Recordset
    Dim sprache As String: sprache = AktuelleSprache()

    Set rs = CurrentDb.OpenRecordset("SELECT * FROM tblSprachtexte WHERE Formularname='" & frm.Name & "' AND Sprache='" & sprache & "'")

    Do Until rs.EOF
        If Not IsNull(rs!Steuerelement) Then
            If frm.Controls(rs!Steuerelement).ControlType = acLabel Then
                frm.Controls(rs!Steuerelement).Caption = rs!Text
            Else
                frm.Controls(rs!Steuerelement).ControlTipText = rs!Text
            End If
        End If
        rs.MoveNext
    Loop
    rs.Close
End Sub

Variante 4: Formular beim Laden übersetzen

Private Sub Form_Load()
    Call UebersetzeFormular(Me)
End Sub

Fertig. Dynamisch. Funktioniert auch mit Subformularen.

Variante 5: Steuerelemente sinnvoll benennen

Nicht Label15. Sondern lblName, lblAdresse, lblSpeichern.
Sonst wird die Zuordnung zur Sprachtext-Tabelle eine Qual.

Variante 6: Menüs und Ribbon mehrsprachig machen

Das Ribbon muss per XML geladen werden.
Du brauchst mehrere Sprachversionen.

Public Function LadeRibbonXml(sprache As String) As String
    Select Case sprache
        Case "de": LadeRibbonXml = LoadFile("ribbon_de.xml")
        Case "en": LadeRibbonXml = LoadFile("ribbon_en.xml")
        Case "pl": LadeRibbonXml = LoadFile("ribbon_pl.xml")
    End Select
End Function

Dazu musst Du das Ribbon per Callback laden (GetCustomUI).

Variante 7: Inhalte auch übersetzen?

Spaltennamen in Tabellen? Nein.
Daten in Nachschlagetabellen? Ja.

Beispiel: tblStatus mit Spalten ID, Text_de, Text_en, Text_pl
Im Formular bindest Du per SQL:

SELECT ID, Text_" & AktuelleSprache() & " AS Text FROM tblStatus

Oder Du fügst das dynamisch in VBA zusammen.

Variante 8: Formateinstellungen berücksichtigen

Nicht jeder nutzt „01.05.2025“.
Also:

Format(Me.Datum, Application.International(2)) ' z. B. dtmShortDate

Währungen:

FormatCurrency(Me.Betrag)

Sprache erkennen (optional):

MsgBox Application.LanguageSettings.LanguageID(msoLanguageIDUI)

Variante 9: Sprache umschaltbar machen

Ein Dropdown mit Sprachen – dann:

TempVars("Sprache") = Me.cboSprache
DoCmd.Close acForm, Me.Name
DoCmd.OpenForm Me.Name

Du kannst auch gleich Application.Echo False nutzen, um’s eleganter zu gestalten.

Best Practices

  • immer mit Default-Sprache arbeiten (de)
  • bei unbekannter Sprache auf Standard zurückfallen
  • Sprach-ID konsistent halten (de, en, pl)
  • keine Inhalte hart im Formular hinterlegen
  • keine Duplikate im Tabellenentwurf für jede Sprache

Fazit für Entwickler

Access kann mehrsprachig – wenn Du selbst Hand anlegst.
Mit sauberem Sprachmodul und zentraler Übersetzung bleibt alles wartbar und kompakt.

Categories:

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert