From 95cf62b9901bfe5b9184282a083504b1a70b89c5 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 30 Apr 2012 18:02:22 +0200 Subject: [PATCH] locale stuff --- src/Gui/DlgGeneralImp.cpp | 23 +++++++++++++++-------- src/Gui/Language/Translator.cpp | 16 ++++++++++++++++ src/Gui/Language/Translator.h | 2 ++ 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/Gui/DlgGeneralImp.cpp b/src/Gui/DlgGeneralImp.cpp index e1e5302b3..1c52b875f 100644 --- a/src/Gui/DlgGeneralImp.cpp +++ b/src/Gui/DlgGeneralImp.cpp @@ -177,19 +177,26 @@ void DlgGeneralImp::loadSettings() QByteArray language = hGrp->GetASCII("Language", (const char*)lang.toAscii()).c_str(); Languages->addItem(Gui::Translator::tr("English"), QByteArray("English")); int index = 1; - TStringList list = Translator::instance()->supportedLanguages(); - for (TStringList::iterator it = list.begin(); it != list.end(); ++it, index++) { - QByteArray lang = it->c_str(); #if QT_VERSION >= 0x040800 - QLocale locale(QString::fromAscii(lang.constData())); - Languages->addItem(locale.nativeCountryName(), lang); -#else - Languages->addItem(Gui::Translator::tr(lang.constData()), lang); -#endif + TStringList list = Translator::instance()->supportedLocales(); + for (TStringList::iterator it = list.begin(); it != list.end(); ++it, index++) { + QLocale locale(QString::fromAscii(it->c_str())); + QByteArray lang = QLocale::languageToString(locale.language()).toAscii(); + Languages->addItem(locale.nativeLanguageName(), lang); if (language == lang) { Languages->setCurrentIndex(index); } } +#else + TStringList list = Translator::instance()->supportedLanguages(); + for (TStringList::iterator it = list.begin(); it != list.end(); ++it, index++) { + QByteArray lang = it->c_str(); + Languages->addItem(Gui::Translator::tr(lang.constData()), lang); + if (language == lang) { + Languages->setCurrentIndex(index); + } + } +#endif int size = QApplication::style()->pixelMetric(QStyle::PM_ToolBarIconSize); int current = getMainWindow()->iconSize().width(); diff --git a/src/Gui/Language/Translator.cpp b/src/Gui/Language/Translator.cpp index b32401875..0b7103f6e 100644 --- a/src/Gui/Language/Translator.cpp +++ b/src/Gui/Language/Translator.cpp @@ -174,6 +174,22 @@ TStringList Translator::supportedLanguages() const return languages; } +TStringList Translator::supportedLocales() const +{ + // List all .qm files + TStringList languages; + QDir dir(QLatin1String(":/translations")); + for (std::map::const_iterator it = d->mapLanguageTopLevelDomain.begin(); + it != d->mapLanguageTopLevelDomain.end(); ++it) { + QString filter = QString::fromAscii("*_%1.qm").arg(QLatin1String(it->second.c_str())); + QStringList fileNames = dir.entryList(QStringList(filter), QDir::Files, QDir::Name); + if (!fileNames.isEmpty()) + languages.push_back(it->second); + } + + return languages; +} + void Translator::activateLanguage (const char* lang) { removeTranslators(); // remove the currently installed translators diff --git a/src/Gui/Language/Translator.h b/src/Gui/Language/Translator.h index 7ce7905bb..2bccff06e 100644 --- a/src/Gui/Language/Translator.h +++ b/src/Gui/Language/Translator.h @@ -65,6 +65,8 @@ public: std::string activeLanguage() const; /** Returns a list of supported languages. */ TStringList supportedLanguages() const; + /** Returns a list of supported locales. */ + TStringList supportedLocales() const; /** Adds a path where localization files can be found */ void addPath(const QString& path);