diff options
author | Andrei Karas <akaras@inbox.ru> | 2014-05-29 14:49:32 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2014-05-29 14:49:32 +0300 |
commit | 13dc76b540a0fa9bd62e3e996dd707b610e792e5 (patch) | |
tree | 4df2df7e40621dffb8d39c64f59c25b77bc93fd7 /src/utils/gettexthelper.cpp | |
parent | ae8cfcf50b00e88f6722f3b5f461b6081479a1ac (diff) | |
download | mv-13dc76b540a0fa9bd62e3e996dd707b610e792e5.tar.gz mv-13dc76b540a0fa9bd62e3e996dd707b610e792e5.tar.bz2 mv-13dc76b540a0fa9bd62e3e996dd707b610e792e5.tar.xz mv-13dc76b540a0fa9bd62e3e996dd707b610e792e5.zip |
Move gettext related methods into separate file.
Diffstat (limited to 'src/utils/gettexthelper.cpp')
-rw-r--r-- | src/utils/gettexthelper.cpp | 102 |
1 files changed, 102 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 +} |