MultiLanguage.h
上传用户: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. #pragma once
  20. #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
  21. // Windows Header Files:
  22. #include <windows.h>
  23. #include <tchar.h>
  24. #include <map>
  25. #include <fstream>
  26. #include <string>
  27. using namespace std;
  28. #ifdef _UNICODE
  29. #define tstring wstring
  30. #define tifstream wifstream
  31. #else
  32. #define tstring string
  33. #define tifstream ifstream
  34. #endif
  35. // Type definitions
  36. typedef struct LANGINFO_DEF {
  37. int Count;
  38. LANGID LangID;
  39. } LANGINFO;
  40. typedef LANGINFO *PLANGINFO;
  41. class StringMapLoader
  42. {
  43. public:
  44. StringMapLoader(void);
  45. virtual ~StringMapLoader(void);
  46. static bool SwitchLanguage(
  47. const LANGID langID // in, 语言ID
  48. );
  49. static bool GetCurLanguage(
  50. LANGID& langID // out, 当前语言的ID
  51. );
  52. /*
  53. static UINT GetAvailableLanguageCount();
  54. static bool GetAvailableLanguage()
  55. */
  56. static UINT GetStrByStr(
  57. const LPCTSTR keyStr, // in, 索引字符串
  58. LPTSTR buf, // out, 存储字符串的缓冲区
  59. const UINT bufSize // in, 缓冲区的大小
  60. );
  61. private:
  62. // 处理Windows NT4上Hongkong SAR version的问题
  63. LANGID GetNTDLLNativeLangID();
  64. BOOL IsHongKongVersion();
  65. // 获取本机使用的语言编号,如果找不到,则选择默认语言
  66. LANGID DetectLanguage();
  67. //根据文件名读取转译文件
  68. bool LoadLanguageFile(
  69. const string &filename // 目标文件,相对路径
  70. );
  71. private:
  72. enum {
  73. DEFAULT_LANG_ID = 0x0409, // 默认语言(英语)
  74. HONGKONG_LANG_ID = 0x0c04, // 香港默认语言
  75. TAIWAN_LANG_ID = 0x0404, // 台湾默认语言
  76. MAINLAND_LANG_ID = 0x0804, // 内地默认语言
  77. MAX_KEY_BUFFER = 80, // 字符语言ID的长度限制
  78. };
  79. map <LANGID, string> m_mapLangId2Str; // LanguageID与描述字符串的对应,比如0x0804对应"zh_CN", 0x0404对应"zh_TW"
  80. map <tstring, tstring> m_mapKeyStr2ValStr; // Key字符串 与 当前语言字符串的对应
  81. LANGID m_idCurLang; // 获取当前语言ID
  82. };
  83. #ifdef __cplusplus    // If used by C++ code, 
  84. extern "C" {          // we need to export the C interface
  85. #endif
  86. // 改变当前语言
  87. __declspec(dllexport) bool SwitchLanguage(
  88. const LANGID langID // in, 语言的ID
  89. )
  90. {
  91. return StringMapLoader::SwitchLanguage(langID);
  92. }
  93. // 获取当前语言ID
  94. __declspec(dllexport) bool GetCurLanguage(
  95. LANGID& langID // out, 当前语言的ID
  96. )
  97. {
  98. return StringMapLoader::GetCurLanguage(langID);
  99. }
  100. /*
  101. // 获取可用的语言数目
  102. __declspec(dllexport) UINT GetAvailableLanguageCount()
  103. {
  104. return StringMapLoader::GetAvailableLanguageCount();
  105. }
  106. // 获取可用的语言列表
  107. __declspec(dllexport) bool GetAvailableLanguage(
  108. const LANGID* pList, // out, 存储列表的缓冲区
  109. const UINT maxSize // in, 列表的大小限制
  110. )
  111. {
  112. return StringMapLoader::GetAvailableLanguage();
  113. }
  114. */
  115. // 根据字符串获取对应的当前语言字符串,返回语言字符串的长度
  116. __declspec(dllexport) UINT GetStrByStr(
  117. LPCTSTR keyStr, // in, 索引字符串
  118. LPTSTR buf, // out, 存储字符串的缓冲区
  119. const UINT bufSize // in, 缓冲区的大小
  120. )
  121. {
  122. return StringMapLoader::GetStrByStr(keyStr, buf, bufSize);
  123. }
  124. #ifdef __cplusplus    // If used by C++ code, 
  125. }
  126. #endif