summaryrefslogtreecommitdiff
path: root/shared/localization.cpp
diff options
context:
space:
mode:
authorDaniel Wilhelm <daniel@wili.li>2014-04-18 17:11:09 +0200
committerDaniel Wilhelm <daniel@wili.li>2014-04-18 17:11:09 +0200
commit9cc790869ed3905c78c7eeeb0bb44f800b3f2af4 (patch)
tree1c085bbf2302be294866c4fc6e0d225f8abbc346 /shared/localization.cpp
parent3.14 (diff)
downloadFreeFileSync-9cc790869ed3905c78c7eeeb0bb44f800b3f2af4.tar.gz
FreeFileSync-9cc790869ed3905c78c7eeeb0bb44f800b3f2af4.tar.bz2
FreeFileSync-9cc790869ed3905c78c7eeeb0bb44f800b3f2af4.zip
3.15
Diffstat (limited to 'shared/localization.cpp')
-rw-r--r--shared/localization.cpp700
1 files changed, 0 insertions, 700 deletions
diff --git a/shared/localization.cpp b/shared/localization.cpp
deleted file mode 100644
index a412df1e..00000000
--- a/shared/localization.cpp
+++ /dev/null
@@ -1,700 +0,0 @@
-// **************************************************************************
-// * This file is part of the FreeFileSync project. It is distributed under *
-// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *
-// * Copyright (C) 2008-2011 ZenJu (zhnmju123 AT gmx.de) *
-// **************************************************************************
-//
-#include "localization.h"
-#include <wx/msgdlg.h>
-#include "../shared/standard_paths.h"
-#include "../shared/string_conv.h"
-#include "system_constants.h"
-#include <fstream>
-#include <map>
-#include <wx/ffile.h>
-
-#if wxCHECK_VERSION(2, 9, 1)
-#include <boost/cstdint.hpp>
-#include <wx/translation.h>
-#include <cstdlib>
-#endif
-
-using ffs3::CustomLocale;
-using ffs3::LocalizationInfo;
-
-//_("Browse") <- dummy string for wxDirPickerCtrl to be recognized by automatic text extraction!
-
-
-namespace
-{
-//will receive their proper value in CustomLocale::CustomLocale()
-wxString THOUSANDS_SEPARATOR = wxT(",");
-wxString DECIMAL_POINT = wxT(".");
-}
-
-
-wxString ffs3::getThousandsSeparator()
-{
- return THOUSANDS_SEPARATOR;
-}
-
-
-wxString ffs3::getDecimalPoint()
-{
- return DECIMAL_POINT;
-}
-
-
-const std::vector<ffs3::LocInfoLine>& LocalizationInfo::getMapping()
-{
- static LocalizationInfo instance;
- return instance.locMapping;
-}
-
-
-namespace
-{
-struct CompareByName : public std::binary_function<ffs3::LocInfoLine, ffs3::LocInfoLine, bool>
-{
- bool operator()(const ffs3::LocInfoLine& lhs, const ffs3::LocInfoLine& rhs) const
- {
- return lhs.languageName < rhs.languageName;
- }
-};
-}
-
-
-LocalizationInfo::LocalizationInfo()
-{
- ffs3::LocInfoLine newEntry;
-
- newEntry.languageID = wxLANGUAGE_CZECH;
- newEntry.languageName = wxT("Čeština");
- newEntry.languageFile = wxT("czech.lng");
- newEntry.translatorName = wxT("ViCi");
- newEntry.languageFlag = wxT("czechRep.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_GERMAN;
- newEntry.languageName = wxT("Deutsch");
- newEntry.languageFile = wxT("german.lng");
- newEntry.translatorName = wxT("ZenJu");
- newEntry.languageFlag = wxT("germany.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_ENGLISH_UK;
- newEntry.languageName = wxT("English (UK)");
- newEntry.languageFile = wxT("english_uk.lng");
- newEntry.translatorName = wxT("Robert Readman");
- newEntry.languageFlag = wxT("england.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_ENGLISH;
- newEntry.languageName = wxT("English (US)");
- newEntry.languageFile = wxT("");
- newEntry.translatorName = wxT("ZenJu");
- newEntry.languageFlag = wxT("usa.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_SPANISH;
- newEntry.languageName = wxT("Español");
- newEntry.languageFile = wxT("spanish.lng");
- newEntry.translatorName = wxT("Alexis Martínez");
- newEntry.languageFlag = wxT("spain.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_GREEK;
- newEntry.languageName = wxT("Ελληνικά");
- newEntry.languageFile = wxT("greek.lng");
- newEntry.translatorName = wxT("Γιώργος Γιαγλής");
- newEntry.languageFlag = wxT("greece.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_FRENCH;
- newEntry.languageName = wxT("Français");
- newEntry.languageFile = wxT("french.lng");
- newEntry.translatorName = wxT("Jean-François Hartmann");
- newEntry.languageFlag = wxT("france.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_ITALIAN;
- newEntry.languageName = wxT("Italiano");
- newEntry.languageFile = wxT("italian.lng");
- newEntry.translatorName = wxT("Emmo");
- newEntry.languageFlag = wxT("italy.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_HUNGARIAN;
- newEntry.languageName = wxT("Magyar");
- newEntry.languageFile = wxT("hungarian.lng");
- newEntry.translatorName = wxT("Demon");
- newEntry.languageFlag = wxT("hungary.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_DUTCH;
- newEntry.languageName = wxT("Nederlands");
- newEntry.languageFile = wxT("dutch.lng");
- newEntry.translatorName = wxT("Dion van Lieshout");
- newEntry.languageFlag = wxT("holland.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_POLISH;
- newEntry.languageName = wxT("Polski");
- newEntry.languageFile = wxT("polish.lng");
- newEntry.translatorName = wxT("Wojtek Pietruszewski");
- newEntry.languageFlag = wxT("poland.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_PORTUGUESE;
- newEntry.languageName = wxT("Português");
- newEntry.languageFile = wxT("portuguese.lng");
- newEntry.translatorName = wxT("QuestMark");
- newEntry.languageFlag = wxT("portugal.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_PORTUGUESE_BRAZILIAN;
- newEntry.languageName = wxT("Português do Brasil");
- newEntry.languageFile = wxT("portuguese_br.lng");
- newEntry.translatorName = wxT("Edison Aranha");
- newEntry.languageFlag = wxT("brazil.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_RUSSIAN;
- newEntry.languageName = wxT("Pусский");
- newEntry.languageFile = wxT("russian.lng");
- newEntry.translatorName = wxT("Fayzullin T.N. aka Svobodniy");
- newEntry.languageFlag = wxT("russia.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_ROMANIAN;
- newEntry.languageName = wxT("Română");
- newEntry.languageFile = wxT("romanian.lng");
- newEntry.translatorName = wxT("Alexandru Bogdan Munteanu");
- newEntry.languageFlag = wxT("romania.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_SLOVENIAN;
- newEntry.languageName = wxT("Slovenščina");
- newEntry.languageFile = wxT("slovenian.lng");
- newEntry.translatorName = wxT("Matej Badalic");
- newEntry.languageFlag = wxT("slovakia.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_FINNISH;
- newEntry.languageName = wxT("Suomi");
- newEntry.languageFile = wxT("finnish.lng");
- newEntry.translatorName = wxT("Nalle Juslén");
- newEntry.languageFlag = wxT("finland.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_SWEDISH;
- newEntry.languageName = wxT("Svenska");
- newEntry.languageFile = wxT("swedish.lng");
- newEntry.translatorName = wxT("Åke Engelbrektson");
- newEntry.languageFlag = wxT("sweden.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_TURKISH;
- newEntry.languageName = wxT("Türkçe");
- newEntry.languageFile = wxT("turkish.lng");
- newEntry.translatorName = wxT("Kaya Zeren");
- newEntry.languageFlag = wxT("turkey.png");
- locMapping.push_back(newEntry);
-
- // newEntry.languageID = wxLANGUAGE_HEBREW;
- // newEntry.languageName = wxT("עִבְרִית");
- // newEntry.languageFile = wxT("hebrew.lng");
- // newEntry.translatorName = wxT("Moshe Olshevsky");
- // newEntry.languageFlag = wxT("isreal.png");
- // locMapping.push_back(newEntry);
-
- // newEntry.languageID = wxLANGUAGE_ARABIC;
- // newEntry.languageName = wxT("العربية");
- // newEntry.languageFile = wxT("arabic.lng");
- // newEntry.translatorName = wxT("Yousef Shamshoum");
- // newEntry.languageFlag = wxT("arabic-language.png");
- // locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_JAPANESE;
- newEntry.languageName = wxT("日本語");
- newEntry.languageFile = wxT("japanese.lng");
- newEntry.translatorName = wxT("Tilt");
- newEntry.languageFlag = wxT("japan.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_CHINESE_TRADITIONAL;
- newEntry.languageName = wxT("正體中文");
- newEntry.languageFile = wxT("chinese_traditional.lng");
- newEntry.translatorName = wxT("Carlos");
- newEntry.languageFlag = wxT("taiwan.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_CHINESE_SIMPLIFIED;
- newEntry.languageName = wxT("简体中文");
- newEntry.languageFile = wxT("chinese_simple.lng");
- newEntry.translatorName = wxT("CyberCowBoy");
- newEntry.languageFlag = wxT("china.png");
- locMapping.push_back(newEntry);
-
- newEntry.languageID = wxLANGUAGE_KOREAN;
- newEntry.languageName = wxT("한국어");
- newEntry.languageFile = wxT("korean.lng");
- newEntry.translatorName = wxT("Simon Park");
- newEntry.languageFlag = wxT("south_korea.png");
- locMapping.push_back(newEntry);
-
- //std::sort(locMapping.begin(), locMapping.end(), CompareByName());
-}
-
-
-namespace
-{
-int mapLanguageDialect(int language)
-{
- switch (language) //map language dialects
- {
- //variants of wxLANGUAGE_GERMAN
- case wxLANGUAGE_GERMAN_AUSTRIAN:
- case wxLANGUAGE_GERMAN_BELGIUM:
- case wxLANGUAGE_GERMAN_LIECHTENSTEIN:
- case wxLANGUAGE_GERMAN_LUXEMBOURG:
- case wxLANGUAGE_GERMAN_SWISS:
- return wxLANGUAGE_GERMAN;
-
- //variants of wxLANGUAGE_FRENCH
- case wxLANGUAGE_FRENCH_BELGIAN:
- case wxLANGUAGE_FRENCH_CANADIAN:
- case wxLANGUAGE_FRENCH_LUXEMBOURG:
- case wxLANGUAGE_FRENCH_MONACO:
- case wxLANGUAGE_FRENCH_SWISS:
- return wxLANGUAGE_FRENCH;
-
- //variants of wxLANGUAGE_DUTCH
- case wxLANGUAGE_DUTCH_BELGIAN:
- return wxLANGUAGE_DUTCH;
-
- //variants of wxLANGUAGE_ITALIAN
- case wxLANGUAGE_ITALIAN_SWISS:
- return wxLANGUAGE_ITALIAN;
-
- //variants of wxLANGUAGE_CHINESE_SIMPLIFIED
- case wxLANGUAGE_CHINESE:
- case wxLANGUAGE_CHINESE_SINGAPORE:
- return wxLANGUAGE_CHINESE_SIMPLIFIED;
-
- //variants of wxLANGUAGE_CHINESE_TRADITIONAL
- case wxLANGUAGE_CHINESE_TAIWAN:
- case wxLANGUAGE_CHINESE_HONGKONG:
- case wxLANGUAGE_CHINESE_MACAU:
- return wxLANGUAGE_CHINESE_TRADITIONAL;
-
- //variants of wxLANGUAGE_RUSSIAN
- case wxLANGUAGE_RUSSIAN_UKRAINE:
- return wxLANGUAGE_RUSSIAN;
-
- //variants of wxLANGUAGE_SPANISH
- case wxLANGUAGE_SPANISH_ARGENTINA:
- case wxLANGUAGE_SPANISH_BOLIVIA:
- case wxLANGUAGE_SPANISH_CHILE:
- case wxLANGUAGE_SPANISH_COLOMBIA:
- case wxLANGUAGE_SPANISH_COSTA_RICA:
- case wxLANGUAGE_SPANISH_DOMINICAN_REPUBLIC:
- case wxLANGUAGE_SPANISH_ECUADOR:
- case wxLANGUAGE_SPANISH_EL_SALVADOR:
- case wxLANGUAGE_SPANISH_GUATEMALA:
- case wxLANGUAGE_SPANISH_HONDURAS:
- case wxLANGUAGE_SPANISH_MEXICAN:
- case wxLANGUAGE_SPANISH_MODERN:
- case wxLANGUAGE_SPANISH_NICARAGUA:
- case wxLANGUAGE_SPANISH_PANAMA:
- case wxLANGUAGE_SPANISH_PARAGUAY:
- case wxLANGUAGE_SPANISH_PERU:
- case wxLANGUAGE_SPANISH_PUERTO_RICO:
- case wxLANGUAGE_SPANISH_URUGUAY:
- case wxLANGUAGE_SPANISH_US:
- case wxLANGUAGE_SPANISH_VENEZUELA:
- return wxLANGUAGE_SPANISH;
-
- //variants of wxLANGUAGE_SWEDISH
- case wxLANGUAGE_SWEDISH_FINLAND:
- return wxLANGUAGE_SWEDISH;
-
- //case wxLANGUAGE_CZECH:
- //case wxLANGUAGE_FINNISH:
- //case wxLANGUAGE_GREEK:
- //case wxLANGUAGE_JAPANESE:
- //case wxLANGUAGE_POLISH:
- //case wxLANGUAGE_SLOVENIAN:
- //case wxLANGUAGE_HUNGARIAN:
- //case wxLANGUAGE_PORTUGUESE:
- //case wxLANGUAGE_PORTUGUESE_BRAZILIAN:
- //case wxLANGUAGE_KOREAN:
-
- //variants of wxLANGUAGE_ARABIC (also needed to detect RTL languages)
- case wxLANGUAGE_ARABIC_ALGERIA:
- case wxLANGUAGE_ARABIC_BAHRAIN:
- case wxLANGUAGE_ARABIC_EGYPT:
- case wxLANGUAGE_ARABIC_IRAQ:
- case wxLANGUAGE_ARABIC_JORDAN:
- case wxLANGUAGE_ARABIC_KUWAIT:
- case wxLANGUAGE_ARABIC_LEBANON:
- case wxLANGUAGE_ARABIC_LIBYA:
- case wxLANGUAGE_ARABIC_MOROCCO:
- case wxLANGUAGE_ARABIC_OMAN:
- case wxLANGUAGE_ARABIC_QATAR:
- case wxLANGUAGE_ARABIC_SAUDI_ARABIA:
- case wxLANGUAGE_ARABIC_SUDAN:
- case wxLANGUAGE_ARABIC_SYRIA:
- case wxLANGUAGE_ARABIC_TUNISIA:
- case wxLANGUAGE_ARABIC_UAE:
- case wxLANGUAGE_ARABIC_YEMEN:
- return wxLANGUAGE_ARABIC;
-
- //variants of wxLANGUAGE_ENGLISH_UK
- case wxLANGUAGE_ENGLISH_AUSTRALIA:
- case wxLANGUAGE_ENGLISH_NEW_ZEALAND:
- case wxLANGUAGE_ENGLISH_TRINIDAD:
- case wxLANGUAGE_ENGLISH_CARIBBEAN:
- case wxLANGUAGE_ENGLISH_JAMAICA:
- case wxLANGUAGE_ENGLISH_BELIZE:
- case wxLANGUAGE_ENGLISH_EIRE:
- case wxLANGUAGE_ENGLISH_SOUTH_AFRICA:
- case wxLANGUAGE_ENGLISH_ZIMBABWE:
- case wxLANGUAGE_ENGLISH_BOTSWANA:
- case wxLANGUAGE_ENGLISH_DENMARK:
- return wxLANGUAGE_ENGLISH_UK;
-
- default:
- return language;
- }
-}
-
-
-inline
-void exchangeEscapeChars(wxString& data)
-{
- wxString output;
-
- const wxChar* input = data.c_str();
-
- wxChar value;
- while ((value = *input) != wxChar(0))
- {
- //read backslash
- if (value == wxChar('\\'))
- {
- //read next character
- ++input;
- if ((value = *input) == wxChar(0))
- break;
-
- switch (value)
- {
- case wxChar('\\'):
- output += wxChar('\\');
- break;
- case wxChar('n'):
- output += wxChar('\n');
- break;
- case wxChar('t'):
- output += wxChar('\t');
- break;
- case wxChar('\"'):
- output += wxChar('\"');
- break;
- default:
- output += value;
- }
- }
- else
- output += value;
-
- ++input;
- }
- data = output;
-}
-
-
-//workaround to get a FILE* from a unicode filename in a portable way
-class UnicodeFileReader
-{
-public:
- UnicodeFileReader(const wxString& filename) :
- inputFile(NULL)
- {
- wxFFile dummyFile(filename, wxT("rb"));
- if (dummyFile.IsOpened())
- {
- inputFile = dummyFile.fp();
- dummyFile.Detach();
- }
- }
-
- ~UnicodeFileReader()
- {
- if (inputFile != NULL)
- fclose(inputFile);
- }
-
- bool isOkay()
- {
- return inputFile != NULL;
- }
-
- bool getNextLine(wxString& line)
- {
- std::string output;
-
- while (true)
- {
- const int c = fgetc(inputFile);
- if (c == EOF)
- return false;
- else if (c == 0xD)
- {
- //Delimiter:
- //----------
- //Linux: 0xA \n
- //Mac: 0xD \r
- //Win: 0xD 0xA \r\n <- language files are in Windows format
-
- fgetc(inputFile); //discard the 0xA character
-
- line = wxString::FromUTF8(output.c_str(), output.length());
- return true;
- }
- output += static_cast<char>(c);
- }
- }
-
-private:
- FILE* inputFile;
-};
-
-
-typedef std::map<wxString, wxString> TranslationMap; //map original text |-> translation
-
-void loadTranslation(const wxString& filename, TranslationMap& trans) //empty translation on error
-{
- trans.clear();
-
- UnicodeFileReader langFile(ffs3::getResourceDir() + wxT("Languages") + ffs3::zToWx(common::FILE_NAME_SEPARATOR) + filename);
- if (langFile.isOkay())
- {
- //save encoding info: required by mo file generator
- trans.insert(std::make_pair(wxEmptyString, wxT("Content-Type: text/plain; charset=UTF-8\n")));
-
- int rowNumber = 0;
- wxString original;
- wxString tmpString;
- while (langFile.getNextLine(tmpString))
- {
- exchangeEscapeChars(tmpString);
-
- if (rowNumber++ % 2 == 0)
- original = tmpString;
- else
- {
- const wxString& translation = tmpString;
-
- if (!original.empty() && !translation.empty())
- trans.insert(std::make_pair(original, translation));
- }
- }
- }
-}
-}
-
-
-#if wxCHECK_VERSION(2, 9, 1)
-//this whole abomination is required to support language formats other than "mo" in wxWidgets v2.9
-class FFSTranslationLoader : public wxTranslationsLoader
-{
-public:
- static const wxString domainName()
- {
- return wxT("FFS");
- }
-
- FFSTranslationLoader(const TranslationMap& trans, wxLanguage langId) : langId_(langId)
- {
- //generate mo file: http://www.gnu.org/software/hello/manual/gettext/MO-Files.html
-
- std::string binaryStream;
-
- const size_t offsetTableOrig = sizeof(wxMsgCatalogHeader);
- const size_t offsetTableTrans = offsetTableOrig + trans.size() * sizeof(wxMsgTableEntry);
- const size_t offsetTableString = offsetTableTrans + trans.size() * sizeof(wxMsgTableEntry);
-
- wxMsgCatalogHeader header =
- {
- 0x950412de, //magic number (save in this machine's byte order)
- 0, //revision
- trans.size(), //numStrings
- offsetTableOrig, //ofsOrigTable
- offsetTableTrans, //ofsTransTable
- 0, //nHashSize
- 0, //ofsHashTable
- };
- writeCobject(binaryStream, header);
-
- std::string tableOrig;
- std::string tableTrans;
- std::string stringsList;
- for (TranslationMap::const_iterator i = trans.begin(); i != trans.end(); ++i)
- {
-
-#ifndef _MSC_VER
-#warning redundant UTF8 conversion!!!
-#endif
- std::string origString = i->first.ToUTF8();
- const wxMsgTableEntry origEntry = {origString.length(), offsetTableString + stringsList.size()};
- writeCobject(tableOrig, origEntry);
- stringsList.append(origString.c_str(), origString.length() + 1); //include NULL-termination
-
-#ifndef _MSC_VER
-#warning redundant UTF8 conversion!!!
-#endif
- std::string transString = i->second.ToUTF8();
- const wxMsgTableEntry transEntry = {transString.length(), offsetTableString + stringsList.size()};
- writeCobject(tableTrans, transEntry);
- stringsList.append(transString.c_str(), transString.length() + 1); //include NULL-termination
- }
- binaryStream += tableOrig;
- binaryStream += tableTrans;
- binaryStream += stringsList;
-
- buffer = wxScopedCharBuffer::CreateOwned(static_cast<char*>(::malloc(binaryStream.size())), binaryStream.size()); //takes buffer ownership, calls ::free()
- std::copy(binaryStream.begin(), binaryStream.end(), buffer.data());
- }
-
- virtual wxMsgCatalog* LoadCatalog(const wxString& domain, const wxString& lang)
- {
- if (domain != domainName() || lang != wxLocale::GetLanguageCanonicalName(langId_)) //avoid superfluous calls by wxWidgets framework
- return NULL;
-
- return wxMsgCatalog::CreateFromData(buffer, domain);
- }
-
- virtual wxArrayString GetAvailableTranslations(const wxString& domain) const
- {
- wxArrayString output;
- if (domain == domainName())
- output.Add(wxLocale::GetLanguageCanonicalName(langId_));
- return output;
- }
-
-private:
- struct wxMsgTableEntry
- {
- boost::uint32_t nLen, // length of the string
- ofsString; // pointer to the string
- };
-
- // header of a .mo file
- struct wxMsgCatalogHeader
- {
- boost::uint32_t magic, // offset +00: magic id
- revision, // +04: revision
- numStrings, // +08: number of strings in the file
- ofsOrigTable, // +0C: start of original string table
- ofsTransTable, // +10: start of translated string table
- nHashSize, // +14: hash table size
- ofsHashTable; // +18: offset of hash table start
- };
-
- template <class T>
- void writeCobject(std::string& str, T obj)
- {
- str.append(reinterpret_cast<const char*>(&obj), sizeof(obj));
- }
-
- wxScopedCharBuffer buffer; //raw data in mo file format
- const wxLanguage langId_;
-};
-#endif
-
-
-CustomLocale& CustomLocale::getInstance()
-{
- static CustomLocale instance;
- return instance;
-}
-
-
-class Translation : public TranslationMap {};
-
-
-CustomLocale::CustomLocale() :
- translationDB(new Translation),
- currentLanguage(wxLANGUAGE_ENGLISH)
-{
- Init(wxLANGUAGE_DEFAULT); //setting a different language needn't be supported on all systems!
-
- //actually these two parameters are language dependent, but we take system setting to handle all kinds of language derivations
- const lconv* localInfo = localeconv();
- THOUSANDS_SEPARATOR = wxString::FromUTF8(localInfo->thousands_sep);
- DECIMAL_POINT = wxString::FromUTF8(localInfo->decimal_point);
-
- // why not working?
- // THOUSANDS_SEPARATOR = std::use_facet<std::numpunct<wchar_t> >(std::locale("")).thousands_sep();
- // DECIMAL_POINT = std::use_facet<std::numpunct<wchar_t> >(std::locale("")).decimal_point();
-}
-
-
-CustomLocale::~CustomLocale() {} //non-inline destructor for std::auto_ptr to work with forward declaration
-
-
-void CustomLocale::setLanguage(int language)
-{
- currentLanguage = static_cast<wxLanguage>(language);
-
- //default: english
- wxString languageFile;
-
- //(try to) retrieve language filename
- const int mappedLanguage = mapLanguageDialect(language);
- for (std::vector<LocInfoLine>::const_iterator i = LocalizationInfo::getMapping().begin(); i != LocalizationInfo::getMapping().end(); ++i)
- if (i->languageID == mappedLanguage)
- {
- languageFile = i->languageFile;
- break;
- }
-
- //load language file into buffer
- translationDB->clear();
- if (!languageFile.empty())
- {
- loadTranslation(languageFile, *translationDB); //empty translation on error
- if (translationDB->empty())
- {
- wxMessageBox(wxString(_("Error reading file:")) + wxT(" \"") + languageFile + wxT("\""), _("Error"), wxOK | wxICON_ERROR);
- currentLanguage = wxLANGUAGE_ENGLISH; //reset to english language to show this error just once
- }
- }
- else
- ; //if languageFile is empty texts will be english per default
-
-
-
-#if wxCHECK_VERSION(2, 9, 1)
- wxTranslations::Set(new wxTranslations);
- wxTranslations::Get()->SetLoader(new FFSTranslationLoader(*translationDB, currentLanguage)); //ownership passed
- wxTranslations::Get()->SetLanguage(currentLanguage);
- wxTranslations::Get()->AddCatalog(FFSTranslationLoader::domainName(), wxLANGUAGE_ENGLISH_US);
- //... a little over design going on?!?
-#endif
-}
-
-
-const wxChar* CustomLocale::GetString(const wxChar* szOrigString, const wxChar* szDomain) const
-{
- //look for translation in buffer table
- const Translation::const_iterator i = translationDB->find(szOrigString);
- if (i != translationDB->end())
- return i->second.c_str();
-
- //fallback
- return szOrigString;
-}
-
bgstack15