blob: 4f750949a390c2bd71e82112d0821ab79b5afa53 (
plain)
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
80
81
82
83
84
85
|
/*
* Copyright (C) by Duncan Mac-Vicar P. <duncan@kde.org>
* Copyright (C) by Klaas Freitag <freitag@owncloud.com>
* Copyright (C) by Daniel Molkentin <danimo@owncloud.com>
* Copyright (C) by Fabian Müller <fmueller@owncloud.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*/
#include "translations.h"
#include "config.h"
#include "theme.h"
#include <QApplication>
#include <QLoggingCategory>
#include <QDir>
#include <QDirIterator>
#include <QStandardPaths>
namespace OCC {
namespace Translations {
Q_LOGGING_CATEGORY(lcTranslations, "gui.translations", QtInfoMsg)
const QString translationsFilePrefix()
{
return QStringLiteral("client_");
}
const QString translationsFileSuffix()
{
return QStringLiteral(".qm");
}
QString applicationTrPath()
{
const auto devTrPath = QDir(qApp->applicationDirPath() + QStringLiteral("/../src/gui/"));
if (devTrPath.exists()) {
// might miss Qt, QtKeyChain, etc.
qCWarning(lcTranslations) << "Running from build location! Translations may be incomplete!";
return devTrPath.absolutePath();
}
#ifdef Q_OS_MAC
const auto translationDir = QStringLiteral("Translations");
#else
const auto translationDir = QStringLiteral("i18n");
#endif
return QStandardPaths::locate(QStandardPaths::DataLocation, translationDir, QStandardPaths::LocateDirectory);
}
QSet<QString> listAvailableTranslations()
{
QSet<QString> availableTranslations;
// calculate a glob pattern which can be used in the iterator below to match only translations files
QString pattern = translationsFilePrefix() + "*" + translationsFileSuffix();
QDirIterator it(Translations::applicationTrPath(), QStringList() << pattern);
while (it.hasNext()) {
// extract locale part from filename
// of course, this method relies on the filenames to be accurate
const auto fileName = QFileInfo(it.next()).fileName();
const auto localePartLength = fileName.length() - translationsFileSuffix().length() - translationsFilePrefix().length();
QString localeName = fileName.mid(translationsFilePrefix().length(), localePartLength);
availableTranslations.insert(localeName);
}
return availableTranslations;
}
} // namespace Translations
} // namespace OCC
|