You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
3.5 KiB
117 lines
3.5 KiB
/*=========================================================================*
|
|
|
|
|
| |
|
|
| Copyright 1995 by Microsoft Corporation |
|
|
| KevinGj - January 1997 |
|
|
| |
|
|
|=========================================================================|
|
|
| LangInfo.cpp : Locale/Language information |
|
|
*=========================================================================*/
|
|
|
|
#include <cdlpch.h>
|
|
//=======================================================================//
|
|
|
|
HRESULT GetLangStringMod(HMODULE hMod, LCID localeID, char *szThisLang, int iLen);
|
|
|
|
|
|
//**********nSize needs to be greater than 2 at least.
|
|
BOOL CLangInfo::GetAcceptLanguageString(LCID Locale, char *szAcceptLngStr, int nSize)
|
|
{
|
|
CHAR szThisLang[MAX_PATH];
|
|
BOOL bRetVal = TRUE;
|
|
HRESULT hr;
|
|
|
|
if (!m_hMod)
|
|
{
|
|
m_hMod = LoadLibrary("mlang.dll");
|
|
}
|
|
if (!m_hMod)
|
|
{
|
|
bRetVal = FALSE;
|
|
goto Exit;
|
|
}
|
|
|
|
hr = GetLangStringMod(m_hMod, Locale, szThisLang, sizeof(szThisLang));
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
if (lstrlenA(szThisLang) < nSize)
|
|
{
|
|
strcpy(szAcceptLngStr, szThisLang);
|
|
|
|
DEBUG_PRINT(DOWNLOAD,
|
|
INFO,
|
|
("CLangInfo::GetAcceptLanguageString::this=%#x, szAcceptLngStr=%.10q\n",
|
|
this, szAcceptLngStr
|
|
));
|
|
}
|
|
else
|
|
{
|
|
bRetVal = FALSE;
|
|
}
|
|
|
|
goto Exit;
|
|
}
|
|
|
|
LCID lcid = (NULL);
|
|
char szLocaleStr[10];
|
|
lcid = GetPrimaryLanguageInfo(Locale, szLocaleStr, sizeof(szLocaleStr));
|
|
if(lcid)
|
|
{
|
|
hr = GetLangStringMod(m_hMod, lcid, szThisLang, sizeof(szThisLang));
|
|
if (SUCCEEDED(hr) && (lstrlenA(szThisLang) < nSize))
|
|
{
|
|
strcpy(szAcceptLngStr, szThisLang);
|
|
szAcceptLngStr[2] = '\0';
|
|
|
|
DEBUG_PRINT(DOWNLOAD,
|
|
INFO,
|
|
("CLangInfo::GetAcceptLanguageString-Primary::this=%#x, szAcceptLngStr=%.10q\n",
|
|
this, szAcceptLngStr
|
|
));
|
|
|
|
goto Exit;
|
|
}
|
|
}
|
|
|
|
bRetVal = FALSE;
|
|
|
|
Exit:
|
|
return bRetVal;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------//
|
|
|
|
BOOL CLangInfo::GetLocaleStrings(LCID Locale, char *szLocaleStr, int iLen) const
|
|
|
|
{
|
|
int iReturn = 0;
|
|
char szBuff[50];
|
|
|
|
iReturn = GetLocaleInfo(Locale, LOCALE_SABBREVLANGNAME, szBuff, sizeof(szBuff));
|
|
|
|
if((!iReturn) || ((sizeof(szLocaleStr)/sizeof(szLocaleStr[0])) < iReturn))
|
|
return(0);
|
|
|
|
StrNCpy(szLocaleStr, szBuff, iLen);
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
//-----------------------------------------------------------------------//
|
|
|
|
LCID CLangInfo::GetPrimaryLanguageInfo(LCID Locale, char *szLocaleStr, int iLen) const
|
|
{
|
|
LCID lcid = NULL;
|
|
int iReturn = 0;
|
|
char szBuff[50];
|
|
|
|
lcid = MAKELCID(MAKELANGID(PRIMARYLANGID(LANGIDFROMLCID(Locale)), SUBLANG_DEFAULT), SORT_DEFAULT);
|
|
iReturn = GetLocaleInfo(lcid, LOCALE_SABBREVLANGNAME, szBuff, sizeof(szBuff));
|
|
|
|
if((!iReturn) || ((sizeof(szLocaleStr)/sizeof(szLocaleStr[0])) < iReturn))
|
|
return(0);
|
|
|
|
StrNCpy(szLocaleStr, szBuff, iLen);
|
|
return(lcid);
|
|
}
|