diff --git a/src/Gui/DlgGeneralImp.cpp b/src/Gui/DlgGeneralImp.cpp index e1e5302b30..1c52b875f4 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 b32401875f..0b7103f6e3 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 7ce7905bb8..2bccff06e1 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);