diff --git a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp index 8c9632f02..de9e7aefa 100644 --- a/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp +++ b/win-linux/extras/update-daemon/src/classes/csvcmanager.cpp @@ -381,7 +381,7 @@ void CSvcManager::init() break; case MSG_SetLanguage: - Translator::setLanguage(params[1]); + Translator::instance().setLanguage(params[1]); break; default: diff --git a/win-linux/extras/update-daemon/src/classes/translator.cpp b/win-linux/extras/update-daemon/src/classes/translator.cpp index 35d748ef3..ac7ec674b 100644 --- a/win-linux/extras/update-daemon/src/classes/translator.cpp +++ b/win-linux/extras/update-daemon/src/classes/translator.cpp @@ -61,14 +61,23 @@ wstring StrToWStr(const string &str) } #endif -TranslationsMap Translator::translMap = TranslationsMap(); -tstring Translator::langName = _T("en"); -bool Translator::is_translations_valid = false; +Translator::Translator() : + langName(_T("en")), + is_translations_valid(false) +{ + +} + +Translator& Translator::instance() +{ + static Translator inst; + return inst; +} #ifdef _WIN32 -Translator::Translator(const tstring &lang, int resourceId) +void Translator::init(const tstring &lang, int resourceId) #else -Translator::Translator(const tstring &lang, const char *resourcePath) +void Translator::init(const tstring &lang, const char *resourcePath) #endif { langName = lang; diff --git a/win-linux/extras/update-daemon/src/classes/translator.h b/win-linux/extras/update-daemon/src/classes/translator.h index 28bb5f680..9594e3fa6 100644 --- a/win-linux/extras/update-daemon/src/classes/translator.h +++ b/win-linux/extras/update-daemon/src/classes/translator.h @@ -13,7 +13,7 @@ # define tstring std::string #endif -#define _TR(str) Translator::tr(#str) +#define _TR(str) Translator::instance().tr(#str) using std::unordered_map; @@ -24,24 +24,29 @@ typedef unordered_map TranslationsMap; class Translator { public: -#ifdef _WIN32 - Translator(const tstring &lang, int resourceId); -#else - Translator(const tstring &lang, const char *resourcePath); -#endif - ~Translator(); + Translator(const Translator&) = delete; + Translator& operator=(const Translator&) = delete; + static Translator& instance(); - static tstring tr(const char*); - static void setLanguage(const tstring &lang); +#ifdef _WIN32 + void init(const tstring &lang, int resourceId); +#else + void init(const tstring &lang, const char *resourcePath); +#endif + tstring tr(const char*); + void setLanguage(const tstring &lang); private: + Translator(); + ~Translator(); + void parseTranslations(); - static TranslationsMap translMap; + TranslationsMap translMap; tstring translations, error_substr; - static tstring langName; - static bool is_translations_valid; + tstring langName; + bool is_translations_valid; enum TokenType { TOKEN_BEGIN_DOCUMENT = 0, diff --git a/win-linux/extras/update-daemon/src/platform_linux/main.cpp b/win-linux/extras/update-daemon/src/platform_linux/main.cpp index 8a556ac7a..e730ed608 100644 --- a/win-linux/extras/update-daemon/src/platform_linux/main.cpp +++ b/win-linux/extras/update-daemon/src/platform_linux/main.cpp @@ -62,7 +62,7 @@ int main(int argc, char *argv[]) if (NS_Utils::cmdArgContains("--log")) NS_Logger::AllowWriteLog(); std::locale::global(std::locale("")); - Translator lang(NS_Utils::GetAppLanguage(), "/langs/langs.isl"); + Translator::instance().init(NS_Utils::GetAppLanguage(), "/langs/langs.isl"); CSocket socket(0, INSTANCE_SVC_PORT); if (!socket.isPrimaryInstance()) return 0; diff --git a/win-linux/extras/update-daemon/src/platform_win/main.cpp b/win-linux/extras/update-daemon/src/platform_win/main.cpp index ab06c28bc..a626adb99 100644 --- a/win-linux/extras/update-daemon/src/platform_win/main.cpp +++ b/win-linux/extras/update-daemon/src/platform_win/main.cpp @@ -102,7 +102,7 @@ int __cdecl _tmain (int argc, TCHAR *argv[]) if (NS_Utils::cmdArgContains(_T("--log"))) NS_Logger::AllowWriteLog(); std::locale::global(std::locale("")); - Translator lang(NS_Utils::GetAppLanguage().c_str(), IDT_TRANSLATIONS); + Translator::instance().init(NS_Utils::GetAppLanguage().c_str(), IDT_TRANSLATIONS); CSocket socket(0, INSTANCE_SVC_PORT); if (!socket.isPrimaryInstance()) return 0; @@ -144,7 +144,7 @@ int __cdecl _tmain (int argc, TCHAR *argv[]) } std::locale::global(std::locale("")); - Translator lang(NS_Utils::GetAppLanguage().c_str(), IDT_TRANSLATIONS); + Translator::instance().init(NS_Utils::GetAppLanguage().c_str(), IDT_TRANSLATIONS); SERVICE_TABLE_ENTRY DispatchTable[] = { {(LPTSTR)SERVICE_NAME, (LPSERVICE_MAIN_FUNCTION)SvcMain},