43 lines
934 B
C
43 lines
934 B
C
|
|
#pragma once
|
||
|
|
|
||
|
|
#include <cstdint>
|
||
|
|
|
||
|
|
#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::ENGLISH) {}
|
||
|
|
|
||
|
|
Language _language;
|
||
|
|
};
|
||
|
|
|
||
|
|
// Convenience macros
|
||
|
|
#define tr(id) I18n::getInstance().get(StrId::id)
|
||
|
|
#define I18N I18n::getInstance()
|