//static
KexiTemplateInfoList KexiTemplateLoader::loadListInfo()
{
    KexiTemplateInfoList list;
//! @todo KEXI3 KAboutData::applicationData().componentName() OK?
    const QString subdir = KAboutData::applicationData().componentName() + "/templates";
    const QLocale locale;
    QString lang(QLocale::languageToString(locale.language()));
    QStringList dirs(QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, subdir));
    while (true) {
        foreach(const QString &dirname, dirs) {
            QDir dir(dirname + lang);
            if (!dir.exists())
                continue;
            if (!dir.isReadable()) {
                qWarning() << "\"" << dir.absolutePath() << "\" not readable!";
                continue;
            }
            const QStringList templateDirs(dir.entryList(QDir::Dirs, QDir::Name));
            const QString absDirPath(dir.absolutePath() + '/');
            foreach(const QString &templateDir, templateDirs) {
                if (templateDir == "." || templateDir == "..")
                    continue;
                KexiTemplateInfo info = KexiTemplateLoader::loadInfo(absDirPath + templateDir);
                if (!info.name.isEmpty())
                    list.append(info);
            }
        }
        if (lang != "en" && list.isEmpty()) //not found for current locale, try "en"
            lang = "en";
        else
            break;
    }
//static
KexiTemplateInfoList KexiTemplateLoader::loadListInfo()
{
    KexiTemplateInfoList list;
// const QString subdir = QString(kapp->instanceName()) + "/templates";
#ifdef __GNUC
#ifdef __GNUC__
#warning KexiTemplateLoader::loadListInfo() -- OK? KGlobal::mainComponent().componentName()
#else
#pragma WARNING( KexiTemplateLoader::loadListInfo() -- OK? KGlobal::mainComponent().componentName() )
#endif
#endif
    const QString subdir = KGlobal::mainComponent().componentName() + "/templates";
    QString lang(KGlobal::locale()->language());
    QStringList dirs(KGlobal::dirs()->findDirs("data", subdir));
    while (true) {
        foreach(const QString &dirname, dirs) {
            QDir dir(dirname + lang);
            if (!dir.exists())
                continue;
            if (!dir.isReadable()) {
                kWarning() << "\"" << dir.absolutePath() << "\" not readable!";
                continue;
            }
            const QStringList templateDirs(dir.entryList(QDir::Dirs, QDir::Name));
            const QString absDirPath(dir.absolutePath() + '/');
            foreach(const QString &templateDir, templateDirs) {
                if (templateDir == "." || templateDir == "..")
                    continue;
                KexiTemplateInfo info = KexiTemplateLoader::loadInfo(absDirPath + templateDir);
                if (!info.name.isEmpty())
                    list.append(info);
            }
        }
        if (lang != "en" && list.isEmpty()) //not found for current locale, try "en"
            lang = "en";
        else
            break;
    }