00001 /* 00002 Free Download Manager Copyright (c) 2003-2007 FreeDownloadManager.ORG 00003 Open Download Manager Copyright (c) 2008-2010 OpenDownloadManager.ORG 00004 */ 00005 00006 #include "fsLangMgr.h" 00007 #include "vmsFile.h" 00008 00009 #ifdef _DEBUG 00010 #undef THIS_FILE 00011 static char THIS_FILE[]=__FILE__; 00012 #define new DEBUG_NEW 00013 #endif 00014 00015 fsLangMgr::fsLangMgr() 00016 { 00017 m_iCurLng = -1; 00018 } 00019 00020 fsLangMgr::~fsLangMgr() 00021 { 00022 00023 } 00024 00025 #define LNG_COMMENT_CHAR ';' 00026 00027 BOOL fsLangMgr::Initialize(LPCSTR pszFolder) 00028 { 00029 m_strFolder = pszFolder; 00030 00031 WIN32_FIND_DATA wfd; 00032 00033 std::string strMask = m_strFolder; 00034 strMask += "\\*.lng"; 00035 00036 HANDLE hFind = FindFirstFile (strMask.c_str (), &wfd); 00037 BOOL bFind = hFind != INVALID_HANDLE_VALUE; 00038 00039 while (bFind) 00040 { 00041 fsLngFileInfo info; 00042 info.strFileName = m_strFolder; 00043 info.strFileName += "\\"; 00044 info.strFileName += wfd.cFileName; 00045 00046 vmsFile file; 00047 if (file.open (info.strFileName.c_str ())) 00048 { 00049 00050 while (file.read (info.strLngName)) 00051 { 00052 if (info.strLngName.length () && info.strLngName [0] != LNG_COMMENT_CHAR) 00053 { 00054 AddLngFileInfo (info); 00055 break; 00056 } 00057 } 00058 } 00059 00060 bFind = FindNextFile (hFind, &wfd); 00061 } 00062 00063 if (hFind != INVALID_HANDLE_VALUE) 00064 FindClose (hFind); 00065 00066 LoadEngFileStrings (); 00067 00068 return m_vLngFiles.size () != 0; 00069 } 00070 00071 int fsLangMgr::GetLngCount() 00072 { 00073 return m_vLngFiles.size (); 00074 } 00075 00076 LPCSTR fsLangMgr::GetLngName(int iIndex) 00077 { 00078 return m_vLngFiles [iIndex].strLngName.c_str (); 00079 } 00080 00081 BOOL fsLangMgr::LoadLng(int iIndex) 00082 { 00083 vmsFile file; 00084 if (file.open (m_vLngFiles [iIndex].strFileName.c_str ())) 00085 { 00086 std::string str; 00087 00088 do 00089 { 00090 if (FALSE == file.read (str)) 00091 return FALSE; 00092 00093 if (str.length () && str [0] != LNG_COMMENT_CHAR) 00094 break; 00095 } 00096 while (TRUE); 00097 00098 m_vStrings.clear (); 00099 00100 00101 while (file.read (str)) 00102 { 00103 if (str.length () == 0 || str [0] == LNG_COMMENT_CHAR) 00104 continue; 00105 00106 PreprocessLanguageString (str); 00107 m_vStrings.add (str); 00108 } 00109 00110 m_iCurLng = iIndex; 00111 00112 return m_vStrings.size () != 0; 00113 } 00114 00115 return FALSE; 00116 } 00117 00118 int fsLangMgr::FindLngByName(LPCSTR pszName) 00119 { 00120 for (int i = 0; i < m_vLngFiles.size (); i++) 00121 if (m_vLngFiles [i].strLngName == pszName) 00122 return i; 00123 00124 return -1; 00125 } 00126 00127 int fsLangMgr::GetStringCount() 00128 { 00129 return m_vStrings.size (); 00130 } 00131 00132 LPCSTR fsLangMgr::GetString(int iIndex) 00133 { 00134 static char szNull [1] = {0}; 00135 00136 if (iIndex < m_vStrings.size ()) 00137 return m_vStrings [iIndex].c_str (); 00138 else if (iIndex < m_vEngStrings.size ()) 00139 return m_vEngStrings [iIndex].c_str (); 00140 else 00141 return szNull; 00142 } 00143 00144 int fsLangMgr::GetCurLng() 00145 { 00146 return m_iCurLng; 00147 } 00148 00149 void fsLangMgr::AddLngFileInfo(fsLngFileInfo &info) 00150 { 00151 for (int i = 0; i < m_vLngFiles.size (); i++) 00152 { 00153 if (lstrcmpi (m_vLngFiles [i].strLngName.c_str (), info.strLngName.c_str ()) > 0) 00154 { 00155 m_vLngFiles.insert (i, info); 00156 return; 00157 } 00158 } 00159 00160 m_vLngFiles.add (info); 00161 } 00162 00163 void fsLangMgr::LoadEngFileStrings() 00164 { 00165 for (int i = 0; i < GetLngCount (); i++) 00166 { 00167 if (stricmp (GetLngName (i), "English") == 0) 00168 { 00169 LoadLng (i); 00170 m_vEngStrings = m_vStrings; 00171 } 00172 } 00173 } 00174 00175 void fsLangMgr::PreprocessLanguageString(std::string &str) 00176 { 00177 int n; 00178 00179 do { 00180 n = str.find ("\\n"); 00181 if (n != -1) 00182 str.replace (n, 2, "\n"); 00183 }while (n != -1); 00184 }
1.5.6