127 lines
3.1 KiB
C++
127 lines
3.1 KiB
C++
#include "tr.h"
|
|
#include <stdarg.h>
|
|
#include <iostream>
|
|
|
|
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<std::string, Translations_t *>::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<std::string, Translations_t *>::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");
|
|
nl("Reorder Notes", "Notities opnieuw ordenen");
|
|
nl("About", "Over...");
|
|
nl("(c) 2025", "(c) 2025");
|
|
nl("Version %s, file format version: %d", "Versie %s, bestandsformaat versie: %d");
|
|
nl("Yellow Notes", "Geeltjes");
|
|
|
|
_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);
|
|
}
|