[win-linux] updatesvc: use singleton access for Translator

This commit is contained in:
SimplestStudio
2025-06-18 18:24:57 +03:00
parent 0cf7a84ad4
commit b121ba6c05
5 changed files with 35 additions and 21 deletions

View File

@ -381,7 +381,7 @@ void CSvcManager::init()
break;
case MSG_SetLanguage:
Translator::setLanguage(params[1]);
Translator::instance().setLanguage(params[1]);
break;
default:

View File

@ -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;

View File

@ -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<tstring, LocaleMap> 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,

View File

@ -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;

View File

@ -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},