diff options
Diffstat (limited to 'src/utils')
-rw-r--r-- | src/utils/gettexthelper.cpp | 102 | ||||
-rw-r--r-- | src/utils/gettexthelper.h | 35 |
2 files changed, 137 insertions, 0 deletions
diff --git a/src/utils/gettexthelper.cpp b/src/utils/gettexthelper.cpp new file mode 100644 index 000000000..59f4933ad --- /dev/null +++ b/src/utils/gettexthelper.cpp @@ -0,0 +1,102 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2014 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "utils/gettexthelper.h" + +#include "debug.h" + +#ifdef WIN32 +extern "C" char const *_nl_locale_name_default(void); +#endif + + +void GettextHelper::initLang() +{ +#ifdef ENABLE_NLS + std::string lang = config.getStringValue("lang"); +#ifdef WIN32 + if (lang.empty()) + lang = std::string(_nl_locale_name_default()); + + putenv(const_cast<char*>(("LANG=" + lang).c_str())); + putenv(const_cast<char*>(("LANGUAGE=" + lang).c_str())); + // mingw doesn't like LOCALEDIR to be defined for some reason + if (lang != "C") + bindTextDomain("translations/"); +#else // WIN32 + + if (!lang.empty()) + { + setEnv("LANG", lang.c_str()); + setEnv("LANGUAGE", lang.c_str()); + } +#ifdef ANDROID +#ifdef USE_SDL2 + bindTextDomain((std::string(getenv("APPDIR")).append("/locale")).c_str()); +#else // USE_SDL2 + + bindTextDomain((std::string(PhysFs::getBaseDir()).append( + "/locale")).c_str()); +#endif // USE_SDL2 +#else // ANDROID +#ifdef ENABLE_PORTABLE + bindTextDomain((std::string(PhysFs::getBaseDir()).append( + "../locale/")).c_str()); +#else // ENABLE_PORTABLE +#ifdef __APPLE__ + bindTextDomain((std::string(PhysFs::getBaseDir()) + .append("ManaPlus.app/Contents/Resources/locale/")).c_str()); +#else // __APPLE__ + + bindTextDomain(LOCALEDIR); +#endif // __APPLE__ +#endif // ENABLE_PORTABLE +#endif // ANDROID +#endif // WIN32 + + char *locale = setlocale(LC_MESSAGES, lang.c_str()); + if (locale) + { + logger->log("locale: %s", locale); + } + else + { + locale = setlocale(LC_MESSAGES, (lang + ".utf8").c_str()); + if (locale) + logger->log("locale: %s", locale); + else + logger->log("locale empty"); + } + bind_textdomain_codeset("manaplus", "UTF-8"); + textdomain("manaplus"); +#endif // ENABLE_NLS + +} + +void GettextHelper::bindTextDomain(const char *const path) +{ +#ifdef ENABLE_NLS + const char *const dir = bindtextdomain("manaplus", path); + if (dir) + logger->log("bindtextdomain: %s", dir); + else + logger->log("bindtextdomain failed"); +#endif +} diff --git a/src/utils/gettexthelper.h b/src/utils/gettexthelper.h new file mode 100644 index 000000000..534086820 --- /dev/null +++ b/src/utils/gettexthelper.h @@ -0,0 +1,35 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2014 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef GETTEXTHELPER_H +#define GETTEXTHELPER_H + +#include "localconsts.h" + +class GettextHelper final +{ + public: + static void initLang(); + + private: + static void bindTextDomain(const char *const path); +}; + +#endif // GETTEXTHELPER_H |