From d56380a94b61fa38576b33880a102a6ed6267429 Mon Sep 17 00:00:00 2001 From: y5nw <37980625+y5nw@users.noreply.github.com> Date: Mon, 24 Feb 2025 16:57:40 +0100 Subject: [PATCH] Implement language list for core.get_translated_string --- src/server.cpp | 25 +++++++++++++++---------- src/server.h | 3 ++- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/server.cpp b/src/server.cpp index 139dc0e196..b046cc3724 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -4243,28 +4243,33 @@ void Server::broadcastModChannelMessage(const std::string &channel, } } -Translations *Server::getTranslationLanguage(const std::string &lang_code) +Translations *Server::getTranslationLanguage(const std::string &lang) { - if (lang_code.empty()) + if (lang.empty()) return nullptr; - auto it = server_translations.find(lang_code); - if (it != server_translations.end()) - return &it->second; // Already loaded + std::unordered_set load_langs; - // [] will create an entry - auto *translations = &server_translations[lang_code]; + for (const auto &lang_code: str_split(lang, ':')) { + if (loaded_translations.find(lang_code) == loaded_translations.end()) { + load_langs.insert(lang_code); + loaded_translations.insert(lang_code); + } + } + + if (load_langs.empty()) + return &server_translations; for (const auto &i : m_media) { - if (Translations::getFileLanguage(i.first) == lang_code) { + if (load_langs.find(std::string(Translations::getFileLanguage(i.first))) != load_langs.end()) { std::string data; if (fs::ReadFile(i.second.path, data, true)) { - translations->loadTranslation(i.first, data); + server_translations.loadTranslation(i.first, data); } } } - return translations; + return &server_translations; } std::unordered_map Server::getMediaList() diff --git a/src/server.h b/src/server.h index 24818c6b0e..b0f94cb25c 100644 --- a/src/server.h +++ b/src/server.h @@ -701,7 +701,8 @@ private: // Craft definition manager IWritableCraftDefManager *m_craftdef; - std::unordered_map server_translations; + Translations server_translations; + std::unordered_set loaded_translations; ModIPCStore m_ipcstore;