xref: /AOO41X/main/shell/source/win32/shlxthandler/util/utilities.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_shell.hxx"
30 
31 
32 #include "internal/config.hxx"
33 #include "internal/dbgmacros.hxx"
34 #include "internal/utilities.hxx"
35 
36 //-----------------------------
37 // constants
38 //-----------------------------
39 
40 const size_t MAX_RES_STRING = 1024;
41 const wchar_t SPACE_CHAR = _T(' ');
42 
43 //---------------------------------
44 /**
45 */
46 std::wstring StringToWString(const std::string& String)
47 {
48     int len = MultiByteToWideChar(
49         CP_ACP, 0, String.c_str(), -1, 0, 0);
50 
51     wchar_t* buff = reinterpret_cast<wchar_t*>(
52         _alloca(len * sizeof(wchar_t)));
53 
54     MultiByteToWideChar(
55         CP_ACP, 0, String.c_str(), -1, buff, len);
56 
57     return std::wstring(buff);
58 }
59 
60 //---------------------------------
61 /**
62 */
63 std::string WStringToString(const std::wstring& String)
64 {
65     int len = WideCharToMultiByte(
66         CP_ACP, 0, String.c_str(), -1, 0, 0, 0, 0);
67 
68     char* buff = reinterpret_cast<char*>(
69         _alloca(len * sizeof(char)));
70 
71     WideCharToMultiByte(
72         CP_ACP, 0, String.c_str(), -1, buff, len, 0, 0);
73 
74     return std::string(buff);
75 }
76 
77 //---------------------------------
78 /**
79 */
80 std::wstring GetResString(int ResId)
81 {
82     wchar_t szResStr[MAX_RES_STRING];
83 
84     int rc = LoadStringW( GetModuleHandleW(MODULE_NAME), ResId, szResStr, sizeof(szResStr) );
85 
86     OutputDebugStringFormat( "GetResString: read %d chars\n", rc );
87     ENSURE(rc, "String resource not found");
88 
89     return std::wstring(szResStr);
90 }
91 
92 //---------------------------------
93 /**
94 */
95 bool is_windows_xp_or_above()
96 {
97     OSVERSIONINFO osvi;
98     ZeroMemory(&osvi, sizeof(osvi));
99     osvi.dwOSVersionInfoSize = sizeof(osvi);
100     GetVersionEx(&osvi);
101 
102     // LLA: check for windows xp or above (Vista)
103     if (osvi.dwMajorVersion > 5 ||
104         (5 == osvi.dwMajorVersion && osvi.dwMinorVersion >= 1))
105     {
106         return true;
107     }
108     return false;
109 }
110 
111 //---------------------------------
112 /**
113 */
114 
115 void SaveDebugInfoToFile( const std::wstring& str )
116 {
117    int handle;
118 
119    if ((handle = open("c:\\temp\\SHELLRESULT.$$$", O_CREAT | O_RDWR | O_APPEND )) == -1)
120    {
121       perror("Error: open file error");
122       return;
123    }
124    write(handle, str.c_str(), str.length() );
125    close(handle);
126 }
127 
128 //---------------------------------
129 /** helper function to judge if the string is only has spaces.
130     @returns
131         <TRUE>if the provided string contains only but at least one space
132         character else <FALSE/>.
133 */
134 
135 bool HasOnlySpaces(const std::wstring& String)
136 {
137     if ( String.length() == 0 )
138         return false;
139 
140     const wchar_t* p = String.c_str();
141 
142     while (*p)
143     {
144         if (*p++ != SPACE_CHAR)
145             return false;
146     }
147 
148     return true;
149 }
150 
151 //---------------------------------
152 /** helper function to convert windows pathes to short form.
153     @returns
154         shortend path.
155 */
156 
157 std::wstring getShortPathName( const std::wstring& aLongName )
158 {
159     std::wstring shortName = aLongName;
160     long         length    = GetShortPathName( aLongName.c_str(), NULL, 0 );
161 
162     if ( length != 0 )
163     {
164         TCHAR* buffer = new TCHAR[ length+1 ];
165         length = GetShortPathName( aLongName.c_str(), buffer, length );
166         if ( length != 0 )
167             shortName = std::wstring( buffer );
168         delete [] buffer;
169     }
170     return shortName;
171 }
172 
173 /** convert LocaleSet pair into Microsoft List of Locale ID (LCID)
174     according to ISO-639 and ISO-3166.
175     http://etext.lib.virginia.edu/tei/iso639.html
176     http://nl.ijs.si/gnusl/cee/std/ISO_3166.html
177     @param
178         Locale, LocaleSet
179     @returns
180         Windows Locale Identifier corresponding to input LocaleSet.
181     @Usage Sample
182         LocaleSet_t myDefaultLocale( ::std::wstring( L"zh" ),::std::wstring(L"HK") );
183         DWORD myLCID = LocaleSetToLCID( myDefaultLocale );
184         wchar_t  buffer[20];
185         _ultow( myLCID, buffer, 16 );
186         MessageBox( NULL, buffer,L"the LCID is:",MB_OK );
187 */
188 
189 LCID LocaleSetToLCID( const LocaleSet_t & Locale )
190 {
191     if ( EMPTY_LOCALE == Locale )
192         return GetSystemDefaultLCID();
193 
194     USHORT usPrimaryLang= LANG_NEUTRAL;
195 	USHORT usSubLang=SUBLANG_DEFAULT;
196 
197     ::std::wstring wsLanguage(Locale.first);
198 	::std::wstring wsCountry(Locale.second);
199 
200     if  ( wsLanguage == L"ar" )
201     {
202         usPrimaryLang = LANG_ARABIC;                      // Arabic 01
203 
204         if ( wsCountry == L"SA" )
205             usSubLang = SUBLANG_ARABIC_SAUDI_ARABIA;          // Arabic (Saudi Arabia)
206         else if ( wsCountry == L"IQ" )
207             usSubLang = SUBLANG_ARABIC_IRAQ;                  // Arabic (Iraq)
208         else if ( wsCountry == L"EG" )
209             usSubLang = SUBLANG_ARABIC_EGYPT;                 // Arabic (Egypt)
210         else if ( wsCountry == L"LY" )
211             usSubLang = SUBLANG_ARABIC_LIBYA;                 // Arabic (Libya)
212         else if ( wsCountry == L"DZ" )
213             usSubLang = SUBLANG_ARABIC_ALGERIA;               // Arabic (Algeria)
214         else if ( wsCountry == L"MA" )
215             usSubLang = SUBLANG_ARABIC_MOROCCO;               // Arabic (Morocco)
216         else if ( wsCountry == L"TN" )
217             usSubLang = SUBLANG_ARABIC_TUNISIA;               // Arabic (Tunisia)
218         else if ( wsCountry == L"OM" )
219             usSubLang = SUBLANG_ARABIC_OMAN;                  // Arabic (Oman)
220         else if ( wsCountry == L"YE" )
221             usSubLang = SUBLANG_ARABIC_YEMEN;                 // Arabic (Yemen)
222         else if ( wsCountry == L"SY" )
223             usSubLang = SUBLANG_ARABIC_SYRIA;                 // Arabic (Syria)
224         else if ( wsCountry == L"JO" )
225             usSubLang = SUBLANG_ARABIC_JORDAN;                // Arabic (Jordan)
226         else if ( wsCountry == L"LB" )
227             usSubLang = SUBLANG_ARABIC_LEBANON;               // Arabic (Lebanon)
228         else if ( wsCountry == L"KW" )
229             usSubLang = SUBLANG_ARABIC_KUWAIT;                // Arabic (Kuwait)
230         else if ( wsCountry == L"AE" )
231             usSubLang = SUBLANG_ARABIC_UAE;                   // Arabic (U.A.E.)
232         else if ( wsCountry == L"BH" )
233             usSubLang = SUBLANG_ARABIC_BAHRAIN;               // Arabic (Bahrain)
234         else if ( wsCountry == L"QA" )
235             usSubLang = SUBLANG_ARABIC_QATAR;                 // Arabic (Qatar)
236         else
237             usSubLang = SUBLANG_DEFAULT;                      //default sub language
238     }
239     else if ( wsLanguage == L"bg" )
240         usPrimaryLang = LANG_BULGARIAN;                   //Bulgarian 02
241     else if ( wsLanguage == L"ca" )
242         usPrimaryLang = LANG_CATALAN;                     //Catalan 03
243     else if ( wsLanguage == L"zh" )
244     {
245         usPrimaryLang = LANG_CHINESE;                     //Chinese
246         if ( wsCountry == L"TW" )
247             usSubLang = SUBLANG_CHINESE_TRADITIONAL;          // Chinese (Traditional)
248         else if ( wsCountry == L"CN" )
249             usSubLang = SUBLANG_CHINESE_SIMPLIFIED;           // Chinese (Simplified)
250         else if ( wsCountry == L"HK" )
251             usSubLang = SUBLANG_CHINESE_HONGKONG;             // Chinese (Hong Kong SAR, PRC)
252         else if ( wsCountry == L"SG" )
253             usSubLang = SUBLANG_CHINESE_SINGAPORE;            // Chinese (Singapore)
254         else if ( wsCountry == L"MO" )
255             usSubLang = SUBLANG_CHINESE_MACAU;                // Chinese (Macau SAR)
256         else
257             usSubLang = SUBLANG_DEFAULT;                      //default sub language
258     }
259     else if ( wsLanguage == L"cs" )
260         usPrimaryLang = LANG_CZECH;                       //Czech
261     else if ( wsLanguage == L"da" )
262         usPrimaryLang = LANG_DANISH;                      //Danish
263     else if ( wsLanguage == L"de" )
264     {
265         usPrimaryLang = LANG_GERMAN;                      //German
266         if ( wsCountry == L"DE" )
267             usSubLang = SUBLANG_GERMAN;                       // German
268         else if ( wsCountry == L"CH" )
269             usSubLang = SUBLANG_GERMAN_SWISS;                 // German (Swiss)
270         else if ( wsCountry == L"AT" )
271             usSubLang = SUBLANG_GERMAN_AUSTRIAN;              // German (Austrian)
272         else if ( wsCountry == L"LU" )
273             usSubLang = SUBLANG_GERMAN_LUXEMBOURG;            // German (Luxembourg)
274         else if ( wsCountry == L"LI" )
275             usSubLang = SUBLANG_GERMAN_LIECHTENSTEIN;         // German (Liechtenstein)
276         else
277             usSubLang = SUBLANG_DEFAULT;                      //default sub language
278     }
279     else if ( wsLanguage == L"el" )
280         usPrimaryLang = LANG_GREEK;                       //Greek
281     else if ( wsLanguage == L"en" )
282     {
283         usPrimaryLang = LANG_ENGLISH;                         //English
284         if ( wsCountry == L"US" )
285             usSubLang = SUBLANG_ENGLISH_US;                   // English (US)
286         else if ( wsCountry == L"GB" )
287             usSubLang = SUBLANG_ENGLISH_UK;                   // English (UK)
288         else if ( wsCountry == L"AU" )
289             usSubLang = SUBLANG_ENGLISH_AUS;                  // English (Australian)
290         else if ( wsCountry == L"CA" )
291             usSubLang = SUBLANG_ENGLISH_CAN;                  // English (Canadian)
292         else if ( wsCountry == L"NZ" )
293             usSubLang = SUBLANG_ENGLISH_NZ;                   // English (New Zealand)
294         else if ( wsCountry == L"IE" )
295             usSubLang = SUBLANG_ENGLISH_EIRE;                 // English (Ireland)
296         else if ( wsCountry == L"ZA" )
297             usSubLang = SUBLANG_ENGLISH_SOUTH_AFRICA;         // English (South Africa)
298         else if ( wsCountry == L"JM" )
299             usSubLang = SUBLANG_ENGLISH_JAMAICA;              // English (Jamaica)
300         else if ( wsCountry == L"GD" )
301             usSubLang = SUBLANG_ENGLISH_CARIBBEAN;            // English (Caribbean) Grenada
302         else if ( wsCountry == L"BZ" )
303             usSubLang = SUBLANG_ENGLISH_BELIZE;               // English (Belize)
304         else if ( wsCountry == L"TT" )
305             usSubLang = SUBLANG_ENGLISH_TRINIDAD;             // English (Trinidad)
306         else if ( wsCountry == L"ZW" )
307             usSubLang = SUBLANG_ENGLISH_ZIMBABWE;             // English (Zimbabwe)
308         else if ( wsCountry == L"PH" )
309             usSubLang = SUBLANG_ENGLISH_PHILIPPINES;          // English (Philippines)
310         else
311             usSubLang = SUBLANG_DEFAULT;                      //default sub language
312     }
313     else if ( wsLanguage == L"es" )
314     {
315         usPrimaryLang = LANG_SPANISH;                     //Spanish
316         //else if ( wsCountry == L"ES" )
317         //  usSubLang = SUBLANG_SPANISH;                      // Spanish (Castilian)
318         if ( wsCountry == L"MX" )
319             usSubLang = SUBLANG_SPANISH_MEXICAN;              // Spanish (Mexican)
320         else if ( wsCountry == L"ES" )
321             usSubLang = SUBLANG_SPANISH_MODERN;               // Spanish (Spain)
322         else if ( wsCountry == L"GT" )
323             usSubLang = SUBLANG_SPANISH_GUATEMALA;            // Spanish (Guatemala)
324         else if ( wsCountry == L"CR" )
325             usSubLang = SUBLANG_SPANISH_COSTA_RICA;           // Spanish (Costa Rica)
326         else if ( wsCountry == L"PA" )
327             usSubLang = SUBLANG_SPANISH_PANAMA;               // Spanish (Panama)
328         else if ( wsCountry == L"DO" )
329             usSubLang = SUBLANG_SPANISH_DOMINICAN_REPUBLIC;   // Spanish (Dominican Republic)
330         else if ( wsCountry == L"VE" )
331             usSubLang = SUBLANG_SPANISH_VENEZUELA;            // Spanish (Venezuela)
332         else if ( wsCountry == L"CO" )
333             usSubLang = SUBLANG_SPANISH_COLOMBIA;             // Spanish (Colombia)
334         else if ( wsCountry == L"PE" )
335             usSubLang = SUBLANG_SPANISH_PERU;                 // Spanish (Peru)
336         else if ( wsCountry == L"AR" )
337             usSubLang = SUBLANG_SPANISH_ARGENTINA;            // Spanish (Argentina)
338         else if ( wsCountry == L"EC" )
339             usSubLang = SUBLANG_SPANISH_ECUADOR;              // Spanish (Ecuador)
340         else if ( wsCountry == L"CL" )
341             usSubLang = SUBLANG_SPANISH_CHILE;                // Spanish (Chile)
342         else if ( wsCountry == L"UY" )
343             usSubLang = SUBLANG_SPANISH_URUGUAY;              // Spanish (Uruguay)
344         else if ( wsCountry == L"PY" )
345             usSubLang = SUBLANG_SPANISH_PARAGUAY;             // Spanish (Paraguay)
346         else if ( wsCountry == L"BO" )
347             usSubLang = SUBLANG_SPANISH_BOLIVIA;              // Spanish (Bolivia)
348         else if ( wsCountry == L"SV" )
349             usSubLang = SUBLANG_SPANISH_EL_SALVADOR;          // Spanish (El Salvador)
350         else if ( wsCountry == L"HN" )
351             usSubLang = SUBLANG_SPANISH_HONDURAS;             // Spanish (Honduras)
352         else if ( wsCountry == L"NI" )
353             usSubLang = SUBLANG_SPANISH_NICARAGUA;            // Spanish (Nicaragua)
354         else if ( wsCountry == L"PR" )
355             usSubLang = SUBLANG_SPANISH_PUERTO_RICO;          // Spanish (Puerto Rico)
356         else
357             usSubLang = SUBLANG_DEFAULT;                      //default sub language
358     }
359     else if ( wsLanguage == L"fi" )
360         usPrimaryLang = LANG_FINNISH;                     //Finnish
361     else if ( wsLanguage == L"fr" )
362     {
363         usPrimaryLang = LANG_FRENCH;                      //French
364         if ( wsCountry == L"FR" )
365             usSubLang = SUBLANG_FRENCH;                        // French
366         else if ( wsCountry == L"BE" )
367             usSubLang = SUBLANG_FRENCH_BELGIAN;                // French (Belgian)
368         else if ( wsCountry == L"CA" )
369             usSubLang = SUBLANG_FRENCH_CANADIAN;               // French (Canadian)
370         else if ( wsCountry == L"CH" )
371             usSubLang = SUBLANG_FRENCH_SWISS;                  // French (Swiss)
372         else if ( wsCountry == L"LU" )
373             usSubLang = SUBLANG_FRENCH_LUXEMBOURG;             // French (Luxembourg)
374         else if ( wsCountry == L"MC" )
375             usSubLang = SUBLANG_FRENCH_MONACO;                 // French (Monaco)
376         else
377             usSubLang = SUBLANG_DEFAULT;                       //default sub language
378     }
379     else if ( wsLanguage == L"iw" )
380         usPrimaryLang = LANG_HEBREW;                      //Hebrew
381     else if ( wsLanguage == L"hu" )
382         usPrimaryLang = LANG_HUNGARIAN;                        //Hungarian
383     else if ( wsLanguage == L"is" )
384         usPrimaryLang = LANG_ICELANDIC;                        //Icelandic
385     else if ( wsLanguage == L"it" )
386     {
387         usPrimaryLang = LANG_ITALIAN;                     //Italian
388         if ( wsCountry == L"IT" )
389             usSubLang = SUBLANG_ITALIAN;                       // Italian
390         else if ( wsCountry == L"CH" )
391             usSubLang = SUBLANG_ITALIAN_SWISS;                 // Italian (Swiss)
392         else
393             usSubLang = SUBLANG_DEFAULT;                       //default sub language
394     }
395     else if ( wsLanguage == L"ja" )
396         usPrimaryLang = LANG_JAPANESE;                    //Japanese
397     else if ( wsLanguage == L"ko" )
398     {
399         usPrimaryLang = LANG_KOREAN;                      //Korean
400         if ( wsCountry == L"KR" )
401             usSubLang = SUBLANG_KOREAN;                       // Korean
402         else
403             usSubLang = SUBLANG_DEFAULT;                      //default sub language
404     }
405     else if ( wsLanguage == L"nl" )
406     {
407         usPrimaryLang = LANG_DUTCH;                       //Dutch
408         if ( wsCountry == L"NL" )
409             usSubLang = SUBLANG_DUTCH;                        // Dutch
410         else if ( wsCountry == L"BE" )
411             usSubLang = SUBLANG_DUTCH_BELGIAN;                // Dutch (Belgian)
412         else
413             usSubLang = SUBLANG_DEFAULT;                      //default sub language
414     }
415     else if ( wsLanguage == L"no" )
416     {
417         usPrimaryLang = LANG_NORWEGIAN;                   //Norwegian
418         if ( wsCountry == L"NO" )
419             usSubLang = SUBLANG_NORWEGIAN_BOKMAL;             // Norwegian (Bokmal)
420         //else if ( wsCountry == L"NO" )
421         //  usSubLang = SUBLANG_NORWEGIAN_NYNORSK;            // Norwegian (Nynorsk)
422         else
423             usSubLang = SUBLANG_DEFAULT;                      //default sub language
424     }
425     else if ( wsLanguage == L"pl" )
426         usPrimaryLang = LANG_POLISH;                      //Polish
427     else if ( wsLanguage == L"pt" )
428     {
429         usPrimaryLang = LANG_PORTUGUESE;                  //Portuguese
430         if ( wsCountry == L"BR" )
431             usSubLang = SUBLANG_PORTUGUESE_BRAZILIAN;         // Portuguese (Brazil)
432         else if ( wsCountry == L"PT" )
433             usSubLang = SUBLANG_PORTUGUESE;                   // Portuguese (Portugal)
434         else
435             usSubLang = SUBLANG_DEFAULT;                      //default sub language
436     }
437     else if ( wsLanguage == L"ro" )
438         usPrimaryLang = LANG_ROMANIAN;                    //Romanian
439     else if ( wsLanguage == L"ru" )
440         usPrimaryLang = LANG_RUSSIAN;                     //Russian
441     else if ( wsLanguage == L"hr" )
442         usPrimaryLang = LANG_CROATIAN;                    //Croatian
443     else if ( wsLanguage == L"sr" )
444     {
445         usPrimaryLang = LANG_SERBIAN;                     //Serbian
446         if ( wsCountry == L"VA" )
447             usSubLang = SUBLANG_SERBIAN_LATIN;                 // Serbian (Latin)
448         else if ( wsCountry == L"HR" )
449             usSubLang = SUBLANG_SERBIAN_CYRILLIC;              // Serbian (Cyrillic)
450         else
451             usSubLang = SUBLANG_DEFAULT;                       //default sub language
452     }
453     else if ( wsLanguage == L"sk" )
454         usPrimaryLang = LANG_SLOVAK;                      //Slovak
455     else if ( wsLanguage == L"sq" )
456         usPrimaryLang = LANG_ALBANIAN;                    //Albanian
457     else if ( wsLanguage == L"sv" )
458     {
459         usPrimaryLang = LANG_SWEDISH;                     //Swedish
460         if ( wsCountry == L"SE" )
461             usSubLang = SUBLANG_SWEDISH;                       // Swedish
462         else if ( wsCountry == L"FI" )
463             usSubLang = SUBLANG_SWEDISH_FINLAND;               // Swedish (Finland)
464         else
465             usSubLang = SUBLANG_DEFAULT;                       //default sub language
466     }
467     else if ( wsLanguage == L"th" )
468         usPrimaryLang = LANG_THAI;                        //Thai
469     else if ( wsLanguage == L"tr" )
470         usPrimaryLang = LANG_TURKISH;                     //Turkish
471     else if ( wsLanguage == L"ur" )
472     {
473         usPrimaryLang = LANG_URDU;                        //Urdu
474         if ( wsCountry == L"PK" )
475             usSubLang = SUBLANG_URDU_PAKISTAN;                 // Urdu (Pakistan)
476         else if ( wsCountry == L"IN" )
477             usSubLang = SUBLANG_URDU_INDIA;                    // Urdu (India)
478         else
479             usSubLang = SUBLANG_DEFAULT;                       //default sub language
480     }
481     else if ( wsLanguage == L"in" )
482         usPrimaryLang = LANG_INDONESIAN;                  //Indonesian
483     else if ( wsLanguage == L"uk" )
484         usPrimaryLang = LANG_UKRAINIAN;                   //Ukrainian
485     else if ( wsLanguage == L"be" )
486         usPrimaryLang = LANG_BELARUSIAN;                  //Belarusian
487     else if ( wsLanguage == L"sl" )
488         usPrimaryLang = LANG_SLOVENIAN;                   //Slovenian
489     else if ( wsLanguage == L"et" )
490         usPrimaryLang = LANG_ESTONIAN;                    //Estonian
491     else if ( wsLanguage == L"lv" )
492         usPrimaryLang = LANG_LATVIAN;                     //Latvian
493     else if ( wsLanguage == L"lt" )
494     {
495         usPrimaryLang = LANG_LITHUANIAN;                  //Lithuanian
496         if ( wsCountry == L"LT" )
497             usSubLang = SUBLANG_LITHUANIAN;                    // Lithuanian
498         else
499             usSubLang = SUBLANG_DEFAULT;                       //default sub language
500     }
501     else if ( wsLanguage == L"fa" )
502         usPrimaryLang = LANG_FARSI;                       //Farsi
503     else if ( wsLanguage == L"vi" )
504         usPrimaryLang = LANG_VIETNAMESE;                  //Vietnamese
505     else if ( wsLanguage == L"hy" )
506         usPrimaryLang = LANG_ARMENIAN;                    //Armenian
507     else if ( wsLanguage == L"az" )
508     {
509         usPrimaryLang = LANG_AZERI;                       //Azeri
510         //if ( wsCountry == L"  " )
511         //  usSubLang = SUBLANG_AZERI_LATIN;                   // Azeri (Latin)
512         //else if ( wsCountry == L"  " )
513         //  usSubLang = SUBLANG_AZERI_CYRILLIC;                // Azeri (Cyrillic)
514     }
515     else if ( wsLanguage == L"eu" )
516         usPrimaryLang = LANG_BASQUE;                      //Basque
517     else if ( wsLanguage == L"mk" )
518         usPrimaryLang = LANG_MACEDONIAN;                  //FYRO Macedonian
519     else if ( wsLanguage == L"af" )
520         usPrimaryLang = LANG_AFRIKAANS;                   //Afrikaans
521     else if ( wsLanguage == L"ka" )
522         usPrimaryLang = LANG_GEORGIAN;                    //Georgian
523     else if ( wsLanguage == L"fo" )
524         usPrimaryLang = LANG_FAEROESE;                    //Faeroese
525     else if ( wsLanguage == L"hi" )
526         usPrimaryLang = LANG_HINDI;                       //Hindi
527     else if ( wsLanguage == L"ms" )
528     {
529         usPrimaryLang = LANG_MALAY;                       //Malay
530         if ( wsCountry == L"MY" )
531             usSubLang = SUBLANG_MALAY_MALAYSIA;                // Malay (Malaysia)
532         else if ( wsCountry == L"BN" )
533             usSubLang = SUBLANG_MALAY_BRUNEI_DARUSSALAM;       // Malay (Brunei Darassalam)
534         else
535             usSubLang = SUBLANG_DEFAULT;                       //default sub language
536     }
537     else if ( wsLanguage == L"kk" )
538         usPrimaryLang = LANG_KAZAK;                       //Kazak
539     else if ( wsLanguage == L"ky" )
540         usPrimaryLang = LANG_KYRGYZ;                      //Kyrgyz
541     else if ( wsLanguage == L"sw" )
542         usPrimaryLang = LANG_SWAHILI;                     //Swahili
543     else if ( wsLanguage == L"uz" )
544     {
545         usPrimaryLang = LANG_UZBEK;                       //Uzbek
546         if ( wsCountry == L"UZ" )
547             usSubLang = SUBLANG_UZBEK_LATIN;                   // Uzbek (Latin)
548         else if ( wsCountry == L"DE" )
549             usSubLang = SUBLANG_UZBEK_CYRILLIC;                // Uzbek (Cyrillic)
550         else
551             usSubLang = SUBLANG_DEFAULT;                       //default sub language
552     }
553     else if ( wsLanguage == L"tt" )
554         usPrimaryLang = LANG_TATAR;                       //Tatar
555     else if ( wsLanguage == L"bn" )
556         usPrimaryLang = LANG_BENGALI;                     //Not supported.
557     else if ( wsLanguage == L"pa" )
558         usPrimaryLang = LANG_PUNJABI;                     //Punjabi
559     else if ( wsLanguage == L"gu" )
560         usPrimaryLang = LANG_GUJARATI;                    //Gujarati
561     else if ( wsLanguage == L"or" )
562         usPrimaryLang = LANG_ORIYA;                       //Not supported.
563     else if ( wsLanguage == L"ta" )
564         usPrimaryLang = LANG_TAMIL;                       //Tamil
565     else if ( wsLanguage == L"te" )
566         usPrimaryLang = LANG_TELUGU;                      //Telugu
567     else if ( wsLanguage == L"kn" )
568         usPrimaryLang = LANG_KANNADA;                     //Kannada
569     else if ( wsLanguage == L"ml" )
570         usPrimaryLang = LANG_MALAYALAM;                   //Not supported.
571     else if ( wsLanguage == L"as" )
572         usPrimaryLang = LANG_ASSAMESE;                    //Not supported.
573     else if ( wsLanguage == L"mr" )
574         usPrimaryLang = LANG_MARATHI;                     //Marathi
575     else if ( wsLanguage == L"sa" )
576         usPrimaryLang = LANG_SANSKRIT;                    //Sanskrit
577     else if ( wsLanguage == L"mn" )
578         usPrimaryLang = LANG_MONGOLIAN;                   //Mongolian
579     else if ( wsLanguage == L"gl" )
580         usPrimaryLang = LANG_GALICIAN;                    //Galician
581     else if ( wsLanguage == L"sd" )
582         usPrimaryLang = LANG_SINDHI;                      //Not supported.
583     else if ( wsLanguage == L"ks" )
584         usPrimaryLang = LANG_KASHMIRI;                    //Not supported.
585     else if ( wsLanguage == L"ne" )
586         usPrimaryLang = LANG_NEPALI;                      //Not supported.
587     //else if ( wsLanguage == L"  " )
588     //  usPrimaryLang = LANG_MANIPURI;                    //Not supported.
589     //else if ( wsLanguage == L"  " )
590     //  usPrimaryLang = LANG_KONKANI;                     //Konkani
591     //else if ( wsLanguage == L"  " )
592     //  usPrimaryLang = LANG_SYRIAC;                      //Syriac
593     //else if ( wsLanguage == L"  " )
594     //  usPrimaryLang = LANG_DIVEHI;                      //Divehi
595     else
596         return GetSystemDefaultLCID();                    //System Default Locale
597 
598 	return MAKELCID( MAKELANGID( usPrimaryLang, usSubLang ), SORT_DEFAULT );
599 }
600