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