X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fgettext.h;h=ca82b1f02d8b728163732e2a9192af812ca1ac2b;hb=2e292b67a0a02b045969034c06aaf92b42a83a81;hp=54470cb0d863fc03ea25f04e2c5e9ca3bfd82649;hpb=f1d9880006cf713597c1fc573f83db75062712c9;p=oweals%2Fminetest.git diff --git a/src/gettext.h b/src/gettext.h index 54470cb0d..ca82b1f02 100644 --- a/src/gettext.h +++ b/src/gettext.h @@ -12,6 +12,14 @@ #define gettext_noop(String) String #define N_(String) gettext_noop (String) +#if defined(_WIN32) +#define WIN32_LEAN_AND_MEAN +#ifndef _WIN32_WINNT + #define _WIN32_WINNT 0x0501 +#endif +#include +#endif + inline void init_gettext(const char *path) { #if USE_GETTEXT // don't do this if MSVC compiler is used, it gives an assertion fail @@ -20,14 +28,44 @@ inline void init_gettext(const char *path) { #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; } @@ -38,12 +76,12 @@ inline wchar_t* wgettext(const char *str) inline void changeCtype(const char *l) { - char *ret = NULL; + /*char *ret = NULL; ret = setlocale(LC_CTYPE, l); if(ret == NULL) infostream<<"locale could not be set"<