MultiLanguageMgr.cpp
上传用户:liguizhu
上传日期:2015-11-01
资源大小:2422k
文件大小:4k
源码类别:

P2P编程

开发平台:

Visual C++

  1. /*
  2.  *  Openmysee
  3.  *
  4.  *  This program is free software; you can redistribute it and/or modify
  5.  *  it under the terms of the GNU General Public License as published by
  6.  *  the Free Software Foundation; either version 2 of the License, or
  7.  *  (at your option) any later version.
  8.  *
  9.  *  This program is distributed in the hope that it will be useful,
  10.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  *  GNU General Public License for more details.
  13.  *
  14.  *  You should have received a copy of the GNU General Public License
  15.  *  along with this program; if not, write to the Free Software
  16.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17.  *
  18.  */
  19. #include "stdafx.h"
  20. #include ".multilanguagemgr.h"
  21. MultiLanguage::MultiLanguage() : m_innerbuflength(0), m_pinnerbuf(NULL)
  22. {
  23. pCore = MultiLanguageCore::GetCore();
  24. }
  25. MultiLanguage::~MultiLanguage()
  26. {
  27. delete[] m_pinnerbuf;
  28. }
  29. BOOL MultiLanguage::isDllOK()
  30. {
  31. return pCore != NULL;
  32. }
  33. MultiLanguage::MultiLanguageCore MultiLanguage::MultiLanguageCore::Core;
  34. MultiLanguage::MultiLanguageCore::MultiLanguageCore()
  35. {
  36. h_LanguageDLL = NULL;
  37. }
  38. MultiLanguage::MultiLanguageCore::~MultiLanguageCore()
  39. {
  40. if(h_LanguageDLL)
  41. FreeLibrary(h_LanguageDLL);
  42. }
  43. MultiLanguage::MultiLanguageCore* MultiLanguage::MultiLanguageCore::GetCore()
  44. {
  45. if(Core.h_LanguageDLL != NULL)
  46. return &Core;
  47. HMODULE hmodule = LoadLibrary(_T("Multilanguage.dll"));
  48. if(hmodule == NULL)
  49. {
  50. return NULL;
  51. }
  52. Core.procSwitchLanguage = (Proc_SwitchLanguage) GetProcAddress(hmodule, "SwitchLanguage");
  53. Core.procGetStringByStr = (Proc_GetStringByStr) GetProcAddress(hmodule, "GetStrByStr");
  54. Core.procGetCurLanguage = (Proc_GetCurLanguage) GetProcAddress(hmodule, "GetCurLanguage");
  55. return &Core;
  56. }
  57. BOOL MultiLanguage::SwitchLanguage(const LANGID langID)
  58. {
  59. if(pCore == NULL || pCore->procSwitchLanguage == NULL)
  60. return FALSE;
  61. return pCore->procSwitchLanguage(langID) == true;
  62. }
  63. UINT MultiLanguage::GetStringByStr(LPCTSTR keyStr, LPTSTR buf, UINT bufSize)
  64. {
  65. if(!(pCore == NULL || pCore->procGetStringByStr == NULL))
  66. {
  67. UINT size = pCore->procGetStringByStr(keyStr, buf, bufSize);
  68. if(size != 0)
  69. {
  70. return size;
  71. }
  72. }
  73. _tcsncpy(buf, keyStr, bufSize);
  74. return (UINT) _tcslen(keyStr);
  75. }
  76. BOOL MultiLanguage::GetStringByStrEx(LPCTSTR keyStr, LPTSTR buf, const UINT bufSize, UINT* buflength)
  77. {
  78. size_t size;
  79. if(!(pCore == NULL || pCore->procGetStringByStr == NULL))
  80. {
  81. size = pCore->procGetStringByStr(keyStr, buf, bufSize);
  82. if(size !=0)
  83. {
  84. if(buflength != NULL)
  85. *buflength = (UINT) size;
  86. return TRUE;
  87. }
  88. }
  89. _tcsncpy(buf, keyStr, bufSize);
  90. size = _tcslen(keyStr);
  91. if(buflength != NULL)
  92. *buflength = (UINT) size;
  93. return FALSE;
  94. }
  95. LPCTSTR MultiLanguage::GetStringByStr(LPCTSTR keyStr)
  96. {
  97. if(m_innerbuflength == 0)
  98. {
  99. m_innerbuflength = 1034;
  100. m_pinnerbuf = new TCHAR[m_innerbuflength];
  101. }
  102. memset(m_pinnerbuf, 0, sizeof(TCHAR)*m_innerbuflength);
  103. int ret = (int) GetStringByStr(keyStr, m_pinnerbuf, m_innerbuflength - 10);
  104. if(ret >= (m_innerbuflength - 10))
  105. {
  106. m_innerbuflength = ret + 10;
  107. delete[] m_pinnerbuf;
  108. m_pinnerbuf = new TCHAR[m_innerbuflength];
  109. GetStringByStr(keyStr, m_pinnerbuf, m_innerbuflength);
  110. }
  111. return m_pinnerbuf;
  112. }
  113. LANGID MultiLanguage::GetCurLanguage()
  114. {
  115. if(!(pCore == NULL || pCore->procGetCurLanguage == NULL))
  116. {
  117. LANGID id;
  118. if(pCore->procGetCurLanguage(id))
  119. return id;
  120. else
  121. return 0x0409; //default langid
  122. }
  123. return 0x0409;
  124. }