module served.translate; import std.conv; import std.string; alias Translation = string[string]; private Translation[string] translations; shared static this() { //dfmt off translations = [ "en" : parseTranslation!(import("en.txt")), "de" : parseTranslation!(import("de.txt")), "fr" : parseTranslation!(import("fr.txt")), "ja" : parseTranslation!(import("ja.txt")) ]; //dfmt on } private Translation parseTranslation(string s)() { Translation tr; foreach (line; s.splitLines) if (line.length && line[0] != '#') { auto colon = line.indexOf(':'); if (colon == -1) continue; tr[line[0 .. colon].idup] = line[colon + 1 .. $].idup; } return tr; } string currentLanguage = "en"; string translate(string s, Args...)(Args args) { if (currentLanguage !in translations) return s; auto language = translations[currentLanguage]; auto val = s in language; if (!val) val = s in translations["en"]; if (!val) return s; string str = *val; foreach (i, arg; args) str = str.replace("{" ~ i.to!string ~ "}", arg.to!string); return str; }