X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fgettext.h;h=42b375d869c2b6f1d246b5a09532aa1b3f79c496;hb=a462181e5fe631b816cb67a4e2cb8a870ed71840;hp=cb3a141608036300ddd65781571748f365f05df2;hpb=6b0cae5a9d6e220b9f1ecf8e6a821d84961564fd;p=oweals%2Fminetest.git diff --git a/src/gettext.h b/src/gettext.h index cb3a14160..42b375d86 100644 --- a/src/gettext.h +++ b/src/gettext.h @@ -17,14 +17,24 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef GETTEXT_HEADER -#define GETTEXT_HEADER +#pragma once #include "config.h" // for USE_GETTEXT +#include #if USE_GETTEXT #include #else + // In certain environments, some standard headers like + // and include libintl.h. If libintl.h is included after + // we define our gettext macro below, this causes a syntax error + // at the declaration of the gettext function in libintl.h. + // Fix this by including such a header before defining the macro. + // See issue #4446. + // Note that we can't include libintl.h directly since we're in + // the USE_GETTEXT=0 case and can't assume that gettext is installed. + #include + #define gettext(String) String #endif @@ -32,12 +42,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #define gettext_noop(String) (String) #define N_(String) gettext_noop((String)) -#ifdef _MSC_VER void init_gettext(const char *path, const std::string &configured_language, - int argc, const char *argv[]); -#else -void init_gettext(const char *path, const std::string &configured_language); -#endif + int argc, char *argv[]); extern wchar_t *utf8_to_wide_c(const char *str); @@ -45,12 +51,11 @@ extern wchar_t *utf8_to_wide_c(const char *str); // The returned string is allocated using new inline const wchar_t *wgettext(const char *str) { - return utf8_to_wide_c(gettext(str)); + // We must check here that is not an empty string to avoid trying to translate it + return str[0] ? utf8_to_wide_c(gettext(str)) : utf8_to_wide_c(""); } inline std::string strgettext(const std::string &text) { - return gettext(text.c_str()); + return text.empty() ? "" : gettext(text.c_str()); } - -#endif