diff --git a/effects/login/package/metadata.desktop b/effects/login/package/metadata.desktop index 109bde471b..0cdaf26950 100644 --- a/effects/login/package/metadata.desktop +++ b/effects/login/package/metadata.desktop @@ -168,3 +168,4 @@ X-Plasma-MainScript=code/main.js X-KDE-PluginKeyword=kwin4_effect_login X-KDE-Library=kcm_kwin4_genericscripted X-KDE-ParentComponents=kwin4_effect_login +X-KWin-Config-TranslationDomain=kwin_effects diff --git a/effects/translucency/package/metadata.desktop b/effects/translucency/package/metadata.desktop index b104057716..dc05d7a259 100644 --- a/effects/translucency/package/metadata.desktop +++ b/effects/translucency/package/metadata.desktop @@ -171,3 +171,4 @@ X-Plasma-MainScript=code/main.js X-KDE-PluginKeyword=kwin4_effect_translucency X-KDE-Library=kcm_kwin4_genericscripted X-KDE-ParentComponents=kwin4_effect_translucency +X-KWin-Config-TranslationDomain=kwin_effects diff --git a/scripting/CMakeLists.txt b/scripting/CMakeLists.txt index 2160a4f0cf..1f727a8261 100644 --- a/scripting/CMakeLists.txt +++ b/scripting/CMakeLists.txt @@ -1,4 +1,5 @@ -set(kcm_kwin4_genericscripted_SRCS genericscriptedconfig.cpp) +include_directories(${KWIN_SOURCE_DIR}/kcmkwin/utils/) +set(kcm_kwin4_genericscripted_SRCS genericscriptedconfig.cpp ${KWIN_SOURCE_DIR}/kcmkwin/utils/uitranslator.cpp) qt5_add_dbus_interface(kcm_kwin4_genericscripted_SRCS ${kwin_effects_dbus_xml} kwineffects_interface) add_library(kcm_kwin4_genericscripted MODULE ${kcm_kwin4_genericscripted_SRCS}) target_link_libraries( kcm_kwin4_genericscripted diff --git a/scripting/genericscriptedconfig.cpp b/scripting/genericscriptedconfig.cpp index 4797b38cf3..3fb873630d 100644 --- a/scripting/genericscriptedconfig.cpp +++ b/scripting/genericscriptedconfig.cpp @@ -20,11 +20,13 @@ #include "genericscriptedconfig.h" #include "config-kwin.h" +#include "uitranslator.h" #include #include #define TRANSLATION_DOMAIN "kwin_scripting" #include #include +#include #include #include @@ -48,7 +50,9 @@ QObject *GenericScriptedConfigFactory::create(const char *iface, QWidget *parent GenericScriptedConfig::GenericScriptedConfig(const QString &componentName, const QString &keyword, QWidget *parent, const QVariantList &args) : KCModule(KAboutData::pluginData(componentName), parent, args) , m_packageName(keyword) + , m_translator(new KLocalizedTranslator(this)) { + QCoreApplication::instance()->installTranslator(m_translator); } GenericScriptedConfig::~GenericScriptedConfig() @@ -82,10 +86,25 @@ void GenericScriptedConfig::createUi() KConfigLoader *configLoader = new KConfigLoader(cg, &xmlFile, this); // load the ui file QUiLoader *loader = new QUiLoader(this); + loader->setLanguageChangeEnabled(true); QFile uiFile(uiPath); + // try getting a translation domain + const QString metaDataPath = QStandardPaths::locate(QStandardPaths::GenericDataLocation, + QStringLiteral(KWIN_NAME"/%1/%2/metadata.desktop").arg(typeName()).arg(m_packageName)); + if (!metaDataPath.isNull()) { + KDesktopFile metaData(metaDataPath); + m_translator->setTranslationDomain(metaData.desktopGroup().readEntry("X-KWin-Config-TranslationDomain", QString())); + } + uiFile.open(QFile::ReadOnly); QWidget *customConfigForm = loader->load(&uiFile, this); + m_translator->addContextToMonitor(customConfigForm->objectName()); uiFile.close(); + + // send a custom event to the translator to retranslate using our translator + QEvent le(QEvent::LanguageChange); + QCoreApplication::sendEvent(customConfigForm, &le); + layout->addWidget(customConfigForm); addConfig(configLoader, customConfigForm); } diff --git a/scripting/genericscriptedconfig.h b/scripting/genericscriptedconfig.h index 8950f3c2e5..4e3a8a02b1 100644 --- a/scripting/genericscriptedconfig.h +++ b/scripting/genericscriptedconfig.h @@ -28,6 +28,8 @@ namespace KWin { +class KLocalizedTranslator; + class GenericScriptedConfigFactory : public KPluginFactory { Q_OBJECT @@ -58,6 +60,7 @@ protected: private: QString m_packageName; + KLocalizedTranslator *m_translator; }; class ScriptedEffectConfig : public GenericScriptedConfig