X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Flib%2Fi18n.qh;h=8ebedb76f65f66110d3fd26ffaa46277e1b24021;hb=238697513c0d8799ad5c619c94dc79a34b063d24;hp=3773e16d1d2fdde2c904f6ac37812aab2d5a08a2;hpb=d3e642e032c1e9e62fc5400c14627c54e37e4ae0;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/lib/i18n.qh b/qcsrc/lib/i18n.qh index 3773e16d1..8ebedb76f 100644 --- a/qcsrc/lib/i18n.qh +++ b/qcsrc/lib/i18n.qh @@ -1,11 +1,15 @@ -#ifndef I18N_H -#define I18N_H +#pragma once #include "log.qh" +#include "map.qh" +#include "unsafe.qh" // translation helpers string prvm_language; +/** + * @deprecated prefer _("translated") + */ string language_filename(string s) { string fn = prvm_language; @@ -20,13 +24,35 @@ string language_filename(string s) return s; } +#ifndef CTX_CACHE + #define CTX_CACHE 1 +#endif + +#if CTX_CACHE + HashMap CTX_cache; + STATIC_INIT(CTX_cache) + { + HM_NEW(CTX_cache); + } + SHUTDOWN(CTX_cache) + { + HM_DELETE(CTX_cache); + } +#endif + string CTX(string s) { +#if CTX_CACHE + string c = HM_gets(CTX_cache, s); + if (c != "") return c; +#endif int p = strstrofs(s, "^", 0); - if (p < 0) return s; - return substring(s, p + 1, -1); + string ret = (p < 0) ? s : substring(s, p + 1, -1); +#if CTX_CACHE + LOG_DEBUGF("CTX(\"%s\")", s); + HM_sets(CTX_cache, s, ret); +#endif + return ret; } #define ZCTX(s) strzone(CTX(s)) - -#endif