Fixed bug in loading lang files

This commit is contained in:
mathusummut
2018-06-29 22:02:49 +02:00
parent dfd4a658aa
commit 778eb71ab7

View File

@@ -533,43 +533,23 @@ namespace Glest {
} }
} }
bool Lang::hasString(const string & s, string uselanguage, bool Lang::hasString(const string & s, string uselanguage, bool fallbackToDefault) {
bool fallbackToDefault) { bool result;
bool result = false; if (uselanguage != "") {
try { //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 (uselanguage != "") { if (gameStringsAllLanguages.find(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()); gameStringsAllLanguages.end()) {
if (gameStringsAllLanguages.find(uselanguage) == loadGameStringProperties(uselanguage,
gameStringsAllLanguages.end()) { gameStringsAllLanguages[uselanguage],
loadGameStringProperties(uselanguage, false);
gameStringsAllLanguages[uselanguage],
false);
}
//string result2 = otherLanguageStrings[uselanguage].getString(s);
result = gameStringsAllLanguages[uselanguage].getString(s).length() != 0;
//printf("#b result2 [%s]\n",result2.c_str());
} else {
//string result2 = strings.getString(s);
result = gameStringsAllLanguages[this->language].getString(s).length() != 0;
}
if (!result && fallbackToDefault == true && uselanguage != DEFAULT_LANGUAGE
&& this->language != DEFAULT_LANGUAGE) {
result = hasString(s, DEFAULT_LANGUAGE, false);
}
} catch (exception & ex) {
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());
}
//printf("#1 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 (fallbackToDefault == true && uselanguage != DEFAULT_LANGUAGE
&& this->language != DEFAULT_LANGUAGE) {
result = hasString(s, DEFAULT_LANGUAGE, false);
} }
result = gameStringsAllLanguages[uselanguage].getString(s).length() != 0;
} else {
result = gameStringsAllLanguages[this->language].getString(s).length() != 0;
}
if (!result && fallbackToDefault == true && uselanguage != DEFAULT_LANGUAGE
&& this->language != DEFAULT_LANGUAGE) {
result = hasString(s, DEFAULT_LANGUAGE, false);
} }
return result; return result;
} }
@@ -579,172 +559,99 @@ namespace Glest {
} }
string Lang::parseResult(const string & key, const string & value) { string Lang::parseResult(const string & key, const string & value) {
if (value != "$USE_DEFAULT_LANGUAGE_VALUE") { if (key.length() == 0 || value != "$USE_DEFAULT_LANGUAGE_VALUE") {
return value; return value;
} }
string result = Lang::getString(key, DEFAULT_LANGUAGE); string result = Lang::getString(key, DEFAULT_LANGUAGE);
return result; return result;
} }
string Lang::getString(const string & s, string uselanguage,
bool fallbackToDefault) {
try {
string result = "";
if (uselanguage != "") { string Lang::getString(const string & s, string uselanguage, bool fallbackToDefault) {
if (gameStringsAllLanguages.find(uselanguage) == string result = "";
gameStringsAllLanguages.end()) {
loadGameStringProperties(uselanguage, if (uselanguage != "") {
gameStringsAllLanguages[uselanguage], if (gameStringsAllLanguages.find(uselanguage) ==
false); gameStringsAllLanguages.end()) {
} loadGameStringProperties(uselanguage,
result = gameStringsAllLanguages[uselanguage].getString(s); gameStringsAllLanguages[uselanguage],
replaceAll(result, "\\n", "\n"); false);
} else {
result = gameStringsAllLanguages[this->language].getString(s);
replaceAll(result, "\\n", "\n");
}
return parseResult(s, result);;
} catch (exception & ex) {
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());
}
}
}
//printf("#2 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(fallbackToDefault == true && uselanguage != DEFAULT_LANGUAGE && this->language != DEFAULT_LANGUAGE) {
if (uselanguage != DEFAULT_LANGUAGE
&& this->language != DEFAULT_LANGUAGE) {
return getString(s, DEFAULT_LANGUAGE, false);
} }
result = gameStringsAllLanguages[uselanguage].getString(s);
replaceAll(result, "\\n", "\n");
} else {
result = gameStringsAllLanguages[this->language].getString(s);
replaceAll(result, "\\n", "\n");
} }
if (result.length() != 0)
return parseResult(s, result);
if (uselanguage != DEFAULT_LANGUAGE
&& this->language != DEFAULT_LANGUAGE) {
return getString(s, DEFAULT_LANGUAGE, false);
}
return s; return s;
} }
string Lang::getScenarioString(const string & s) { string Lang::getScenarioString(const string & s) {
try { string result = scenarioStrings.getString(s);
string result = scenarioStrings.getString(s); if (result.length() == 0)
replaceAll(result, "\\n", "\n");
return result;
} catch (exception & ex) {
if (scenarioStrings.getpath() != "") {
SystemFlags::OutputDebug(SystemFlags::debugError,
"In [%s::%s Line: %d] Error [%s]\n",
__FILE__, __FUNCTION__, __LINE__,
ex.what());
}
return getTechTreeString(s); return getTechTreeString(s);
} replaceAll(result, "\\n", "\n");
}
bool Lang::hasScenarioString(const string & s) {
bool result = false;
try {
result = scenarioStrings.getString(s).length() != 0;
} catch (exception & ex) {
if (scenarioStrings.getpath() != "") {
if (SystemFlags::VERBOSE_MODE_ENABLED)
SystemFlags::OutputDebug(SystemFlags::debugError,
"In [%s::%s Line: %d] Error [%s]\n",
__FILE__, __FUNCTION__, __LINE__,
ex.what());
}
}
return result; return result;
} }
string Lang::getTechTreeString(const string & s, bool Lang::hasScenarioString(const string & s) {
const char *defaultValue) { return scenarioStrings.getString(s).length() != 0;
try { }
string result = "";
string default_language = "default";
//printf("Line: %d techNameLoaded = %s s = %s this->language = %s\n",__LINE__,techNameLoaded.c_str(),s.c_str(),this->language.c_str()); string Lang::getTechTreeString(const string & s, const char *defaultValue) {
string result = "";
string default_language = "default";
if (allowNativeLanguageTechtree == true && //printf("Line: %d techNameLoaded = %s s = %s this->language = %s\n",__LINE__,techNameLoaded.c_str(),s.c_str(),this->language.c_str());
(techTreeStringsAllLanguages[techNameLoaded][this->language].
hasString(s) == true || defaultValue == NULL)) {
if (techTreeStringsAllLanguages[techNameLoaded][this->language].
hasString(s) == false
&&
techTreeStringsAllLanguages[techNameLoaded][default_language].
hasString(s) == true) {
//printf("Line: %d techNameLoaded = %s s = %s this->language = %s\n",__LINE__,techNameLoaded.c_str(),s.c_str(),this->language.c_str()); if (allowNativeLanguageTechtree == true &&
(techTreeStringsAllLanguages[techNameLoaded][this->language].hasString(s) == true || defaultValue == NULL)) {
result = if (techTreeStringsAllLanguages[techNameLoaded][this->language].hasString(s) == false &&
techTreeStringsAllLanguages[techNameLoaded][default_language]. techTreeStringsAllLanguages[techNameLoaded][default_language].hasString(s) == true) {
getString(s);
} else {
//printf("Line: %d techNameLoaded = %s s = %s this->language = %s\n",__LINE__,techNameLoaded.c_str(),s.c_str(),this->language.c_str());
result =
techTreeStringsAllLanguages[techNameLoaded][this->language].
getString(s);
}
} else if (allowNativeLanguageTechtree == true &&
techTreeStringsAllLanguages[techNameLoaded]
[default_language].hasString(s) == true) {
//printf("Line: %d techNameLoaded = %s s = %s this->language = %s\n",__LINE__,techNameLoaded.c_str(),s.c_str(),this->language.c_str()); //printf("Line: %d techNameLoaded = %s s = %s this->language = %s\n",__LINE__,techNameLoaded.c_str(),s.c_str(),this->language.c_str());
result = result = techTreeStringsAllLanguages[techNameLoaded][default_language].getString(s);
techTreeStringsAllLanguages[techNameLoaded][default_language]. } else {
getString(s); //printf("Line: %d techNameLoaded = %s s = %s this->language = %s\n",__LINE__,techNameLoaded.c_str(),s.c_str(),this->language.c_str());
} else if (defaultValue != NULL) { result = techTreeStringsAllLanguages[techNameLoaded][this->language].getString(s);
result = defaultValue;
}
replaceAll(result, "\\n", "\n");
return result;
} catch (exception & ex) {
if (techTreeStringsAllLanguages[techNameLoaded][this->language].
getpath() != "") {
SystemFlags::OutputDebug(SystemFlags::debugError,
"In [%s::%s Line: %d] Error [%s]\n",
__FILE__, __FUNCTION__, __LINE__,
ex.what());
} }
} else if (allowNativeLanguageTechtree == true && techTreeStringsAllLanguages[techNameLoaded][default_language].hasString(s) == true) {
//printf("Line: %d techNameLoaded = %s s = %s this->language = %s\n",__LINE__,techNameLoaded.c_str(),s.c_str(),this->language.c_str());
result = techTreeStringsAllLanguages[techNameLoaded][default_language].getString(s);
} else if (defaultValue != NULL) {
result = defaultValue;
} }
return s; replaceAll(result, "\\n", "\n");
return result.length() == 0 && defaultValue == NULL ? s : result;
} }
string Lang::getTilesetString(const string & s, const char *defaultValue) { string Lang::getTilesetString(const string & s, const char *defaultValue) {
try { string result = "";
string result = "";
if (tilesetStrings.hasString(s) == true || defaultValue == NULL) { if (tilesetStrings.hasString(s) == true || defaultValue == NULL) {
if (tilesetStrings.hasString(s) == false if (tilesetStrings.hasString(s) == false
&& tilesetStringsDefault.hasString(s) == true) { && tilesetStringsDefault.hasString(s) == true) {
result = tilesetStringsDefault.getString(s);
} else {
result = tilesetStrings.getString(s);
}
} else if (tilesetStringsDefault.hasString(s) == true) {
result = tilesetStringsDefault.getString(s); result = tilesetStringsDefault.getString(s);
} else if (defaultValue != NULL) { } else {
result = defaultValue; result = tilesetStrings.getString(s);
}
replaceAll(result, "\\n", "\n");
return result;
} catch (exception & ex) {
if (tilesetStrings.getpath() != "") {
SystemFlags::OutputDebug(SystemFlags::debugError,
"In [%s::%s Line: %d] Error [%s]\n",
__FILE__, __FUNCTION__, __LINE__,
ex.what());
} }
} else if (tilesetStringsDefault.hasString(s) == true) {
result = tilesetStringsDefault.getString(s);
} else if (defaultValue != NULL) {
result = defaultValue;
} }
return s; replaceAll(result, "\\n", "\n");
return result.length() == 0 && defaultValue == NULL ? s : result;
} }
bool Lang::fileMatchesISO630Code(string uselanguage, bool Lang::fileMatchesISO630Code(string uselanguage,
@@ -812,24 +719,12 @@ namespace Glest {
} else { } else {
Properties stringsTest; Properties stringsTest;
stringsTest.load(testLanguageFile); stringsTest.load(testLanguageFile);
result = stringsTest.getString("NativeLanguageName");
try { if (result.length() == 0) {
result = stringsTest.getString("NativeLanguageName"); if (SystemFlags::VERBOSE_MODE_ENABLED)
printf("ERROR Caching native language name for [%s] msg: [UNKNOWN]\n", testLanguageFile.c_str());
} else
cachedNativeLanguageNames[testLanguageFile] = result; cachedNativeLanguageNames[testLanguageFile] = result;
if (SystemFlags::VERBOSE_MODE_ENABLED)
printf("Caching native language name for [%s] = [%s]\n",
testLanguageFile.c_str(), result.c_str());
} catch (const exception & ex) {
if (SystemFlags::VERBOSE_MODE_ENABLED)
printf("ERROR Caching native language name for [%s] msg: [%s]\n",
testLanguageFile.c_str(), ex.what());
} catch (...) {
if (SystemFlags::VERBOSE_MODE_ENABLED)
printf
("ERROR Caching native language name for [%s] msg: [UNKNOWN]\n",
testLanguageFile.c_str());
}
} }
return result; return result;