#include "translation.hpp" #include #include #include "config.h" static const char *orig_language; static const char *cur_locale_dir; static const char *cur_locale; const char *tr_ctx(const char *ctx, const char *msgid) { std::string msg_ctxt_id = (std::string(ctx) + std::string("\004") + std::string(msgid)); const char *translation = gettext(msg_ctxt_id.c_str()); if (std::string(translation) == msg_ctxt_id) { return msgid; } else { return translation; } } const char *tr(const char *msgid) { return gettext(msgid); } void set_language(const char *language) { if (language == nullptr) { language = ""; } #ifdef LIBINTL_LITE_API if (language[0] == '\0') { setenv("LANGUAGE", orig_language, 1); } else { setenv("LANGUAGE", language, 1); } #else setlocale(LC_ALL, language); #endif bindtextdomain(cur_locale, cur_locale_dir); textdomain(cur_locale); } char *get_language() { #ifdef LIBINTL_LITE_API return getenv("LANGUAGE"); #else return setlocale(LC_MESSAGES, NULL); #endif } void setup_locale(const char *locale, const char *locale_dir) { if (orig_language == nullptr) { orig_language = getenv("LANGUAGE"); if (orig_language == nullptr) { orig_language = "C.UTF-8"; } } if (locale_dir == nullptr) { if (cur_locale_dir == nullptr) { locale_dir = LOCALE_DIR; } else { locale_dir = cur_locale_dir; } } if (cur_locale_dir == nullptr) { cur_locale_dir = locale_dir; } cur_locale = locale; set_language(); }