#pragma once #include #include "I18nKeys.h" /** * Internationalization (i18n) system for CrossPoint Reader */ class I18n { public: static I18n& getInstance(); // Disable copy I18n(const I18n&) = delete; I18n& operator=(const I18n&) = delete; // Get localized string by ID const char* get(StrId id) const; const char* operator[](StrId id) const { return get(id); } Language getLanguage() const { return _language; } void setLanguage(Language lang); const char* getLanguageName(Language lang) const; void saveSettings(); void loadSettings(); // Get all unique characters used in a specific language // Returns a sorted string of unique characters static const char* getCharacterSet(Language lang); private: I18n() : _language(Language::EN) {} Language _language; }; // Convenience macros #define tr(id) I18n::getInstance().get(StrId::id) #define I18N I18n::getInstance()