#ifndef COMPONENTS_L10N_MANAGER_H #define COMPONENTS_L10N_MANAGER_H #include <memory> #include <components/l10n/messagebundles.hpp> namespace VFS { class Manager; } namespace l10n { class Manager { public: Manager(const VFS::Manager* vfs) : mVFS(vfs) { } void dropCache() { mCache.clear(); } void setPreferredLocales(const std::vector<std::string>& locales, bool gmstHasPriority = true); const std::vector<icu::Locale>& getPreferredLocales() const { return mPreferredLocales; } void setGmstLoader(std::function<std::string(std::string_view)> fn) { mGmstLoader = std::move(fn); } std::shared_ptr<const MessageBundles> getContext( const std::string& contextName, const std::string& fallbackLocale = "en"); std::string getMessage(const std::string& contextName, std::string_view key) { return getContext(contextName)->formatMessage(key, {}, {}); } private: void readLangData(const std::string& name, MessageBundles& ctx, const icu::Locale& lang); void updateContext(const std::string& name, MessageBundles& ctx); const VFS::Manager* mVFS; std::vector<icu::Locale> mPreferredLocales; std::map<std::pair<std::string, std::string>, std::shared_ptr<MessageBundles>> mCache; std::function<std::string(std::string_view)> mGmstLoader; }; } #endif // COMPONENTS_L10N_MANAGER_H