#include "tr.h" #include #include void tr::add(const char *sentence, ...) { va_list args; va_start(args, sentence); std::string sent(sentence); const char *tr = va_arg(args, char *); while (tr != nullptr) { std::string t(tr); size_t pos = t.find(":"); std::string lang = t.substr(0, pos); std::string str = t.substr(pos + 1); std::unordered_map::iterator it; it = _translations.find(lang); if (it != _translations.end()) { Translations_t *m = it->second; std::pair p = { sent, str }; m->insert(p); } else { Translations_t *m = new Translations_t(); std::pair p = { sent, str }; m->insert(p); std::pair lp = { lang, m }; _translations.insert(lp); } tr = va_arg(args, char *); } va_end(args); } const char *tr::translate(const char *str) { std::unordered_map::iterator it; if (_lang == "en") { return str; } it = _translations.find(_lang); if (it == _translations.end()) { std::cerr << "No translation for: " << str << std::endl; return str; } else { Translations_t *m = it->second; Translations_t::iterator n_it; std::string s(str); n_it = m->find(s); if (n_it == m->end()) { std::cerr << "No translation for: " << str << std::endl; return str; } else { return n_it->second.c_str(); } } } void tr::setLang(const std::string &l) { _lang = l; } #define nl(a, b) add(a, "nl:" b, nullptr) #define en(a, b) add(a, "en:" b, nullptr) tr::tr() { nl("Quit", "Beƫindigen"); nl("New Note", "Nieuwe Notitie"); nl("Show Notes", "Notities Presenteren"); nl("Hide Notes", "Notities Verbergen"); nl("Reload Notes", "Notities opnieuw laden"); nl("Setup", "Instellingen"); nl("Notes on desktop", "Noties naar achteren"); nl("Language:", "Taalinstelling:"); nl("Language:", "Taalinstelling:"); nl("Ok", "Ok"); nl("Yellownotes Setup", "Yellownotes Instellingen"); nl("Foreground Color", "Voorgrond kleur"); nl("Background Color", "Achtergrond kleur"); nl("Dark", "Donker"); nl("Yellow", "Geel"); nl("Orange", "Oranje"); nl("Blue", "Blauw"); nl("Cyan", "Cyaan"); nl("Green", "Groen"); nl("Red", "Rood"); nl("Grey", "Grijs"); nl("Font size:", "Lettertype Grootte:"); nl("Actual Font Size in Note", "Werkelijke lettertype grootte in de notitie"); _lang = "en"; } static tr *_t = nullptr; static void init() { if (_t == nullptr) { _t = new tr(); } } const char *_(const char *str) { init(); return _t->translate(str); } void setLang(const std::string &lang) { init(); _t->setLang(lang); }