diff --git a/src/app/mainapplication.cpp b/src/app/mainapplication.cpp
index d94b0f27c273936b576b8f987814a4d61e0b4447..118f3e56fed26078ed8c4c7e71f848e4edebf5a8 100644
--- a/src/app/mainapplication.cpp
+++ b/src/app/mainapplication.cpp
@@ -105,7 +105,8 @@ ScreenInfo::onPhysicalDotsPerInchChanged()
 }
 
 MainApplication::MainApplication(int& argc, char** argv)
-    : QApplication(argc, argv), isCleanupped(false)
+    : QApplication(argc, argv)
+    , isCleanupped(false)
 {
     const char* qtVersion = qVersion();
     qInfo() << "Using Qt runtime version:" << qtVersion;
@@ -134,10 +135,19 @@ MainApplication::init()
     settingsManager_ = new AppSettingsManager(this);
     systemTray_ = new SystemTray(settingsManager_, this);
 
+    // These should should be QueuedConnection to ensure that the
+    // they are executed after the QML engine has been initialized,
+    // and after the QSystemTrayIcon has been created and shown.
     QObject::connect(settingsManager_,
                      &AppSettingsManager::retranslate,
                      engine_.get(),
-                     &QQmlApplicationEngine::retranslate);
+                     &QQmlApplicationEngine::retranslate,
+                     Qt::QueuedConnection);
+    QObject::connect(settingsManager_,
+                     &AppSettingsManager::retranslate,
+                     this,
+                     &MainApplication::initSystray,
+                     Qt::QueuedConnection);
 
     setWindowIcon(QIcon(":/images/jami.ico"));
 
@@ -361,7 +371,8 @@ MainApplication::initSystray()
 {
     systemTray_->setIcon(QIcon(":/images/jami.svg"));
 
-    QMenu* systrayMenu = new QMenu();
+    // Create a new menu
+    systemTrayMenu_.reset(new QMenu);
 
     QString quitString;
 #ifdef Q_OS_WINDOWS
@@ -370,10 +381,10 @@ MainApplication::initSystray()
     quitString = tr("&Quit");
 #endif
 
-    QAction* quitAction = new QAction(quitString, this);
+    QAction* quitAction = new QAction(quitString, systemTrayMenu_.get());
     connect(quitAction, &QAction::triggered, this, &MainApplication::closeRequested);
 
-    QAction* restoreAction = new QAction(tr("&Show Jami"), this);
+    QAction* restoreAction = new QAction(tr("&Show Jami"), systemTrayMenu_.get());
     connect(restoreAction, &QAction::triggered, this, &MainApplication::restoreApp);
 
     connect(systemTray_,
@@ -384,18 +395,21 @@ MainApplication::initSystray()
 #ifdef Q_OS_WINDOWS
                     restoreApp();
 #elif !defined(Q_OS_MACOS)
-                    QWindow* window = focusWindow();
-                    if (window)
-                        window->close();
-                    else
-                        restoreApp();
+                QWindow* window = focusWindow();
+                if (window)
+                    window->close();
+                else
+                    restoreApp();
 #endif
                 }
             });
 
-    systrayMenu->addAction(restoreAction);
-    systrayMenu->addAction(quitAction);
-    systemTray_->setContextMenu(systrayMenu);
+    systemTrayMenu_->addAction(restoreAction);
+    systemTrayMenu_->addAction(quitAction);
+
+    // Set the new menu as the context menu
+    systemTray_->setContextMenu(systemTrayMenu_.get());
+
     systemTray_->show();
 }
 
diff --git a/src/app/mainapplication.h b/src/app/mainapplication.h
index 8f0f9952b16a9c11438b2a943ef348018601cb65..a9625a33afc4259b20f6aaa78095451a06fecaf1 100644
--- a/src/app/mainapplication.h
+++ b/src/app/mainapplication.h
@@ -124,5 +124,8 @@ private:
 
     ScreenInfo screenInfo_;
 
+    // We will recreate the system tray menu when the user changes the language.
+    QScopedPointer<QMenu> systemTrayMenu_;
+
     bool isCleanupped;
 };