diff --git a/CMakeLists.txt b/CMakeLists.txt
index 71e7293..28e4d40 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -15,12 +15,12 @@ include(KDEInstallDirs)
include(KDECompilerSettings)
include(KDECMakeSettings)
-include(ECMAddAppIcon)
-include(ECMInstallIcons)
-include(ECMSetupVersion)
-include(ECMPackageConfigHelpers)
include(GenerateExportHeader)
+include(ECMAddAppIcon)
+include(ECMInstallIcons)
+include(ECMPackageConfigHelpers)
+include(ECMSetupVersion)
#######################################################################
option(WITH_FRONTENDS "Build frontends currently only useful if WITH_SNORE_DAEMON=ON" OFF)
@@ -36,9 +36,10 @@ set(SNORE_CamelCase_SUFFIX "Qt5")
find_package(Qt5Core REQUIRED)
-find_package(Qt5Widgets REQUIRED)
+find_package(Qt5LinguistTools REQUIRED)
find_package(Qt5Network REQUIRED)
find_package(Qt5Quick REQUIRED)
+find_package(Qt5Widgets REQUIRED)
find_package(Doxygen QUIET)
@@ -66,8 +67,9 @@ message(STATUS "Installing plugins to ${LIBSNORE_PLUGIN_PATH}")
add_subdirectory(data)
-add_subdirectory(share)
+add_subdirectory(lang)
add_subdirectory(src)
+add_subdirectory(share)
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES)
diff --git a/lang/CMakeLists.txt b/lang/CMakeLists.txt
new file mode 100644
index 0000000..e88ff54
--- /dev/null
+++ b/lang/CMakeLists.txt
@@ -0,0 +1,15 @@
+set(LIBSNORE_LANGS de en)
+
+set(TS_FILES )
+set( snore_i18n_content "\n\n" )
+foreach( lang ${LIBSNORE_LANGS} )
+ list(APPEND TS_FILES ${CMAKE_CURRENT_SOURCE_DIR}/${lang}.ts)
+ set( snore_i18n_content "${snore_i18n_content}${lang}.qm\n" )
+endforeach()
+set( snore_i18n_content "${snore_i18n_content}\n\n" )
+
+file( WRITE ${CMAKE_BINARY_DIR}/lang/snore_i18n.qrc "${snore_i18n_content}" )
+
+qt5_add_translation(libsnore_lang ${TS_FILES})
+
+add_custom_target(libsnore_lang_translation ALL DEPENDS ${libsnore_lang})
diff --git a/lang/de.ts b/lang/de.ts
new file mode 100644
index 0000000..24bb6f2
--- /dev/null
+++ b/lang/de.ts
@@ -0,0 +1,145 @@
+
+
+
+
+ GrowlSettings
+
+
+
+
+
+
+
+
+ Passwort:
+
+
+
+ SettingsDialog
+
+
+
+ Einstellungen
+
+
+
+
+ Allgemein
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Zeige test Mitteilung an
+
+
+
+ SettingsWindow
+
+
+
+ Snore Einstellungen
+
+
+
+
+ Anwendungen
+
+
+
+ SnarlSettings
+
+
+
+ Passwort:
+
+
+
+ SnoreNotifierSettings
+
+
+
+ ObereLinkeEcke
+
+
+
+
+ ObereRechteEcke
+
+
+
+
+ UntereLinkeEcke
+
+
+
+
+ UntereRechteEcke
+
+
+
+
+
+
+
+
+ SoundSettings
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Alle Audio Dateien
+
+
+
+ ToastySettings
+
+
+
+ Geräte ID:
+
+
+
diff --git a/lang/en.ts b/lang/en.ts
new file mode 100644
index 0000000..3bbdf8f
--- /dev/null
+++ b/lang/en.ts
@@ -0,0 +1,145 @@
+
+
+
+
+ GrowlSettings
+
+
+
+
+
+
+
+
+
+
+
+
+ SettingsDialog
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SettingsWindow
+
+
+
+
+
+
+
+
+
+
+
+
+ SnarlSettings
+
+
+
+
+
+
+
+ SnoreNotifierSettings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SoundSettings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ToastySettings
+
+
+
+
+
+
+
diff --git a/src/libsnore/CMakeLists.txt b/src/libsnore/CMakeLists.txt
index 69ced47..9a6b0fe 100644
--- a/src/libsnore/CMakeLists.txt
+++ b/src/libsnore/CMakeLists.txt
@@ -10,7 +10,7 @@ set(LIBSNORE_INCLUDE_DIR ${KDE_INSTALL_INCLUDEDIR}/libsnore)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/version.cpp.in" "${CMAKE_CURRENT_BINARY_DIR}/version.cpp")
-QT5_ADD_RESOURCES(SNORENOTIFY_RCS ${SNORE_RCS})
+QT5_ADD_RESOURCES(SNORENOTIFY_RCS ${SNORE_RCS} ${CMAKE_BINARY_DIR}/lang/snore_i18n.qrc)
add_subdirectory(notification)
add_subdirectory(plugins)
diff --git a/src/libsnore/settingsdialog.ui b/src/libsnore/settingsdialog.ui
index d4ef8b7..628e342 100644
--- a/src/libsnore/settingsdialog.ui
+++ b/src/libsnore/settingsdialog.ui
@@ -42,7 +42,7 @@
-
- Primary Backend
+ Primary Backend:
@@ -52,7 +52,7 @@
-
- Timeout
+ Timeout:
diff --git a/src/libsnore/snore.cpp b/src/libsnore/snore.cpp
index 801f2b9..5f0d2b0 100644
--- a/src/libsnore/snore.cpp
+++ b/src/libsnore/snore.cpp
@@ -33,12 +33,12 @@
using namespace Snore;
-SnoreCore::SnoreCore()
+SnoreCore::SnoreCore(QObject *parent):
+ QObject(parent)
{
- if (QThread::currentThread() != qApp->thread() ) {
- moveToThread(qApp->thread());
+ if (QThread::currentThread() != parent->thread() ) {
+ moveToThread(parent->thread());
}
- SnoreCorePrivate::registerMetaTypes();
d_ptr = new SnoreCorePrivate();
Q_D(SnoreCore);
d->q_ptr = this;
@@ -47,8 +47,13 @@ SnoreCore::SnoreCore()
SnoreCore &SnoreCore::instance()
{
- static SnoreCore instance;
- return instance;
+ static SnoreCore *instance = nullptr;
+ if(!instance) {
+ SnoreCorePrivate::loadTranslator();
+ SnoreCorePrivate::registerMetaTypes();
+ instance = new SnoreCore(qApp);
+ }
+ return *instance;
}
SnoreCore::~SnoreCore()
diff --git a/src/libsnore/snore.h b/src/libsnore/snore.h
index 274b51b..80ba012 100644
--- a/src/libsnore/snore.h
+++ b/src/libsnore/snore.h
@@ -177,7 +177,7 @@ signals:
void notificationClosed(Snore::Notification);
private:
- SnoreCore();
+ SnoreCore(QObject *parent);
SnoreCorePrivate *d_ptr;
};
diff --git a/src/libsnore/snore_p.cpp b/src/libsnore/snore_p.cpp
index 973f8d5..4d7fe40 100644
--- a/src/libsnore/snore_p.cpp
+++ b/src/libsnore/snore_p.cpp
@@ -27,6 +27,7 @@
#include
#include
+#include
using namespace Snore;
@@ -218,6 +219,7 @@ void SnoreCorePrivate::slotNotificationClosed(Notification n)
Q_Q(SnoreCore);
emit q->notificationClosed(n);
if (n.data()->source()) {
+ //TODO: drop source and use signal aswell
n.data()->source()->notificationClosed(n);
}
}
@@ -232,3 +234,33 @@ void SnoreCorePrivate::slotAboutToQuit()
}
}
+void SnoreCorePrivate::loadTranslator(){
+ auto installTranslator = [](const QString &locale)
+ {
+ snoreDebug(SNORE_DEBUG) << locale;
+ if(locale != "C") {
+ QTranslator* translator = new QTranslator( qApp->instance() );
+ if ( translator->load(locale, ":/lang/libsnore/") )
+ {
+ snoreDebug(SNORE_INFO) << "Using system locale:" << locale;
+ snoreDebug(SNORE_INFO) << qApp->installTranslator( translator );
+ }
+ else
+ {
+ translator->deleteLater();
+ QString fileName = QString(":/lang/libsnore/%1.qm").arg(locale);
+ snoreDebug(SNORE_WARNING)<< "Failed to load translations for:" << locale << fileName << QFile::exists(fileName) ;
+ return false;
+ }
+ }
+ return true;
+ };
+
+ installTranslator("en");
+ QLocale locale = QLocale::system();
+ if (locale.name() != "en") {
+ if (!installTranslator(locale.name())) {
+ installTranslator(locale.bcp47Name());
+ }
+ }
+}
diff --git a/src/libsnore/snore_p.h b/src/libsnore/snore_p.h
index e2063f2..57e1364 100644
--- a/src/libsnore/snore_p.h
+++ b/src/libsnore/snore_p.h
@@ -48,6 +48,8 @@ public:
*/
static QString tempPath();
+ static void loadTranslator();
+
public:
static SnoreCorePrivate *instance();
~SnoreCorePrivate();
diff --git a/src/plugins/backends/growl/growlsettings.cpp b/src/plugins/backends/growl/growlsettings.cpp
index 658e6f3..04b369a 100644
--- a/src/plugins/backends/growl/growlsettings.cpp
+++ b/src/plugins/backends/growl/growlsettings.cpp
@@ -27,8 +27,8 @@ GrowlSettings::GrowlSettings(SnorePlugin *plugin, QWidget *parent):
m_password(new QLineEdit)
{
m_password->setEchoMode(QLineEdit::Password);
- addRow("Host:", m_host);
- addRow("Password:", m_password);
+ addRow(tr("Host:"), m_host);
+ addRow(tr("Password:"), m_password);
}
GrowlSettings::~GrowlSettings()
diff --git a/src/plugins/backends/growl/growlsettings.h b/src/plugins/backends/growl/growlsettings.h
index 265573d..d3b369c 100644
--- a/src/plugins/backends/growl/growlsettings.h
+++ b/src/plugins/backends/growl/growlsettings.h
@@ -24,6 +24,7 @@ class QLineEdit;
class GrowlSettings : public Snore::PluginSettingsWidget
{
+ Q_OBJECT
public:
explicit GrowlSettings(Snore::SnorePlugin *plugin, QWidget *parent = 0);
~GrowlSettings();
diff --git a/src/plugins/backends/snarl/snarlsettings.cpp b/src/plugins/backends/snarl/snarlsettings.cpp
index 4ee9756..d6e50da 100644
--- a/src/plugins/backends/snarl/snarlsettings.cpp
+++ b/src/plugins/backends/snarl/snarlsettings.cpp
@@ -26,7 +26,7 @@ SnarlSettings::SnarlSettings(SnorePlugin *plugin, QWidget *parent):
m_password(new QLineEdit)
{
m_password->setEchoMode(QLineEdit::Password);
- addRow("Password:", m_password);
+ addRow(tr("Password:"), m_password);
}
SnarlSettings::~SnarlSettings()
diff --git a/src/plugins/backends/snarl/snarlsettings.h b/src/plugins/backends/snarl/snarlsettings.h
index a261439..24dbb5d 100644
--- a/src/plugins/backends/snarl/snarlsettings.h
+++ b/src/plugins/backends/snarl/snarlsettings.h
@@ -24,6 +24,7 @@ class QLineEdit;
class SnarlSettings : public Snore::PluginSettingsWidget
{
+ Q_OBJECT
public:
explicit SnarlSettings(Snore::SnorePlugin *plugin, QWidget *parent = 0);
~SnarlSettings();
diff --git a/src/plugins/backends/snore/snorenotifiersettings.cpp b/src/plugins/backends/snore/snorenotifiersettings.cpp
index b2a47d2..ebbe98e 100644
--- a/src/plugins/backends/snore/snorenotifiersettings.cpp
+++ b/src/plugins/backends/snore/snorenotifiersettings.cpp
@@ -27,11 +27,11 @@ SnoreNotifierSettings::SnoreNotifierSettings(SnorePlugin *snore, QWidget *parent
m_comboBox(new QComboBox)
{
- m_comboBox->addItem("TopLeftCorner", Qt::TopLeftCorner);
- m_comboBox->addItem("TopRightCorner", Qt::TopRightCorner);
- m_comboBox->addItem("BottomLeftCorner", Qt::BottomLeftCorner);
- m_comboBox->addItem("BottomRightCorner", Qt::BottomRightCorner);
- addRow("Position:", m_comboBox);
+ m_comboBox->addItem(tr("TopLeftCorner"), Qt::TopLeftCorner);
+ m_comboBox->addItem(tr("TopRightCorner"), Qt::TopRightCorner);
+ m_comboBox->addItem(tr("BottomLeftCorner"), Qt::BottomLeftCorner);
+ m_comboBox->addItem(tr("BottomRightCorner"), Qt::BottomRightCorner);
+ addRow(tr("Position:"), m_comboBox);
}
SnoreNotifierSettings::~SnoreNotifierSettings()
diff --git a/src/plugins/backends/snore/snorenotifiersettings.h b/src/plugins/backends/snore/snorenotifiersettings.h
index 29ae6b0..31f5696 100644
--- a/src/plugins/backends/snore/snorenotifiersettings.h
+++ b/src/plugins/backends/snore/snorenotifiersettings.h
@@ -29,7 +29,6 @@ class QComboBox;
class SnoreNotifierSettings : public Snore::PluginSettingsWidget
{
Q_OBJECT
-
public:
explicit SnoreNotifierSettings(Snore::SnorePlugin *snore, QWidget *parent = nullptr);
~SnoreNotifierSettings();
diff --git a/src/plugins/secondary_backends/sound/soundsettings.cpp b/src/plugins/secondary_backends/sound/soundsettings.cpp
index 6206608..ef45486 100644
--- a/src/plugins/secondary_backends/sound/soundsettings.cpp
+++ b/src/plugins/secondary_backends/sound/soundsettings.cpp
@@ -28,11 +28,11 @@ SoundSettings::SoundSettings(SnorePlugin *snorePlugin, QWidget *parent) :
PluginSettingsWidget(snorePlugin, parent),
m_lineEdit(new QLineEdit)
{
- addRow("Sound File:", m_lineEdit);
- QPushButton *button = new QPushButton("Select a sound File");
+ addRow(tr("Sound File:"), m_lineEdit);
+ QPushButton *button = new QPushButton(tr("Select a sound File"));
connect(button, &QPushButton::clicked, [this]() {
QFileDialog dialog;
- dialog.setNameFilter("All Audio files (*.mp3 *.wav *.ogg)");
+ dialog.setNameFilter(tr("All Audio files").append("(*.mp3 *.wav *.ogg)"));
dialog.setFileMode(QFileDialog::ExistingFile);
dialog.setDirectory(m_lineEdit->text());
if (dialog.exec()) {
diff --git a/src/plugins/secondary_backends/toasty/toastysettings.cpp b/src/plugins/secondary_backends/toasty/toastysettings.cpp
index 1bf9800..6661de3 100644
--- a/src/plugins/secondary_backends/toasty/toastysettings.cpp
+++ b/src/plugins/secondary_backends/toasty/toastysettings.cpp
@@ -25,7 +25,7 @@ ToastySettings::ToastySettings(Snore::SnorePlugin *plugin, QWidget *parent) :
Snore::PluginSettingsWidget(plugin, parent),
m_lineEdit(new QLineEdit)
{
- addRow("Device ID:", m_lineEdit);
+ addRow(tr("Device ID:"), m_lineEdit);
}
ToastySettings::~ToastySettings()
diff --git a/src/plugins/secondary_backends/toasty/toastysettings.h b/src/plugins/secondary_backends/toasty/toastysettings.h
index ce6c376..2bc63a0 100644
--- a/src/plugins/secondary_backends/toasty/toastysettings.h
+++ b/src/plugins/secondary_backends/toasty/toastysettings.h
@@ -25,7 +25,6 @@ class QLineEdit;
class ToastySettings : public Snore::PluginSettingsWidget
{
Q_OBJECT
-
public:
explicit ToastySettings(Snore::SnorePlugin *plugin, QWidget *parent = 0);
~ToastySettings();