locale stuff

This commit is contained in:
wmayer 2012-04-30 18:02:22 +02:00
parent 5586348ade
commit 95cf62b990
3 changed files with 33 additions and 8 deletions

View File

@ -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();

View File

@ -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<std::string,std::string>::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

View File

@ -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);