Ignore:
Timestamp:
Jan 29, 2004, 3:21:50 PM (22 years ago)
Author:
bird
Message:

#776: Use LANG variable to get Language Id.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/lang.cpp

    r10339 r10422  
    1 /* $Id: lang.cpp,v 1.43 2003-11-21 11:29:33 sandervl Exp $ */
     1/* $Id: lang.cpp,v 1.44 2004-01-29 14:21:50 bird Exp $ */
    22/*
    33 * Win32 language API functions for OS/2
     
    66 * Copyright 1998 Patrick Haller
    77 * Copyright 1999 Przemyslaw Dobrowolski
     8 * Copyright 2004 InnoTek Systemberatung GmbH
    89 *
    910 *
     
    3031ODINDEBUGCHANNEL(KERNEL32-LANG)
    3132
    32 static ULONG defaultLanguage = 0;
     33static ULONG gulDefaultLanguageId = 0;
    3334
    3435//******************************************************************************
     
    3637void WIN32API SetDefaultLanguage(DWORD deflang)
    3738{
    38   defaultLanguage = deflang;
    39 }
    40 //******************************************************************************
    41 //******************************************************************************
    42 ULONG GetLanguageId()
    43 {
    44   if(defaultLanguage == 0) {
    45         switch(OSLibQueryCountry()) {
    46         case CTRY_USA:
    47                 defaultLanguage = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
    48                 break;
    49         case CTRY_CANADA://TODO: french-canadian
    50                 defaultLanguage = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
    51                 break;
    52         case CTRY_LATIN_AMERICA:
    53                 defaultLanguage = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH);
    54                 break;
    55         case CTRY_RUSSIA:
    56                 defaultLanguage = MAKELANGID(LANG_RUSSIAN, SUBLANG_RUSSIAN);
    57                 break;
    58         case CTRY_GREECE:
    59                 defaultLanguage = MAKELANGID(LANG_GREEK, SUBLANG_DEFAULT);
    60                 break;
    61         case CTRY_NETHERLANDS:
    62                 defaultLanguage = MAKELANGID(LANG_DUTCH, SUBLANG_DUTCH);
    63                 break;
    64         case CTRY_BELGIUM://TODO: french-belgian
    65                 defaultLanguage = MAKELANGID(LANG_DUTCH, SUBLANG_DUTCH_BELGIAN);
    66                 break;
    67         case CTRY_FRANCE:
    68                 defaultLanguage = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH);
    69                 break;
    70         case CTRY_SPAIN:
    71                 defaultLanguage = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH);
    72                 break;
    73         case CTRY_ITALY:
    74                 defaultLanguage = MAKELANGID(LANG_ITALIAN, SUBLANG_ITALIAN);
    75                 break;
    76         case CTRY_SWITZERLAND:
    77                 defaultLanguage = MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_SWISS);
    78                 break;
    79         case CTRY_AUSTRIA:
    80                 defaultLanguage = MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_AUSTRIAN);
    81                 break;
    82         case CTRY_UNITED_KINGDOM:
    83                 defaultLanguage = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_UK);
    84                 break;
    85         case CTRY_IRELAND:
    86                 defaultLanguage = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_EIRE);
    87                 break;
    88         case CTRY_DENMARK:
    89                 defaultLanguage = MAKELANGID(LANG_DANISH, SUBLANG_DEFAULT);
    90                 break;
    91         case CTRY_SWEDEN:
    92                 defaultLanguage = MAKELANGID(LANG_SWEDISH, SUBLANG_DEFAULT);
    93                 break;
    94         case CTRY_NORWAY:
    95                 defaultLanguage = MAKELANGID(LANG_NORWEGIAN, SUBLANG_DEFAULT);
    96                 break;
    97         case CTRY_GERMANY:
    98                 defaultLanguage = MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN);
    99                 break;
    100         case CTRY_MEXICO:
    101                 defaultLanguage = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MEXICAN);
    102                 break;
    103         case CTRY_BRAZIL:
    104                 defaultLanguage = MAKELANGID(LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN);
    105                 break;
    106         case CTRY_AUSTRALIA:
    107                 defaultLanguage = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_AUS);
    108                 break;
    109         case CTRY_NEW_ZEALAND:
    110                 defaultLanguage = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_NZ);
    111                 break;
    112         case CTRY_JAPAN:
    113                 defaultLanguage = MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT);
    114                 break;
    115         case CTRY_KOREA:
    116                 defaultLanguage = MAKELANGID(LANG_KOREAN, SUBLANG_DEFAULT);
    117                 break;
    118         case CTRY_SINGAPORE:
    119                 defaultLanguage = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SINGAPORE);
    120                 break;
    121         case CTRY_HONG_KONG:
    122                 defaultLanguage = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_HONGKONG);
    123                 break;
    124         case CTRY_CHINA:
    125                 defaultLanguage = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL);
    126                 break;
    127         case CTRY_TAIWAN:
    128                 defaultLanguage = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL);
    129                 break;
    130         case CTRY_TURKEY:
    131                 defaultLanguage = MAKELANGID(LANG_TURKISH, SUBLANG_DEFAULT);
    132                 break;
    133         case CTRY_PORTUGAL:
    134                 defaultLanguage = MAKELANGID(LANG_PORTUGUESE, SUBLANG_DEFAULT);
    135                 break;
    136         case CTRY_LUXEMBOURG:
    137                 defaultLanguage = MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_LUXEMBOURG);
    138                 break;
    139         case CTRY_ICELAND:
    140                 defaultLanguage = MAKELANGID(LANG_ICELANDIC, SUBLANG_DEFAULT);
    141                 break;
    142         case CTRY_FINLAND:
    143                 defaultLanguage = MAKELANGID(LANG_FINNISH, SUBLANG_DEFAULT);
    144                 break;
    145         case CTRY_BULGARIA:
    146                 defaultLanguage = MAKELANGID(LANG_BULGARIAN, SUBLANG_DEFAULT);
    147                 break;
    148         case CTRY_UKRAINE:
    149                 defaultLanguage = MAKELANGID(LANG_UKRAINIAN, SUBLANG_RUSSIAN);
    150                 break;
    151         case CTRY_CROATIA:
    152                 defaultLanguage = MAKELANGID(LANG_CROATIAN, SUBLANG_CROATIAN);
    153                 break;
    154         case CTRY_SLOVENIA:
    155                 defaultLanguage = MAKELANGID(LANG_SLOVENIAN, SUBLANG_DEFAULT);
    156                 break;
    157         case CTRY_CZECH_REPUBLIC:
    158                 defaultLanguage = MAKELANGID(LANG_CZECH, SUBLANG_DEFAULT);
    159                 break;
    160         case CTRY_SLOVAK_REPUBLIC:
    161                 defaultLanguage = MAKELANGID(LANG_SLOVAK, SUBLANG_DEFAULT);
    162                 break;
    163         case CTRY_POLAND:
    164                 defaultLanguage = MAKELANGID(LANG_POLISH, SUBLANG_DEFAULT);
    165                 break;
    166         default:
    167                 defaultLanguage = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_UK);
    168                 break;
    169         }
    170   }
    171   return defaultLanguage;
     39  gulDefaultLanguageId = deflang;
     40}
     41//******************************************************************************
     42//******************************************************************************
     43static ULONG DeterminDefaultLanguageId(void)
     44{
     45    const char *pszLang = getenv("LANG");
     46    if (pszLang && pszLang[0] && pszLang[1])   /* (Ignore one character values (like 'C').) */
     47    {
     48        /** Conversion table from LANG to LanguageId based upon vac365 locales,
     49         * Sun JDK Internationalization Docs (1.2), good friends and google.
     50         * LANG value format: <language id>_<region>.[stuff]
     51         *
     52         * If no region is specified in LANG, we'll search exact match, and if not
     53         * found <val>_<val>. So for values where language id doesn't match region
     54         * then add a 2nd line with only language id (if there is such a default).
     55         */
     56        const static struct
     57        {
     58            const char *pszLang;    /* LANG value. (case insensitive) */
     59            ULONG       ulLangId;   /* Win32 Language ID. */
     60        }   aLangToLangId[] =
     61        {
     62            { "ar_ae",      MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_UAE) },
     63            { "ar_BH",      MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_BAHRAIN) },
     64            { "ar_DZ",      MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_ALGERIA) },
     65            { "ar",         MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_EGYPT) },
     66            { "ar_EG",      MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_EGYPT) },
     67            { "ar_IQ",      MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_IRAQ        ) },
     68            { "ar_JO",      MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_JORDAN      ) },
     69            { "ar_KW",      MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_KUWAIT      ) },
     70            { "ar_LB",      MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_LEBANON     ) },
     71            { "ar_LY",      MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_LIBYA       ) },
     72            { "ar_MA",      MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_MOROCCO     ) },
     73            { "ar_OM",      MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_OMAN        ) },
     74            { "ar_QA",      MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_QATAR       ) },
     75            { "ar_SA",      MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_SAUDI_ARABIA) },
     76            { "ar_SY",      MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_SYRIA       ) },
     77            { "ar_TN",      MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_TUNISIA     ) },
     78            { "ar_YE",      MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_YEMEN       ) },
     79            { "ar_SD",      MAKELANGID(LANG_ARABIC, SUBLANG_DEFAULT) }, /* no win32 constant. */
     80            { "be",         MAKELANGID(LANG_BELARUSIAN, SUBLANG_DEFAULT) },
     81            { "be_BY",      MAKELANGID(LANG_BELARUSIAN, SUBLANG_DEFAULT) },
     82            { "bg_BG",      MAKELANGID(LANG_BULGARIAN, SUBLANG_DEFAULT) },
     83            { "ca",         MAKELANGID(LANG_CATALAN, SUBLANG_DEFAULT) },
     84            { "ca_ES",      MAKELANGID(LANG_CATALAN, SUBLANG_DEFAULT) },
     85            { "cs",         MAKELANGID(LANG_CZECH, SUBLANG_DEFAULT) },
     86            { "cs_CZ",      MAKELANGID(LANG_CZECH, SUBLANG_DEFAULT) },
     87            { "da",         MAKELANGID(LANG_DANISH, SUBLANG_DEFAULT) },
     88            { "da_DK",      MAKELANGID(LANG_DANISH, SUBLANG_DEFAULT) },
     89            { "de_AT",      MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_AUSTRIAN) },
     90            { "de_CH",      MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_SWISS) },
     91            { "de_DE",      MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN) },
     92            { "de_LU",      MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_LUXEMBOURG) },
     93            { "el",         MAKELANGID(LANG_GREEK, SUBLANG_DEFAULT) },
     94            { "el_GR",      MAKELANGID(LANG_GREEK, SUBLANG_DEFAULT) },
     95            { "en_AU",      MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_AUS) },
     96            { "en_CA",      MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_CAN) },
     97            { "en_GB",      MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_UK) },
     98            { "en_IE",      MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_EIRE) },
     99            { "en_NZ",      MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_NZ) },
     100            { "en_US",      MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US) },
     101            { "en_ZA",      MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_SOUTH_AFRICA) },
     102            { "en_DK",      MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US) }, /* odd ibm vac365 */
     103            { "en_JP",      MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US) }, /* odd ibm vac365 */
     104            { "es_AR",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_ARGENTINA         ) },
     105            { "es_BO",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_BOLIVIA           ) },
     106            { "es_CL",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_CHILE             ) },
     107            { "es_CO",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_COLOMBIA          ) },
     108            { "es_CR",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_COSTA_RICA        ) },
     109            { "es_DO",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_DOMINICAN_REPUBLIC) },
     110            { "es_EC",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_ECUADOR           ) },
     111            { "es_ES",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH                   ) }, /* SUBLANG_SPANISH_MODERN? */
     112            { "es_GT",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_GUATEMALA         ) },
     113            { "es_HN",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_HONDURAS          ) },
     114            { "es_MX",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MEXICAN           ) },
     115            { "es_NI",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_NICARAGUA         ) },
     116            { "es_PA",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_PANAMA            ) },
     117            { "es_PE",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_PERU              ) },
     118            { "es_PR",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_PUERTO_RICO       ) },
     119            { "es_PY",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_PARAGUAY          ) },
     120            { "es_SV",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_EL_SALVADOR       ) },
     121            { "es_UY",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_URUGUAY           ) },
     122            { "es_VE",      MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_VENEZUELA         ) },
     123            { "et",         MAKELANGID(LANG_ESTONIAN, SUBLANG_DEFAULT) },
     124            { "et_EE",      MAKELANGID(LANG_ESTONIAN, SUBLANG_DEFAULT) },
     125            { "fi_FI",      MAKELANGID(LANG_FINNISH, SUBLANG_DEFAULT) },
     126            { "fo",         MAKELANGID(LANG_FAEROESE, SUBLANG_DEFAULT) },
     127            { "fo_FO",      MAKELANGID(LANG_FAEROESE, SUBLANG_DEFAULT) },
     128            { "fr_BE",      MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_BELGIAN) },
     129            { "fr_CA",      MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_CANADIAN) },
     130            { "fr_CH",      MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_SWISS) },
     131            { "fr_FR",      MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH) },
     132            { "fr_LU",      MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_LUXEMBOURG) },
     133            { "hr_HR",      MAKELANGID(LANG_CROATIAN, SUBLANG_DEFAULT) },
     134            { "hu_HU",      MAKELANGID(LANG_HUNGARIAN, SUBLANG_DEFAULT) },
     135            { "is_IS",      MAKELANGID(LANG_ICELANDIC, SUBLANG_DEFAULT) },
     136            { "it_CH",      MAKELANGID(LANG_ITALIAN, SUBLANG_ITALIAN_SWISS) },
     137            { "it_IT",      MAKELANGID(LANG_ITALIAN, SUBLANG_ITALIAN) },
     138            { "iw",         MAKELANGID(LANG_HEBREW, SUBLANG_DEFAULT) },
     139            { "iw_IL",      MAKELANGID(LANG_HEBREW, SUBLANG_DEFAULT) },
     140            { "ja_JP",      MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT) },
     141            { "ko",         MAKELANGID(LANG_KOREAN, SUBLANG_DEFAULT) },
     142            { "ko_KR",      MAKELANGID(LANG_KOREAN, SUBLANG_DEFAULT) },
     143            { "lt_LT",      MAKELANGID(LANG_LITHUANIAN, SUBLANG_DEFAULT) },
     144            { "lv_LV",      MAKELANGID(LANG_LATVIAN, SUBLANG_DEFAULT) },
     145            /*{ "mk_MK",      MAKELANGID(LANG_MACEDONIAN, SUBLANG_DEFAULT) }, - no win32 eq */
     146            { "nl_BE",      MAKELANGID(LANG_DUTCH, SUBLANG_DUTCH_BELGIAN) },
     147            { "nl_NL",      MAKELANGID(LANG_DUTCH, SUBLANG_DUTCH) },
     148            { "no_NO",      MAKELANGID(LANG_NORWEGIAN, SUBLANG_NORWEGIAN_NYNORSK) }, /* yeah sure! Sun is medling in norwegian politics here... */
     149            { "no_NO_B",    MAKELANGID(LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL) },  /* yeah sure! Sun is medling in norwegian politics here... */
     150            { "ny",         MAKELANGID(LANG_NORWEGIAN, SUBLANG_NORWEGIAN_NYNORSK) },
     151            { "ny_NO",      MAKELANGID(LANG_NORWEGIAN, SUBLANG_NORWEGIAN_NYNORSK) },
     152            { "nb",         MAKELANGID(LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL) },
     153            { "nb_NO",      MAKELANGID(LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL) },
     154            { "pl_PL",      MAKELANGID(LANG_POLISH, SUBLANG_DEFAULT) },
     155            { "pt_BR",      MAKELANGID(LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN) },
     156            { "pt_PT",      MAKELANGID(LANG_PORTUGUESE, SUBLANG_PORTUGUESE) },
     157            { "ro_RO",      MAKELANGID(LANG_ROMANIAN, SUBLANG_DEFAULT) },
     158            { "ru_RU",      MAKELANGID(LANG_RUSSIAN, SUBLANG_DEFAULT) },
     159            { "sh",         MAKELANGID(LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC) },
     160            { "sh_YU",      MAKELANGID(LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC) },
     161            { "sk_SK",      MAKELANGID(LANG_SLOVAK, SUBLANG_DEFAULT) },
     162            { "sl_SL",      MAKELANGID(LANG_SLOVENIAN, SUBLANG_DEFAULT) },
     163            { "sq",         MAKELANGID(LANG_ALBANIAN, SUBLANG_DEFAULT) },
     164            { "sq_AL",      MAKELANGID(LANG_ALBANIAN, SUBLANG_DEFAULT) },
     165            { "sr",         MAKELANGID(LANG_SERBIAN, SUBLANG_DEFAULT) },
     166            { "sr_YU",      MAKELANGID(LANG_SERBIAN, SUBLANG_DEFAULT) },
     167            { "sv",         MAKELANGID(LANG_SWEDISH, SUBLANG_SWEDISH) },
     168            { "sv_FI",      MAKELANGID(LANG_SWEDISH, SUBLANG_SWEDISH_FINLAND) },
     169            { "sv_SE",      MAKELANGID(LANG_SWEDISH, SUBLANG_SWEDISH) },
     170            { "th_TH",      MAKELANGID(LANG_THAI, SUBLANG_DEFAULT) },
     171            { "tr_TR",      MAKELANGID(LANG_TURKISH, SUBLANG_DEFAULT) },
     172            { "tr_DE",      MAKELANGID(LANG_TURKISH, SUBLANG_DEFAULT) }, /* phun ;-) */
     173            { "uk",         MAKELANGID(LANG_UKRAINIAN, SUBLANG_DEFAULT) },
     174            { "uk_UA",      MAKELANGID(LANG_UKRAINIAN, SUBLANG_DEFAULT) },
     175            { "zh",         MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED) },
     176            { "zh_CN",      MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED) },
     177            { "zh_TW",      MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL) },
     178            { "zh_HK",      MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_HONGKONG) },
     179            /*{ "zh_??",      MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SINGAPORE) },*/
     180        };
     181
     182        /*
     183         * Strip off anything past the '.' and any '_EURO'.
     184         */
     185        char szLang[16];
     186        strncpy(szLang, pszLang, sizeof(szLang));
     187        szLang[sizeof(szLang) - 1] = '\0';
     188        char *psz = strrchr(szLang, '.');
     189        if (psz)
     190            *psz = '\0';
     191        strupr(szLang);
     192        psz = strstr(szLang, "_EURO");
     193        if (psz)
     194            *psz = '\0';
     195
     196        /*
     197         * Loop thru the table looking for 'exact' match.
     198         */
     199        int i;
     200        for (i = 0; i < sizeof(aLangToLangId) / sizeof(aLangToLangId[0]); i++)
     201            if (!stricmp(aLangToLangId[i].pszLang, szLang))
     202                return aLangToLangId[i].ulLangId;
     203
     204        /*
     205         * No exact match. We'll now try look for <langid> and then for <langid>_<langid>.
     206         * ASSUMES: no user sets "LANG=e" or any other on character letter.
     207         */
     208        szLang[2] = '\0';
     209        for (i = 0; i < sizeof(aLangToLangId) / sizeof(aLangToLangId[0]); i++)
     210            if (!stricmp(aLangToLangId[i].pszLang, szLang))
     211                return aLangToLangId[i].ulLangId;
     212
     213        szLang[2] = '_';
     214        szLang[3] = szLang[0];
     215        szLang[4] = szLang[1];
     216        szLang[5] = '\0';
     217        for (i = 0; i < sizeof(aLangToLangId) / sizeof(aLangToLangId[0]); i++)
     218            if (!stricmp(aLangToLangId[i].pszLang, szLang))
     219                return aLangToLangId[i].ulLangId;
     220
     221        /*
     222         * No match, let's try find the language if nothing else.
     223         */
     224        for (i = 0; i < sizeof(aLangToLangId) / sizeof(aLangToLangId[0]); i++)
     225            if (!strnicmp(aLangToLangId[i].pszLang, szLang, 2))
     226                return MAKELANGID(PRIMARYLANGID(aLangToLangId[i].ulLangId), SUBLANG_NEUTRAL);
     227
     228        /* we give up! */
     229        dprintf(("DeterminDefaultLanguageId: WARNING: LANG value '%s' isn't known to us!!!\n", pszLang));
     230        DebugInt3();
     231    }
     232
     233
     234    /*
     235     * If LANG parsing failes, we'll go for the country info.
     236     */
     237    switch(OSLibQueryCountry())
     238    {
     239        case CTRY_AUSTRALIA:        return MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_AUS);
     240        case CTRY_AUSTRIA:          return MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_AUSTRIAN);
     241        case CTRY_BELGIUM:          return MAKELANGID(LANG_DUTCH, SUBLANG_DUTCH_BELGIAN);    //TODO: french-belgian
     242        case CTRY_BRAZIL:           return MAKELANGID(LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN);
     243        case CTRY_BULGARIA:         return MAKELANGID(LANG_BULGARIAN, SUBLANG_DEFAULT);
     244        case CTRY_CANADA:           return MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_CAN);       //TODO: french-canadian
     245        case CTRY_CHINA:            return MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL);
     246        case CTRY_CROATIA:          return MAKELANGID(LANG_CROATIAN, SUBLANG_CROATIAN);
     247        case CTRY_CZECH_REPUBLIC:   return MAKELANGID(LANG_CZECH, SUBLANG_DEFAULT);
     248        case CTRY_DENMARK:          return MAKELANGID(LANG_DANISH, SUBLANG_DEFAULT);
     249        case CTRY_FINLAND:          return MAKELANGID(LANG_FINNISH, SUBLANG_DEFAULT);
     250        case CTRY_FRANCE:           return MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH);
     251        case CTRY_GERMANY:          return MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN);
     252        case CTRY_GREECE:           return MAKELANGID(LANG_GREEK, SUBLANG_DEFAULT);
     253        case CTRY_HONG_KONG:        return MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_HONGKONG);
     254        case CTRY_ICELAND:          return MAKELANGID(LANG_ICELANDIC, SUBLANG_DEFAULT);
     255        case CTRY_IRELAND:          return MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_EIRE);
     256        case CTRY_ITALY:            return MAKELANGID(LANG_ITALIAN, SUBLANG_ITALIAN);
     257        case CTRY_JAPAN:            return MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT);
     258        case CTRY_KOREA:            return MAKELANGID(LANG_KOREAN, SUBLANG_DEFAULT);
     259        case CTRY_LATIN_AMERICA:    return MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH);
     260        case CTRY_LUXEMBOURG:       return MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_LUXEMBOURG);
     261        case CTRY_MEXICO:           return MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MEXICAN);
     262        case CTRY_NETHERLANDS:      return MAKELANGID(LANG_DUTCH, SUBLANG_DUTCH);
     263        case CTRY_NEW_ZEALAND:      return MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_NZ);
     264        case CTRY_NORWAY:           return MAKELANGID(LANG_NORWEGIAN, SUBLANG_DEFAULT);
     265        case CTRY_POLAND:           return MAKELANGID(LANG_POLISH, SUBLANG_DEFAULT);
     266        case CTRY_PORTUGAL:         return MAKELANGID(LANG_PORTUGUESE, SUBLANG_DEFAULT);
     267        case CTRY_RUSSIA:           return MAKELANGID(LANG_RUSSIAN, SUBLANG_RUSSIAN);
     268        case CTRY_SINGAPORE:        return MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SINGAPORE);
     269        case CTRY_SLOVAK_REPUBLIC:  return MAKELANGID(LANG_SLOVAK, SUBLANG_DEFAULT);
     270        case CTRY_SLOVENIA:         return MAKELANGID(LANG_SLOVENIAN, SUBLANG_DEFAULT);
     271        case CTRY_SPAIN:            return MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH);
     272        case CTRY_SWEDEN:           return MAKELANGID(LANG_SWEDISH, SUBLANG_DEFAULT);
     273        case CTRY_SWITZERLAND:      return MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_SWISS);
     274        case CTRY_TAIWAN:           return MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL);
     275        case CTRY_TURKEY:           return MAKELANGID(LANG_TURKISH, SUBLANG_DEFAULT);
     276        case CTRY_UKRAINE:          return MAKELANGID(LANG_UKRAINIAN, SUBLANG_RUSSIAN);
     277        case CTRY_UNITED_KINGDOM:   return MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_UK);
     278        default:
     279            return MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_UK);
     280    }
     281    /* will never reach this point! */
     282}
     283
     284ULONG GetLanguageId(void)
     285{
     286    /*
     287     * If no default language is set we'll try determin that by evaluating the
     288     * LANG env.var. and OS/2 country information.
     289     */
     290    if (gulDefaultLanguageId == 0)
     291    {
     292        gulDefaultLanguageId = DeterminDefaultLanguageId();
     293        dprintf(("KERNEL32: GetLanguageId: Sets default language id to %#x\n", gulDefaultLanguageId));
     294    }
     295    return gulDefaultLanguageId;
    172296}
    173297//******************************************************************************
     
    273397 * Author    : Przemyslaw Dobrowolski [Tue, 1999/07/22 17:07]
    274398 *****************************************************************************/
    275 int WIN32API GetLocaleInfoW(LCID lcid, LCTYPE LCType, LPWSTR wbuf, 
     399int WIN32API GetLocaleInfoW(LCID lcid, LCTYPE LCType, LPWSTR wbuf,
    276400                            int len)
    277401{
     
    330454        LocaleFromUniStr(puni_lconv->thousands_sep,wbuf,&ulInfoLen);
    331455        //MN: hack for Czech language; weird value returned here (0xA0 instead of 0x20)
    332         if(defaultLanguage == CTRY_CZECH_REPUBLIC) {
     456        if (gulDefaultLanguageId == CTRY_CZECH_REPUBLIC)
    333457           ((BYTE*)wbuf)[0] = ((BYTE*)wbuf)[0] & 0x7F;
    334         }
    335458        break;
    336459
     
    9121035  if (ret_len && buf)
    9131036    UnicodeToAscii(lpWStr,buf);
    914  
     1037
    9151038  if (lpWStr) free(lpWStr); // free prevooisly allocated memory
    9161039
     
    9381061{
    9391062 TEB *teb = GetThreadTEB();
    940  
     1063
    9411064  if(teb == NULL) {
    9421065        dprintf(("KERNEL32: ERROR SetThreadLocale teb == NULL!"));
Note: See TracChangeset for help on using the changeset viewer.