diff options
Diffstat (limited to 'core/src/Utils/I18n.cpp')
-rw-r--r-- | core/src/Utils/I18n.cpp | 60 |
1 files changed, 40 insertions, 20 deletions
diff --git a/core/src/Utils/I18n.cpp b/core/src/Utils/I18n.cpp index edc5469..e5131cc 100644 --- a/core/src/Utils/I18n.cpp +++ b/core/src/Utils/I18n.cpp @@ -14,15 +14,18 @@ using namespace std::literals::string_view_literals; namespace { -struct LanguageInfo { +struct LanguageInfo +{ std::string CodeName; std::string LocaleName; fs::path File; }; -class I18nState { +class I18nState +{ public: - static I18nState& Get() { + static I18nState& Get() + { static I18nState instance; return instance; } @@ -33,19 +36,22 @@ public: LanguageInfo* CurrentLanguage = nullptr; bool Unloaded = false; - void Unload() { + void Unload() + { Unloaded = true; CurrentEntries = {}; } - void EnsureLoaded() { + void EnsureLoaded() + { if (Unloaded) { Unloaded = false; Reload(); } } - void Reload() { + void Reload() + { if (!CurrentLanguage) return; std::ifstream ifs(CurrentLanguage->File); @@ -65,7 +71,8 @@ public: } }; -std::string FindLocalizedName(const fs::path& localeFile) { +std::string FindLocalizedName(const fs::path& localeFile) +{ std::ifstream ifs(localeFile); if (!ifs) { throw std::runtime_error("Failed to open locale file."); @@ -82,7 +89,8 @@ std::string FindLocalizedName(const fs::path& localeFile) { } // namespace -void I18n::Init() { +void I18n::Init() +{ auto& state = I18nState::Get(); auto dir = fs::current_path() / "locale"; @@ -106,7 +114,8 @@ void I18n::Init() { } } -void I18n::Shutdown() { +void I18n::Shutdown() +{ auto& state = I18nState::Get(); state.LocaleInfos.clear(); state.CurrentEntries.clear(); @@ -114,18 +123,21 @@ void I18n::Shutdown() { state.Unloaded = false; } -void I18n::Unload() { +void I18n::Unload() +{ auto& state = I18nState::Get(); state.Unload(); OnUnload(); } -std::string_view I18n::GetLanguage() { +std::string_view I18n::GetLanguage() +{ auto& state = I18nState::Get(); return state.CurrentLanguage->CodeName; } -bool I18n::SetLanguage(std::string_view lang) { +bool I18n::SetLanguage(std::string_view lang) +{ auto& state = I18nState::Get(); if (state.CurrentLanguage && state.CurrentLanguage->CodeName == lang) @@ -142,7 +154,8 @@ bool I18n::SetLanguage(std::string_view lang) { return true; } -std::optional<std::string_view> I18n::Lookup(std::string_view key) { +std::optional<std::string_view> I18n::Lookup(std::string_view key) +{ auto& state = I18nState::Get(); state.EnsureLoaded(); @@ -154,7 +167,8 @@ std::optional<std::string_view> I18n::Lookup(std::string_view key) { } } -std::string_view I18n::LookupUnwrap(std::string_view key) { +std::string_view I18n::LookupUnwrap(std::string_view key) +{ auto o = Lookup(key); if (!o) { std::string msg; @@ -166,7 +180,8 @@ std::string_view I18n::LookupUnwrap(std::string_view key) { return o.value(); } -std::string_view I18n::LookupLanguage(std::string_view lang) { +std::string_view I18n::LookupLanguage(std::string_view lang) +{ auto& state = I18nState::Get(); auto iter = state.LocaleInfos.find(lang); if (iter != state.LocaleInfos.end()) { @@ -177,18 +192,22 @@ std::string_view I18n::LookupLanguage(std::string_view lang) { } BasicTranslation::BasicTranslation(std::string_view key) - : mContent{ I18n::LookupUnwrap(key) } { + : mContent{ I18n::LookupUnwrap(key) } +{ } -const std::string& BasicTranslation::GetString() const { +const std::string& BasicTranslation::GetString() const +{ return mContent; } -const char* BasicTranslation::Get() const { +const char* BasicTranslation::Get() const +{ return mContent.c_str(); } -FormattedTranslation::FormattedTranslation(std::string_view key) { +FormattedTranslation::FormattedTranslation(std::string_view key) +{ auto src = I18n::LookupUnwrap(key); mMinimumResultLen = 0; @@ -259,7 +278,8 @@ FormattedTranslation::FormattedTranslation(std::string_view key) { } } -std::string FormattedTranslation::Format(std::span<Argument> args) { +std::string FormattedTranslation::Format(std::span<Argument> args) +{ if (args.size() != mNumArguments) { throw std::runtime_error("Invalid number of arguments for FormattedTranslation::Format, expected " + std::to_string(mNumArguments) + " but found " + std::to_string(args.size()) + "."); } |