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 | |
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')
-rw-r--r-- | src/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/app/app.cpp | 47 |
2 files changed, 29 insertions, 20 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7c02aa1..6f93532 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -185,6 +185,7 @@ ${OPENAL_SRC} set(LIBS CBot clipboard +localename ${SDL_LIBRARY} ${SDLIMAGE_LIBRARY} ${SDLTTF_LIBRARY} @@ -214,6 +215,7 @@ ${PNG_INCLUDE_DIRS} ${GLEW_INCLUDE_PATH} ${Boost_INCLUDE_DIRS} ${LIBSNDFILE_INCLUDE_DIR} +${LOCALENAME_INCLUDE_DIR} ${OPTIONAL_INCLUDE_DIRS} ${CLIPBOARD_INCLUDE_DIR} ) 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()); |