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