diff options
Diffstat (limited to 'src/Main/Resources.cpp')
-rw-r--r-- | src/Main/Resources.cpp | 113 |
1 files changed, 62 insertions, 51 deletions
diff --git a/src/Main/Resources.cpp b/src/Main/Resources.cpp index 32bcd9d2..d8bab977 100644 --- a/src/Main/Resources.cpp +++ b/src/Main/Resources.cpp @@ -14,14 +14,16 @@ #include "Platform/Platform.h" #include "Resources.h" -#ifdef TC_LINUX +#ifdef TC_WINDOWS +#include "Main/resource.h" +#else +#ifdef TC_MACOSX +#include "Application.h" +#endif #include "Platform/File.h" #include "Platform/StringConverter.h" #include <stdio.h> -#endif - -#ifdef TC_WINDOWS -#include "Main/resource.h" +#include "UserPreferences.h" #endif namespace VeraCrypt @@ -45,7 +47,6 @@ namespace VeraCrypt } #endif // TC_WINDOWS - string Resources::GetLanguageXml () { #ifdef TC_WINDOWS @@ -54,60 +55,78 @@ namespace VeraCrypt strBuf.Zero(); strBuf.CopyFrom (res); return string (reinterpret_cast <char *> (strBuf.Ptr())); -#elif TC_LINUX +#else // get language from env LANG // support: C,POSIX, // support for e.g. german: de_DE.UTF-8, de.UTF8, de_DE, de // not support e.g.: de@Euro string defaultLang("en"); +#if defined (TC_MACOSX) + string filenamePrefix = StringConverter::ToSingle (Application::GetExecutableDirectory()) + "/../Resources/languages/Language."; +#else string filenamePrefix("/usr/share/veracrypt/languages/Language."); +#endif string filenamePost(".xml"); string filename = filenamePrefix + defaultLang + filenamePost; - if(const char* env_p = getenv("LANG")){ - string lang(env_p); - std::cout << lang << std::endl; - if ( lang.size() > 1 ){ - int found = lang.find("."); - if ( found > 1 ){ - string langTag = lang.substr (0,found); - string lowerLangTag(StringConverter::ToLower (langTag) ); - int foundUnderscore = lowerLangTag.find("_"); - if ( foundUnderscore > 0 ) { - lowerLangTag.replace(foundUnderscore,1,1,'-'); - filename = filenamePrefix + lowerLangTag + filenamePost; - FilesystemPath xml(filename); - if (! xml.IsFile()){ - string shortLangTag = lowerLangTag.substr(0,foundUnderscore); - filename = filenamePrefix + shortLangTag + filenamePost; + + UserPreferences Preferences; + Preferences.Load(); + wstring preferredLang = Preferences.Language; +#ifdef DEBUG + std::cout << "Config language: " << preferredLang << std::endl; +#endif + + if (preferredLang == L"system") { + if (const char *env_p = getenv("LANG")) { + string lang(env_p); +#ifdef DEBUG + std::cout << "env $LANG: " << lang << std::endl; +#endif + if (lang.size() > 1) { + int found = lang.find("."); + if (found > 1) { + string langTag = lang.substr(0, found); + string lowerLangTag(StringConverter::ToLower(langTag)); + int foundUnderscore = lowerLangTag.find("_"); + if (foundUnderscore > 0) { + lowerLangTag.replace(foundUnderscore, 1, 1, '-'); + filename = filenamePrefix + lowerLangTag + filenamePost; + FilesystemPath xml(filename); + if (!xml.IsFile()) { + string shortLangTag = lowerLangTag.substr(0, foundUnderscore); + filename = filenamePrefix + shortLangTag + filenamePost; + FilesystemPath xml(filename); + if (!xml.IsFile()) { + filename = filenamePrefix + defaultLang + filenamePost; + } + } + } else { + filename = filenamePrefix + langTag + filenamePost; FilesystemPath xml(filename); - if (! xml.IsFile()){ + if (!xml.IsFile()) { filename = filenamePrefix + defaultLang + filenamePost; } } - }else{ - filename = filenamePrefix + langTag + filenamePost; + } else { + string lowerLang(StringConverter::ToLower(lang)); + filename = filenamePrefix + lowerLang + filenamePost; FilesystemPath xml(filename); - if (! xml.IsFile()){ - filename = filenamePrefix + defaultLang + filenamePost; - } - } - }else{ - string lowerLang(StringConverter::ToLower (lang) ); - filename = filenamePrefix + lowerLang + filenamePost; - FilesystemPath xml(filename); - if (! xml.IsFile()){ - int foundUnderscore = lowerLang.find("_"); - if ( foundUnderscore > 0 ) { - lowerLang.replace(foundUnderscore,1,1,'-'); - filename = filenamePrefix + lowerLang + filenamePost; - FilesystemPath xml(filename); - if (! xml.IsFile()){ - filename = filenamePrefix + defaultLang + filenamePost; + if (!xml.IsFile()) { + int foundUnderscore = lowerLang.find("_"); + if (foundUnderscore > 0) { + lowerLang.replace(foundUnderscore, 1, 1, '-'); + filename = filenamePrefix + lowerLang + filenamePost; + FilesystemPath xml(filename); + if (!xml.IsFile()) { + filename = filenamePrefix + defaultLang + filenamePost; + } } } } } } + } else { + filename = filenamePrefix + preferredLang + filenamePost; } FilesystemPath xml(filename); if ( xml.IsFile() ){ @@ -127,14 +146,6 @@ namespace VeraCrypt }; return string ((const char*) LanguageXml); -#else - static byte LanguageXml[] = - { -# include "Common/Language.xml.h" - , 0 - }; - - return string ((const char*) LanguageXml); #endif } @@ -190,7 +201,7 @@ namespace VeraCrypt wxImage image (stream); image.Resize (wxSize (16, 12), wxPoint (0, 0)); -# ifdef __WXGTK__ +# if defined __WXGTK__ || defined TC_MACOSX return wxBitmap (image.ConvertToMono (0, 0, 0), 1); # else return wxBitmap (image); |