more lang class code cleanup and better caching of techtree strings

This commit is contained in:
Mark Vejvoda 2013-10-29 17:28:29 +00:00
parent d2ba7b163b
commit 0c00b49995
2 changed files with 39 additions and 39 deletions

View File

@ -63,7 +63,7 @@ void Lang::loadGameStrings(string uselanguage, bool loadFonts,
}
bool languageChanged = (uselanguage != this->language);
this->language= uselanguage;
loadGameStringProperties(uselanguage, gameStringsMainLanguage, true, fallbackToDefault);
loadGameStringProperties(uselanguage, gameStringsAllLanguages[this->language], true, fallbackToDefault);
if(languageChanged == true) {
Font::resetToDefaults();
@ -276,7 +276,6 @@ void Lang::loadScenarioStrings(string scenarioDir, string scenarioName, bool isT
void Lang::loadTechTreeStrings(string techTree,bool forceLoad) {
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] techTree = [%s]\n",__FILE__,__FUNCTION__,__LINE__,techTree.c_str());
//printf("Load techtree strings techTree [%s] techNameLoaded [%s] forceLoad: %d\n",techTree.c_str(),techNameLoaded.c_str(),forceLoad);
if(forceLoad == false && techTree == techNameLoaded) {
return;
}
@ -288,8 +287,6 @@ void Lang::loadTechTreeStrings(string techTree,bool forceLoad) {
string &techPath = techPaths[idx];
endPathWithSlash(techPath);
//printf("techPath [%s]\n",techPath.c_str());
if(folderExists(techPath + techTree) == true) {
currentPath = techPath;
endPathWithSlash(currentPath);
@ -302,13 +299,14 @@ void Lang::loadTechTreeStrings(string techTree,bool forceLoad) {
string pathDefault = techTreeFolder + "lang/" + techTree + "_default.lng";
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] path = [%s] pathDefault = [%s]\n",__FILE__,__FUNCTION__,__LINE__,path.c_str(),pathDefault.c_str());
techTreeStrings.clear();
techTreeStringsDefault.clear();
//techTreeStrings.clear();
//techTreeStringsDefault.clear();
//try to load the current language first
if(fileExists(path)) {
if(forceLoad == true || path != techTreeStrings.getpath()) {
techTreeStrings.load(path);
if(forceLoad == true ||
path != techTreeStringsAllLanguages[techTree][this->language].getpath()) {
techTreeStringsAllLanguages[techTree][this->language].load(path);
techNameLoaded = techTree;
}
}
@ -316,20 +314,24 @@ void Lang::loadTechTreeStrings(string techTree,bool forceLoad) {
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] path not found [%s]\n",__FILE__,__FUNCTION__,__LINE__,path.c_str());
//try english otherwise
path = techTreeFolder + "lang/" + techTree + "_english.lng";
string default_language = "english";
path = techTreeFolder + "lang/" + techTree + "_" + default_language + ".lng";
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] path = [%s]\n",__FILE__,__FUNCTION__,__LINE__,path.c_str());
if(fileExists(path)) {
if(forceLoad == true || path != techTreeStrings.getpath()) {
techTreeStrings.load(path);
if(forceLoad == true ||
path != techTreeStringsAllLanguages[techTree][default_language].getpath()) {
techTreeStringsAllLanguages[techTree][default_language].load(path);
techNameLoaded = techTree;
}
}
}
if(fileExists(pathDefault)) {
if(forceLoad == true || pathDefault != techTreeStrings.getpath()) {
techTreeStringsDefault.load(pathDefault);
string default_language = "default";
if(forceLoad == true ||
pathDefault != techTreeStringsAllLanguages[techTree][default_language].getpath()) {
techTreeStringsAllLanguages[techTree][default_language].load(pathDefault);
techNameLoaded = techTree;
}
}
@ -388,23 +390,23 @@ bool Lang::hasString(const string &s, string uselanguage, bool fallbackToDefault
try {
if(uselanguage != "") {
//printf("#a fallbackToDefault = %d [%s] uselanguage [%s] DEFAULT_LANGUAGE [%s] this->language [%s]\n",fallbackToDefault,s.c_str(),uselanguage.c_str(),DEFAULT_LANGUAGE,this->language.c_str());
if(gameStringsOtherLanguages.find(uselanguage) == gameStringsOtherLanguages.end()) {
loadGameStringProperties(uselanguage, gameStringsOtherLanguages[uselanguage], false);
if(gameStringsAllLanguages.find(uselanguage) == gameStringsAllLanguages.end()) {
loadGameStringProperties(uselanguage, gameStringsAllLanguages[uselanguage], false);
}
//string result2 = otherLanguageStrings[uselanguage].getString(s);
gameStringsOtherLanguages[uselanguage].getString(s);
gameStringsAllLanguages[uselanguage].getString(s);
//printf("#b result2 [%s]\n",result2.c_str());
result = true;
}
else {
//string result2 = strings.getString(s);
gameStringsMainLanguage.getString(s);
gameStringsAllLanguages[this->language].getString(s);
result = true;
}
}
catch(exception &ex) {
if(gameStringsMainLanguage.getpath() != "") {
if(gameStringsAllLanguages[this->language].getpath() != "") {
if(SystemFlags::VERBOSE_MODE_ENABLED) SystemFlags::OutputDebug(SystemFlags::debugError,"In [%s::%s Line: %d] Error [%s] for uselanguage [%s]\n",__FILE__,__FUNCTION__,__LINE__,ex.what(),uselanguage.c_str());
}
@ -435,21 +437,21 @@ string Lang::getString(const string &s, string uselanguage, bool fallbackToDefau
string result = "";
if(uselanguage != "") {
if(gameStringsOtherLanguages.find(uselanguage) == gameStringsOtherLanguages.end()) {
loadGameStringProperties(uselanguage, gameStringsOtherLanguages[uselanguage], false);
if(gameStringsAllLanguages.find(uselanguage) == gameStringsAllLanguages.end()) {
loadGameStringProperties(uselanguage, gameStringsAllLanguages[uselanguage], false);
}
result = gameStringsOtherLanguages[uselanguage].getString(s);
result = gameStringsAllLanguages[uselanguage].getString(s);
replaceAll(result, "\\n", "\n");
}
else {
result = gameStringsMainLanguage.getString(s);
result = gameStringsAllLanguages[this->language].getString(s);
replaceAll(result, "\\n", "\n");
}
return parseResult(s, result);;
}
catch(exception &ex) {
if(gameStringsMainLanguage.getpath() != "") {
if(gameStringsAllLanguages[this->language].getpath() != "") {
if(fallbackToDefault == false || SystemFlags::VERBOSE_MODE_ENABLED) {
if(GlobalStaticFlags::getIsNonGraphicalModeEnabled() == false) {
if(SystemFlags::VERBOSE_MODE_ENABLED) SystemFlags::OutputDebug(SystemFlags::debugError,"In [%s::%s Line: %d] Error [%s] uselanguage [%s] text [%s]\n",__FILE__,__FUNCTION__,__LINE__,ex.what(),uselanguage.c_str(),s.c_str());
@ -499,22 +501,23 @@ bool Lang::hasScenarioString(const string &s) {
string Lang::getTechTreeString(const string &s,const char *defaultValue) {
try{
string default_language = "default";
string result = "";
//printf("getTechTreeString [%s] allowNativeLanguageTechtree: %d techTreeStrings.hasString(s): %d path [%s]\n",s.c_str(),allowNativeLanguageTechtree,techTreeStrings.hasString(s),techTreeStrings.getpath().c_str());
if(allowNativeLanguageTechtree == true &&
(techTreeStrings.hasString(s) == true || defaultValue == NULL)) {
if(techTreeStrings.hasString(s) == false && techTreeStringsDefault.hasString(s) == true) {
result = techTreeStringsDefault.getString(s);
(techTreeStringsAllLanguages[techNameLoaded][this->language].hasString(s) == true ||
defaultValue == NULL)) {
if(techTreeStringsAllLanguages[techNameLoaded][this->language].hasString(s) == false &&
techTreeStringsAllLanguages[techNameLoaded][default_language].hasString(s) == true) {
result = techTreeStringsAllLanguages[techNameLoaded][default_language].getString(s);
}
else {
result = techTreeStrings.getString(s);
result = techTreeStringsAllLanguages[techNameLoaded][this->language].getString(s);
}
}
else if(allowNativeLanguageTechtree == true &&
techTreeStringsDefault.hasString(s) == true) {
result = techTreeStringsDefault.getString(s);
techTreeStringsAllLanguages[techNameLoaded][default_language].hasString(s) == true) {
result = techTreeStringsAllLanguages[techNameLoaded][default_language].getString(s);
}
else if(defaultValue != NULL) {
result = defaultValue;
@ -523,7 +526,7 @@ string Lang::getTechTreeString(const string &s,const char *defaultValue) {
return result;
}
catch(exception &ex) {
if(techTreeStrings.getpath() != "") {
if(techTreeStringsAllLanguages[techNameLoaded][this->language].getpath() != "") {
SystemFlags::OutputDebug(SystemFlags::debugError,"In [%s::%s Line: %d] Error [%s]\n",__FILE__,__FUNCTION__,__LINE__,ex.what());
}
return "???" + s + "???";

View File

@ -32,20 +32,17 @@ using Shared::Util::Properties;
class Lang {
private:
string language;
bool is_utf8_language;
Properties gameStringsMainLanguage;
std::map<string,Properties> gameStringsOtherLanguages;
bool is_utf8_language;
string language;
std::map<string,Properties> gameStringsAllLanguages;
Properties scenarioStrings;
Properties techTreeStrings;
Properties techTreeStringsDefault;
Properties tilesetStrings;
Properties tilesetStringsDefault;
std::map<string, std::map<string, Properties> > techTreeStringsAllLanguages;
string techNameLoaded;
bool allowNativeLanguageTechtree;