Files
yellownotes/tr.cpp
2025-11-27 09:43:32 +01:00

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);
}