33 const std::string
XML_TYPE(
"Language");
50 if (!mIsInitialise)
return;
56 mIsInitialise =
false;
66 std::string default_lang;
67 bool event_change =
false;
78 while (info.
next(
"Info"))
87 while (source_info.
next(
"Source"))
96 while (source_info.
next(
"Source"))
98 std::string file_source = source_info->
getContent();
100 mMapFile[name].push_back(file_source);
103 if (name == mCurrentLanguageName)
105 loadLanguage(file_source,
false);
114 if (!default_lang.empty())
116 else if (event_change)
122 mMapLanguage.clear();
124 mCurrentLanguageName = _name;
126 MapListString::iterator item = mMapFile.find(_name);
127 if (item == mMapFile.end())
129 MYGUI_LOG(Error,
"Language '" << _name <<
"' is not found");
133 for (VectorString::const_iterator iter=item->second.begin(); iter!=item->second.end(); ++iter)
135 loadLanguage(*iter,
false);
141 bool LanguageManager::loadLanguage(
const std::string& _file,
bool _user)
146 MYGUI_LOG(Error,
"file '" << _file <<
"' not found");
150 if (_file.find(
".xml") != std::string::npos)
151 _loadLanguageXML(data, _user);
153 _loadLanguage(data, _user);
159 void LanguageManager::_loadLanguageXML(IDataStream* _stream,
bool _user)
163 if (doc.open(_stream))
169 while (tag.next(
"Tag"))
172 mUserMapLanguage[tag->findAttribute(
"name")] = tag->getContent();
174 mMapLanguage[tag->findAttribute(
"name")] = tag->getContent();
180 void LanguageManager::_loadLanguage(IDataStream* _stream,
bool _user)
184 while (!_stream->eof())
186 _stream->readline(read,
'\n');
187 if (read.empty())
continue;
190 if ((
uint8)read[0] == 0xEF && read.size() > 2)
195 if (read[read.size()-1] ==
'\r') read.erase(read.size()-1, 1);
196 if (read.empty())
continue;
198 size_t pos = read.find_first_of(
" \t");
201 if (pos == std::string::npos) mUserMapLanguage[read] =
"";
202 else mUserMapLanguage[read.substr(0, pos)] = read.substr(pos+1, std::string::npos);
206 if (pos == std::string::npos) mMapLanguage[read] =
"";
207 else mMapLanguage[read.substr(0, pos)] = read.substr(pos+1, std::string::npos);
218 if (mMapLanguage.empty() && mUserMapLanguage.empty())
242 if (iter2 == end)
return line;
245 size_t start = iter - line.
begin();
246 size_t len = (iter2 - line.
begin()) - start - 1;
250 MapLanguageString::iterator replace = mMapLanguage.find(tag);
251 if (replace == mMapLanguage.end())
253 replace = mUserMapLanguage.find(tag);
254 find = replace != mUserMapLanguage.end();
259 iter = line.
insert(iter,
'#') + size_t(len + 2);
264 iter = line.
erase(iter -
size_t(1), iter2 +
size_t(1));
265 size_t pos = iter - line.
begin();
266 line.
insert(pos, replace->second);
267 iter = line.
begin() + pos + replace->second.length();
269 if (iter == end)
return line;
288 MapLanguageString::iterator iter = mMapLanguage.find(_tag);
289 if (iter == mMapLanguage.end())
291 iter = mUserMapLanguage.find(_tag);
292 if (iter != mUserMapLanguage.end())
return iter->second;
301 return mCurrentLanguageName;
306 mUserMapLanguage[_tag] = _replace;
311 mUserMapLanguage.clear();
316 return loadLanguage(_file,
true);