File: translator.cpp

package info (click to toggle)
gammaray 3.3.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 21,612 kB
  • sloc: cpp: 94,643; ansic: 2,227; sh: 336; python: 164; yacc: 90; lex: 82; xml: 61; makefile: 26
file content (79 lines) | stat: -rw-r--r-- 2,412 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
  translator.cpp

  This file is part of GammaRay, the Qt application inspection and manipulation tool.

  SPDX-FileCopyrightText: 2016 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
  Author: Volker Krause <volker.krause@kdab.com>

  SPDX-License-Identifier: GPL-2.0-or-later

  Contact KDAB at <info@kdab.com> for commercial licensing options.
*/

#include <config-gammaray.h>

#include "translator.h"
#include "paths.h"

#include <QCoreApplication>
#include <QDebug>
#include <QLibraryInfo>
#include <QLocale>
#include <QDir>
#include <QTranslator>

using namespace GammaRay;

static QString rootTranslationsPath()
{
    return Paths::rootPath() + QLatin1Char('/') + GAMMARAY_TRANSLATION_INSTALL_DIR;
}

static QString qtTranslationsPath()
{
    return QLibraryInfo::path(QLibraryInfo::TranslationsPath);
}

void Translator::loadTranslations(const QString &catalog, const QString &path, const QString &overrideLanguage)
{
    const QDir dir(path);
    const QLocale locale;
    QStringList names = locale.uiLanguages();
    if (!overrideLanguage.isEmpty())
        names.prepend(overrideLanguage);

    for (const QString &name : std::as_const(names)) {
        const QLocale uiLocale(name);
        auto translator = new QTranslator(QCoreApplication::instance());
        if (translator->load(uiLocale, catalog, QStringLiteral("_"), path)) {
            QCoreApplication::instance()->installTranslator(translator);
            return;
        }

        delete translator;

        foreach (const QString &name, uiLocale.uiLanguages()) {
            const QString fileName = QStringLiteral("%1_%2.qm").arg(catalog, name);
            const QString filePath = dir.filePath(fileName);
            if (QFile::exists(filePath)) {
                return;
            }
        }
    }

    if (locale.language() != QLocale::C && locale.language() != QLocale::English)
        qDebug() << "did not find a translation for" << catalog << "in" << path
                 << "for language" << locale.name();
}

void Translator::loadGammaRayTranslations(const QString &overrideLanguage)
{
    loadTranslations(QStringLiteral("gammaray"), rootTranslationsPath(), overrideLanguage);
}

void Translator::loadStandAloneTranslations(const QString &overrideLanguage)
{
    loadGammaRayTranslations(overrideLanguage);
    loadTranslations(QStringLiteral("qt"), qtTranslationsPath(), overrideLanguage);
}