void Localization::LoadJSON(const JSONValue& source) { for (JSONObject::ConstIterator i = source.Begin(); i != source.End(); ++i) { String id = i->first_; if (id.Empty()) { LOGWARNING("Localization::LoadJSON(source): string ID is empty"); continue; } const JSONValue& langs = i->second_; for (JSONObject::ConstIterator j = langs.Begin(); j != langs.End(); ++j) { const String& lang = j->first_; if (lang.Empty()) { LOGWARNING("Localization::LoadJSON(source): language name is empty, string ID=\"" + id + "\""); continue; } const String& string = j->second_.GetString(); if (string.Empty()) { LOGWARNING( "Localization::LoadJSON(source): translation is empty, string ID=\"" + id + "\", language=\"" + lang + "\""); continue; } if (strings_[StringHash(lang)][StringHash(id)] != String::EMPTY) { LOGWARNING( "Localization::LoadJSON(source): override translation, string ID=\"" + id + "\", language=\"" + lang + "\""); } strings_[StringHash(lang)][StringHash(id)] = string; if (!languages_.Contains(lang)) languages_.Push(lang); if (languageIndex_ == -1) languageIndex_ = 0; } } }