From e8b094fae57ac2257751e573bb8e7eb1bef35d5b Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 3 Jan 2016 14:42:53 +0300 Subject: Auto set default language from chrome ui (nacl). --- src/utils/gettexthelper.cpp | 60 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 47 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/utils/gettexthelper.cpp b/src/utils/gettexthelper.cpp index 336cd3307..3d70ae3dd 100644 --- a/src/utils/gettexthelper.cpp +++ b/src/utils/gettexthelper.cpp @@ -20,12 +20,12 @@ #include "utils/gettexthelper.h" +#include "configuration.h" + #ifdef ENABLE_NLS #include "client.h" -#include "configuration.h" #include "logger.h" -#include "utils/env.h" #include "utils/physfstools.h" #include @@ -36,30 +36,63 @@ extern "C" char const *_nl_locale_name_default(void); #endif // WIN32 #elif defined(ENABLE_CUSTOMNLS) #include "utils/translation/podict.h" +#ifdef __native_client__ +#include "utils/naclmessages.h" +#endif // __native_client__ #endif // ENABLE_NLS +#if defined(ENABLE_NLS) || defined(ENABLE_CUSTOMNLS) && !defined(WIN32) +#include "utils/env.h" +#endif // defined(ENABLE_NLS) || defined(ENABLE_CUSTOMNLS) && !defined(WIN32) + #include "debug.h" -void GettextHelper::initLang() +static std::string setLangEnv() { -#ifdef ENABLE_NLS std::string lang = config.getStringValue("lang"); -#ifdef WIN32 +#if defined(ENABLE_NLS) && defined(WIN32) if (lang.empty()) lang = std::string(_nl_locale_name_default()); +#elif defined(ENABLE_CUSTOMNLS) && defined(__native_client__) + if (lang.empty()) + { + NaclMessageHandle *handle = naclRegisterMessageHandler( + "get-uilanguage"); + naclPostMessage("get-uilanguage", ""); + lang = naclWaitForMessage(handle); + } +#endif // defined(ENABLE_NLS) && defined(WIN32) - putenv(const_cast(("LANG=" + lang).c_str())); - putenv(const_cast(("LANGUAGE=" + lang).c_str())); +#if defined(ENABLE_NLS) || defined(ENABLE_CUSTOMNLS) + if (!lang.empty()) + { +#ifdef WIN32 + putenv(const_cast(("LANG=" + lang).c_str())); + putenv(const_cast(("LANGUAGE=" + lang).c_str())); +#else // WIN32 + + if (!lang.empty()) + { + setEnv("LANG", lang.c_str()); + setEnv("LANGUAGE", lang.c_str()); + } +#endif // WIN32 + + } +#endif // defined(ENABLE_NLS) || defined(ENABLE_CUSTOMNLS) + + return lang; +} + +void GettextHelper::initLang() +{ +#ifdef ENABLE_NLS + const std::string lang = setLangEnv(); +#ifdef WIN32 // 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()); @@ -101,6 +134,7 @@ void GettextHelper::initLang() textdomain("manaplus"); #elif defined(ENABLE_CUSTOMNLS) mainTranslator = new PoDict("en"); + setLangEnv(); #endif // ENABLE_NLS } -- cgit v1.2.3-60-g2f50