diff --git a/app_language.cpp b/app_language.cpp index 6971967..d8d794f 100644 --- a/app_language.cpp +++ b/app_language.cpp @@ -686,9 +686,11 @@ public: notify_.erase(it); } } - int get_default_string_id(const char* str) + int get_string_id(const char* str, bool def) { - for (auto& v : map_default_) + std::map* lang = def ? &map_default_ : pak_now_; + + for (auto& v : *lang) { if (v.second == str) return v.first; @@ -696,6 +698,42 @@ public: return -1; } + const char* transform_language(const char* in, bool to_def, bool* found) + { + if (cur_cp_ == DEFAULT_CODE_PAGE) + { + if (found) + *found = true; + + return in; + } + + int id = get_string_id(in, false); + std::map* t = to_def ? &map_default_ : pak_now_; + + if (id == -1) + { + if (found) + *found = false; + + return in; + } + + if (t->count(id)) + { + if (found) + *found = true; + + return (*t)[id].c_str(); + } + else + { + if (found) + *found = false; + + return in; + } + } }; lang_mgr* lang_mgr::inst_ = nullptr; @@ -729,8 +767,17 @@ extern "C" lang_mgr::instance()->register_language_changed_notify(lan_changed, reg, param); } - int lang_get_string_id(const char* utf8_hz) + int lang_get_string_id(const char* str, bool def_lang) { - return lang_mgr::instance()->get_default_string_id(utf8_hz); + return lang_mgr::instance()->get_string_id(str, def_lang); + } + + const char* to_default_language(const char* str, bool* ok) + { + return lang_mgr::instance()->transform_language(str, true, ok); + } + const char* from_default_language(const char* str, bool* ok) + { + return lang_mgr::instance()->transform_language(str, false, ok); } }