gettext.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /*
  2. Minetest
  3. Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
  4. This program is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU Lesser General Public License as published by
  6. the Free Software Foundation; either version 2.1 of the License, or
  7. (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU Lesser General Public License for more details.
  12. You should have received a copy of the GNU Lesser General Public License along
  13. with this program; if not, write to the Free Software Foundation, Inc.,
  14. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  15. */
  16. #pragma once
  17. #include "config.h" // for USE_GETTEXT
  18. #include <string>
  19. #if USE_GETTEXT
  20. #include <libintl.h>
  21. #else
  22. // In certain environments, some standard headers like <iomanip>
  23. // and <locale> include libintl.h. If libintl.h is included after
  24. // we define our gettext macro below, this causes a syntax error
  25. // at the declaration of the gettext function in libintl.h.
  26. // Fix this by including such a header before defining the macro.
  27. // See issue #4446.
  28. // Note that we can't include libintl.h directly since we're in
  29. // the USE_GETTEXT=0 case and can't assume that gettext is installed.
  30. #include <locale>
  31. #define gettext(String) String
  32. #endif
  33. #define _(String) gettext(String)
  34. #define gettext_noop(String) (String)
  35. #define N_(String) gettext_noop((String))
  36. void init_gettext(const char *path, const std::string &configured_language,
  37. int argc, char *argv[]);
  38. extern wchar_t *utf8_to_wide_c(const char *str);
  39. // You must free the returned string!
  40. // The returned string is allocated using new
  41. inline const wchar_t *wgettext(const char *str)
  42. {
  43. // We must check here that is not an empty string to avoid trying to translate it
  44. return str[0] ? utf8_to_wide_c(gettext(str)) : utf8_to_wide_c("");
  45. }
  46. inline std::string strgettext(const std::string &text)
  47. {
  48. return text.empty() ? "" : gettext(text.c_str());
  49. }