1 /*
2 * Copyright (C) 2019 Damir Porobic <https://github.com/damirporobic>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 */
19
20 #include "TranslationLoader.h"
21
load(const QApplication & app)22 void TranslationLoader::load(const QApplication &app)
23 {
24 auto ksnipTranslator = new QTranslator();
25 auto kImageAnnotatorTranslator = new QTranslator();
26
27 auto pathToKsnipTranslations = QString(KSNIP_LANG_INSTALL_DIR);
28 auto pathToKImageAnnotatorTranslations = QString(KIMAGEANNOTATOR_LANG_INSTALL_DIR);
29
30 loadTranslations(app, ksnipTranslator, pathToKsnipTranslations, QLatin1String("ksnip"));
31 loadTranslations(app, kImageAnnotatorTranslator, pathToKImageAnnotatorTranslations, QLatin1String("kImageAnnotator"));
32 }
33
loadTranslations(const QApplication & app,QTranslator * translator,QString & path,const QString & applicationName)34 void TranslationLoader::loadTranslations(const QApplication &app, QTranslator *translator, QString &path, const QString &applicationName)
35 {
36 auto translationSuccessfullyLoaded = loadTranslationFromAbsolutePath(translator, path, applicationName);
37
38 if (!translationSuccessfullyLoaded) {
39 translationSuccessfullyLoaded = loadTranslationFromRelativePath(translator, path, applicationName);
40 }
41
42 // Translation loading for AppImage
43 if (!translationSuccessfullyLoaded) {
44 translationSuccessfullyLoaded = loadTranslationForAppImage(translator, path, applicationName);
45 }
46
47 // Translation loading for Snap
48 if (!translationSuccessfullyLoaded) {
49 translationSuccessfullyLoaded = loadTranslationForSnap(translator, path, applicationName);
50 }
51
52 if (translationSuccessfullyLoaded) {
53 app.installTranslator(translator);
54 } else {
55 qWarning("Unable to find any translation files for %s.", qPrintable(applicationName));
56 }
57 }
58
loadTranslationFromAbsolutePath(QTranslator * translator,const QString & path,const QString & applicationName)59 bool TranslationLoader::loadTranslationFromAbsolutePath(QTranslator *translator, const QString &path, const QString &applicationName)
60 {
61 return loadTranslation(translator, path, applicationName);
62 }
63
loadTranslationFromRelativePath(QTranslator * translator,const QString & path,const QString & applicationName)64 bool TranslationLoader::loadTranslationFromRelativePath(QTranslator *translator, const QString &path, const QString &applicationName)
65 {
66 auto relativePathToAppDir = QCoreApplication::applicationDirPath() + QLatin1String("/");
67 return loadTranslation(translator, relativePathToAppDir + path, applicationName);
68 }
69
loadTranslationForAppImage(QTranslator * translator,const QString & path,const QString & applicationName)70 bool TranslationLoader::loadTranslationForAppImage(QTranslator *translator, const QString &path, const QString &applicationName)
71 {
72 auto relativePathToAppDir = QCoreApplication::applicationDirPath() + QLatin1String("/../..");
73 return loadTranslation(translator, relativePathToAppDir + path, applicationName);
74 }
75
loadTranslationForSnap(QTranslator * translator,const QString & path,const QString & applicationName)76 bool TranslationLoader::loadTranslationForSnap(QTranslator *translator, const QString &path, const QString &applicationName)
77 {
78 auto relativePathToSnapVersionDir = QCoreApplication::applicationDirPath() + QLatin1String("/..");
79 return loadTranslation(translator, relativePathToSnapVersionDir + path, applicationName);
80 }
81
loadTranslation(QTranslator * translator,const QString & path,const QString & applicationName)82 bool TranslationLoader::loadTranslation(QTranslator *translator, const QString &path, const QString &applicationName)
83 {
84 auto separator = QLatin1String("_");
85 return translator->load(QLocale(), applicationName, separator, path);
86 }
87