diff --git a/include/winnls.h b/include/winnls.h index f816d3a3477..4b703af8a28 100644 --- a/include/winnls.h +++ b/include/winnls.h @@ -24,6 +24,7 @@ #define LOCALE_IDEFAULTCOUNTRY 0x0000000A #define LOCALE_IDEFAULTCODEPAGE 0x0000000B #define LOCALE_IDEFAULTANSICODEPAGE 0x00001004 +#define LOCALE_IDEFAULTMACCODEPAGE 0x00001011 #define LOCALE_SLIST 0x0000000C #define LOCALE_IMEASURE 0x0000000D #define LOCALE_SDECIMAL 0x0000000E @@ -110,6 +111,8 @@ #define LOCALE_INEGSYMPRECEDES 0x00000056 #define LOCALE_INEGSEPBYSPACE 0x00000057 #define LOCALE_FONTSIGNATURE 0x00000058 +#define LOCALE_SISO639LANGNAME 0x00000059 +#define LOCALE_SISO3166CTRYNAME 0x0000005A #define NORM_IGNORECASE 1 diff --git a/ole/nls/deu.nls b/ole/nls/deu.nls index 2af9a6080e9..0b042f9a520 100644 --- a/ole/nls/deu.nls +++ b/ole/nls/deu.nls @@ -4,9 +4,9 @@ */ LOCVAL(LOCALE_ILANGUAGE,"0407") -LOCVAL(LOCALE_SLANGUAGE,"Deutsch") +LOCVAL(LOCALE_SLANGUAGE,"Deutsch (Deutschland)") LOCVAL(LOCALE_SENGLANGUAGE,"German") -LOCVAL(LOCALE_SABBREVLANGNAME,"deu") +LOCVAL(LOCALE_SABBREVLANGNAME,"DEU") LOCVAL(LOCALE_SNATIVELANGNAME,"Deutsch") LOCVAL(LOCALE_ICOUNTRY,"49") LOCVAL(LOCALE_SCOUNTRY,"Deutschland") @@ -15,16 +15,17 @@ LOCVAL(LOCALE_SABBREVCTRYNAME,"DEU") LOCVAL(LOCALE_SNATIVECTRYNAME,"Deutschland") LOCVAL(LOCALE_IDEFAULTLANGUAGE,"0407") LOCVAL(LOCALE_IDEFAULTCOUNTRY,"49") -LOCVAL(LOCALE_IDEFAULTCODEPAGE,"851") +LOCVAL(LOCALE_IDEFAULTCODEPAGE,"850") LOCVAL(LOCALE_IDEFAULTANSICODEPAGE,"1252") LOCVAL(LOCALE_SLIST,";") LOCVAL(LOCALE_IMEASURE,"0") LOCVAL(LOCALE_SDECIMAL,",") LOCVAL(LOCALE_STHOUSAND,".") -/* LOCVAL(LOCALE_SGROUPING) */ +LOCVAL(LOCALE_SGROUPING,"3;0") LOCVAL(LOCALE_IDIGITS,"2") +LOCVAL(LOCALE_IDEFAULTMACCODEPAGE,"10000") LOCVAL(LOCALE_ILZERO,"1") -/* LOCVAL(LOCALE_INEGNUMBER) */ +LOCVAL(LOCALE_INEGNUMBER,"1") LOCVAL(LOCALE_SNATIVEDIGITS, "0123456789") LOCVAL(LOCALE_SCURRENCY,"DM") LOCVAL(LOCALE_SINTLSYMBOL, "DEM") @@ -32,35 +33,35 @@ LOCVAL(LOCALE_SMONDECIMALSEP, ",") LOCVAL(LOCALE_SMONTHOUSANDSEP, ".") LOCVAL(LOCALE_SMONGROUPING, "3;0") LOCVAL(LOCALE_ICURRDIGITS,"2") -/* LOCVAL(LOCALE_IINTLCURRDIGITS) */ +LOCVAL(LOCALE_IINTLCURRDIGITS,"2") LOCVAL(LOCALE_ICURRENCY,"3") LOCVAL(LOCALE_INEGCURR,"8") LOCVAL(LOCALE_SDATE,".") LOCVAL(LOCALE_STIME,":") -LOCVAL(LOCALE_SSHORTDATE,"dd.MM.yyyy") -LOCVAL(LOCALE_SLONGDATE,"ddd, d. MMMM yyyy") -/* LOCVAL(LOCALE_STIMEFORMAT) */ +LOCVAL(LOCALE_SSHORTDATE,"dd.MM.yy") +LOCVAL(LOCALE_SLONGDATE,"dddd, d. MMMM yyyy") +LOCVAL(LOCALE_STIMEFORMAT,"HH:mm:ss") LOCVAL(LOCALE_IDATE,"1") -/* LOCVAL(LOCALE_ILDATE) */ +LOCVAL(LOCALE_ILDATE,"1") LOCVAL(LOCALE_ITIME,"1") -/* LOCVAL(LOCALE_ITIMEMARKPOSN) */ -/* LOCVAL(LOCALE_ICENTURY) */ +LOCVAL(LOCALE_ITIMEMARKPOSN,"0") +LOCVAL(LOCALE_ICENTURY,"0") LOCVAL(LOCALE_ITLZERO,"1") -/* LOCVAL(LOCALE_IDAYLZERO) */ -/* LOCVAL(LOCALE_IMONLZERO) */ +LOCVAL(LOCALE_IDAYLZERO,"1") +LOCVAL(LOCALE_IMONLZERO,"1") LOCVAL(LOCALE_S1159,"") LOCVAL(LOCALE_S2359,"") LOCVAL(LOCALE_ICALENDARTYPE, "1") -/* LOCVAL(LOCALE_IOPTIONALCALENDAR) */ -/* LOCVAL(LOCALE_IFIRSTDAYOFWEEK) */ -/* LOCVAL(LOCALE_IFIRSTWEEKOFYEAR) */ +LOCVAL(LOCALE_IOPTIONALCALENDAR,"0") +LOCVAL(LOCALE_IFIRSTDAYOFWEEK,"0") +LOCVAL(LOCALE_IFIRSTWEEKOFYEAR,"2") LOCVAL(LOCALE_SDAYNAME1,"Montag") LOCVAL(LOCALE_SDAYNAME2,"Dienstag") LOCVAL(LOCALE_SDAYNAME3,"Mittwoch") LOCVAL(LOCALE_SDAYNAME4,"Donnerstag") LOCVAL(LOCALE_SDAYNAME5,"Freitag") -LOCVAL(LOCALE_SDAYNAME6,"Sonnabend") +LOCVAL(LOCALE_SDAYNAME6,"Samstag") LOCVAL(LOCALE_SDAYNAME7,"Sonntag") LOCVAL(LOCALE_SABBREVDAYNAME1,"Mo") @@ -87,7 +88,7 @@ LOCVAL(LOCALE_SMONTHNAME13,"") LOCVAL(LOCALE_SABBREVMONTHNAME1,"Jan") LOCVAL(LOCALE_SABBREVMONTHNAME2,"Feb") -LOCVAL(LOCALE_SABBREVMONTHNAME3,"Mär") +LOCVAL(LOCALE_SABBREVMONTHNAME3,"Mrz") LOCVAL(LOCALE_SABBREVMONTHNAME4,"Apr") LOCVAL(LOCALE_SABBREVMONTHNAME5,"Mai") LOCVAL(LOCALE_SABBREVMONTHNAME6,"Jun") @@ -101,11 +102,12 @@ LOCVAL(LOCALE_SABBREVMONTHNAME13,"") LOCVAL(LOCALE_SPOSITIVESIGN, "") LOCVAL(LOCALE_SNEGATIVESIGN, "-") -/* LOCVAL(LOCALE_IPOSSIGNPOSN) */ -/* LOCVAL(LOCALE_INEGSIGNPOSN) */ -/* LOCVAL(LOCALE_IPOSSYMPRECEDES) */ -/* LOCVAL(LOCALE_IPOSSEPBYSPACE) */ -/* LOCVAL(LOCALE_INEGSYMPRECEDES) */ -/* LOCVAL(LOCALE_INEGSEPBYSPACE) */ - -/* Gregorianischer Kalender */ +LOCVAL(LOCALE_IPOSSIGNPOSN,"1") +LOCVAL(LOCALE_INEGSIGNPOSN,"1") +LOCVAL(LOCALE_IPOSSYMPRECEDES,"0") +LOCVAL(LOCALE_IPOSSEPBYSPACE,"1") +LOCVAL(LOCALE_INEGSYMPRECEDES,"0") +LOCVAL(LOCALE_INEGSEPBYSPACE,"1") +LOCVAL(LOCALE_FONTSIGNATURE,"/") +LOCVAL(LOCALE_SISO639LANGNAME,"de") +LOCVAL(LOCALE_SISO3166CTRYNAME,"DE") diff --git a/ole/ole2nls.c b/ole/ole2nls.c index 85b343db08b..6b693937f8b 100644 --- a/ole/ole2nls.c +++ b/ole/ole2nls.c @@ -42,6 +42,7 @@ static struct tagLOCALE_NAME2ID { LOCALE_ENTRY(IDEFAULTCOUNTRY), LOCALE_ENTRY(IDEFAULTCODEPAGE), LOCALE_ENTRY(IDEFAULTANSICODEPAGE), + LOCALE_ENTRY(IDEFAULTMACCODEPAGE), LOCALE_ENTRY(SLIST), LOCALE_ENTRY(IMEASURE), LOCALE_ENTRY(SDECIMAL), @@ -127,7 +128,9 @@ static struct tagLOCALE_NAME2ID { LOCALE_ENTRY(IPOSSEPBYSPACE), LOCALE_ENTRY(INEGSYMPRECEDES), LOCALE_ENTRY(INEGSEPBYSPACE), -/* LOCALE_ENTRY(FONTSIGNATURE),*/ + LOCALE_ENTRY(FONTSIGNATURE), + LOCALE_ENTRY(SISO639LANGNAME), + LOCALE_ENTRY(SISO3166CTRYNAME), {NULL,0}, }; @@ -419,6 +422,11 @@ INT32 WINAPI GetLocaleInfo32A(LCID lcid,LCTYPE LCType,LPSTR buf,INT32 len) TRACE(ole,"(lcid=0x%lx,lctype=0x%lx,%p,%x)\n", lcid,LCType,buf,len); + if (len && (! buf) ) + { SetLastError(ERROR_INSUFFICIENT_BUFFER); + return 0; + } + if (lcid == LOCALE_SYSTEM_DEFAULT || (LCType & LOCALE_NOUSEROVERRIDE) ) { lcid = GetSystemDefaultLCID(); } @@ -517,39 +525,53 @@ LANG_END /*Insert other languages here*/ default: - found=0; - break; - } /* switch */ + 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 = ""; + /* language not found, try without a sublanguage*/ + if (i==1) lang=MAKELANGID( PRIMARYLANGID(lang), SUBLANG_DEFAULT); + + /* mask the LC Value */ + if (i==2) LCType &= 0xfff; + + i++; + } while (!found && i<3); + + if(!found) + { ERR(ole,"'%s' not supported for your language.\n", retString); + SetLastError(ERROR_INVALID_PARAMETER); + return 0; } - if (buf) + /* if len=0 return only the length, don't touch the buffer*/ + if (len) lstrcpyn32A(buf,retString,len); + return strlen(retString)+1; } /****************************************************************************** * GetLocaleInfo32W [KERNEL32.343] * - * Is the last parameter really WORD for Win16? */ INT32 WINAPI GetLocaleInfo32W(LCID lcid,LCTYPE LCType,LPWSTR wbuf,INT32 len) -{ - LPSTR abuf = (LPSTR)HeapAlloc(GetProcessHeap(),0,len); +{ WORD wlen; + LPSTR abuf; + + if (len && (! wbuf) ) + { SetLastError(ERROR_INSUFFICIENT_BUFFER); + return 0; + } + + abuf = (LPSTR)HeapAlloc(GetProcessHeap(),0,len); + wlen = 2 * GetLocaleInfo32A(lcid, LCType, abuf, len); + + if (wlen && len) /* if len=0 return only the length*/ + lstrcpynAtoW(wbuf,abuf,len/2); - INT32 n = GetLocaleInfo32A(lcid, LCType, abuf, len); - if (wbuf) - lstrcpynAtoW(wbuf,abuf,len); HeapFree(GetProcessHeap(),0,abuf); - return n; + return wlen; } /******************************************************************************