diff --git a/src/pc/djui/djui_language.c b/src/pc/djui/djui_language.c index 1de53e651..2720342f8 100644 --- a/src/pc/djui/djui_language.c +++ b/src/pc/djui/djui_language.c @@ -7,33 +7,43 @@ #include "pc/djui/djui_language.h" #include "pc/djui/djui_popup.h" +static ini_t* sEnglishLang = NULL; static ini_t* sLang = NULL; bool djui_language_init(char* lang) { // free old ini - if (sLang != NULL) { - ini_free(sLang); - sLang = NULL; - } + ini_free(sLang); + sLang = NULL; + ini_free(sEnglishLang); + sEnglishLang = NULL; // construct path char path[SYS_MAX_PATH] = ""; if (!lang || lang[0] == '\0') { lang = "English"; } snprintf(path, SYS_MAX_PATH, "%s/lang/%s.ini", sys_resource_path(), lang); - // load + // load user lang sLang = ini_load(path); + // load english lang + snprintf(path, SYS_MAX_PATH, "%s/lang/English.ini", sys_resource_path()); + sEnglishLang = ini_load(path); + return sLang != NULL; } -char* djui_language_get(const char *section, const char *key) { - if (!sLang) { return (char*)key; } - char* value = (char*)ini_get(sLang, section, key); +static char* djui_language_get_english(const char *section, const char *key) { + char* value = (char*)ini_get(sEnglishLang, section, key); if (!value) { return (char*)key; } return value; } +char* djui_language_get(const char *section, const char *key) { + char* value = (char*)ini_get(sLang, section, key); + if (!value) { return djui_language_get_english(section, key); } + return value; +} + char* djui_language_find_key(const char* section, const char* value) { if (!sLang) return NULL; return (char*)ini_find_key(sLang, section, value); diff --git a/src/pc/ini.c b/src/pc/ini.c index 91927cbba..068afb949 100644 --- a/src/pc/ini.c +++ b/src/pc/ini.c @@ -215,7 +215,7 @@ fail: * Deletes ini_t struct from memory. */ void ini_free(ini_t *ini) { - free(ini->data); + if (ini) free(ini->data); free(ini); } @@ -256,6 +256,7 @@ const char* ini_find_key(ini_t *ini, const char* section, const char* value) { * @return string with the key. */ const char* ini_get(ini_t *ini, const char *section, const char *key) { + if (!ini) return NULL; char *current_section = ""; char *val; char *p = ini->data;