2011-07-30 11:44:45 +02:00
|
|
|
#ifndef GETTEXT_HEADER
|
2011-07-24 19:13:30 +02:00
|
|
|
#include "config.h" // for USE_GETTEXT
|
2012-03-11 03:15:45 +01:00
|
|
|
#include "log.h"
|
2011-07-24 19:13:30 +02:00
|
|
|
|
2011-07-24 13:58:51 +02:00
|
|
|
#if USE_GETTEXT
|
2011-07-20 16:51:19 +02:00
|
|
|
#include <libintl.h>
|
2011-07-21 07:53:13 +02:00
|
|
|
#else
|
|
|
|
#define gettext(String) String
|
2011-07-23 22:36:11 +02:00
|
|
|
#endif
|
2011-07-21 07:53:13 +02:00
|
|
|
|
2011-07-20 16:51:19 +02:00
|
|
|
#define _(String) gettext(String)
|
|
|
|
#define gettext_noop(String) String
|
|
|
|
#define N_(String) gettext_noop (String)
|
|
|
|
|
2013-02-03 13:19:09 +01:00
|
|
|
#if defined(_WIN32)
|
|
|
|
#define WIN32_LEAN_AND_MEAN
|
2013-06-23 09:31:22 +02:00
|
|
|
#ifndef _WIN32_WINNT
|
|
|
|
#define _WIN32_WINNT 0x0501
|
|
|
|
#endif
|
2013-02-03 13:19:09 +01:00
|
|
|
#include <windows.h>
|
|
|
|
#endif
|
|
|
|
|
2011-07-23 16:38:37 +02:00
|
|
|
inline void init_gettext(const char *path) {
|
|
|
|
#if USE_GETTEXT
|
2011-07-31 14:28:07 +02:00
|
|
|
// don't do this if MSVC compiler is used, it gives an assertion fail
|
|
|
|
#ifndef _MSC_VER
|
2011-07-30 23:05:40 +02:00
|
|
|
setlocale(LC_MESSAGES, "");
|
|
|
|
#endif
|
2011-07-23 16:38:37 +02:00
|
|
|
bindtextdomain(PROJECT_NAME, path);
|
|
|
|
textdomain(PROJECT_NAME);
|
2013-02-03 13:19:09 +01:00
|
|
|
#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)
|
2011-07-23 16:38:37 +02:00
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
2011-07-21 07:53:13 +02:00
|
|
|
inline wchar_t* chartowchar_t(const char *str)
|
2011-07-20 16:51:19 +02:00
|
|
|
{
|
2013-02-03 13:19:09 +01:00
|
|
|
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
|
2011-07-20 16:51:19 +02:00
|
|
|
size_t l = strlen(str)+1;
|
2013-02-03 13:19:09 +01:00
|
|
|
nstr = new wchar_t[l];
|
2011-07-20 16:51:19 +02:00
|
|
|
mbstowcs(nstr, str, l);
|
2013-02-03 13:19:09 +01:00
|
|
|
#endif
|
|
|
|
|
2011-07-20 16:51:19 +02:00
|
|
|
return nstr;
|
|
|
|
}
|
2011-07-30 10:14:58 +02:00
|
|
|
|
2011-07-31 09:03:19 +02:00
|
|
|
inline wchar_t* wgettext(const char *str)
|
|
|
|
{
|
|
|
|
return chartowchar_t(gettext(str));
|
|
|
|
}
|
|
|
|
|
2011-07-30 10:14:58 +02:00
|
|
|
inline void changeCtype(const char *l)
|
|
|
|
{
|
2013-02-03 13:19:09 +01:00
|
|
|
/*char *ret = NULL;
|
2011-07-30 10:14:58 +02:00
|
|
|
ret = setlocale(LC_CTYPE, l);
|
|
|
|
if(ret == NULL)
|
2012-03-11 03:15:45 +01:00
|
|
|
infostream<<"locale could not be set"<<std::endl;
|
2011-07-30 10:14:58 +02:00
|
|
|
else
|
2013-02-03 13:19:09 +01:00
|
|
|
infostream<<"locale has been set to:"<<ret<<std::endl;*/
|
2011-07-30 10:14:58 +02:00
|
|
|
}
|
2013-08-03 17:57:51 +02:00
|
|
|
|
|
|
|
inline std::wstring wstrgettext(std::string text) {
|
|
|
|
wchar_t* wlabel = wgettext(text.c_str());
|
|
|
|
std::wstring out = (std::wstring)wlabel;
|
|
|
|
delete[] wlabel;
|
|
|
|
return out;
|
|
|
|
}
|
2011-07-30 11:44:45 +02:00
|
|
|
#define GETTEXT_HEADER
|
|
|
|
#endif
|