From 8f7daa9bd100345d7e23639604c9a3a50ce6448b Mon Sep 17 00:00:00 2001 From: rtk0c Date: Fri, 11 Jun 2021 13:35:35 -0700 Subject: Convert runtime-loaded l10n to string literals chosen at compile time --- core/src/Utils/I18n.hpp | 93 +++++-------------------------------------------- 1 file changed, 8 insertions(+), 85 deletions(-) (limited to 'core/src/Utils/I18n.hpp') diff --git a/core/src/Utils/I18n.hpp b/core/src/Utils/I18n.hpp index 6285d60..e9eaac9 100644 --- a/core/src/Utils/I18n.hpp +++ b/core/src/Utils/I18n.hpp @@ -1,87 +1,10 @@ #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 -}; +#include "Utils/Macros.hpp" + +#if !defined(TARGET_LOCALE) +# define I18N_TEXT(defaultText, name) defaultText +#else +# include TARGET_LOCALE_FILE +# define I18N_TEXT(defaultText, name) name +#endif -- cgit v1.2.3-70-g09d2