From 043cd5789c655190573bd6e66643caf1e8e11ada Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Tue, 15 Nov 2011 18:38:13 +0000 Subject: [PATCH] - default to english is a selected language is missing --- source/glest_game/global/lang.cpp | 17 +++++++++++++---- source/glest_game/global/lang.h | 4 ++-- source/glest_game/main/main.cpp | 2 +- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/source/glest_game/global/lang.cpp b/source/glest_game/global/lang.cpp index 161e75c4..9bd6506c 100644 --- a/source/glest_game/global/lang.cpp +++ b/source/glest_game/global/lang.cpp @@ -46,10 +46,11 @@ Lang &Lang::getInstance() { return lang; } -void Lang::loadStrings(const string &uselanguage, bool loadFonts) { +void Lang::loadStrings(const string &uselanguage, bool loadFonts, + bool fallbackToDefault) { bool languageChanged = (uselanguage != this->language); this->language= uselanguage; - loadStrings(uselanguage, strings, true); + loadStrings(uselanguage, strings, true, fallbackToDefault); if(languageChanged == true) { Font::resetToDefaults(); @@ -155,14 +156,15 @@ void Lang::loadStrings(const string &uselanguage, bool loadFonts) { // end win32 #endif - if(loadFonts) { + if(loadFonts == true) { CoreData &coreData= CoreData::getInstance(); coreData.loadFonts(); } } } -void Lang::loadStrings(const string &uselanguage, Properties &properties, bool fileMustExist) { +void Lang::loadStrings(const string &uselanguage, Properties &properties, bool fileMustExist, + bool fallbackToDefault) { properties.clear(); string data_path = getGameReadWritePath(GameConstants::path_data_CacheLookupKey); //string languageFile = data_path + "data/lang/" + uselanguage + ".lng"; @@ -170,6 +172,13 @@ void Lang::loadStrings(const string &uselanguage, Properties &properties, bool f if(fileMustExist == false && fileExists(languageFile) == false) { return; } + else if(fileExists(languageFile) == false && fallbackToDefault == true) { + if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] path = [%s]\n",__FILE__,__FUNCTION__,__LINE__,languageFile.c_str()); + //throw runtime_error("File NOT FOUND, can't open file: [" + languageFile + "]"); + printf("Language file NOT FOUND, can't open file: [%s] switching to default language: %s\n",languageFile.c_str(),DEFAULT_LANGUAGE); + + languageFile = getGameCustomCoreDataPath(data_path, "data/lang/" + string(DEFAULT_LANGUAGE) + ".lng"); + } is_utf8_language = valid_utf8_file(languageFile.c_str()); properties.load(languageFile); } diff --git a/source/glest_game/global/lang.h b/source/glest_game/global/lang.h index 88f70457..03e91d7b 100644 --- a/source/glest_game/global/lang.h +++ b/source/glest_game/global/lang.h @@ -37,12 +37,12 @@ private: private: Lang(); - void loadStrings(const string &language, Properties &properties, bool fileMustExist); + void loadStrings(const string &language, Properties &properties, bool fileMustExist,bool fallbackToDefault=false); public: static Lang &getInstance(); - void loadStrings(const string &uselanguage, bool loadFonts=true); + void loadStrings(const string &uselanguage, bool loadFonts=true, bool fallbackToDefault=false); void loadScenarioStrings(const string &scenarioDir, const string &scenarioName); string get(const string &s,string uselanguage="", bool fallbackToDefault=false); diff --git a/source/glest_game/main/main.cpp b/source/glest_game/main/main.cpp index 0067bd0f..9e06b812 100644 --- a/source/glest_game/main/main.cpp +++ b/source/glest_game/main/main.cpp @@ -2869,7 +2869,7 @@ int glestMain(int argc, char** argv) { } Renderer &renderer= Renderer::getInstance(); - lang.loadStrings(language,false); + lang.loadStrings(language,false, true); if( lang.hasString("FONT_HEIGHT_TEXT")) { Font::langHeightText = config.getString("FONT_HEIGHT_TEXT",Font::langHeightText.c_str());