X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fgettext.h;h=452787de442f8df8bc970821e4f531a09a28072c;hb=6b9906687b85fcefa28df572d92a3dea3118c0a3;hp=790375165a899e70ecf86e9cfa1cc19daa1d83d8;hpb=9baae3a701f7bdf50972d8381904d11eee77aa4e;p=oweals%2Fminetest.git diff --git a/src/gettext.h b/src/gettext.h index 790375165..452787de4 100644 --- a/src/gettext.h +++ b/src/gettext.h @@ -1,4 +1,6 @@ +#ifndef GETTEXT_HEADER #include "config.h" // for USE_GETTEXT +#include "log.h" #if USE_GETTEXT #include @@ -10,28 +12,73 @@ #define gettext_noop(String) String #define N_(String) gettext_noop (String) +#if defined(_WIN32) +#define WIN32_LEAN_AND_MEAN +#include +#endif + inline void init_gettext(const char *path) { #if USE_GETTEXT - setlocale(LC_MESSAGES, ""); + // don't do this if MSVC compiler is used, it gives an assertion fail + #ifndef _MSC_VER + setlocale(LC_MESSAGES, ""); + #endif bindtextdomain(PROJECT_NAME, path); textdomain(PROJECT_NAME); +#if defined(_WIN32) + // As linux is successfully switched to UTF-8 completely at about year 2005 + // Windows still uses obsolete codepage based locales because you + // cannot recompile closed-source applications + + // Set character encoding for Win32 + char *tdomain = textdomain( (char *) NULL ); + if( tdomain == NULL ) + { + fprintf( stderr, "warning: domainname parameter is the null pointer, default domain is not set\n" ); + tdomain = (char *) "messages"; + } + /*char *codeset = */bind_textdomain_codeset( tdomain, "UTF-8" ); + //fprintf( stdout, "%s: debug: domainname = %s; codeset = %s\n", argv[0], tdomain, codeset ); +#endif // defined(_WIN32) #endif } inline wchar_t* chartowchar_t(const char *str) { + wchar_t* nstr = 0; +#if defined(_WIN32) + int nResult = MultiByteToWideChar( CP_UTF8, 0, (LPCSTR) str, -1, 0, 0 ); + if( nResult == 0 ) + { + fprintf( stderr, "error: MultiByteToWideChar returned null\n" ); + } + else + { + nstr = new wchar_t[nResult]; + MultiByteToWideChar( CP_UTF8, 0, (LPCSTR) str, -1, (WCHAR *) nstr, nResult ); + } +#else size_t l = strlen(str)+1; - wchar_t* nstr = new wchar_t[l]; + nstr = new wchar_t[l]; mbstowcs(nstr, str, l); +#endif + return nstr; } +inline wchar_t* wgettext(const char *str) +{ + return chartowchar_t(gettext(str)); +} + inline void changeCtype(const char *l) { - char *ret = NULL; + /*char *ret = NULL; ret = setlocale(LC_CTYPE, l); if(ret == NULL) - std::cout<<"locale could not be set"<