VB 5/6-Tipp 0277: Länderspezifische Einstellungen auslesen
von ActiveVB
Beschreibung
Das Auslesen der länderspezifischen Einstellungen geht, wie hier gezeigt, recht leicht mit der API-Funktion GetLocaleInfo. Es sind jede Menge Informationen zu erhalten, wie z.B. Land, Landessprache, Währungsysmbol, Datumsformat,Kalenderage und Monate in Schrift, Vorzeichen bei postiven und negativen Zahlen und Währungen, Dezimaltrennzeichen, Zeittrennzeichen etc. Das Ändern dieser Einstellungen ist nicht grundsätzlich bei allen Einträgen möglich, es kann nur eine begrenze Auswahl manipuliert werden. Zudem gestaltet es sich meist sehr individuell.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Project1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Schaltfläche "Command1" ' Steuerelement: Listen-Steuerelement "List1" Option Explicit Private Declare Function GetSystemDefaultLCID Lib _ "kernel32" () As Long 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 Const LOCALE_ILANGUAGE = &H1 Const LOCALE_SLANGUAGE = &H2 Const LOCALE_SENGLANGUAGE = &H1001 Const LOCALE_SABBREVLANGNAME = &H3 Const LOCALE_SNATIVELANGNAME = &H4 Const LOCALE_ICOUNTRY = &H5 Const LOCALE_SCOUNTRY = &H6 Const LOCALE_SENGCOUNTRY = &H1002 Const LOCALE_SABBREVCTRYNAME = &H7 Const LOCALE_SNATIVECTRYNAME = &H8 Const LOCALE_IDEFAULTLANGUAGE = &H9 Const LOCALE_IDEFAULTCOUNTRY = &HA Const LOCALE_IDEFAULTCODEPAGE = &HB Const LOCALE_SLIST = &HC Const LOCALE_IMEASURE = &HD Const LOCALE_SDECIMAL = &HE Const LOCALE_STHOUSAND = &HF Const LOCALE_SGROUPING = &H10 Const LOCALE_IDIGITS = &H11 Const LOCALE_ILZERO = &H12 Const LOCALE_SNATIVEDIGITS = &H13 Const LOCALE_SCURRENCY = &H14 Const LOCALE_SINTLSYMBOL = &H15 Const LOCALE_SMONDECIMALSEP = &H16 Const LOCALE_SMONTHOUSANDSEP = &H17 Const LOCALE_SMONGROUPING = &H18 Const LOCALE_ICURRDIGITS = &H19 Const LOCALE_IINTLCURRDIGITS = &H1A Const LOCALE_ICURRENCY = &H1B Const LOCALE_INEGCURR = &H1C Const LOCALE_SDATE = &H1D Const LOCALE_STIME = &H1E Const LOCALE_SSHORTDATE = &H1F Const LOCALE_SLONGDATE = &H20 Const LOCALE_STIMEFORMAT = &H1003 Const LOCALE_IDATE = &H21 Const LOCALE_ILDATE = &H22 Const LOCALE_ITIME = &H23 Const LOCALE_ICENTURY = &H24 Const LOCALE_ITLZERO = &H25 Const LOCALE_IDAYLZERO = &H26 Const LOCALE_IMONLZERO = &H27 Const LOCALE_S1159 = &H28 Const LOCALE_S2359 = &H29 Const LOCALE_SDAYNAME1 = &H2A Const LOCALE_SDAYNAME2 = &H2B Const LOCALE_SDAYNAME3 = &H2C Const LOCALE_SDAYNAME4 = &H2D Const LOCALE_SDAYNAME5 = &H2E Const LOCALE_SDAYNAME6 = &H2F Const LOCALE_SDAYNAME7 = &H30 Const LOCALE_SABBREVDAYNAME1 = &H31 Const LOCALE_SABBREVDAYNAME2 = &H32 Const LOCALE_SABBREVDAYNAME3 = &H33 Const LOCALE_SABBREVDAYNAME4 = &H34 Const LOCALE_SABBREVDAYNAME5 = &H35 Const LOCALE_SABBREVDAYNAME6 = &H36 Const LOCALE_SABBREVDAYNAME7 = &H37 Const LOCALE_SMONTHNAME1 = &H38 Const LOCALE_SMONTHNAME2 = &H39 Const LOCALE_SMONTHNAME3 = &H3A Const LOCALE_SMONTHNAME4 = &H3B Const LOCALE_SMONTHNAME5 = &H3C Const LOCALE_SMONTHNAME6 = &H3D Const LOCALE_SMONTHNAME7 = &H3E Const LOCALE_SMONTHNAME8 = &H3F Const LOCALE_SMONTHNAME9 = &H40 Const LOCALE_SMONTHNAME10 = &H41 Const LOCALE_SMONTHNAME11 = &H42 Const LOCALE_SMONTHNAME12 = &H43 Const LOCALE_SABBREVMONTHNAME1 = &H44 Const LOCALE_SABBREVMONTHNAME2 = &H45 Const LOCALE_SABBREVMONTHNAME3 = &H46 Const LOCALE_SABBREVMONTHNAME4 = &H47 Const LOCALE_SABBREVMONTHNAME5 = &H48 Const LOCALE_SABBREVMONTHNAME6 = &H49 Const LOCALE_SABBREVMONTHNAME7 = &H4A Const LOCALE_SABBREVMONTHNAME8 = &H4B Const LOCALE_SABBREVMONTHNAME9 = &H4C Const LOCALE_SABBREVMONTHNAME10 = &H4D Const LOCALE_SABBREVMONTHNAME11 = &H4E Const LOCALE_SABBREVMONTHNAME12 = &H4F Const LOCALE_SABBREVMONTHNAME13 = &H100F Const LOCALE_SPOSITIVESIGN = &H50 Const LOCALE_SNEGATIVESIGN = &H51 Const LOCALE_IPOSSIGNPOSN = &H52 Const LOCALE_INEGSIGNPOSN = &H53 Const LOCALE_IPOSSYMPRECEDES = &H54 Const LOCALE_IPOSSEPBYSPACE = &H55 Const LOCALE_INEGSYMPRECEDES = &H56 Const LOCALE_INEGSEPBYSPACE = &H57 Const LOCALE_USER_DEFAULT = &H400 Const LOCALE_SYSTEM_DEFAULT As Long = &H400 Private Sub Form_Load() Call Command1_Click End Sub Private Sub Command1_Click() List1.Clear GLI LOCALE_SLIST, "Listentrennzeichen" GLI LOCALE_IMEASURE, "0=metrisch, 1=US" GLI LOCALE_SDECIMAL, "Dezimaltrennzeichen" GLI LOCALE_STHOUSAND, "Tausendertrennzeichen" GLI LOCALE_SGROUPING, "Gruppierung links vom Komma" GLI LOCALE_IDIGITS, "Zahlen hinter dem Komma" GLI LOCALE_ILZERO, "führende Nullen" GLI LOCALE_SCURRENCY, "Währungsymbol" GLI LOCALE_SINTLSYMBOL, "Währung nach ISO 4217" GLI LOCALE_SMONDECIMALSEP, "Währungstrennzeichen" GLI LOCALE_SMONTHOUSANDSEP, "Währungstausendertrennzeichen" GLI LOCALE_SMONGROUPING, "Währungsgruppierung" GLI LOCALE_ICURRDIGITS, "Zahlen hinter dem Komma (Pf)" GLI LOCALE_ICURRENCY, "Anzeige des Währungssymbols" GLI LOCALE_INEGCURR, "Negatives Währungsvorzeichen" GLI LOCALE_SDATE, "Datumstrennzeichen" GLI LOCALE_STIME, "Zeittrennzeichen" GLI LOCALE_SSHORTDATE, "Kurzes Datumsformat" GLI LOCALE_SLONGDATE, "Langes Datumsformat" GLI LOCALE_STIMEFORMAT, "Zeitformat" GLI LOCALE_ITIME, "12/24 Stunden" GLI LOCALE_S1159, "AM-Zeichen" GLI LOCALE_S2359, "PM-Zeichen" GLI LOCALE_SPOSITIVESIGN, "Positives Vorz." GLI LOCALE_SNEGATIVESIGN, "Negatives Vorz." GLI LOCALE_ILANGUAGE, "Sprach ID" GLI LOCALE_SLANGUAGE, "Lokalisierter Sprachname" GLI LOCALE_SENGLANGUAGE, "Engl. Äquivalent" GLI LOCALE_SABBREVLANGNAME, "Abgekürzt" GLI LOCALE_SNATIVELANGNAME, "Sprache in Landessprache" GLI LOCALE_ICOUNTRY, "Ländercode" GLI LOCALE_SCOUNTRY, "Ländername" GLI LOCALE_SENGCOUNTRY, "Ländername in Engl." GLI LOCALE_SABBREVCTRYNAME, "Abgekürzt" GLI LOCALE_SNATIVECTRYNAME, "Land in Landessprache" GLI LOCALE_IDEFAULTLANGUAGE, "Standard Sprach-ID" GLI LOCALE_IDEFAULTCOUNTRY, "Standard Landes-ID" GLI LOCALE_IDEFAULTCODEPAGE, "Standard Codeseite" GLI LOCALE_SNATIVEDIGITS, "gebräuchliche Zahlen" GLI LOCALE_IINTLCURRDIGITS, "Zahlen hinter Komma nach ISO" GLI LOCALE_IDATE, "Datums Gruppierung" GLI LOCALE_ILDATE, "Reihenfolge langes Datumsformat" GLI LOCALE_ICENTURY, "Jahr in 2/4 Ziffern" GLI LOCALE_ITLZERO, "führende Null für Zeiten" GLI LOCALE_IDAYLZERO, "führende Null für Tage" GLI LOCALE_IMONLZERO, "führende Null für Monate" GLI LOCALE_SDAYNAME1, "Langer Name für Mo" GLI LOCALE_SDAYNAME2, "Langer Name für Di" GLI LOCALE_SDAYNAME3, "Langer Name für Mi" GLI LOCALE_SDAYNAME4, "Langer Name für Do" GLI LOCALE_SDAYNAME5, "Langer Name für Fr" GLI LOCALE_SDAYNAME6, "Langer Name für Sa" GLI LOCALE_SDAYNAME7, "Langer Name für So" GLI LOCALE_SABBREVDAYNAME1, "Abgk. Name für Mo" GLI LOCALE_SABBREVDAYNAME2, "Abgk. Name für Di" GLI LOCALE_SABBREVDAYNAME3, "Abgk. Name für Mi" GLI LOCALE_SABBREVDAYNAME4, "Abgk. Name für Do" GLI LOCALE_SABBREVDAYNAME5, "Abgk. Name für Fr" GLI LOCALE_SABBREVDAYNAME6, "Abgk. Name für Sa" GLI LOCALE_SABBREVDAYNAME7, "Abgk. Name für So" GLI LOCALE_SMONTHNAME1, "Langer Name für Jan" GLI LOCALE_SMONTHNAME2, "Langer Name für Feb" GLI LOCALE_SMONTHNAME3, "Langer Name für Mae" GLI LOCALE_SMONTHNAME4, "Langer Name für Mai" GLI LOCALE_SMONTHNAME5, "Langer Name für Apr" GLI LOCALE_SMONTHNAME6, "Langer Name für Jun" GLI LOCALE_SMONTHNAME7, "Langer Name für Jul" GLI LOCALE_SMONTHNAME8, "Langer Name für Aug" GLI LOCALE_SMONTHNAME9, "Langer Name für Sep" GLI LOCALE_SMONTHNAME10, "Langer Name für Okt" GLI LOCALE_SMONTHNAME11, "Langer Name für Nov" GLI LOCALE_SMONTHNAME12, "Langer Name für Dez" GLI LOCALE_SABBREVMONTHNAME1, "Abgk. Name für Jan" GLI LOCALE_SABBREVMONTHNAME2, "Abgk. Name für Feb" GLI LOCALE_SABBREVMONTHNAME3, "Abgk. Name für Mae" GLI LOCALE_SABBREVMONTHNAME4, "Abgk. Name für Apr" GLI LOCALE_SABBREVMONTHNAME5, "Abgk. Name für Mai" GLI LOCALE_SABBREVMONTHNAME6, "Abgk. Name für Jun" GLI LOCALE_SABBREVMONTHNAME7, "Abgk. Name für Jul" GLI LOCALE_SABBREVMONTHNAME8, "Abgk. Name für Aug" GLI LOCALE_SABBREVMONTHNAME9, "Abgk. Name für Sep" GLI LOCALE_SABBREVMONTHNAME10, "Abgk. Name für Okt" GLI LOCALE_SABBREVMONTHNAME11, "Abgk. Name für Nov" GLI LOCALE_SABBREVMONTHNAME12, "Abgk. Name für Dez" GLI LOCALE_IPOSSIGNPOSN, "Format. für pos. Währung" GLI LOCALE_INEGSIGNPOSN, "Format. für neg. Währung" GLI LOCALE_IPOSSYMPRECEDES, "Präfix für pos. Währungsvorzeichen" GLI LOCALE_IPOSSEPBYSPACE, "Trennz. bei pos. Währungsbetrag" GLI LOCALE_INEGSYMPRECEDES, "Präfix für neg. Währungsvorzeichen" GLI LOCALE_INEGSEPBYSPACE, "Trennz. bei neg. Währungsbetrag" End Sub Private Sub GLI(ID&, Text$) List1.AddItem Text & ": " & GetEntry(ID) List1.ItemData(List1.NewIndex) = ID End Sub Private Function GetEntry(ID&) As String Dim LCID&, Result&, Buffer$, Length& LCID = GetSystemDefaultLCID() Length = GetLocaleInfo(LCID, ID, Buffer, 0) - 1 Buffer = Space(Length + 1) Result = GetLocaleInfo(LCID, ID, Buffer, Length) GetEntry = Left$(Buffer, Length) End Function '---------- Ende Formular "Form1" alias Form1.frm ---------- '-------------- Ende Projektdatei Project1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 20 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Cornflake am 01.02.2007 um 15:03
Wo steht der Tipp, mit dem ich das Gebietsschema wechseln kann ?
Möchte wenn mein Programm startet und feststellt, das win nicht auf Deutschland(Deutschland) steht es auf Deutschland umstellt und nach der Verarbeitung wieder zurück. Mein Tool läuft nur wenige Minuten auf dem jeweiligen Rechner und wird dann vom User beendet.
Danke Cornflake
Kommentar von frankk am 24.02.2006 um 14:13
Kein Wert bei Bsp.: Ländereinstg. Standard D, aber Dezimaltrennzeichen Punkt
Code-Änderung
LCID = GetSystemDefaultLCID()
Length = GetLocaleInfo(LCID, ID, Buffer, 0)
Buffer = Space(Length)
Result = GetLocaleInfo(LCID, ID, Buffer, Length)
GetEntry = Left$(Buffer, Length-1)
Sollte sein -> len(Buffer)=Length!!
Gruß Frank
Kommentar von uwe am 13.01.2005 um 11:02
hallo,
habe bei der suche meines problems diese seite gefunden und möchte hier mal kurz mein problem schildern. vieleicht hat jemand eine lösung.
ich verwende vb6 im zusammenhang mit access200. unter win98
drucke ich mit folgenden code ein bericht aus.
Public Sub redr()
Dim MyAccess As Object
Set MyAccess = GetObject("dbup.mdb")
MyAccess.DoCmd.OpenReport "bericht1"
End Sub
unter winxp bekomme ich fehlermeldung "laufzeitfehler".
nehme an access wird nicht gefunden.
kennt jemand das problem und hat eine lösung ?
danke
uwe
Kommentar von Tobias Beißinger am 12.11.2004 um 09:22
Da dieser Tipp leider nur für die System-Einstellungen für nonunicode-Programme funktioniert, hier der Registry-Key, wo man die wirklich am System (Regional Settings) eingestellten Werte herbekommt:
HKEY_CURRENT_USER\Control Panel\International
(z.b. key: sdecimal, ICountry, ...)
Der VB-Zugriff auf die Registry ist in den Tipps&Tricks erklärt.
Kommentar von Tobias Beißinger am 12.11.2004 um 09:02
Leider bezieht diese Funktion die SystemDefaultLCID aus dem Setting "Language for non unicode programs" (vb6, winxp). Diese kann jedoch von den "Regional Options" abweichen, aus denen z.B. Officeprogramme die Werte für Tausender- und Dezimaltrennzeichen beziehen. Da ich aus VB Excel-Zellen formatieren muss (und da ich keinen Alias in Excel für die Trennzeichen kenne), komme ich mit diesem Tipp nicht weiter.
Kommentar von Manuel am 12.10.2004 um 11:10
Gibt es auch ein Programm womit man die Benutzerdefinierten
Einstellung von z.B. Word XP oder Exel XP auslesen kann?
Kommentar von Tobias Beißinger am 03.08.2004 um 10:31
Schade, dass das Auslesen von Parametern nur abhängig von einer Locale-Id zu funktionieren scheint. Allerdings halte ich es auch für einen Bug in XP, dass man zwar als Land z.B. Germany einstellen, dann aber jeden einzelnen Wert (Dezimal, Datum, Währung) beliebig anpassen kann. Konsequenterweise müsste die Ländereinstellung dann "Benutzerdifferenziert" lauten. Mir hilft es nichts, wenn ich weiss, dass das Dezimaltrennzeichen in Deutschland ein Komma ist, der Anwender es aber trotz Gebietsschema Deutschland in ein x umegesetzt hat.
Kommentar von Jan am 20.07.2004 um 13:49
Funktioniert auch mit VBA (Office XP / Win XP)
Kommentar von Danielo am 23.02.2004 um 08:31
Bug Report:
Unter Win 98 scheint's einen Bug in der GetLocalInfo Funktion zu geben: laut MSDN gibt die Funktion bei Aufruf mit BufferLänge=0 die benötigte Länge *inklusive* abschliessendem Nullbyte zurück. das funktioniert bei zb Win2000 auch ganz gut, aber Win98 gibt mir immer für Length 1 zurück. Der darauf folgende zweite Aufruf von GetLocalInfo hat daraufhin nix in den Buffer geschrieben (aber Result war trotzdem 0)
so gings dann:
statt:
Result = GetLocaleInfo(LCID, ID, Buffer, Length)
einfach:
Result = GetLocaleInfo(LCID, ID, Buffer, Len(Buffer))
lg
Kommentar von Peter Bartels am 05.12.2003 um 14:58
Kleiner Zahlendreher-Fehler:
LOCALE_SMONTHNAME4 mit LOCALE_SMONTHNAME5
Kommentar von Catherine am 30.10.2003 um 02:48
Thank You
Kommentar von Dietrich Hermann am 08.08.2003 um 14:34
Hallo,
habs mit VB6 unter Win 98 probiert.
Leider wurde, obwohl es in der Systemsteuerung definiert ist, das Eurosymbol und die Währung nicht bzw. nicht richtig erkannt.
Ciao
Dietrich
Kommentar von Mousse am 24.10.2002 um 14:06
wenn man die zeile
"LCID = GetSystemDefaultLCID()"
in
"LCID = LOCALE_USER_DEFAULT"
aendert, funktioniert es zumindest unter win2k besser ;)
Kommentar von Klaus am 16.01.2002 um 19:49
Wie kann man solche Einträge mit VB Ändern?
Wenn z.B. im kurzen Datumsformat im System TT.MM.JJ anstatt TT.MM.JJJJ steht?
Dies ist vor allem bei W98 und früher der Fall!
Kommentar von Heinz Goentgen am 09.01.2002 um 10:42
Ich bekomme in keinem Fall das Währungssymbol. Gibt es eine andere Lösung?
Kommentar von Goetz Reinecke am 20.07.2001 um 12:14
Schwachsinn, richtig ist natürlich:
Private Declare Function GetUserDefaultLCID _
Lib "kernel32" () As Long
Kommentar von Goetz Reinecke am 20.07.2001 um 11:16
Kleine Anmerkung: Der Tip bezieht sich auf die Default-Einstellungen des Systems, wers User spezifisch haben möchte muß die GetSystemDefaultLangID gegen folgendes tauschen:
Public Declare Function GetUserDefaultLangID Lib "kernel32" Alias "GetUserDefaultLangID" () As Integer
Grüße
Götz
Kommentar von Ulrich Mutmann am 07.06.2001 um 12:14
Das Währungssymbol $ und € wird nicht angezeigt
Kommentar von Wolfgang Kotterba am 16.03.2001 um 08:14
Funktioniert unter WinNT4 SP5 wunderbar, aber ....
wie kann ich das aktuell eingestelle Dezimal- bzw Tausendertrennzeichen feststellen?
Beispiel: als Standardsystemgebietsschema wurde Deutsch(Deutschland) festgelegt - der Anwender stellt auf Englisch(GB) um - ausgelesen werden aber die Einstellungen für Deutsch(Deutschland)
mfg
Wolfgang Kotterba
Kommentar von Uwe Rieger am 01.03.2001 um 19:21
Was haben wir nicht alles versucht um die richtigen Einstellungen für die Konvertierung von Zahlen zu finden.
Hiermit scheints sogar auf Multi-Language-Systemen zu laufen.