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:
Formularname | Steuerelement | Sprache | Text |
---|---|---|---|
frmKunden | lblName | de | Name |
frmKunden | lblName | en | Name |
frmKunden | lblName | pl | Imię 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.
No responses yet