~ubuntu-branches/ubuntu/quantal/arora/quantal

« back to all changes in this revision

Viewing changes to src/utils/languagemanager.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Roderick B. Greening
  • Date: 2009-10-01 16:08:58 UTC
  • mfrom: (1.1.11 upstream)
  • Revision ID: james.westby@ubuntu.com-20091001160858-h1wnt3ddyzl07nih
Tags: 0.10.0-0ubuntu1
* New upstream release 
* Remove patches
  - kubuntu_01_google_lucky.diff - Open Search now used upstream
  - kubuntu_02_default_bookmarks.diff - bookmarks fixed upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
44
44
 
45
45
// #define LANGUAGEMANAGER_DEBUG
46
46
 
47
 
LanguageManager::LanguageManager(const QString &localeDirectory, QObject *parent)
 
47
LanguageManager::LanguageManager(QObject *parent)
48
48
    : QObject(parent)
49
 
    , m_localeDirectory(localeDirectory)
50
49
    , m_sysTranslator(0)
51
50
    , m_appTranslator(0)
52
51
    , m_loaded(false)
54
53
#ifdef LANGUAGEMANAGER_DEBUG
55
54
    qDebug() << "LanguageManager::" << __FUNCTION__;
56
55
#endif
57
 
    QSettings settings;
58
 
    settings.beginGroup(QLatin1String("LanguageManager"));
59
 
    if (settings.contains(QLatin1String("language"))) {
60
 
        QString selectedLanguage = settings.value(QLatin1String("language")).toString();
61
 
#ifdef LANGUAGEMANAGER_DEBUG
62
 
        qDebug() << "LanguageManager::" << __FUNCTION__ << "Loading language from settings" << selectedLanguage;
63
 
#endif
64
 
        // When a translation fails to load remove it from the settings
65
 
        // to prevent it from being loaded every time.
66
 
        if (!setCurrentLanguage(selectedLanguage)) {
67
 
#ifdef LANGUAGEMANAGER_DEBUG
68
 
            qDebug() << "LanguageManager::" << __FUNCTION__ << "Failed to load language";
69
 
#endif
70
 
            settings.remove(QLatin1String("language"));
71
 
        }
72
 
    } else if (!currentLanguage().isEmpty()) {
73
 
        setCurrentLanguage(currentLanguage());
74
 
    }
 
56
}
 
57
 
 
58
void LanguageManager::addLocaleDirectory(const QString &directory)
 
59
{
 
60
    m_localeDirectories.append(directory);
 
61
}
 
62
 
 
63
QStringList LanguageManager::localeDirectories() const
 
64
{
 
65
    return m_localeDirectories;
75
66
}
76
67
 
77
68
QString LanguageManager::currentLanguage() const
98
89
 
99
90
    // optimization so we don't have to load all the languages
100
91
    if (!m_loaded) {
101
 
        QString file = translationLocation() + QLatin1Char('/') + language + QLatin1String(".qm");
102
 
        if (QFile::exists(file))
103
 
            return true;
 
92
        foreach (const QString &dir, m_localeDirectories) {
 
93
            QString file = dir + QLatin1Char('/') + language + QLatin1String(".qm");
 
94
            if (QFile::exists(file))
 
95
                return true;
 
96
        }
104
97
    }
105
98
 
106
99
    return !(convertStringToLanguageFile(language).isEmpty());
165
158
    QTranslator *newAppTranslator = new QTranslator(this);
166
159
    QString resourceDir = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
167
160
    QString languageFile = convertStringToLanguageFile(m_currentLanguage);
168
 
    bool loaded = newAppTranslator->load(languageFile, translationLocation());
 
161
    bool loaded = false;
 
162
    foreach (const QString &dir, m_localeDirectories) {
 
163
        loaded = newAppTranslator->load(languageFile, dir);
 
164
        if (loaded)
 
165
            break;
 
166
    }
169
167
 
170
168
    QTranslator *newSysTranslator = new QTranslator(this);
171
169
    QString translatorFileName = QLatin1String("qt_") + languageFile;
204
202
    return m_languages;
205
203
}
206
204
 
 
205
void LanguageManager::loadLanguageFromSettings()
 
206
{
 
207
#ifdef LANGUAGEMANAGER_DEBUG
 
208
    qDebug() << "LanguageManager::" << __FUNCTION__;
 
209
#endif
 
210
 
 
211
    QSettings settings;
 
212
    settings.beginGroup(QLatin1String("LanguageManager"));
 
213
    if (settings.contains(QLatin1String("language"))) {
 
214
        QString selectedLanguage = settings.value(QLatin1String("language")).toString();
 
215
#ifdef LANGUAGEMANAGER_DEBUG
 
216
        qDebug() << "LanguageManager::" << __FUNCTION__ << "Loading language from settings" << selectedLanguage;
 
217
#endif
 
218
        // When a translation fails to load remove it from the settings
 
219
        // to prevent it from being loaded every time.
 
220
        if (!setCurrentLanguage(selectedLanguage)) {
 
221
#ifdef LANGUAGEMANAGER_DEBUG
 
222
            qDebug() << "LanguageManager::" << __FUNCTION__ << "Failed to load language";
 
223
#endif
 
224
            settings.remove(QLatin1String("language"));
 
225
        }
 
226
    } else if (!currentLanguage().isEmpty()) {
 
227
        setCurrentLanguage(currentLanguage());
 
228
    }
 
229
}
 
230
 
207
231
void LanguageManager::chooseNewLanguage()
208
232
{
209
233
#ifdef LANGUAGEMANAGER_DEBUG
212
236
    loadAvailableLanguages();
213
237
    if (m_languages.isEmpty()) {
214
238
        QMessageBox messageBox;
215
 
        messageBox.setText(tr("No translation files are installed."));
 
239
        QLatin1String separator = QLatin1String(", ");
 
240
        messageBox.setText(tr("No translation files are installed at %1.")
 
241
            .arg(m_localeDirectories.join(separator)));
216
242
        messageBox.setStandardButtons(QMessageBox::Ok);
217
243
        messageBox.exec();
218
244
        return;
251
277
    setCurrentLanguage(m_languages.value(selection));
252
278
}
253
279
 
254
 
QString LanguageManager::translationLocation() const
255
 
{
256
 
    QString directory = m_localeDirectory + QLatin1String("/locale");
257
 
    // work without installing
258
 
    if (!QFile::exists(directory))
259
 
        directory = QLatin1String(".qm/locale");
260
 
#ifdef LANGUAGEMANAGER_DEBUG
261
 
    qDebug() << "LanguageManager::" << __FUNCTION__ << directory;
262
 
#endif
263
 
    return directory;
264
 
}
265
 
 
266
280
/*!
267
281
    Find all *.qm files in the data directory that have a Qt translation.
268
282
 */
270
284
{
271
285
    if (m_loaded)
272
286
        return;
273
 
#ifdef LANGUAGEMANAGER_DEBUG
274
 
    qDebug() << "LanguageManager::" << __FUNCTION__;
275
 
#endif
276
287
    m_loaded = true;
 
288
#ifdef LANGUAGEMANAGER_DEBUG
 
289
    qDebug() << "LanguageManager::" << __FUNCTION__;
 
290
#endif
277
291
 
278
 
    QDirIterator it(translationLocation());
279
 
    while (it.hasNext()) {
280
 
        QString fileName = it.next();
281
 
        if (!fileName.endsWith(QLatin1String(".qm")))
282
 
            continue;
283
 
        const QFileInfo info = it.fileInfo();
284
 
        QString language = info.completeBaseName();
285
 
        m_languages.append(language);
 
292
    foreach (const QString &dir, m_localeDirectories) {
 
293
        QDirIterator it(dir);
 
294
        while (it.hasNext()) {
 
295
            QString fileName = it.next();
 
296
            if (!fileName.endsWith(QLatin1String(".qm")))
 
297
                continue;
 
298
            const QFileInfo info = it.fileInfo();
 
299
            QString language = info.completeBaseName();
 
300
            m_languages.append(language);
 
301
        }
286
302
    }
287
303
}
288