载入中...
搜索中...
未找到
I18n.h
浏览该文件的文档.
1#pragma once
2
3#include "common/Module.h"
4
5#include <cstdint>
6#include <string>
7#include <unordered_map>
8#include <vector>
9
10namespace eve::i18n {
11
35class I18n : public Module {
36public:
38 I18n() = default;
39 ~I18n() override = default;
40
42 bool loadFromJson(const std::string &lang, const std::string &json);
43 bool loadFromFile(const std::string &lang, const std::string &path);
45 void unload(const std::string &lang);
46 void clear();
47
49 bool setLanguage(const std::string &lang);
50 std::string getLanguage() const { return language_; }
51 void setDefaultLanguage(const std::string &lang) { defaultLanguage_ = lang; }
52 std::string getDefaultLanguage() const { return defaultLanguage_; }
53 int getLanguageCount() const { return int(locales_.size()); }
54 std::string getLanguageAt(int index) const;
55 bool hasLanguage(const std::string &lang) const;
56
58 bool has(const std::string &key) const;
59 std::string get(const std::string &key) const;
60 std::string getWithParams(const std::string &key,
61 const std::unordered_map<std::string, std::string> &params) const;
62 std::string getPlural(const std::string &key, int n) const;
63 std::string getPluralWithParams(const std::string &key, int n,
64 const std::unordered_map<std::string, std::string> &params) const;
65
66 // ---- hot reload (poll from the game loop) ----
67 void setAutoReload(bool enable) { autoReload_ = enable; }
68 bool isAutoReload() const { return autoReload_; }
70 int update(float dt);
71
72private:
73 struct Locale {
74 std::unordered_map<std::string, std::string> strings; // flat key -> value
75 std::unordered_map<std::string, std::unordered_map<std::string, std::string>>
76 plurals; // key -> {form -> value}
77 std::string path; // empty if loaded from raw json
78 int64_t modtime = -1;
79 };
80
81 Locale * findLocale(const std::string &lang);
82 const Locale *findLocale(const std::string &lang) const;
83
84 std::string formatString(const std::string &tpl,
85 const std::unordered_map<std::string, std::string> &params) const;
86 std::string pluralForm(const std::string &lang, int n) const;
87
88 std::unordered_map<std::string, Locale> locales_;
89 std::string language_ = "en";
90 std::string defaultLanguage_ = "en";
91 bool autoReload_ = true;
92};
93
94} // namespace eve::i18n
glm::vec3 n
Definition Grass.cpp:64
Game localization (i18n) module.
Definition I18n.h:35
bool loadFromJson(const std::string &lang, const std::string &json)
加载语言表(JSON 文本 / 文件)。
Definition I18n.cpp:147
std::string getDefaultLanguage() const
Definition I18n.h:52
std::string getPluralWithParams(const std::string &key, int n, const std::unordered_map< std::string, std::string > &params) const
Definition I18n.cpp:274
bool hasLanguage(const std::string &lang) const
Definition I18n.cpp:213
int update(float dt)
Re-read changed locale files; returns the number of reloads performed.
Definition I18n.cpp:350
void setAutoReload(bool enable)
Definition I18n.h:67
bool isAutoReload() const
Definition I18n.h:68
bool loadFromFile(const std::string &lang, const std::string &path)
Definition I18n.cpp:158
std::string getWithParams(const std::string &key, const std::unordered_map< std::string, std::string > &params) const
Definition I18n.cpp:265
void unload(const std::string &lang)
卸载 / 清空语言表。
Definition I18n.cpp:190
std::string getLanguage() const
Definition I18n.h:50
bool setLanguage(const std::string &lang)
语言管理:当前语言 / 默认语言回退。
Definition I18n.cpp:198
void clear()
Definition I18n.cpp:194
bool has(const std::string &key) const
翻译查找:按键(点号命名空间)取字符串。
Definition I18n.cpp:217
I18n()=default
std::string getLanguageAt(int index) const
Definition I18n.cpp:204
~I18n() override=default
std::string getPlural(const std::string &key, int n) const
Definition I18n.cpp:270
std::string get(const std::string &key) const
Definition I18n.cpp:229
void setDefaultLanguage(const std::string &lang)
Definition I18n.h:51
int getLanguageCount() const
Definition I18n.h:53