diff options
author | Piotr Dziwiński <piotrdz@gmail.com> | 2012-12-29 02:43:00 -0800 |
---|---|---|
committer | Piotr Dziwiński <piotrdz@gmail.com> | 2012-12-29 02:43:00 -0800 |
commit | 89296b20bdf3c8f3eed45f7a5eeda3b1e207d2b7 (patch) | |
tree | 53817bb71f0b77752bbd506c79ac2620e61d183f /src/app/app.cpp | |
parent | 3e4c1a1ad88456ebf201b257b91847bd995c8773 (diff) | |
parent | 1b4208cdc5143cfc8f46da063a1a991795d7f307 (diff) | |
download | colobot-89296b20bdf3c8f3eed45f7a5eeda3b1e207d2b7.tar.gz colobot-89296b20bdf3c8f3eed45f7a5eeda3b1e207d2b7.tar.bz2 colobot-89296b20bdf3c8f3eed45f7a5eeda3b1e207d2b7.zip |
Merge pull request #109 from OdyX/dev-more-language-fixes
Some more language fixes
Diffstat (limited to 'src/app/app.cpp')
-rw-r--r-- | src/app/app.cpp | 133 |
1 files changed, 91 insertions, 42 deletions
diff --git a/src/app/app.cpp b/src/app/app.cpp index 4d32de3..1e577ca 100644 --- a/src/app/app.cpp +++ b/src/app/app.cpp @@ -285,48 +285,7 @@ bool CApplication::Create() return false; } - /* Gettext initialization */ - - std::string locale = ""; - switch (m_language) - { - default: - case LANGUAGE_ENV: - locale = ""; - break; - - case LANGUAGE_ENGLISH: - locale = "en_US.utf8"; - break; - - case LANGUAGE_GERMAN: - locale = "de_DE.utf8"; - break; - - case LANGUAGE_FRENCH: - locale = "fr_FR.utf8"; - break; - - case LANGUAGE_POLISH: - locale = "pl_PL.utf8"; - break; - } - - if (!locale.empty()) - { - std::string langStr = "LANG="; - langStr += locale; - strcpy(S_LANGUAGE, langStr.c_str()); - putenv(S_LANGUAGE); - } - setlocale(LC_ALL, ""); - GetLogger()->Debug("Set locale to '%s'\n", locale.c_str()); - - bindtextdomain("colobot", COLOBOT_I18N_DIR); - bind_textdomain_codeset("colobot", "UTF-8"); - textdomain("colobot"); - - GetLogger()->Debug("Testing gettext translation: '%s'\n", gettext("Colobot rules!")); + SetLanguage(m_language); //Create the sound instance. if (!GetProfile().InitCurrentDirectory()) @@ -1453,9 +1412,99 @@ Language CApplication::GetLanguage() return m_language; } +char CApplication::GetLanguageChar() +{ + char langChar = 'E'; + switch (m_language) + { + default: + case LANGUAGE_ENV: + case LANGUAGE_ENGLISH: + langChar = 'E'; + break; + + case LANGUAGE_GERMAN: + langChar = 'D'; + break; + + case LANGUAGE_FRENCH: + langChar = 'F'; + break; + + case LANGUAGE_POLISH: + langChar = 'P'; + break; + } + return langChar; +} + void CApplication::SetLanguage(Language language) { m_language = language; + + /* Gettext initialization */ + + std::string locale = ""; + switch (m_language) + { + default: + case LANGUAGE_ENV: + locale = ""; + break; + + case LANGUAGE_ENGLISH: + locale = "en_US.utf8"; + break; + + case LANGUAGE_GERMAN: + locale = "de_DE.utf8"; + break; + + case LANGUAGE_FRENCH: + locale = "fr_FR.utf8"; + break; + + case LANGUAGE_POLISH: + locale = "pl_PL.utf8"; + break; + } + + if (locale.empty()) + { + char *envLang = getenv("LANGUAGE"); + 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,"po",2) == 0) + { + m_language = LANGUAGE_POLISH; + } + GetLogger()->Trace("SetLanguage: Inherit LANGUAGE=%s from environment\n", envLang); + } + else + { + std::string langStr = "LANGUAGE="; + langStr += locale; + strcpy(S_LANGUAGE, langStr.c_str()); + putenv(S_LANGUAGE); + GetLogger()->Trace("SetLanguage: Set LANGUAGE=%s in environment\n", locale.c_str()); + } + setlocale(LC_ALL, ""); + + bindtextdomain("colobot", COLOBOT_I18N_DIR); + bind_textdomain_codeset("colobot", "UTF-8"); + textdomain("colobot"); + + GetLogger()->Debug("SetLanguage: Test gettext translation: '%s'\n", gettext("Colobot rules!")); } void CApplication::SetLowCPU(bool low) |