Aktuelle Seite:
/api/apilandsprache.htm
Letzte Änderung: 24.06.2006

Getestet unter Word2000Getestet unter WordXPGetestet unter Win2000Getestet unter WinXP  
Makro/Datei speichern
Print

Innerhalb von Word kann man bekanntlich einem Text eine beliebige Sprache Sprachzuweisen. Möchte man aber diese per VBA auf die Standardeinstellung (zurück-)stellen, sollte man prüfen, welche Systemeinstellungen für den Rechner und den angemeldeten Benutzer (ab Windows 2000/NT) als Standard überhaupt eingestellt sind. Diese Prüfung kann besonders im deutschsprachigen Bereich sinnvoll sein, aber auch wenn länderspezifische Einstellungen greifen.

Mit Hilfe des API GetLocaleInfo lassen sich u.a. die aktuellen System- bzw. Benutzereinstellungen bzgl. der Länder- und Spracheinstellungen auslesen, wie sie auch in der Systemsteuerung unter Ländereinstellungen angezeigt werden. Dabei lässt sich festlegen, ob die Benutzereinstellungen (Standard) oder die Systemeinstellungen, die sich auf das installiert System und nicht auf die benutzerabhängigen Einstellungen beziehen, ausgelesen werden sollen.

Beispiel 1 Beispiel 2

Im Deklarationsteil werden neben dem API noch Konstanten für die Anzeige der Sprache und des Landes definiert. Die beiden weiteren APIs legen fest, wo die Informationen ausgelesen werden sollen: aus den Standard-Systemseinstellungen (LOCALE_SYSTEM_DEFAULT) oder den Standard-Benutzereinstellungen (LOCALE_USER_DEFAULT).

Const LOCALE_SNATIVELANGNAME = &H4   'Native name of the language.
Const LOCALE_SNATIVECTRYNAME = &H8   'Native name of the country/region.
Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" ( _  
  ByVal Locale As Long, _  
  ByVal LCType As Long, _  
  ByVal lpLCData As String, _  
  ByVal cchData As Long) _  
As Long  
'Default system locale.
Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long 
'Default user locale.
Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long 

In der Prozedur sub_LandSprache() werden nur die verschiedenen Informationen mit den entsprechenden Parametern an die Funktion  fkt_GetInfo() weitergereicht.

Private Sub sub_LandSprache()  
Dim ret As String  
    ret = "Land: " & fkt_GetInfo(LOCALE_SNATIVECTRYNAME) & " (" & fkt_GetInfo(&H1) & ")" & vbCrLf  
    ret = ret & "Sprache: " & fkt_GetInfo(LOCALE_SNATIVELANGNAME) & " (" & GetUserDefaultLCID & ")"  
    MsgBox ret, vbInformation, "Benutzereinstellungen"  
End Sub  

In der Funktion fkt_GetInfo() erfolgt dann die eigentliche Ermittlung der jeweiligen Infomation anhand des mitgegebenen Parameters.

Public Function fkt_GetInfo(ByVal lngInfo As Long) As String  
    Dim Buffer As String, ret As String  
    Buffer = String$(256, 0)  
    ret = GetLocaleInfo(GetUserDefaultLCID, lngInfo, Buffer, Len(Buffer))  
    If ret > 0 Then  
        fkt_GetInfo = Left$(Buffer, ret - 1)  
    Else  
        fkt_GetInfo = "keine Information"  
    End If  
End Function 

 www.chf-online.de/api/apilandsprache.htm © 2001-11 Christian Freßdorf (Zaphod-Systems)