载入中...
搜索中...
未找到
I18n.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5#include "common/Module.h"
6#include "common/Result.h"
7
8#include <cstdint>
9#include <string>
10#include <unordered_map>
11#include <vector>
12
13namespace eve::i18n {
14
39public:
42 I18n() = default;
44 ~I18n() override = default;
45
56 [[nodiscard]] eve::Result<void> replaceLocaleFromJson(const std::string& lang, const std::string& json);
67 [[nodiscard]] eve::Result<void> replaceLocaleFromFile(const std::string& lang, const std::string& path);
69 bool loadFromJson(const std::string& lang, const std::string& json);
71 bool loadFromFile(const std::string& lang, const std::string& path);
85 [[nodiscard]] eve::Result<int> replaceBundleFromJson(const std::string& json);
87 void unload(const std::string& lang);
89 void clear();
90
98 [[nodiscard]] eve::Result<void> selectLanguage(const std::string& lang);
100 bool setLanguage(const std::string& lang);
102 std::string getLanguage() const { return language_; }
104 void setDefaultLanguage(const std::string& lang) { defaultLanguage_ = lang; }
106 std::string getDefaultLanguage() const { return defaultLanguage_; }
108 int getLanguageCount() const { return int(locales_.size()); }
110 std::string getLanguageAt(int index) const;
112 bool hasLanguage(const std::string& lang) const;
114 bool hasInLanguage(const std::string& lang, const std::string& key) const;
123 [[nodiscard]] eve::Result<int> validateKeyCoverage(const std::string& key) const;
125 int getKeyCount(const std::string& lang) const;
126
128 bool has(const std::string& key) const;
130 std::string get(const std::string& key) const;
132 std::string getWithParams(const std::string& key, const std::unordered_map<std::string, std::string>& params) const;
134 std::string getPlural(const std::string& key, int n) const;
136 std::string getPluralWithParams(const std::string& key, int n,
137 const std::unordered_map<std::string, std::string>& params) const;
138
139 // ---- hot reload (poll from the game loop) ----
141 void setAutoReload(bool enable) { autoReload_ = enable; }
143 bool isAutoReload() const { return autoReload_; }
145 int update(float dt);
146
147private:
148 struct Locale {
149 std::unordered_map<std::string, std::string> strings; // flat key -> value
150 std::unordered_map<std::string, std::unordered_map<std::string, std::string>>
151 plurals; // key -> {form -> value}
152 std::string path; // empty if loaded from raw json
153 int64_t modtime = -1;
154 };
155
158 Locale* findLocale(const std::string& lang);
161 const Locale* findLocale(const std::string& lang) const;
162
163 std::string formatString(const std::string& tpl, const std::unordered_map<std::string, std::string>& params) const;
164 std::string pluralForm(const std::string& lang, int n) const;
165
166 std::unordered_map<std::string, Locale> locales_;
167 std::string language_ = "en";
168 std::string defaultLanguage_ = "en";
169 bool autoReload_ = true;
170};
171
172} // namespace eve::i18n
#define EVENGINE_API_PLATFORM
Definition Export.h:107
std::uint32_t key
glm::vec3 n
Definition Grass.cpp:63
std::string path
Definition PlayHost.cpp:110
Move-only, checked operation results for the common layer.
uint32_t index
EVENGINE_API_FOUNDATION public API.
Definition Module.h:46
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Game localization (i18n) module.
Definition I18n.h:38
std::string getDefaultLanguage() const
Returns the default language.
Definition I18n.h:106
void setAutoReload(bool enable)
Sets the auto reload.
Definition I18n.h:141
bool isAutoReload() const
True when auto reload.
Definition I18n.h:143
std::string getLanguage() const
Returns the language.
Definition I18n.h:102
I18n()=default
I 18 n.
~I18n() override=default
I 18 n.
void setDefaultLanguage(const std::string &lang)
Sets the default language.
Definition I18n.h:104
int getLanguageCount() const
Returns the language count.
Definition I18n.h:108
std::vector< ParamSpec > params