获取多语言下文件路径

语言和地区设置

#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;
}

//

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值