diff --git a/include/NazaraLocalization/Localization.hpp b/include/NazaraLocalization/Localization.hpp index c8e4aa9..528b044 100644 --- a/include/NazaraLocalization/Localization.hpp +++ b/include/NazaraLocalization/Localization.hpp @@ -15,6 +15,8 @@ namespace Nz using Dependencies = TypeList; struct Config {}; + NazaraStaticSignal(OnLocalesInstalled, const std::vector&); + Localization(Config config); ~Localization(); @@ -23,6 +25,7 @@ namespace Nz // Changes the locale bool SetLocale(const std::string& locale); + std::vector GetInstalledLocales() const; bool FindIndexForKey(std::string_view key, size_t& index) const; const std::string& GetStringAtIndex(size_t index) const; diff --git a/src/NazaraLocalization/Localization.cpp b/src/NazaraLocalization/Localization.cpp index 2b7e4d5..71a8dde 100644 --- a/src/NazaraLocalization/Localization.cpp +++ b/src/NazaraLocalization/Localization.cpp @@ -7,6 +7,7 @@ namespace Nz { Localization* Localization::s_instance = nullptr; + NazaraStaticSignalImpl(Localization, OnLocalesInstalled); Localization::Localization(Config /*config*/) : ModuleBase("Localization", this) @@ -27,6 +28,8 @@ namespace Nz std::string line; std::getline(file, line); + size_t oldLocalesCount = m_locales.size(); + std::vector locales; SplitString(line, ";", [&](std::string_view str) { if (!str.empty()) @@ -56,6 +59,17 @@ namespace Nz // ensure all loaded locales have values (even if empty) for all lookup keys for (auto&& locale : m_locales) locale.localizedStrings.resize(m_lookupTable.size()); + + size_t newLocalesCount = m_locales.size(); + + if (oldLocalesCount != newLocalesCount) + { + std::vector v; + for (size_t i = oldLocalesCount - 1; i < newLocalesCount - 1; ++i) + v.push_back(m_locales[i].name); + + OnLocalesInstalled(v); + } return true; } @@ -74,8 +88,13 @@ namespace Nz return false; } - m_currentLocale = &(*it); - return true; + std::vector Localization::GetInstalledLocales() const + { + std::vector v; + v.reserve(m_locales.size()); + for (auto&& locale : m_locales) + v.push_back(locale.name); + return v; } bool Localization::FindIndexForKey(std::string_view key, size_t& index) const