Search
Module:
Directory

   Desktop Functions:

   Smart Device Functions:


Show Recent Changes
Subscribe (RSS)
Misc. Pages
Comments
FAQ
Helpful Tools
Playground
Suggested Reading
Website TODO List
Download Visual Studio Add-In

EnumSystemLocales (kernel32)
 
.
Summary
TODO - a short description

C# Signature:

    public delegate bool EnumLocalesProcExDelegate([MarshalAs(UnmanagedType.LPWStr)]String lpLocaleString, LOCALETYPE dwFlags, int lParam);

    [DllImport(@"kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    public static extern bool EnumSystemLocalesEx(EnumLocalesProcExDelegate pEnumProcEx, LOCALETYPE dwFlags, int lParam, IntPtr lpReserved);

    public enum LOCALETYPE:uint
    {
    LOCALE_ALL          = 0x00000000, // enumerate all named based locales
    LOCALE_WINDOWS          = 0x00000001, // shipped locales and/or replacements for them
    LOCALE_SUPPLEMENTAL     = 0x00000002, // supplemental locales only
    LOCALE_ALTERNATE_SORTS      = 0x00000004, // alternate sort locales
    LOCALE_NEUTRALDATA      = 0x00000010, // Locales that are "neutral" (language only, region data is default)
    LOCALE_SPECIFICDATA     = 0x00000020, // Locales that contain language and region data
    }

VB Signature:

Declare Function EnumSystemLocalesEx Lib "kernel32.dll" (TODO) As TODO

User-Defined Types:

None.

VBA Signature:

    #If VBA7 Then
      Private Declare PtrSafe Function EnumSystemLocalesEx Lib "kernel32.dll" ( _
        ByVal lpLocaleEnumProcEx As Long, _
        ByVal dwFlags As Long, _
        ByVal lParam As Long, _
        ByVal lpReserved As Long) As Long
    #Else
      Private Declare Function EnumSystemLocalesEx Lib "kernel32.dll" ( _
        ByVal lpLocaleEnumProcEx As Long, _
        ByVal dwFlags As Long, _
        ByVal lParam As Long, _
        ByVal lpReserved As Long) As Long
    #End If

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

// provided as-is

    using System;
    using System.Text;
    using System.Globalization;
    using System.Runtime.InteropServices;


    class Test
    {
    static void Main()
        {
        // Try GetLocaleInfoEx
        Console.WriteLine("GetLocaleInfoEx()");
        DoGetLocaleInfo("", LCTYPE.LOCALE_SENGLISHDISPLAYNAME);
        DoGetLocaleInfo(null, LCTYPE.LOCALE_SENGLISHDISPLAYNAME);
        DoGetLocaleInfo("en-US", LCTYPE.LOCALE_SENGLISHDISPLAYNAME);
        DoGetLocaleInfo("tlh-piqad", LCTYPE.LOCALE_SENGLISHDISPLAYNAME);
        DoGetLocaleInfo("fj-FJ", LCTYPE.LOCALE_SENGLISHDISPLAYNAME);
        DoGetLocaleInfo("fj", LCTYPE.LOCALE_SENGLISHDISPLAYNAME);
        DoGetLocaleInfo("haw-US", LCTYPE.LOCALE_SENGLISHDISPLAYNAME);
        DoGetLocaleInfo("hasdfasdf", LCTYPE.LOCALE_SENGLISHDISPLAYNAME);

        // Try lcid->name
        Console.WriteLine("\nLCIDToLocaleName()");
        DoLCIDToLocaleName(0x0409);
        DoLCIDToLocaleName(0x0c0a);
        DoLCIDToLocaleName(0x0c00);
        DoLCIDToLocaleName(0x0400);
        DoLCIDToLocaleName(0x1234);

        // Try enumSystemLocalesEx
        Console.WriteLine("\nEnumSystemLocalesEx()");
        Console.WriteLine("LOCALE_ALL");
        DoEnumSystemLocalesEx(LOCALETYPE.LOCALE_ALL);

    }

    static void DoGetLocaleInfo(string locale, LCTYPE lctype)
    {
        StringBuilder data = new StringBuilder(500);
        int result;

        result = LocaleFunctions.GetLocaleInfoEx(locale, lctype, data, 500);

        if (result != 0)
        Console.WriteLine(data);
        else
        ShowError();
    }

    static void DoLCIDToLocaleName(uint lcid)
    {
        StringBuilder data = new StringBuilder(500);
        int result;

        result = LocaleFunctions.LCIDToLocaleName(lcid, data, 500, 0);

        if (result != 0)
        Console.WriteLine(data);
        else
        ShowError();
    }

    static void DoEnumSystemLocalesEx(LOCALETYPE dwFlags)
    {
        LocaleFunctions.EnumLocalesProcExDelegate enumCallback =
        new LocaleFunctions.EnumLocalesProcExDelegate(Test.EnumLocalesProcEx);

        if (!LocaleFunctions.EnumSystemLocalesEx(enumCallback, dwFlags, 0, (IntPtr)0))
        ShowError();
    }

    public static bool EnumLocalesProcEx(String locale, LOCALETYPE flags, int lParam)
    {
        Console.WriteLine("    {0,-12} {1:F}", locale, flags);

        return true;
    }

    static void ShowError()
    {
        int err = Marshal.GetLastWin32Error();
        string strErr = err.ToString();

        switch (err)
        {
        case 87:
            strErr = "ERROR_INVALID_PARAMETER";
            break;
        }

        Console.WriteLine("ERROR: {0} {1}", err, strErr);
    }

    }

    class LocaleFunctions
    {
    // pInvoke declarations
    [DllImport(@"kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    public static extern int GetLocaleInfoEx(String lpLocaleName, LCTYPE LCType, StringBuilder lpLCData, int cchData);

    [DllImport(@"kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    public static extern int LCIDToLocaleName(uint Locale, StringBuilder lpName, int cchName, int dwFlags);

    public delegate bool EnumLocalesProcExDelegate([MarshalAs(UnmanagedType.LPWStr)]String lpLocaleString, LOCALETYPE dwFlags, int lParam);

    [DllImport(@"kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    public static extern bool EnumSystemLocalesEx(EnumLocalesProcExDelegate pEnumProcEx, LOCALETYPE dwFlags, int lParam, IntPtr lpReserved);
    }

    public enum LOCALETYPE:uint
    {
    LOCALE_ALL          = 0x00000000, // enumerate all named based locales
    LOCALE_WINDOWS          = 0x00000001, // shipped locales and/or replacements for them
    LOCALE_SUPPLEMENTAL     = 0x00000002, // supplemental locales only
    LOCALE_ALTERNATE_SORTS      = 0x00000004, // alternate sort locales
    LOCALE_NEUTRALDATA      = 0x00000010, // Locales that are "neutral" (language only, region data is default)
    LOCALE_SPECIFICDATA     = 0x00000020, // Locales that contain language and region data
    }

    public enum LCTYPE:uint
    {
    LOCALE_NOUSEROVERRIDE     =0x80000000,   // do not use user overrides
    LOCALE_RETURN_NUMBER      =0x20000000,   // return number instead of string

    // Modifier for genitive names
    LOCALE_RETURN_GENITIVE_NAMES  =0x10000000,   //Flag to return the Genitive forms of month names

    //
    //  The following LCTypes are mutually exclusive in that they may NOT
    //  be used in combination with each other.
    //

    //
    // These are the various forms of the name of the locale:
    //
    LOCALE_SLOCALIZEDDISPLAYNAME  =0x00000002,   // localized name of locale, eg "German (Germany)" in UI language
    LOCALE_SENGLISHDISPLAYNAME    =0x00000072,   // Display name (language + country usually) in English, eg "German (Germany)"
    LOCALE_SNATIVEDISPLAYNAME     =0x00000073,   // Display name in native locale language, eg "Deutsch (Deutschland)

    LOCALE_SLOCALIZEDLANGUAGENAME =0x0000006f,   // Language Display Name for a language, eg "German" in UI language
    LOCALE_SENGLISHLANGUAGENAME   =0x00001001,   // English name of language, eg "German"
    LOCALE_SNATIVELANGUAGENAME    =0x00000004,   // native name of language, eg "Deutsch"

    LOCALE_SLOCALIZEDCOUNTRYNAME  =0x00000006,   // localized name of country, eg "Germany" in UI language
    LOCALE_SENGLISHCOUNTRYNAME    =0x00001002,   // English name of country, eg "Germany"
    LOCALE_SNATIVECOUNTRYNAME     =0x00000008,   // native name of country, eg "Deutschland"

    // Additional LCTYPEs
    LOCALE_SABBREVLANGNAME    =0x00000003,   // abbreviated language name

    LOCALE_ICOUNTRY           =0x00000005,   // country code
    LOCALE_SABBREVCTRYNAME    =0x00000007,   // abbreviated country name
    LOCALE_IGEOID         =0x0000005B,   // geographical location id

    LOCALE_IDEFAULTLANGUAGE       =0x00000009,   // default language id
    LOCALE_IDEFAULTCOUNTRY    =0x0000000A,   // default country code
    LOCALE_IDEFAULTCODEPAGE       =0x0000000B,   // default oem code page
    LOCALE_IDEFAULTANSICODEPAGE   =0x00001004,   // default ansi code page
    LOCALE_IDEFAULTMACCODEPAGE    =0x00001011,   // default mac code page

    LOCALE_SLIST          =0x0000000C,   // list item separator
    LOCALE_IMEASURE           =0x0000000D,   // 0 = metric, 1 = US

    LOCALE_SDECIMAL           =0x0000000E,   // decimal separator
    LOCALE_STHOUSAND          =0x0000000F,   // thousand separator
    LOCALE_SGROUPING          =0x00000010,   // digit grouping
    LOCALE_IDIGITS        =0x00000011,   // number of fractional digits
    LOCALE_ILZERO         =0x00000012,   // leading zeros for decimal
    LOCALE_INEGNUMBER         =0x00001010,   // negative number mode
    LOCALE_SNATIVEDIGITS      =0x00000013,   // native digits for 0-9

    LOCALE_SCURRENCY          =0x00000014,   // local monetary symbol
    LOCALE_SINTLSYMBOL        =0x00000015,   // uintl monetary symbol
    LOCALE_SMONDECIMALSEP     =0x00000016,   // monetary decimal separator
    LOCALE_SMONTHOUSANDSEP    =0x00000017,   // monetary thousand separator
    LOCALE_SMONGROUPING       =0x00000018,   // monetary grouping
    LOCALE_ICURRDIGITS        =0x00000019,   // # local monetary digits
    LOCALE_IINTLCURRDIGITS    =0x0000001A,   // # uintl monetary digits
    LOCALE_ICURRENCY          =0x0000001B,   // positive currency mode
    LOCALE_INEGCURR           =0x0000001C,   // negative currency mode

    LOCALE_SDATE          =0x0000001D,   // date separator (derived from LOCALE_SSHORTDATE, use that instead)
    LOCALE_STIME          =0x0000001E,   // time separator (derived from LOCALE_STIMEFORMAT, use that instead)
    LOCALE_SSHORTDATE         =0x0000001F,   // short date format string
    LOCALE_SLONGDATE          =0x00000020,   // long date format string
    LOCALE_STIMEFORMAT        =0x00001003,   // time format string
    LOCALE_IDATE          =0x00000021,   // short date format ordering (derived from LOCALE_SSHORTDATE, use that instead)
    LOCALE_ILDATE         =0x00000022,   // long date format ordering (derived from LOCALE_SLONGDATE, use that instead)
    LOCALE_ITIME          =0x00000023,   // time format specifier (derived from LOCALE_STIMEFORMAT, use that instead)
    LOCALE_ITIMEMARKPOSN      =0x00001005,   // time marker position (derived from LOCALE_STIMEFORMAT, use that instead)
    LOCALE_ICENTURY           =0x00000024,   // century format specifier (short date, LOCALE_SSHORTDATE is preferred)
    LOCALE_ITLZERO        =0x00000025,   // leading zeros in time field (derived from LOCALE_STIMEFORMAT, use that instead)
    LOCALE_IDAYLZERO          =0x00000026,   // leading zeros in day field (short date, LOCALE_SSHORTDATE is preferred)
    LOCALE_IMONLZERO          =0x00000027,   // leading zeros in month field (short date, LOCALE_SSHORTDATE is preferred)
    LOCALE_S1159          =0x00000028,   // AM designator
    LOCALE_S2359          =0x00000029,   // PM designator

    LOCALE_ICALENDARTYPE      =0x00001009,   // type of calendar specifier
    LOCALE_IOPTIONALCALENDAR      =0x0000100B,   // additional calendar types specifier
    LOCALE_IFIRSTDAYOFWEEK    =0x0000100C,   // first day of week specifier
    LOCALE_IFIRSTWEEKOFYEAR       =0x0000100D,   // first week of year specifier

    LOCALE_SDAYNAME1          =0x0000002A,   // long name for Monday
    LOCALE_SDAYNAME2          =0x0000002B,   // long name for Tuesday
    LOCALE_SDAYNAME3          =0x0000002C,   // long name for Wednesday
    LOCALE_SDAYNAME4          =0x0000002D,   // long name for Thursday
    LOCALE_SDAYNAME5          =0x0000002E,   // long name for Friday
    LOCALE_SDAYNAME6          =0x0000002F,   // long name for Saturday
    LOCALE_SDAYNAME7          =0x00000030,   // long name for Sunday
    LOCALE_SABBREVDAYNAME1    =0x00000031,   // abbreviated name for Monday
    LOCALE_SABBREVDAYNAME2    =0x00000032,   // abbreviated name for Tuesday
    LOCALE_SABBREVDAYNAME3    =0x00000033,   // abbreviated name for Wednesday
    LOCALE_SABBREVDAYNAME4    =0x00000034,   // abbreviated name for Thursday
    LOCALE_SABBREVDAYNAME5    =0x00000035,   // abbreviated name for Friday
    LOCALE_SABBREVDAYNAME6    =0x00000036,   // abbreviated name for Saturday
    LOCALE_SABBREVDAYNAME7    =0x00000037,   // abbreviated name for Sunday
    LOCALE_SMONTHNAME1        =0x00000038,   // long name for January
    LOCALE_SMONTHNAME2        =0x00000039,   // long name for February
    LOCALE_SMONTHNAME3        =0x0000003A,   // long name for March
    LOCALE_SMONTHNAME4        =0x0000003B,   // long name for April
    LOCALE_SMONTHNAME5        =0x0000003C,   // long name for May
    LOCALE_SMONTHNAME6        =0x0000003D,   // long name for June
    LOCALE_SMONTHNAME7        =0x0000003E,   // long name for July
    LOCALE_SMONTHNAME8        =0x0000003F,   // long name for August
    LOCALE_SMONTHNAME9        =0x00000040,   // long name for September
    LOCALE_SMONTHNAME10       =0x00000041,   // long name for October
    LOCALE_SMONTHNAME11       =0x00000042,   // long name for November
    LOCALE_SMONTHNAME12       =0x00000043,   // long name for December
    LOCALE_SMONTHNAME13       =0x0000100E,   // long name for 13th month (if exists)
    LOCALE_SABBREVMONTHNAME1      =0x00000044,   // abbreviated name for January
    LOCALE_SABBREVMONTHNAME2      =0x00000045,   // abbreviated name for February
    LOCALE_SABBREVMONTHNAME3      =0x00000046,   // abbreviated name for March
    LOCALE_SABBREVMONTHNAME4      =0x00000047,   // abbreviated name for April
    LOCALE_SABBREVMONTHNAME5      =0x00000048,   // abbreviated name for May
    LOCALE_SABBREVMONTHNAME6      =0x00000049,   // abbreviated name for June
    LOCALE_SABBREVMONTHNAME7      =0x0000004A,   // abbreviated name for July
    LOCALE_SABBREVMONTHNAME8      =0x0000004B,   // abbreviated name for August
    LOCALE_SABBREVMONTHNAME9      =0x0000004C,   // abbreviated name for September
    LOCALE_SABBREVMONTHNAME10     =0x0000004D,   // abbreviated name for October
    LOCALE_SABBREVMONTHNAME11     =0x0000004E,   // abbreviated name for November
    LOCALE_SABBREVMONTHNAME12     =0x0000004F,   // abbreviated name for December
    LOCALE_SABBREVMONTHNAME13     =0x0000100F,   // abbreviated name for 13th month (if exists)

    LOCALE_SPOSITIVESIGN      =0x00000050,   // positive sign
    LOCALE_SNEGATIVESIGN      =0x00000051,   // negative sign
    LOCALE_IPOSSIGNPOSN       =0x00000052,   // positive sign position (derived from INEGCURR)
    LOCALE_INEGSIGNPOSN       =0x00000053,   // negative sign position (derived from INEGCURR)
    LOCALE_IPOSSYMPRECEDES    =0x00000054,   // mon sym precedes pos amt (derived from ICURRENCY)
    LOCALE_IPOSSEPBYSPACE     =0x00000055,   // mon sym sep by space from pos amt (derived from ICURRENCY)
    LOCALE_INEGSYMPRECEDES    =0x00000056,   // mon sym precedes neg amt (derived from INEGCURR)
    LOCALE_INEGSEPBYSPACE     =0x00000057,   // mon sym sep by space from neg amt (derived from INEGCURR)

    LOCALE_FONTSIGNATURE      =0x00000058,   // font signature
    LOCALE_SISO639LANGNAME    =0x00000059,   // ISO abbreviated language name
    LOCALE_SISO3166CTRYNAME       =0x0000005A,   // ISO abbreviated country name

    LOCALE_IDEFAULTEBCDICCODEPAGE =0x00001012,   // default ebcdic code page
    LOCALE_IPAPERSIZE         =0x0000100A,   // 1 = letter, 5 = legal, 8 = a3, 9 = a4
    LOCALE_SENGCURRNAME       =0x00001007,   // english name of currency
    LOCALE_SNATIVECURRNAME    =0x00001008,   // native name of currency
    LOCALE_SYEARMONTH         =0x00001006,   // year month format string
    LOCALE_SSORTNAME          =0x00001013,   // sort name
    LOCALE_IDIGITSUBSTITUTION     =0x00001014,   // 0 = context, 1 = none, 2 = national

    LOCALE_SNAME          =0x0000005c,   // locale name (with sort info) (ie: de-DE_phoneb)
    LOCALE_SDURATION          =0x0000005d,   // time duration format
    LOCALE_SKEYBOARDSTOINSTALL    =0x0000005e,   // (windows only) keyboards to install
    LOCALE_SSHORTESTDAYNAME1      =0x00000060,   // Shortest day name for Monday
    LOCALE_SSHORTESTDAYNAME2      =0x00000061,   // Shortest day name for Tuesday
    LOCALE_SSHORTESTDAYNAME3      =0x00000062,   // Shortest day name for Wednesday
    LOCALE_SSHORTESTDAYNAME4      =0x00000063,   // Shortest day name for Thursday
    LOCALE_SSHORTESTDAYNAME5      =0x00000064,   // Shortest day name for Friday
    LOCALE_SSHORTESTDAYNAME6      =0x00000065,   // Shortest day name for Saturday
    LOCALE_SSHORTESTDAYNAME7      =0x00000066,   // Shortest day name for Sunday
    LOCALE_SISO639LANGNAME2       =0x00000067,   // 3 character ISO abbreviated language name
    LOCALE_SISO3166CTRYNAME2      =0x00000068,   // 3 character ISO country name
    LOCALE_SNAN           =0x00000069,   // Not a Number
    LOCALE_SPOSINFINITY       =0x0000006a,   // + Infinity
    LOCALE_SNEGINFINITY       =0x0000006b,   // - Infinity
    LOCALE_SSCRIPTS           =0x0000006c,   // Typical scripts in the locale
    LOCALE_SPARENT        =0x0000006d,   // Fallback name for resources
    LOCALE_SCONSOLEFALLBACKNAME   =0x0000006e,   // Fallback name for within the console
    }

Documentation

Please edit this page!

Do you have...

  • helpful tips or sample code to share for using this API in managed code?
  • corrections to the existing content?
  • variations of the signature you want to share?
  • additional languages you want to include?

Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).

 
Access PInvoke.net directly from VS:
Terms of Use
Edit This Page
Find References
Show Printable Version
Revisions