diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/client.cpp | 77 | ||||
-rw-r--r-- | src/client.h | 4 | ||||
-rw-r--r-- | src/utils/gettexthelper.cpp | 102 | ||||
-rw-r--r-- | src/utils/gettexthelper.h | 35 |
6 files changed, 143 insertions, 79 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 819b5372a..c617842c5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -647,6 +647,8 @@ SET(SRCS utils/fuzzer.cpp utils/fuzzer.h utils/gettext.h + utils/gettexthelper.cpp + utils/gettexthelper.h utils/langs.cpp utils/langs.h utils/mathutils.h diff --git a/src/Makefile.am b/src/Makefile.am index f81145e6a..6bb9951f9 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -761,6 +761,8 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \ utils/fuzzer.cpp \ utils/fuzzer.h \ utils/gettext.h \ + utils/gettexthelper.cpp \ + utils/gettexthelper.h \ utils/langs.cpp \ utils/langs.h \ utils/mathutils.h \ diff --git a/src/client.cpp b/src/client.cpp index c0733c50b..1d3051372 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -121,6 +121,7 @@ #include "utils/files.h" #include "utils/fuzzer.h" #include "utils/gettext.h" +#include "utils/gettexthelper.h" #include "utils/mkdir.h" #include "utils/paths.h" #include "utils/physfstools.h" @@ -304,7 +305,7 @@ void Client::gameInit() "Exiting.", settings.localDataDir.c_str())); } - initLang(); + GettextHelper::initLang(); chatLogger = new ChatLogger; if (settings.options.chatLogDir.empty()) @@ -594,80 +595,6 @@ static void setProgress(const int val) #endif #endif -void Client::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 Client::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 -} - void Client::setEnv(const char *const name, const char *const value) { if (!name || !value) diff --git a/src/client.h b/src/client.h index d7066145a..b83c069e4 100644 --- a/src/client.h +++ b/src/client.h @@ -188,8 +188,6 @@ public: private: static void createWindows(); - static void initLang(); - void initSoundManager(); void initConfigListeners(); @@ -224,8 +222,6 @@ private: static Client *mInstance; - static void bindTextDomain(const char *const path); - static void setEnv(const char *const name, const char *const value); #ifdef ANDROID 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 |