#define SS_C_MAX_LANGCTRYNAME 30
int SSGetLANGName(LCID id, LPTSTR lpNameBuffer, int nNameBufferSize)
{
return GetLocaleInfo(id, LOCALE_SISO639LANGNAME, lpNameBuffer, nNameBufferSize);
}
int SSGetCTRYName(LCID id, LPTSTR lpNameBuffer, int nNameBufferSize)
{
return GetLocaleInfo(id, LOCALE_SISO3166CTRYNAME, lpNameBuffer, nNameBufferSize);
}
int SSGetLANGCTRYName(LCID id, LPTSTR lpNameBuffer, int nNameBufferSize)
{
int rv = SSGetLANGName(id, lpNameBuffer, nNameBufferSize);
if(rv <= 0)
{
return rv;
}
size_t len = _tcslen(lpNameBuffer);
if(len + 1 + 1 >= nNameBufferSize)
{
return -1;
}
lpNameBuffer[len] = TEXT('-');
lpNameBuffer[len + 1] = TEXT('/0');
rv = SSGetCTRYName(id, lpNameBuffer + len + 1, nNameBufferSize - len);
if(rv <= 0)
{
return rv;
}
return _tcslen(lpNameBuffer);
}
BOOL SSFixFolderPath(LPTSTR lpPath, TCHAR cSpliter = TEXT('//'))
{
if(lpPath == NULL || _tcslen(lpPath) <= 0)
return TRUE;
TCHAR cValidSpliter = cSpliter;
if(cValidSpliter != TEXT('//') && cValidSpliter != TEXT('/'))
return FALSE;
TCHAR cInvalidSpliter = ( (cSpliter == TEXT('//')) ) ? TEXT('/') : TEXT('//');
LPTSTR lpS = lpPath;
while( (lpS = _tcschr(lpS, cInvalidSpliter)) != NULL )
{
*lpS = cValidSpliter;
lpS++;
}
if(_tcslen(lpPath) > 0)
{
if(lpPath[_tcslen(lpPath)-1] == cValidSpliter)
lpPath[_tcslen(lpPath)-1] = TEXT('/0');
}
return TRUE;
}
BOOL SSBuildNameUnderLangFolder(LCID id, LPTSTR lpNameBuffer, int nNameBufferSize, LPCTSTR lpFolder, LPCTSTR lpName)
{
if(lpNameBuffer == NULL || nNameBufferSize <= 0)
{
return FALSE;
}
TCHAR lpStackBuffer[MAX_PATH] = TEXT(".//");
if(lpFolder != NULL)
{
if(_tcslen(lpFolder) >= _countof(lpStackBuffer))
{
return FALSE;
}
if(_tcslen(lpFolder) > 0)
{
_tcscpy_s(lpStackBuffer, lpFolder);
}
}
if(!SSFixFolderPath(lpStackBuffer))
return FALSE;
TCHAR lpLangCtryName[SS_C_MAX_LANGCTRYNAME] = {0};
if(SSGetLANGCTRYName(id, lpLangCtryName, SS_C_MAX_LANGCTRYNAME) <= 0)
return FALSE;
if(_tcslen(lpStackBuffer) + 1 + _tcslen(lpLangCtryName) >= _countof(lpStackBuffer))
return FALSE;
_tcscat_s(lpStackBuffer, TEXT("//"));
_tcscat_s(lpStackBuffer, lpLangCtryName);
if(_taccess(lpStackBuffer, 0) == -1)
{
LPTSTR lpS = _tcsrchr(lpStackBuffer, TEXT('-'));
if(lpS == NULL)
return FALSE;
*lpS = TEXT('/0');
if(_taccess(lpStackBuffer, 0) == -1)
return FALSE;
}
if(lpName == NULL || _tcslen(lpName) <= 0)
return TRUE;
if(_tcslen(lpStackBuffer) + 1 + _tcslen(lpName) >= nNameBufferSize)
return FALSE;
_tcscpy_s(lpNameBuffer, nNameBufferSize, lpStackBuffer);
_tcscat_s(lpNameBuffer, nNameBufferSize, TEXT("//"));
_tcscat_s(lpNameBuffer, nNameBufferSize, lpName);
return TRUE;
}
//