Dienstag, 22. Januar 2008

Feststellen der aktuellen Windows Spracheinstellung / Determine the current Windows language

Mehrsprachigkeit in Applikationen ist schon lange ein Thema.

Wenn die Anwendung mit eigenen Logins arbeitet, kommt meist eine Klassenbibliothek zum Einsatz, die auf Basis des Anwendungslogins, die korrekte Sprache für die jeweiligen Masken einblendet.

Diese User-bezogene Reaktion können wir jedoch ganz einfach auf eine höhere Ebene tragen. Es wäre doch eigentlich ganz praktisch, wenn unsere Anwendung von sich aus merkt, dass der User bereits vom BS aus in einer anderen Sprache unterwegs ist.

Hilfreich ist uns hierbei wieder einmal die Windows API. Der folgende recht kurze Code zeigt, wie wir die entsprechenden Informationen aus Windows herauskitzeln.

* Konstantendeklaration
#DEFINE LOCAL_USER_DEFAULT     BITLSHIFT(0x01, 10) && Benutzer Standard
#DEFINE LOCAL_SYSTEM_DEFAULT   BITLSHIFT(0x02, 10) && System Standard
#DEFINE LOCAL_SENGLANGUAGE     0x00001001          && Englischer Name
#DEFINE LOCAL_SABBREVLANGNAME  0x00000003          && Abgekürzt
#DEFINE LOCAL_SNATIVELANGNAME  0x00000004          && Ausgeschrieben
* API Deklaration
DECLARE Integer GetLocaleInfo IN Win32API ;
    Long Locale, Long LCType, String @ LCData, Integer size
* Lokale Arbeitsvariablen
LOCAL lcBuffer as String, liLength as Integer
lcBuffer = SPACE(256)
liLength = 0

CLEAR

* Benutzersprache (standard), englisch, ausgeschrieben
liLength = GetLocaleInfo(LOCAL_USER_DEFAULT, LOCAL_SENGLANGUAGE,      @lcBuffer, 256)
? [(User) Standardsprache : ] + LEFT( lcBuffer , liLength - 1 )

* Systemsprache, abgekürzt, deutsch
liLength = GetLocaleInfo(LOCAL_SYSTEM_DEFAULT, LOCAL_SABBREVLANGNAME, @lcBuffer, 256)
? [(System) Abgekürzt     : ] + LEFT( lcBuffer , liLength - 1 )

* Systemsprache, ausgeschrieben, deutsch
liLength = GetLocaleInfo(LOCAL_SYSTEM_DEFAULT, LOCAL_SNATIVELANGNAME, @lcBuffer, 256)
? [Systemsprache          : ] + LEFT( lcBuffer , liLength - 1 )

Keine Kommentare:

Kommentar veröffentlichen