From 44f5fa5c8f258e8fc1f7d7e2e45e0485bd6cc490 Mon Sep 17 00:00:00 2001 From: rtk0c Date: Wed, 31 Mar 2021 20:19:18 -0700 Subject: Complete items tab (UI and serialization) --- core/src/Utils/I18n.hpp | 149 ++++++++++++++++++++++++++---------------------- 1 file changed, 80 insertions(+), 69 deletions(-) (limited to 'core/src/Utils/I18n.hpp') diff --git a/core/src/Utils/I18n.hpp b/core/src/Utils/I18n.hpp index de32cf8..a4dd225 100644 --- a/core/src/Utils/I18n.hpp +++ b/core/src/Utils/I18n.hpp @@ -1,69 +1,80 @@ -#pragma once - -#include "Utils/Sigslot.hpp" -#include "Utils/fwd.hpp" - -#include -#include -#include -#include -#include -#include -#include - -class I18n { -public: - static void Init(); - static void Shutdown(); - - static Signal<> OnReload; - static void ReloadLocales(); - - static std::string_view GetLanguage(); - static bool SetLanguage(std::string_view lang); - - static std::optional Lookup(std::string_view key); - static std::string_view LookupUnwrap(std::string_view key); - static std::string_view LookupLanguage(std::string_view lang); -}; - -struct StringArgument { - std::string Value; -}; - -struct IntArgument { - int Value; -}; - -struct FloatArgument { - double Value; -}; - -class BasicTranslation { -private: - const char* mContent; - -public: - BasicTranslation(std::string_view key); - const char* Get() const; -}; - -class FormattedTranslation { -public: - using Element = std::variant; - using Argument = std::string; - -private: - std::vector mParsedElements; - size_t mNumArguments; - size_t mMinimumResultLen; - -public: - FormattedTranslation(std::string_view key); - std::string Format(std::span args); -}; - -class NumericTranslation { -public: - // TODO -}; +#pragma once + +#include "Utils/Sigslot.hpp" +#include "Utils/fwd.hpp" + +#include +#include +#include +#include +#include +#include +#include + +class I18n { +public: + static inline Signal<> OnLanguageChange{}; + static inline Signal<> OnUnload{}; + + static void Init(); + static void Shutdown(); + + /// Discard in-memory mapping from key to locale entries. + /// When any of the entry accessors are invoked, unloaded entries will be reloaded. + static void Unload(); + + static std::string_view GetLanguage(); + static bool SetLanguage(std::string_view lang); + + /* Entry accessors */ + /// Find the localized entry with the given key, return \c std::nullopt if does not exist. Reloads locale entries if they are currently unloaded. + static std::optional Lookup(std::string_view key); + /// Find the localized entry with the given key, throw an exception if does not exist. EnsureLoaded locale entries if they are currently unloaded. + static std::string_view LookupUnwrap(std::string_view key); + + /// Query the localized name of a locale, e.g. "en_US" -> "English - United States". + /// If the queried locale does not exist, an empty string will be returned (existing locales can never have an empty localized name). + static std::string_view LookupLanguage(std::string_view lang); +}; + +struct StringArgument { + std::string Value; +}; + +struct IntArgument { + int Value; +}; + +struct FloatArgument { + double Value; +}; + +class BasicTranslation { +private: + std::string mContent; + +public: + BasicTranslation(std::string_view key); + const std::string& GetString() const; + const char* Get() const; +}; + +class FormattedTranslation { +public: + using Element = std::variant; + using Argument = std::string; + +private: + std::vector mParsedElements; + size_t mNumArguments; + size_t mMinimumResultLen; + +public: + FormattedTranslation(std::string_view key); + std::string Format(std::span args); +}; + +class NumericTranslation { +public: + // TODO +}; -- cgit v1.2.3-70-g09d2