summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/Makefile.am2
-rw-r--r--src/client.cpp77
-rw-r--r--src/client.h4
-rw-r--r--src/utils/gettexthelper.cpp102
-rw-r--r--src/utils/gettexthelper.h35
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