|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Visual Basic Locale/Regionalization Routines GetLocaleInfo: Regional Locale Country Settings |
|
Posted: | Monday March 20, 2000 |
Updated: | Monday December 26, 2011 |
Applies to: | VB4-32, VB5, VB6 |
Developed with: | VB6, Windows NT4 |
OS restrictions: | None |
Author: | VBnet - Randy Birch |
Related: |
EnumSystemLocales: Enumerate Installed and Supported System Locales GetLocaleInfo: Regional Locale Country Settings GetLocaleInfo: Regional Locale Currency Settings GetLocaleInfo: System Calendar Information |
Prerequisites |
None. |
|
This aspect of the national language support functions is handy when you need to identify some aspect of the users system based on country information. As the illustration shows, there is ample information available for just about any need. Any required information from this exercise could be easily wrapped into a function or class. |
BAS Module Code |
Place the following code into the general declarations area of a bas module: |
|
Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Const LOCALE_ILANGUAGE As Long = &H1 'language id Public Const LOCALE_SLANGUAGE As Long = &H2 'localized name of lang Public Const LOCALE_SENGLANGUAGE As Long = &H1001 'English name of lang Public Const LOCALE_SABBREVLANGNAME As Long = &H3 'abbreviated lang name Public Const LOCALE_SNATIVELANGNAME As Long = &H4 'native name of lang Public Const LOCALE_ICOUNTRY As Long = &H5 'country code Public Const LOCALE_SCOUNTRY As Long = &H6 'localized name of country Public Const LOCALE_SENGCOUNTRY As Long = &H1002 'English name of country Public Const LOCALE_SABBREVCTRYNAME As Long = &H7 'abbreviated country name Public Const LOCALE_SNATIVECTRYNAME As Long = &H8 'native name of country Public Const LOCALE_SINTLSYMBOL As Long = &H15 'intl monetary symbol Public Const LOCALE_IDEFAULTLANGUAGE As Long = &H9 'def language id Public Const LOCALE_IDEFAULTCOUNTRY As Long = &HA 'def country code Public Const LOCALE_IDEFAULTCODEPAGE As Long = &HB 'def oem code page Public Const LOCALE_IDEFAULTANSICODEPAGE As Long = &H1004 'def ansi code page Public Const LOCALE_IDEFAULTMACCODEPAGE As Long = &H1011 'def mac code page Public Const LOCALE_IMEASURE As Long = &HD '0 = metric, 1 = US '#if(WINVER >= &H0400) Public Const LOCALE_SISO639LANGNAME As Long = &H59 'ISO abbreviated language name Public Const LOCALE_SISO3166CTRYNAME As Long = &H5A 'ISO abbreviated country name '#endif /* WINVER >= as long = &H0400 */ '#if(WINVER >= &H0500) Public Const LOCALE_SNATIVECURRNAME As Long = &H1008'native name of currency Public Const LOCALE_IDEFAULTEBCDICCODEPAGE As Long = &H1012'default ebcdic code page Public Const LOCALE_SSORTNAME As Long = &H1013'sort name '#endif /* WINVER >= &H0500 */ Public Declare Function GetThreadLocale Lib "kernel32" () As Long Public Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long Public 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 Public Function GetUserLocaleInfo(ByVal dwLocaleID As Long, ByVal dwLCType As Long) As String Dim sReturn As String Dim r As Long 'call the function passing the Locale type 'variable to retrieve the required size of 'the string buffer needed r = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn)) 'if successful.. If r Then 'pad the buffer with spaces sReturn = Space$(r) 'and call again passing the buffer r = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn)) 'if successful (r > 0) If r Then 'r holds the size of the string 'including the terminating null GetUserLocaleInfo = Left$(sReturn, r - 1) End If End If End Function |
Form Code |
Create a form containing 21 textboxes named Text1 through Text21 (not in a control array). Add labels as desired, and a command button (Command1). Add the following code to the form: |
|
Option Explicit Private Sub Command1_Click() Dim LCID As Long LCID = GetSystemDefaultLCID() 'LOCALE_ICOUNTRY 'Country/region code, based on international phone 'codes, also referred to as IBM country codes. 'The maximum characters allowed is six. Text1.Text = GetUserLocaleInfo(LCID, LOCALE_ICOUNTRY) 'LOCALE_IDEFAULTANSICODEPAGE 'American National Standards Institute (ANSI) code page 'associated with this locale. If the locale does not use 'an ANSI code page, the value is 0. The maximum characters 'allowed is six. Text2.Text = GetUserLocaleInfo(LCID, LOCALE_IDEFAULTANSICODEPAGE) 'LOCALE_IDEFAULTCODEPAGE 'Original equipment manufacturer (OEM) code page associated 'with the country/region. If the locale does not use an OEM 'code page, the value is 1.The maximum characters allowed is six. Text3.Text = GetUserLocaleInfo(LCID, LOCALE_IDEFAULTCODEPAGE) 'LOCALE_IDEFAULTCOUNTRY 'Code for the principal country/region in this locale. 'This is provided so that partially specified locales 'can be completed with default values. The maximum 'characters allowed is six. Text4.Text = GetUserLocaleInfo(LCID, LOCALE_IDEFAULTCOUNTRY) 'LOCALE_IDEFAULTEBCDICCODEPAGE 'Windows 2000: Default EBCDIC code page associated 'with the locale. The maximum characters allowed is six. Text5 = GetUserLocaleInfo(LCID, LOCALE_IDEFAULTEBCDICCODEPAGE) If Len(Text5.Text) = 0 Then Text5.Text = "Sorry, Windows 2000 only" 'LOCALE_IDEFAULTLANGUAGE 'Language identifier for the principal language spoken in this 'locale. This is provided so partially specified locales can be 'completed with default values. The maximum characters allowed is five. Text6.Text = GetUserLocaleInfo(LCID, LOCALE_IDEFAULTLANGUAGE) 'LOCALE_IDEFAULTMACCODEPAGE 'Default Macintosh code page associated with the locale. 'If the locale does not use a Macintosh code page, the 'value is 2. The maximum characters allowed is six. Text7.Text = GetUserLocaleInfo(LCID, LOCALE_IDEFAULTLANGUAGE) 'LOCALE_ILANGUAGE 'Language identifier. The maximum characters allowed is five. Text8.Text = GetUserLocaleInfo(LCID, LOCALE_ILANGUAGE) 'LOCALE_IMEASURE 'System of measurement. This value is 0 if the metric system '(Systéme International d'Unités, or S.I.) is used, and 1 if 'the U.S. system is used. The maximum characters allowed is two. Select Case GetUserLocaleInfo(LCID, LOCALE_IMEASURE) Case "0": Text9.Text = "0 - Metric system is used" Case "1": Text9.Text = "1 - U.S. system is used" End Select 'LOCALE_SCOUNTRY 'Full localized name of the country/region. This is based on 'the localization of the product, thus it changes for 'each localized version. Text10.Text = GetUserLocaleInfo(LCID, LOCALE_SCOUNTRY) 'LOCALE_SENGCOUNTRY 'Full English name of the country/region. This is always 'restricted to characters that can be mapped into the 'ASCII 127-character subset. Text11.Text = GetUserLocaleInfo(LCID, LOCALE_SENGCOUNTRY) 'LOCALE_SENGLANGUAGE 'Full English name of the language from the International 'Organization for Standardization (ISO) Standard 639. 'This is always restricted to characters that can be 'mapped into the ASCII 127-character subset. This is 'not always equivalent to the English version of LOCALE_SLANGUAGE. Text12.Text = GetUserLocaleInfo(LCID, LOCALE_SENGLANGUAGE) 'LOCALE_SINTLSYMBOL 'Three characters of the international monetary symbol specified 'in ISO 4217 followed by the character separating this string 'from the amount. Text13.Text = GetUserLocaleInfo(LCID, LOCALE_SINTLSYMBOL) 'LOCALE_SISO3166CTRYNAME 'Windows NT 4.0 and Windows 2000: Country/region name, based on 'ISO Standard 3166. Text14.Text = GetUserLocaleInfo(LCID, LOCALE_SISO3166CTRYNAME) 'LOCALE_SISO639LANGNAME 'Windows NT 4.0 and Windows 2000: The abbreviated name of the 'language based entirely on the ISO Standard 639 values. Text15.Text = GetUserLocaleInfo(LCID, LOCALE_SISO639LANGNAME) 'LOCALE_SABBREVLANGNAME 'Abbreviated name of the language. In most cases it is created 'by taking the two-letter language abbreviation from the ISO 'Standard 639 and adding a third letter, as appropriate, to 'indicate the sublanguage. Text16.Text = GetUserLocaleInfo(LCID, LOCALE_SABBREVLANGNAME) 'LOCALE_SLANGUAGE 'Full localized name of the language. This name is based on the 'localization of the product, thus the value changes for each 'localized version. Text17.Text = GetUserLocaleInfo(LCID, LOCALE_SLANGUAGE) 'LOCALE_SNATIVELANGNAME 'Native name of the language. Text18.Text = GetUserLocaleInfo(LCID, LOCALE_SNATIVELANGNAME) 'LOCALE_SNATIVECTRYNAME 'Native name of the country/region. Text19.Text = GetUserLocaleInfo(LCID, LOCALE_SNATIVECTRYNAME) 'LOCALE_SNATIVECURRNAME 'Windows 2000: The native name of the currency associated with the locale. Text20.Text = GetUserLocaleInfo(LCID, LOCALE_SNATIVECURRNAME) If Len(Text20.Text) = 0 Then Text20 = "Sorry, Windows 2000 only" 'LOCALE_SSORTNAME 'Windows 2000: The full localized name of the sort for the 'specified locale identifier, dependent on the language of the shell. Text21.Text = GetUserLocaleInfo(LCID, LOCALE_SSORTNAME) If Len(Text21.Text) = 0 Then Text21 = "Sorry, Windows 2000 only" End Sub |
Comments |
Save the program and run. The values displayed should correspond to the Codepage and Regional Settings for your system. |
While the GetSystemDefaultLCID function retrieves the system default
locale identifier, this is often inappropriate or insufficient in a networked
environment or under an operating system where multiple locales have
been installed. For example, it is possible for a network admin rolling
out a standard image to have the user's default locale set to one
differing from the base OS installation, and thus the system default
locale. In this situation Windows' provides an alternate API you can use to obtain the LCID for the current user ... GetUserDefaultLCID. Defined identically to GetSystemDefaultLCID, GetUserDefaultLCID function retrieves the user default–locale identifier and is therefore the most appropriate API to use when it is the user's locale you are interested in, rather than that of the system. |
|
|
|
|||||
|
|||||
|
|||||
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |