From 7ae92654a5de0296c6b65e47813a2ba6a5f5c9b4 Mon Sep 17 00:00:00 2001 From: Juergen Schmied Date: Sat, 17 Oct 1998 12:15:19 +0000 Subject: [PATCH] Fixed GetLocaleInfo32A for other languages than en_uk. Made it recognise LOCALE_SYSTEM_DEFAULT, LOCALE_SYSTEM_DEFAULT and last but not least the first argument lcid where is all about... --- ole/ole2nls.c | 119 ++++++++++++++++++++++++---------------------------------- 1 file changed, 50 insertions(+), 69 deletions(-) diff --git a/ole/ole2nls.c b/ole/ole2nls.c index 1834cd60db6..85b343db08b 100644 --- a/ole/ole2nls.c +++ b/ole/ole2nls.c @@ -414,11 +414,18 @@ INT32 WINAPI GetLocaleInfo32A(LCID lcid,LCTYPE LCType,LPSTR buf,INT32 len) { char *retString; int found,i; - int lang; + int lang=0; - TRACE(ole,"(0x%lx,0x%lx,%p,%x)\n", + TRACE(ole,"(lcid=0x%lx,lctype=0x%lx,%p,%x)\n", lcid,LCType,buf,len); + if (lcid == LOCALE_SYSTEM_DEFAULT || (LCType & LOCALE_NOUSEROVERRIDE) ) + { lcid = GetSystemDefaultLCID(); + } + else if (lcid == LOCALE_USER_DEFAULT) + { lcid = GetUserDefaultLCID(); + } + LCType &= ~(LOCALE_NOUSEROVERRIDE|LOCALE_USE_CP_ACP); /* As an option, we could obtain the value from win.ini. @@ -441,100 +448,71 @@ INT32 WINAPI GetLocaleInfo32A(LCID lcid,LCTYPE LCType,LPSTR buf,INT32 len) } #define LOCVAL(type,value) case type:retString=value;found=1;break; +#define LANG_BEGIN(l,s) case MAKELANGID(l,s): switch (LCType) { +#define LANG_END default: found=0; break; } break; /* Now, the language specific definitions. They don't have to be complete */ - found=0; i=0; - do { - if (i==0) lang=Languages[Options.language].langid; - if (i==1) lang=MAKELANGID( PRIMARYLANGID(lang), SUBLANG_DEFAULT); - i++; + found=0; i=0; lang=lcid; + + if (lang ==0x400) /*LANG_NEUTRAL ==> US English*/ + { lang = 0x409; + WARN(ole,"no language set, assume LANG_ENGLISH_US \n"); + } + + + do + { switch(lang) + { - switch(lang) { - case LANG_De: - switch (LCType) { +LANG_BEGIN (LANG_GERMAN, SUBLANG_GERMAN) /*0x407*/ #include "nls/deu.nls" - default: found=0; break; - } - break; /* LANG(De) */ +LANG_END - case LANG_Da: - switch (LCType) { +LANG_BEGIN (LANG_DANISH, SUBLANG_DEFAULT) /*0x406*/ #include "nls/dan.nls" - default: found=0;break; - } - break; /* LANG(Da) */ +LANG_END - case LANG_En: - switch (LCType) { +LANG_BEGIN (LANG_ENGLISH, SUBLANG_ENGLISH_US) /*0x409*/ #include "nls/enu.nls" - default: found=0;break; - } - break; /* LANG(En) */ +LANG_END - case LANG_Eo: - switch (LCType) { +LANG_BEGIN (LANG_ESPERANTO, SUBLANG_DEFAULT) /*0x48f*/ #include "nls/esperanto.nls" - default: found=0;break; - } - break; /* LANG(Eo) */ +LANG_END - case LANG_Fi: - switch (LCType) { +LANG_BEGIN (LANG_FINNISH, SUBLANG_DEFAULT) /*0x040B*/ #include "nls/fin.nls" - default: found=0;break; - } - break; /* LANG(Fi) */ +LANG_END - case LANG_It: - switch (LCType) { +LANG_BEGIN (LANG_ITALIAN, SUBLANG_ITALIAN) /*0x410*/ #include "nls/ita.nls" - default: found=0;break; - } - break; /* LANG(It) */ +LANG_END - case 0x0809: - switch (LCType) { +LANG_BEGIN (LANG_ENGLISH, SUBLANG_ENGLISH_UK) /*0x809*/ #include "nls/eng.nls" - default: found=0;break; - } - break; /* LANG(0x0809) (U.K. English) */ +LANG_END - case LANG_Ko: /* string using codepage 949 */ - switch (LCType) { +LANG_BEGIN (LANG_KOREAN, SUBLANG_KOREAN) /*0x412*/ #include "nls/kor.nls" - default: found=0;break; - } - break; /* LANG(Ko) */ +LANG_END - case LANG_Hu: - switch (LCType) { +LANG_BEGIN (LANG_HUNGARIAN, SUBLANG_DEFAULT) /*0x40e*/ #include "nls/hun.nls" - default: found=0;break; - } - break; /* LANG(En) */ +LANG_END - case LANG_Pl: - switch (LCType) { +LANG_BEGIN (LANG_POLISH, SUBLANG_DEFAULT) /*0x415*/ #include "nls/plk.nls" - default: found=0;break; - } - break; /* LANG(Pl) */ +LANG_END - case LANG_Pt: - switch (LCType) { +LANG_BEGIN (LANG_PORTUGUESE ,SUBLANG_PORTUGUESE_BRAZILIAN) /*0x416*/ #include "nls/ptb.nls" - default: found=0;break; - } - break; /* LANG(Pt) */ +LANG_END - case LANG_Sv: - switch (LCType) { +LANG_BEGIN (LANG_SWEDISH, SUBLANG_DEFAULT) /*0x41d*/ #include "nls/sve.nls" - default: found=0;break; - } - break; /* LANG(Sv) */ +LANG_END /*Insert other languages here*/ @@ -542,13 +520,16 @@ INT32 WINAPI GetLocaleInfo32A(LCID lcid,LCTYPE LCType,LPSTR buf,INT32 len) found=0; break; } /* switch */ + + /* language not found, try without a sublanguage*/ + lang=MAKELANGID( PRIMARYLANGID(lang), SUBLANG_DEFAULT); + i++; } while (!found && i<2); if(!found) { ERR(ole,"'%s' not supported for your language.\n", retString); retString = ""; - /*return 0;*/ } if (buf) lstrcpyn32A(buf,retString,len); -- 2.11.4.GIT