Mapping From WIN32 Locale Item To OS/2 Locale Item
Basically, each WIN95 locale type (LCTYPE) of information is mapped to an OS/2's ULS locale category/class of information. The ULS information in the following table can be retrieved via UniQueryLocaleInfo or UniQueryLocaleItem depending on the type of the information. If there's no corresponding information in ULS locale database but in OS/2 legacy country information, then Open32 retrieves the information from OS/2 kernel by calling DosQueryCtryInfo with the country code and codepage that are prepared in Open32 table. (These country code and codepage value are also used for WIN95's LOCALE_IDEFAULTCOUNTRY and LOCALE_IDEFAULTCODEPAGE emulation.) If there's applicable mapping to ULS nor OS/2 legacy country information, in other words, if the locale type is WIN95 unique, Open32 has a particular table for the locale type for all locales supported by Open32.
The second column in the table shows the values for the default French locale of WIN95, which is shown there for the reader to understand the meaning of the leftmost LCTYPEs.
Legend:
not-mappable
┌──────────────────────────────┬──────────────────────────────┬──────────────────────────────────────────────────┐│WIN32 LCTYPE │Ex.(LCID=0x40C) │OS/2 Mapping │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_ILANGUAGE │040C │not-mappable │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SLANGUAGE │fu-ra-n-su-go(hyo-ju-n) │not-mappable. Returns LOCALE_SENGLANGUAGE because│ │ │ │the cost of returning name in currently selected │ │ │ │language is expensive compared with its benefit. │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SENGLANGUAGE │French │not-mappable │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SABBREVLANGNAME │fra │not-mappable │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SNATIVELANGNAME │franτais │not-mappable │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_IDEFAULTLANGUAGE │040C │same as LOCALE_ILANGUAGE │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_ICOUNTRY │33 │not-mappable │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SCOUNTRY │fu-ra-n-su │not-mappable. Returns LOCALE_SENGCOUNTRY because │ │ │ │the cost of returning name in currently selected │ │ │ │language is expensive compared with its benefit. │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SENGCOUNTRY │France │not-mappable │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SABBREVCTRYNAME │FRA │not-mappable │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SNATIVECTRYNAME │France │not-mappable │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_IDEFAULTCOUNTRY │33 │same as LOCALE_ICOUNTRY │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_IDEFAULTANSICODEPAGE │"1252" │not-mappable │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_IDEFAULTCODEPAGE │850 │not-mappable │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SLIST │; │not-mappable │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_IMEASURE │0 │not-mappable (1=USA, 0=other) │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SDECIMAL │, │LC_NUMERIC/decimal_point │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_STHOUSAND │" │" LC_NUMERIC/thousands_sep │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SGROUPING │3;0 │LC_NUMERIC/grouping │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_IDIGITS │2 │not-mappable. Returns LOCALE_ICURRDIGITS because │ │ │ │it seems they're always the same. The objective │ │ │ │of this LCTYPE is unknown. │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_ILZERO │1 │not-mappable. Returns 1 always. The objective of│ │ │ │this LCTYPE is unknown. │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_INEGNUMBER │1 │not-mappable. Returns the value generated from │ │ │ │LOCALE_INEGCURR because it seems they always have │ │ │ │the same format. │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SNATIVEDIGITS │"0123456789" │not-mappable. Returns "0123456789" always. │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SPOSITIVESIGN │"" │LC_MONETARY/positive_sign │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SNEGATIVESIGN │- │LC_MONETARY/negative_sign │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_IPOSSIGNPOSN │1 │LC_MONETARY/p_sign_posn │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_INEGSIGNPOSN │1 │LC_MONETARY/n_sign_posn │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_ICURRENCY │3 │LC_MONETARY/p_cs_precedes + p_sep_by_space │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SCURRENCY │F │LC_MONETARY/currentcy_symbol │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SINTLSYMBOL │FRF │LC_MONETARY/int_curr_symbol │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_MONDECIMALSEP │, │LC_MONETARY/mon_decimal_point │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_MONTHOUSANDSEP │"" │LC_MONETARY/mon_thousand_sep │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SMONGROUPING │3;0 │LC_MONETARY/mon_grouping │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_ICURRDIGITS │2 │LC_MONETARY/frac_digits │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_IINTLCURRDIGITS │2 │LC_MONETARY/int_frac_digits │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_INEG_CURR │8 │LC_MONETARY/n_cs_precedes + n_sep_by_space + │ │ │ │n_sign_posn │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_IPOSSYMPRECEDES │0 │LC_MONETARY/p_cs_precedes │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_INEGSYMPRECEDES │0 │LC_MONETARY/n_cs_precedes │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_IPOSSEPBYSPACE │1 │LC_MONETARY/p_sep_by_space │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_INEGSEPBYSPACE │1 │LC_MONETARY/n_sep_by_space │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_IDATE │1 │CtryInfo/fsDateFmt │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SDATE │/ │CtryInfo/szDateSeparator │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_ILDATE │1 │not_mappable. Generates from LC_TIME/d_fmt. │ │ │ │Searches "%y", "%m", "%d" in the 'd_fmt' string │ │ │ │and checks those offsets in the 'd_fmt' and then │ │ │ │determines the 'LOCALE_ILDATE'. │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_STIME │ │CtryInfo/szTimeSeparator │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_ITIME │1 │CtryInfo/fsTimeFmt │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_STIMEFORMAT │HH │not-mappable. Generates using CtryInfo/fsTimeFmt │ │ │ │+ szTimeSeparator. │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SSHORTDATE │dd/mm/yy │not-mappable. Generates using CtryInfo/fsDateFmt │ │ │ │+ szDateSeparator. │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SLONGDATE │dddd d MMMM yyyy │not-mappable. Generates using LC_TIME/d_fmt. │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_ICENTURY │0 │not-mappable. │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_ITLZERO │1 │not-mappable │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_IDAYLZERO │1 │not-mappable │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_IMONLZERO │1 │not-mappable │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_S1159 │"" │LC_TIME/am_pm (AM_STR) │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_S2359 │"" │LC_TIME/am_pm (PM_STR) │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_ICALENDARTYPE │1 │not-mappable │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_IOPTIONALCALENDAR │0 │not-mappable │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_IFIRSTDAYOFWEEK │0 │not-mappable │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_IFIRSTWEEKOFYEAR │0 │not-mappable │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SABBREVDAYNAME1-7 │lun., mar./ mer./ jeu./ ven./ │LC_TIME/abday (2nd entry - 7th entry, 1st entry) │ │ │sam./ dim. │ │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SDAYNAME1-7 │lundi/ mardi/ mercredi/ jeudi/│LC_TIME/day (2nd entry - 7th entry, 1st entry) │ │ │vendredi/ samedi/ dimanche │ │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SMONTHNAME1-12 │janvier, février, mars, avril,│LC_TIME/mon (1st entry - 12th entry) │ │ │mai, juin, juillet, août, │ │ │ │septembre, octobre, novembre, │ │ │ │décembre │ │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SMONTHNAME13 │"" │not-mappable. Returns always NULL string. │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SABBREVMONTHNAME1-12 │janv., févr., mars, avr., mai,│LC_TIME/abmon (1st entry - 12th entry) │ │ │juin, juil., août, sept., │ │ │ │oct., nov., déc. │ │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_SABBREVMONTHNAME13 │"" │not-mappable. Returns always NULL string. │ ├──────────────────────────────┼──────────────────────────────┼──────────────────────────────────────────────────┤ │LOCALE_FONTSIGNATURE │0x0064F7F0, 0x0064F7E0 │not-mappable │ └──────────────────────────────┴──────────────────────────────┴──────────────────────────────────────────────────┘
Note: