diff options
author | Piotr Dziwinski <piotrdz@gmail.com> | 2013-06-24 13:07:33 +0200 |
---|---|---|
committer | Piotr Dziwinski <piotrdz@gmail.com> | 2013-06-24 14:16:39 +0200 |
commit | 3e989c96dff7889aff5b6476bf2a8fb9c541bd95 (patch) | |
tree | e09490d29a3d8259f2f7b123ea0c40f7518b8929 /src/app/app.cpp | |
parent | 78c167064bfffd30cb623fc82ca9b14d1fe36e7d (diff) | |
download | colobot-3e989c96dff7889aff5b6476bf2a8fb9c541bd95.tar.gz colobot-3e989c96dff7889aff5b6476bf2a8fb9c541bd95.tar.bz2 colobot-3e989c96dff7889aff5b6476bf2a8fb9c541bd95.zip |
Fixed auto-detecting locale on Windows
* localename library is now used to determine the actual locale used
* added patched version of FindGettext.cmake to fix
installation path of translation files
Diffstat (limited to 'src/app/app.cpp')
-rw-r--r-- | src/app/app.cpp | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/src/app/app.cpp b/src/app/app.cpp index 44a7a74..f98e0fc 100644 --- a/src/app/app.cpp +++ b/src/app/app.cpp @@ -46,6 +46,7 @@ #include <libintl.h> #include <unistd.h> #include <getopt.h> +#include <localename.h> template<> CApplication* CSingleton<CApplication>::m_instance = nullptr; @@ -1741,33 +1742,38 @@ void CApplication::SetLanguage(Language language) if (locale.empty()) { - char *envLang = getenv("LANGUAGE"); - if (envLang == NULL) - { - envLang = getenv("LANG"); - } + const char* envLang = gl_locale_name(LC_MESSAGES, "LC_MESSAGES"); if (envLang == NULL) { GetLogger()->Error("Failed to get language from environment, setting default language\n"); m_language = LANGUAGE_ENGLISH; } - else if (strncmp(envLang,"en",2) == 0) - { - m_language = LANGUAGE_ENGLISH; - } - else if (strncmp(envLang,"de",2) == 0) - { - m_language = LANGUAGE_GERMAN; - } - else if (strncmp(envLang,"fr",2) == 0) - { - m_language = LANGUAGE_FRENCH; - } - else if (strncmp(envLang,"pl",2) == 0) + else { - m_language = LANGUAGE_POLISH; + GetLogger()->Trace("gl_locale_name: '%s'\n", envLang); + + if (strncmp(envLang,"en",2) == 0) + { + m_language = LANGUAGE_ENGLISH; + } + else if (strncmp(envLang,"de",2) == 0) + { + m_language = LANGUAGE_GERMAN; + } + else if (strncmp(envLang,"fr",2) == 0) + { + m_language = LANGUAGE_FRENCH; + } + else if (strncmp(envLang,"pl",2) == 0) + { + m_language = LANGUAGE_POLISH; + } + else + { + GetLogger()->Warn("Enviromnent locale ('%s') is not supported, setting default language\n", envLang); + m_language = LANGUAGE_ENGLISH; + } } - GetLogger()->Trace("SetLanguage: Inherit LANGUAGE=%s from environment\n", envLang); } else { @@ -1777,6 +1783,7 @@ void CApplication::SetLanguage(Language language) putenv(S_LANGUAGE); GetLogger()->Trace("SetLanguage: Set LANGUAGE=%s in environment\n", locale.c_str()); } + setlocale(LC_ALL, ""); bindtextdomain("colobot", m_langPath.c_str()); |