Plugin Uninstall Dialog: added capability to uninstall several plugins with one invocation of the dialog. eric7

Fri, 20 Aug 2021 19:56:17 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 20 Aug 2021 19:56:17 +0200
branch
eric7
changeset 8526
587202572b10
parent 8525
23d37fb05a21
child 8527
2bd1325d727e

Plugin Uninstall Dialog: added capability to uninstall several plugins with one invocation of the dialog.

docs/changelog file | annotate | diff | comparison | revisions
eric7/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
eric7/Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.PluginManager.PluginUninstallDialog.html file | annotate | diff | comparison | revisions
eric7/PluginManager/PluginUninstallDialog.py file | annotate | diff | comparison | revisions
eric7/PluginManager/PluginUninstallDialog.ui file | annotate | diff | comparison | revisions
eric7/i18n/eric7_cs.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_de.qm file | annotate | diff | comparison | revisions
eric7/i18n/eric7_de.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_empty.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_en.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_es.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_fr.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_it.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_pt.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_ru.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_tr.ts file | annotate | diff | comparison | revisions
eric7/i18n/eric7_zh_CN.ts file | annotate | diff | comparison | revisions
--- a/docs/changelog	Fri Aug 20 19:54:49 2021 +0200
+++ b/docs/changelog	Fri Aug 20 19:56:17 2021 +0200
@@ -9,6 +9,9 @@
 - Editor
   -- added the capability to suppress syntax highlighting by associating
      the file type 'Text'
+- Plugin Uninstall Dialog
+  -- added capability to uninstall several plugins with one invocation of the
+     dialog
 - Shell
   -- added capability to save the contents of the shell window into a file
 
Binary file eric7/Documentation/Help/source.qch has changed
--- a/eric7/Documentation/Help/source.qhp	Fri Aug 20 19:54:49 2021 +0200
+++ b/eric7/Documentation/Help/source.qhp	Fri Aug 20 19:56:17 2021 +0200
@@ -11208,7 +11208,9 @@
       <keyword name="PluginUninstallDialog (Module)" id="PluginUninstallDialog (Module)" ref="eric7.PluginManager.PluginUninstallDialog.html" />
       <keyword name="PluginUninstallWidget" id="PluginUninstallWidget" ref="eric7.PluginManager.PluginUninstallDialog.html#PluginUninstallWidget" />
       <keyword name="PluginUninstallWidget (Constructor)" id="PluginUninstallWidget (Constructor)" ref="eric7.PluginManager.PluginUninstallDialog.html#PluginUninstallWidget.__init__" />
+      <keyword name="PluginUninstallWidget.__getCheckedPlugins" id="PluginUninstallWidget.__getCheckedPlugins" ref="eric7.PluginManager.PluginUninstallDialog.html#PluginUninstallWidget.__getCheckedPlugins" />
       <keyword name="PluginUninstallWidget.__uninstallPlugin" id="PluginUninstallWidget.__uninstallPlugin" ref="eric7.PluginManager.PluginUninstallDialog.html#PluginUninstallWidget.__uninstallPlugin" />
+      <keyword name="PluginUninstallWidget.__uninstallPlugins" id="PluginUninstallWidget.__uninstallPlugins" ref="eric7.PluginManager.PluginUninstallDialog.html#PluginUninstallWidget.__uninstallPlugins" />
       <keyword name="PluginUninstallWidget.on_buttonBox_accepted" id="PluginUninstallWidget.on_buttonBox_accepted" ref="eric7.PluginManager.PluginUninstallDialog.html#PluginUninstallWidget.on_buttonBox_accepted" />
       <keyword name="PluginUninstallWidget.on_pluginDirectoryCombo_currentIndexChanged" id="PluginUninstallWidget.on_pluginDirectoryCombo_currentIndexChanged" ref="eric7.PluginManager.PluginUninstallDialog.html#PluginUninstallWidget.on_pluginDirectoryCombo_currentIndexChanged" />
       <keyword name="PluginUninstallWindow" id="PluginUninstallWindow" ref="eric7.PluginManager.PluginUninstallDialog.html#PluginUninstallWindow" />
--- a/eric7/Documentation/Source/eric7.PluginManager.PluginUninstallDialog.html	Fri Aug 20 19:54:49 2021 +0200
+++ b/eric7/Documentation/Source/eric7.PluginManager.PluginUninstallDialog.html	Fri Aug 20 19:56:17 2021 +0200
@@ -143,8 +143,16 @@
 <td>Constructor</td>
 </tr>
 <tr>
+<td><a href="#PluginUninstallWidget.__getCheckedPlugins">__getCheckedPlugins</a></td>
+<td>Private method to get the list of plugins to be uninstalled.</td>
+</tr>
+<tr>
 <td><a href="#PluginUninstallWidget.__uninstallPlugin">__uninstallPlugin</a></td>
-<td>Private slot to uninstall the selected plugin.</td>
+<td>Private method to uninstall a given plugin.</td>
+</tr>
+<tr>
+<td><a href="#PluginUninstallWidget.__uninstallPlugins">__uninstallPlugins</a></td>
+<td>Private method to uninstall the selected plugins.</td>
 </tr>
 <tr>
 <td><a href="#PluginUninstallWidget.on_buttonBox_accepted">on_buttonBox_accepted</a></td>
@@ -179,17 +187,72 @@
 parent of this dialog (QWidget)
 </dd>
 </dl>
-<a NAME="PluginUninstallWidget.__uninstallPlugin" ID="PluginUninstallWidget.__uninstallPlugin"></a>
-<h4>PluginUninstallWidget.__uninstallPlugin</h4>
-<b>__uninstallPlugin</b>(<i></i>)
+<a NAME="PluginUninstallWidget.__getCheckedPlugins" ID="PluginUninstallWidget.__getCheckedPlugins"></a>
+<h4>PluginUninstallWidget.__getCheckedPlugins</h4>
+<b>__getCheckedPlugins</b>(<i></i>)
 
 <p>
-        Private slot to uninstall the selected plugin.
+        Private method to get the list of plugins to be uninstalled.
 </p>
 <dl>
 <dt>Return:</dt>
 <dd>
-flag indicating success (boolean)
+list of tuples with the plugin name and plugin file name
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of tuples of (str, str)
+</dd>
+</dl>
+<a NAME="PluginUninstallWidget.__uninstallPlugin" ID="PluginUninstallWidget.__uninstallPlugin"></a>
+<h4>PluginUninstallWidget.__uninstallPlugin</h4>
+<b>__uninstallPlugin</b>(<i>pluginName, pluginFile</i>)
+
+<p>
+        Private method to uninstall a given plugin.
+</p>
+<dl>
+
+<dt><i>pluginName</i> (str)</dt>
+<dd>
+name of the plugin
+</dd>
+<dt><i>pluginFile</i> (str)</dt>
+<dd>
+file name of the plugin
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating success
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="PluginUninstallWidget.__uninstallPlugins" ID="PluginUninstallWidget.__uninstallPlugins"></a>
+<h4>PluginUninstallWidget.__uninstallPlugins</h4>
+<b>__uninstallPlugins</b>(<i></i>)
+
+<p>
+        Private method to uninstall the selected plugins.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating success
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl>
 <a NAME="PluginUninstallWidget.on_buttonBox_accepted" ID="PluginUninstallWidget.on_buttonBox_accepted"></a>
--- a/eric7/PluginManager/PluginUninstallDialog.py	Fri Aug 20 19:54:49 2021 +0200
+++ b/eric7/PluginManager/PluginUninstallDialog.py	Fri Aug 20 19:56:17 2021 +0200
@@ -13,8 +13,8 @@
 import shutil
 import glob
 
-from PyQt6.QtCore import pyqtSlot, pyqtSignal
-from PyQt6.QtWidgets import QWidget, QDialog, QDialogButtonBox, QVBoxLayout
+from PyQt6.QtCore import pyqtSlot, pyqtSignal, Qt
+from PyQt6.QtWidgets import QWidget, QDialog, QVBoxLayout, QListWidgetItem
 
 from EricWidgets import EricMessageBox
 from EricWidgets.EricMainWindow import EricMainWindow
@@ -26,7 +26,6 @@
 import UI.PixmapCache
 
 
-# TODO: extend to be able to uninstall several plugins
 class PluginUninstallWidget(QWidget, Ui_PluginUninstallDialog):
     """
     Class implementing a dialog for plugin deinstallation.
@@ -63,9 +62,6 @@
             self.pluginDirectoryCombo.addItem(
                 self.tr("Global plugins directory"),
                 globalDir)
-        
-        msh = self.minimumSizeHint()
-        self.resize(max(self.width(), msh.width()), msh.height())
     
     @pyqtSlot(int)
     def on_pluginDirectoryCombo_currentIndexChanged(self, index):
@@ -78,32 +74,67 @@
         pluginDirectory = self.pluginDirectoryCombo.itemData(index)
         pluginNames = sorted(self.__pluginManager.getPluginModules(
             pluginDirectory))
-        self.pluginNameCombo.clear()
+        
+        self.pluginsList.clear()
         for pluginName in pluginNames:
             fname = "{0}.py".format(os.path.join(pluginDirectory, pluginName))
-            self.pluginNameCombo.addItem(pluginName, fname)
-        self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(
-            self.pluginNameCombo.currentText() != "")
+            itm = QListWidgetItem(pluginName)
+            itm.setData(Qt.ItemDataRole.UserRole, fname)
+            itm.setFlags(Qt.ItemFlag.ItemIsEnabled |
+                         Qt.ItemFlag.ItemIsUserCheckable)
+            itm.setCheckState(Qt.CheckState.Unchecked)
+            self.pluginsList.addItem(itm)
     
     @pyqtSlot()
     def on_buttonBox_accepted(self):
         """
         Private slot to handle the accepted signal of the button box.
         """
-        if self.__uninstallPlugin():
+        if self.__uninstallPlugins():
             self.accepted.emit()
     
-    def __uninstallPlugin(self):
+    def __getCheckedPlugins(self):
+        """
+        Private method to get the list of plugins to be uninstalled.
+        
+        @return list of tuples with the plugin name and plugin file name
+        @rtype list of tuples of (str, str)
+        """
+        plugins = []
+        for row in range(self.pluginsList.count()):
+            itm = self.pluginsList.item(row)
+            if itm.checkState() == Qt.CheckState.Checked:
+                plugins.append((itm.text(),
+                                itm.data(Qt.ItemDataRole.UserRole)))
+        return plugins
+    
+    def __uninstallPlugins(self):
         """
-        Private slot to uninstall the selected plugin.
+        Private method to uninstall the selected plugins.
         
-        @return flag indicating success (boolean)
+        @return flag indicating success
+        @rtype bool
+        """
+        checkedPlugins = self.__getCheckedPlugins()
+        uninstallCount = 0
+        for pluginName, pluginFile in checkedPlugins:
+            if self.__uninstallPlugin(pluginName, pluginFile):
+                uninstallCount += 1
+        return uninstallCount == len(checkedPlugins)
+    
+    def __uninstallPlugin(self, pluginName, pluginFile):
+        """
+        Private method to uninstall a given plugin.
+        
+        @param pluginName name of the plugin
+        @type str
+        @param pluginFile file name of the plugin
+        @type str
+        @return flag indicating success
+        @rtype bool
         """
         pluginDirectory = self.pluginDirectoryCombo.itemData(
             self.pluginDirectoryCombo.currentIndex())
-        pluginName = self.pluginNameCombo.currentText()
-        pluginFile = self.pluginNameCombo.itemData(
-            self.pluginNameCombo.currentIndex())
         
         if not self.__pluginManager.unloadPlugin(pluginName):
             EricMessageBox.critical(
--- a/eric7/PluginManager/PluginUninstallDialog.ui	Fri Aug 20 19:54:49 2021 +0200
+++ b/eric7/PluginManager/PluginUninstallDialog.ui	Fri Aug 20 19:56:17 2021 +0200
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>400</width>
-    <height>186</height>
+    <height>450</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -31,14 +31,20 @@
    <item>
     <widget class="QLabel" name="label_2">
      <property name="text">
-      <string>Plugin:</string>
+      <string>Plugins:</string>
      </property>
     </widget>
    </item>
    <item>
-    <widget class="QComboBox" name="pluginNameCombo">
+    <widget class="QListWidget" name="pluginsList">
      <property name="toolTip">
-      <string>Select the plugin to uninstall</string>
+      <string>Check the plugins to be uninstalled</string>
+     </property>
+     <property name="alternatingRowColors">
+      <bool>true</bool>
+     </property>
+     <property name="sortingEnabled">
+      <bool>true</bool>
      </property>
     </widget>
    </item>
@@ -66,8 +72,8 @@
  </widget>
  <tabstops>
   <tabstop>pluginDirectoryCombo</tabstop>
-  <tabstop>pluginNameCombo</tabstop>
-  <tabstop>buttonBox</tabstop>
+  <tabstop>pluginsList</tabstop>
+  <tabstop>keepConfigurationCheckBox</tabstop>
  </tabstops>
  <resources/>
  <connections/>
--- a/eric7/i18n/eric7_cs.ts	Fri Aug 20 19:54:49 2021 +0200
+++ b/eric7/i18n/eric7_cs.ts	Fri Aug 20 19:56:17 2021 +0200
@@ -54815,13 +54815,13 @@
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Plugin:</source>
-      <translation>Plugin:</translation>
+      <source>Plugins:</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Select the plugin to uninstall</source>
-      <translation>Vybrat plugin pro odinstalaci</translation>
+      <source>Check the plugins to be uninstalled</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
@@ -54833,46 +54833,54 @@
       <source>Keep configuration data</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <source>Plugin:</source>
+      <translation type="vanished">Plugin:</translation>
+    </message>
+    <message>
+      <source>Select the plugin to uninstall</source>
+      <translation type="vanished">Vybrat plugin pro odinstalaci</translation>
+    </message>
   </context>
   <context>
     <name>PluginUninstallWidget</name>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="58" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="57" />
       <source>User plugins directory</source>
       <translation>Uživatelský adresář s pluginy</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="64" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="63" />
       <source>Global plugins directory</source>
       <translation>Globální adresář s pluginy</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="201" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="192" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="181" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="125" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="111" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="232" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="223" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="212" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="156" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="142" />
       <source>Plugin Uninstallation</source>
       <translation>Odinstalace pluginu</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="112" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="143" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; could not be unloaded. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;Plugin &lt;b&gt;{0}&lt;/b&gt; nemůže být nenačten. Zrušeno...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="126" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="157" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; has no 'packageName' attribute. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;Pluginu &lt;b&gt;{0}&lt;/b&gt; chybí atribut 'packageName'. Zrušeno...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="182" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="213" />
       <source>&lt;p&gt;The plugin package &lt;b&gt;{0}&lt;/b&gt; could not be removed. Aborting...&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Plugin balíček &lt;b&gt;{0}&lt;/b&gt; nelze odebrat. Zrušeno...&lt;/p&gt;&lt;p&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="202" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="193" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="233" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="224" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; was uninstalled successfully from {1}.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Plugin &lt;b&gt;{0}&lt;/b&gt; byl úspěšně odinstalován z {1}.&lt;/p&gt;</translation>
     </message>
@@ -67738,24 +67746,24 @@
       <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; není soubor.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2424" />
-      <location filename="../QScintilla/Shell.py" line="2411" />
-      <location filename="../QScintilla/Shell.py" line="2392" />
+      <location filename="../QScintilla/Shell.py" line="2423" />
+      <location filename="../QScintilla/Shell.py" line="2410" />
+      <location filename="../QScintilla/Shell.py" line="2391" />
       <source>Save Shell Contents</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2394" />
+      <location filename="../QScintilla/Shell.py" line="2393" />
       <source>Text Files (*.txt);;All Files (*)</source>
       <translation type="unfinished">Textové soubory (*.txt);;Všechny soubory (*)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2412" />
+      <location filename="../QScintilla/Shell.py" line="2411" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation type="unfinished">&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; již existuje.&lt;/p&gt;&lt;p&gt;Má se přepsat?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2425" />
+      <location filename="../QScintilla/Shell.py" line="2424" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished">&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; nelze uložit.&lt;br /&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
@@ -95847,12 +95855,12 @@
   <context>
     <name>eric7</name>
     <message>
-      <location filename="../eric7.py" line="387" />
+      <location filename="../eric7.py" line="386" />
       <source>Starting...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../eric7.py" line="393" />
+      <location filename="../eric7.py" line="392" />
       <source>Generating Main Window...</source>
       <translation type="unfinished">Generování hlavního okna...</translation>
     </message>
Binary file eric7/i18n/eric7_de.qm has changed
--- a/eric7/i18n/eric7_de.ts	Fri Aug 20 19:54:49 2021 +0200
+++ b/eric7/i18n/eric7_de.ts	Fri Aug 20 19:56:17 2021 +0200
@@ -51530,13 +51530,13 @@
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Plugin:</source>
-      <translation>Plugin:</translation>
+      <source>Plugins:</source>
+      <translation>Plugins:</translation>
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Select the plugin to uninstall</source>
-      <translation>Wähle das zu deinstallierende Plugin</translation>
+      <source>Check the plugins to be uninstalled</source>
+      <translation>Wähle die zu deinstallierenden Plugins aus</translation>
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
@@ -51552,42 +51552,42 @@
   <context>
     <name>PluginUninstallWidget</name>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="58" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="57" />
       <source>User plugins directory</source>
       <translation>Nutzer-Pluginverzeichnis</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="64" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="63" />
       <source>Global plugins directory</source>
       <translation>Globales Pluginverzeichnis</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="201" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="192" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="181" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="125" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="111" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="232" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="223" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="212" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="156" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="142" />
       <source>Plugin Uninstallation</source>
       <translation>Plugin-Deinstallation</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="112" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="143" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; could not be unloaded. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;Das Plugin &lt;b&gt;{0}&lt;/b&gt; konnte nicht entladen werden. Abbruch...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="126" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="157" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; has no 'packageName' attribute. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;Das Plugin &lt;b&gt;{0}&lt;/b&gt; hat kein Attribut „packageName“. Abbruch...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="182" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="213" />
       <source>&lt;p&gt;The plugin package &lt;b&gt;{0}&lt;/b&gt; could not be removed. Aborting...&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Das Pluginpacket &lt;b&gt;{0}&lt;/b&gt; konnte nicht gelöscht werden. Abbruch...&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="202" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="193" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="233" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="224" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; was uninstalled successfully from {1}.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Das Plugin &lt;b&gt;{0}&lt;/b&gt; wurde erfolgreich von {1} deinstalliert.&lt;/p&gt;</translation>
     </message>
@@ -63805,24 +63805,24 @@
       <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; ist keine Datei.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2424" />
-      <location filename="../QScintilla/Shell.py" line="2411" />
-      <location filename="../QScintilla/Shell.py" line="2392" />
+      <location filename="../QScintilla/Shell.py" line="2423" />
+      <location filename="../QScintilla/Shell.py" line="2410" />
+      <location filename="../QScintilla/Shell.py" line="2391" />
       <source>Save Shell Contents</source>
       <translation>Shellinhalt speichern</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2394" />
+      <location filename="../QScintilla/Shell.py" line="2393" />
       <source>Text Files (*.txt);;All Files (*)</source>
       <translation>Textdateien (*.txt);;Alle Dateien (*)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2412" />
+      <location filename="../QScintilla/Shell.py" line="2411" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; existiert bereits. Überschreiben?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2425" />
+      <location filename="../QScintilla/Shell.py" line="2424" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; konnte nicht gesichert werden.&lt;br/&gt;Grund: {1}&lt;/p&gt;</translation>
     </message>
@@ -91376,12 +91376,12 @@
   <context>
     <name>eric7</name>
     <message>
-      <location filename="../eric7.py" line="387" />
+      <location filename="../eric7.py" line="386" />
       <source>Starting...</source>
       <translation>Starte...</translation>
     </message>
     <message>
-      <location filename="../eric7.py" line="393" />
+      <location filename="../eric7.py" line="392" />
       <source>Generating Main Window...</source>
       <translation>Erzeuge das Hauptfenster...</translation>
     </message>
--- a/eric7/i18n/eric7_empty.ts	Fri Aug 20 19:54:49 2021 +0200
+++ b/eric7/i18n/eric7_empty.ts	Fri Aug 20 19:56:17 2021 +0200
@@ -51285,12 +51285,12 @@
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Plugin:</source>
+      <source>Plugins:</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Select the plugin to uninstall</source>
+      <source>Check the plugins to be uninstalled</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -51307,42 +51307,42 @@
   <context>
     <name>PluginUninstallWidget</name>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="58" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="57" />
       <source>User plugins directory</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="64" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="63" />
       <source>Global plugins directory</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="201" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="192" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="181" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="125" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="111" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="232" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="223" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="212" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="156" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="142" />
       <source>Plugin Uninstallation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="112" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="143" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; could not be unloaded. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="126" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="157" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; has no 'packageName' attribute. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="182" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="213" />
       <source>&lt;p&gt;The plugin package &lt;b&gt;{0}&lt;/b&gt; could not be removed. Aborting...&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="202" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="193" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="233" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="224" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; was uninstalled successfully from {1}.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -63364,24 +63364,24 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2424" />
-      <location filename="../QScintilla/Shell.py" line="2411" />
-      <location filename="../QScintilla/Shell.py" line="2392" />
+      <location filename="../QScintilla/Shell.py" line="2423" />
+      <location filename="../QScintilla/Shell.py" line="2410" />
+      <location filename="../QScintilla/Shell.py" line="2391" />
       <source>Save Shell Contents</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2394" />
+      <location filename="../QScintilla/Shell.py" line="2393" />
       <source>Text Files (*.txt);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2412" />
+      <location filename="../QScintilla/Shell.py" line="2411" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2425" />
+      <location filename="../QScintilla/Shell.py" line="2424" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -90743,12 +90743,12 @@
   <context>
     <name>eric7</name>
     <message>
-      <location filename="../eric7.py" line="387" />
+      <location filename="../eric7.py" line="386" />
       <source>Starting...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../eric7.py" line="393" />
+      <location filename="../eric7.py" line="392" />
       <source>Generating Main Window...</source>
       <translation type="unfinished" />
     </message>
--- a/eric7/i18n/eric7_en.ts	Fri Aug 20 19:54:49 2021 +0200
+++ b/eric7/i18n/eric7_en.ts	Fri Aug 20 19:56:17 2021 +0200
@@ -51324,12 +51324,12 @@
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Plugin:</source>
+      <source>Plugins:</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Select the plugin to uninstall</source>
+      <source>Check the plugins to be uninstalled</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -51346,42 +51346,42 @@
   <context>
     <name>PluginUninstallWidget</name>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="58" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="57" />
       <source>User plugins directory</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="64" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="63" />
       <source>Global plugins directory</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="201" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="192" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="181" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="125" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="111" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="232" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="223" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="212" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="156" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="142" />
       <source>Plugin Uninstallation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="112" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="143" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; could not be unloaded. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="126" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="157" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; has no 'packageName' attribute. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="182" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="213" />
       <source>&lt;p&gt;The plugin package &lt;b&gt;{0}&lt;/b&gt; could not be removed. Aborting...&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="202" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="193" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="233" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="224" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; was uninstalled successfully from {1}.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -63405,24 +63405,24 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2424" />
-      <location filename="../QScintilla/Shell.py" line="2411" />
-      <location filename="../QScintilla/Shell.py" line="2392" />
+      <location filename="../QScintilla/Shell.py" line="2423" />
+      <location filename="../QScintilla/Shell.py" line="2410" />
+      <location filename="../QScintilla/Shell.py" line="2391" />
       <source>Save Shell Contents</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2394" />
+      <location filename="../QScintilla/Shell.py" line="2393" />
       <source>Text Files (*.txt);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2412" />
+      <location filename="../QScintilla/Shell.py" line="2411" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2425" />
+      <location filename="../QScintilla/Shell.py" line="2424" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -90790,12 +90790,12 @@
   <context>
     <name>eric7</name>
     <message>
-      <location filename="../eric7.py" line="387" />
+      <location filename="../eric7.py" line="386" />
       <source>Starting...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../eric7.py" line="393" />
+      <location filename="../eric7.py" line="392" />
       <source>Generating Main Window...</source>
       <translation type="unfinished" />
     </message>
--- a/eric7/i18n/eric7_es.ts	Fri Aug 20 19:54:49 2021 +0200
+++ b/eric7/i18n/eric7_es.ts	Fri Aug 20 19:56:17 2021 +0200
@@ -51564,13 +51564,13 @@
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Plugin:</source>
-      <translation>Plugin:</translation>
+      <source>Plugins:</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Select the plugin to uninstall</source>
-      <translation>Seleccione el plugin a desinstalar</translation>
+      <source>Check the plugins to be uninstalled</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
@@ -51582,46 +51582,54 @@
       <source>Keep configuration data</source>
       <translation>Conservar datos de configuración</translation>
     </message>
+    <message>
+      <source>Plugin:</source>
+      <translation type="vanished">Plugin:</translation>
+    </message>
+    <message>
+      <source>Select the plugin to uninstall</source>
+      <translation type="vanished">Seleccione el plugin a desinstalar</translation>
+    </message>
   </context>
   <context>
     <name>PluginUninstallWidget</name>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="58" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="57" />
       <source>User plugins directory</source>
       <translation>Directorio de plugins del usuario</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="64" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="63" />
       <source>Global plugins directory</source>
       <translation>Directorio de plugins global</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="201" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="192" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="181" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="125" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="111" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="232" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="223" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="212" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="156" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="142" />
       <source>Plugin Uninstallation</source>
       <translation>Desinstalación de Plugin</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="112" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="143" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; could not be unloaded. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;El plugin &lt;b&gt;{0}&lt;/b&gt; no ha podido descargarse. Abortando...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="126" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="157" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; has no 'packageName' attribute. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;El plugin &lt;b&gt;{0}&lt;/b&gt; no tiene atributo  'packageName'. Abortando...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="182" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="213" />
       <source>&lt;p&gt;The plugin package &lt;b&gt;{0}&lt;/b&gt; could not be removed. Aborting...&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;El paquete de plugin &lt;b&gt;{0}&lt;/b&gt; no ha podido ser eliminado. Abortando...&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="202" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="193" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="233" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="224" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; was uninstalled successfully from {1}.&lt;/p&gt;</source>
       <translation>&lt;p&gt;El plugin &lt;b&gt;{0}&lt;/b&gt; se ha desinstalado de {1} satisfactoriamente.&lt;/p&gt;</translation>
     </message>
@@ -63820,24 +63828,24 @@
       <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; no es un archivo.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2424" />
-      <location filename="../QScintilla/Shell.py" line="2411" />
-      <location filename="../QScintilla/Shell.py" line="2392" />
+      <location filename="../QScintilla/Shell.py" line="2423" />
+      <location filename="../QScintilla/Shell.py" line="2410" />
+      <location filename="../QScintilla/Shell.py" line="2391" />
       <source>Save Shell Contents</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2394" />
+      <location filename="../QScintilla/Shell.py" line="2393" />
       <source>Text Files (*.txt);;All Files (*)</source>
       <translation type="unfinished">Archivos de Texto (*.txt);;Todos los Archivos (*)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2412" />
+      <location filename="../QScintilla/Shell.py" line="2411" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation type="unfinished">&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; ya existe. ¿Desea sobreescribirlo?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2425" />
+      <location filename="../QScintilla/Shell.py" line="2424" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished">&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; no puede ser guardado.&lt;br&gt;Causa: {1}&lt;/p&gt;</translation>
     </message>
@@ -91380,12 +91388,12 @@
   <context>
     <name>eric7</name>
     <message>
-      <location filename="../eric7.py" line="387" />
+      <location filename="../eric7.py" line="386" />
       <source>Starting...</source>
       <translation>Comenzando...</translation>
     </message>
     <message>
-      <location filename="../eric7.py" line="393" />
+      <location filename="../eric7.py" line="392" />
       <source>Generating Main Window...</source>
       <translation>Generando Ventana Principal...</translation>
     </message>
--- a/eric7/i18n/eric7_fr.ts	Fri Aug 20 19:54:49 2021 +0200
+++ b/eric7/i18n/eric7_fr.ts	Fri Aug 20 19:56:17 2021 +0200
@@ -54970,13 +54970,13 @@
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Plugin:</source>
-      <translation>Plugin:</translation>
+      <source>Plugins:</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Select the plugin to uninstall</source>
-      <translation>Sélectionner le plugin à désinstaller</translation>
+      <source>Check the plugins to be uninstalled</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
@@ -54988,46 +54988,54 @@
       <source>Keep configuration data</source>
       <translation>Conserver les données de configuration</translation>
     </message>
+    <message>
+      <source>Plugin:</source>
+      <translation type="vanished">Plugin:</translation>
+    </message>
+    <message>
+      <source>Select the plugin to uninstall</source>
+      <translation type="vanished">Sélectionner le plugin à désinstaller</translation>
+    </message>
   </context>
   <context>
     <name>PluginUninstallWidget</name>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="58" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="57" />
       <source>User plugins directory</source>
       <translation>Répertoire utilisateur pour les plugins</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="64" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="63" />
       <source>Global plugins directory</source>
       <translation>Répertoire global pour les plugins</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="201" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="192" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="181" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="125" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="111" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="232" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="223" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="212" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="156" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="142" />
       <source>Plugin Uninstallation</source>
       <translation>Désinstallation de plugin</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="112" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="143" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; could not be unloaded. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;Le plugin &lt;b&gt;{0}&lt;/b&gt; n'a pas pu être déchargé. Annulation...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="126" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="157" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; has no 'packageName' attribute. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;Le plugin &lt;b&gt;{0}&lt;/b&gt; n'a pas d'attribut 'packageName' . Annulation...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="182" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="213" />
       <source>&lt;p&gt;The plugin package &lt;b&gt;{0}&lt;/b&gt; could not be removed. Aborting...&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Le package plugin&lt;b&gt;{0}&lt;/b&gt; ne peut être supprimé. Annulation...&lt;/p&gt;&lt;p&gt;Raison : {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="202" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="193" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="233" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="224" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; was uninstalled successfully from {1}.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Le plugin &lt;b&gt;{0}&lt;/b&gt; a été désinstaller avec succès depuis {1}.&lt;/p&gt;</translation>
     </message>
@@ -68052,24 +68060,24 @@
       <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; n'est pas un fichier.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2424" />
-      <location filename="../QScintilla/Shell.py" line="2411" />
-      <location filename="../QScintilla/Shell.py" line="2392" />
+      <location filename="../QScintilla/Shell.py" line="2423" />
+      <location filename="../QScintilla/Shell.py" line="2410" />
+      <location filename="../QScintilla/Shell.py" line="2391" />
       <source>Save Shell Contents</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2394" />
+      <location filename="../QScintilla/Shell.py" line="2393" />
       <source>Text Files (*.txt);;All Files (*)</source>
       <translation type="unfinished">Fichiers texte (*.txt);;Tous les fichiers (*)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2412" />
+      <location filename="../QScintilla/Shell.py" line="2411" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation type="unfinished">&lt;p&gt;Le fichier &lt;b&gt;{0}&lt;/b&gt;existe déjà. Écraser ?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2425" />
+      <location filename="../QScintilla/Shell.py" line="2424" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished">&lt;p&gt;Le fichier &lt;b&gt;{0}&lt;/b&gt; ne peut être enregistré.&lt;/p&gt;&lt;p&gt;Raison : {1}&lt;/p&gt;</translation>
     </message>
@@ -96310,12 +96318,12 @@
   <context>
     <name>eric7</name>
     <message>
-      <location filename="../eric7.py" line="387" />
+      <location filename="../eric7.py" line="386" />
       <source>Starting...</source>
       <translation type="unfinished">Démarrage...</translation>
     </message>
     <message>
-      <location filename="../eric7.py" line="393" />
+      <location filename="../eric7.py" line="392" />
       <source>Generating Main Window...</source>
       <translation type="unfinished">Création de la fenêtre principale...</translation>
     </message>
--- a/eric7/i18n/eric7_it.ts	Fri Aug 20 19:54:49 2021 +0200
+++ b/eric7/i18n/eric7_it.ts	Fri Aug 20 19:56:17 2021 +0200
@@ -56887,13 +56887,13 @@
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Plugin:</source>
-      <translation>Plugin:</translation>
+      <source>Plugins:</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Select the plugin to uninstall</source>
-      <translation>Seleziona il plugin da rimuovere</translation>
+      <source>Check the plugins to be uninstalled</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
@@ -56905,46 +56905,54 @@
       <source>Keep configuration data</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <source>Plugin:</source>
+      <translation type="vanished">Plugin:</translation>
+    </message>
+    <message>
+      <source>Select the plugin to uninstall</source>
+      <translation type="vanished">Seleziona il plugin da rimuovere</translation>
+    </message>
   </context>
   <context>
     <name>PluginUninstallWidget</name>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="58" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="57" />
       <source>User plugins directory</source>
       <translation>Directgory dei plugin dell'utente</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="64" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="63" />
       <source>Global plugins directory</source>
       <translation>Directory dei plugin di sistema</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="201" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="192" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="181" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="125" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="111" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="232" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="223" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="212" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="156" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="142" />
       <source>Plugin Uninstallation</source>
       <translation>Rimozione plugin</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="112" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="143" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; could not be unloaded. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;Il plugin &lt;b&gt;{0}&lt;/b&gt; non può essere rimosso. Uscita...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="126" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="157" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; has no 'packageName' attribute. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;Il plugin &lt;b&gt;{0}&lt;/b&gt; non ha un attributo 'packageName'. Uscita...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="182" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="213" />
       <source>&lt;p&gt;The plugin package &lt;b&gt;{0}&lt;/b&gt; could not be removed. Aborting...&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Il pacchetto del plugin &lt;b&gt;{0}&lt;/b&gt; non può essere rimosso. Uscita...&lt;/p&gt;&lt;p&gt;Motivo: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="202" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="193" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="233" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="224" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; was uninstalled successfully from {1}.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Il plugin &lt;b&gt;{0}&lt;/b&gt; è stato rimosso correttamente da {1}.&lt;/p&gt;</translation>
     </message>
@@ -70178,24 +70186,24 @@
       <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; non è un file.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2424" />
-      <location filename="../QScintilla/Shell.py" line="2411" />
-      <location filename="../QScintilla/Shell.py" line="2392" />
+      <location filename="../QScintilla/Shell.py" line="2423" />
+      <location filename="../QScintilla/Shell.py" line="2410" />
+      <location filename="../QScintilla/Shell.py" line="2391" />
       <source>Save Shell Contents</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2394" />
+      <location filename="../QScintilla/Shell.py" line="2393" />
       <source>Text Files (*.txt);;All Files (*)</source>
       <translation type="unfinished">File Testo(*.txt);;Tutti i file (*)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2412" />
+      <location filename="../QScintilla/Shell.py" line="2411" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation type="unfinished">&lt;p&gt;Il file &lt;b&gt;{0}&lt;/b&gt; esiste già. Sovrascriverlo ?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2425" />
+      <location filename="../QScintilla/Shell.py" line="2424" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished">&lt;p&gt;Il file &lt;b&gt;{0}&lt;/b&gt; non può essere salvato.&lt;br /&gt;Motivo: {1}&lt;/p&gt;</translation>
     </message>
@@ -98451,12 +98459,12 @@
   <context>
     <name>eric7</name>
     <message>
-      <location filename="../eric7.py" line="387" />
+      <location filename="../eric7.py" line="386" />
       <source>Starting...</source>
       <translation type="unfinished">Inizio...</translation>
     </message>
     <message>
-      <location filename="../eric7.py" line="393" />
+      <location filename="../eric7.py" line="392" />
       <source>Generating Main Window...</source>
       <translation type="unfinished">Generazione Main Window...</translation>
     </message>
--- a/eric7/i18n/eric7_pt.ts	Fri Aug 20 19:54:49 2021 +0200
+++ b/eric7/i18n/eric7_pt.ts	Fri Aug 20 19:56:17 2021 +0200
@@ -56379,13 +56379,13 @@
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Plugin:</source>
-      <translation />
+      <source>Plugins:</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Select the plugin to uninstall</source>
-      <translation>Selecionar o plugin a desinstalar</translation>
+      <source>Check the plugins to be uninstalled</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
@@ -56397,46 +56397,50 @@
       <source>Keep configuration data</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <source>Select the plugin to uninstall</source>
+      <translation type="vanished">Selecionar o plugin a desinstalar</translation>
+    </message>
   </context>
   <context>
     <name>PluginUninstallWidget</name>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="58" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="57" />
       <source>User plugins directory</source>
       <translation>Diretório de plugins do usuário</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="64" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="63" />
       <source>Global plugins directory</source>
       <translation>Diretório de plugins do global</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="201" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="192" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="181" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="125" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="111" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="232" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="223" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="212" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="156" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="142" />
       <source>Plugin Uninstallation</source>
       <translation>Desinstalação de Plugins</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="112" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="143" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; could not be unloaded. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="126" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="157" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; has no 'packageName' attribute. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;O complemento &lt;b&gt;{0}&lt;/b&gt; não tem atributo 'packageName'. A cancelar...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="182" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="213" />
       <source>&lt;p&gt;The plugin package &lt;b&gt;{0}&lt;/b&gt; could not be removed. Aborting...&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;O pacote complemento &lt;b&gt;{0}&lt;/b&gt; não pode ser apagado. A cancelar...&lt;/p&gt;&lt;p&gt;Motivo: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="202" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="193" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="233" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="224" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; was uninstalled successfully from {1}.&lt;/p&gt;</source>
       <translation>&lt;p&gt;O complemento &lt;b&gt;{0}&lt;/b&gt; foi desinstalado de {1} com êxito.&lt;/p&gt;</translation>
     </message>
@@ -68989,24 +68993,24 @@
       <translation type="unfinished">&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; não é um ficheiro.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2424" />
-      <location filename="../QScintilla/Shell.py" line="2411" />
-      <location filename="../QScintilla/Shell.py" line="2392" />
+      <location filename="../QScintilla/Shell.py" line="2423" />
+      <location filename="../QScintilla/Shell.py" line="2410" />
+      <location filename="../QScintilla/Shell.py" line="2391" />
       <source>Save Shell Contents</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2394" />
+      <location filename="../QScintilla/Shell.py" line="2393" />
       <source>Text Files (*.txt);;All Files (*)</source>
       <translation type="unfinished">Ficheiros de Texto (*.txt);;Ficheiros Todos (*)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2412" />
+      <location filename="../QScintilla/Shell.py" line="2411" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation type="unfinished">&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; já existe. Sobreescrever?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2425" />
+      <location filename="../QScintilla/Shell.py" line="2424" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished">&lt;p&gt;O ficheiro &lt;b&gt;{0}&lt;/b&gt; não se pôde gravar. &lt;br/&gt;Motivo: {1}&lt;/p&gt;</translation>
     </message>
@@ -96970,12 +96974,12 @@
   <context>
     <name>eric7</name>
     <message>
-      <location filename="../eric7.py" line="387" />
+      <location filename="../eric7.py" line="386" />
       <source>Starting...</source>
       <translation type="unfinished">A iniciar...</translation>
     </message>
     <message>
-      <location filename="../eric7.py" line="393" />
+      <location filename="../eric7.py" line="392" />
       <source>Generating Main Window...</source>
       <translation type="unfinished">A criar a Janela Principal...</translation>
     </message>
--- a/eric7/i18n/eric7_ru.ts	Fri Aug 20 19:54:49 2021 +0200
+++ b/eric7/i18n/eric7_ru.ts	Fri Aug 20 19:56:17 2021 +0200
@@ -51607,13 +51607,13 @@
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Plugin:</source>
-      <translation>Плагин:</translation>
+      <source>Plugins:</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Select the plugin to uninstall</source>
-      <translation>Выберите плагин для деинсталляции</translation>
+      <source>Check the plugins to be uninstalled</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
@@ -51625,46 +51625,54 @@
       <source>Keep configuration data</source>
       <translation>Сохранять данные конфигурации</translation>
     </message>
+    <message>
+      <source>Plugin:</source>
+      <translation type="vanished">Плагин:</translation>
+    </message>
+    <message>
+      <source>Select the plugin to uninstall</source>
+      <translation type="vanished">Выберите плагин для деинсталляции</translation>
+    </message>
   </context>
   <context>
     <name>PluginUninstallWidget</name>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="58" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="57" />
       <source>User plugins directory</source>
       <translation>Директория плагинов пользователя</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="64" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="63" />
       <source>Global plugins directory</source>
       <translation>Глобальная директория плагинов</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="201" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="192" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="181" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="125" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="111" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="232" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="223" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="212" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="156" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="142" />
       <source>Plugin Uninstallation</source>
       <translation>Деинсталляция плагинов</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="112" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="143" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; could not be unloaded. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;Невозможно выгрузить плагин &lt;b&gt;{0}&lt;/b&gt;. Прерывание...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="126" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="157" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; has no 'packageName' attribute. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;Плагин &lt;b&gt;{0}&lt;/b&gt; не содержит атрибута 'packageName'. Прерывание...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="182" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="213" />
       <source>&lt;p&gt;The plugin package &lt;b&gt;{0}&lt;/b&gt; could not be removed. Aborting...&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Невозможно удалить пакет плагина &lt;b&gt;{0}&lt;/b&gt;. Отмена...&lt;/p&gt;&lt;p&gt;Причина: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="202" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="193" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="233" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="224" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; was uninstalled successfully from {1}.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Плагин &lt;b&gt;{0}&lt;/b&gt; был успешно деинсталлирован из {1}.&lt;/p&gt;</translation>
     </message>
@@ -63937,24 +63945,24 @@
       <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; не является файлом&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2424" />
-      <location filename="../QScintilla/Shell.py" line="2411" />
-      <location filename="../QScintilla/Shell.py" line="2392" />
+      <location filename="../QScintilla/Shell.py" line="2423" />
+      <location filename="../QScintilla/Shell.py" line="2410" />
+      <location filename="../QScintilla/Shell.py" line="2391" />
       <source>Save Shell Contents</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2394" />
+      <location filename="../QScintilla/Shell.py" line="2393" />
       <source>Text Files (*.txt);;All Files (*)</source>
       <translation type="unfinished">Текстовые файлы (*.txt);;Все файлы (*)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2412" />
+      <location filename="../QScintilla/Shell.py" line="2411" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation type="unfinished">&lt;p&gt;Файл &lt;b&gt;{0}&lt;/b&gt; уже существует. Переписать?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2425" />
+      <location filename="../QScintilla/Shell.py" line="2424" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished">&lt;p&gt;Невозможно сохранить файл &lt;b&gt;{0}&lt;/b&gt;.&lt;br/&gt;Причина: {1}.&lt;/p&gt;</translation>
     </message>
@@ -91575,12 +91583,12 @@
   <context>
     <name>eric7</name>
     <message>
-      <location filename="../eric7.py" line="387" />
+      <location filename="../eric7.py" line="386" />
       <source>Starting...</source>
       <translation>Запуск...</translation>
     </message>
     <message>
-      <location filename="../eric7.py" line="393" />
+      <location filename="../eric7.py" line="392" />
       <source>Generating Main Window...</source>
       <translation>Создание главного окна...</translation>
     </message>
--- a/eric7/i18n/eric7_tr.ts	Fri Aug 20 19:54:49 2021 +0200
+++ b/eric7/i18n/eric7_tr.ts	Fri Aug 20 19:56:17 2021 +0200
@@ -55139,13 +55139,13 @@
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Plugin:</source>
-      <translation>Eklenti:</translation>
+      <source>Plugins:</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Select the plugin to uninstall</source>
-      <translation>Eklentiyi kaldırma için seç</translation>
+      <source>Check the plugins to be uninstalled</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
@@ -55157,46 +55157,54 @@
       <source>Keep configuration data</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <source>Plugin:</source>
+      <translation type="vanished">Eklenti:</translation>
+    </message>
+    <message>
+      <source>Select the plugin to uninstall</source>
+      <translation type="vanished">Eklentiyi kaldırma için seç</translation>
+    </message>
   </context>
   <context>
     <name>PluginUninstallWidget</name>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="58" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="57" />
       <source>User plugins directory</source>
       <translation>Kullanıcı eklentiler dizini</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="64" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="63" />
       <source>Global plugins directory</source>
       <translation>Evrensel eklentiler dizini</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="201" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="192" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="181" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="125" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="111" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="232" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="223" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="212" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="156" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="142" />
       <source>Plugin Uninstallation</source>
       <translation>Eklenti Kaldırımı</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="112" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="143" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; could not be unloaded. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;Eklenti &lt;b&gt;{0}&lt;/b&gt; kaldırılamıyor. İptal ediliyor...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="126" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="157" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; has no 'packageName' attribute. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;eklenti &lt;b&gt;{0}&lt;/b&gt; 'packageName' özniteliğine sahip değil. İptal ediliyor...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="182" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="213" />
       <source>&lt;p&gt;The plugin package &lt;b&gt;{0}&lt;/b&gt; could not be removed. Aborting...&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Eklenti paketi &lt;b&gt;{0}&lt;/b&gt; kaldırılamadı. İptal ediliyor...&lt;/p&gt;&lt;p&gt;Sebep: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="202" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="193" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="233" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="224" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; was uninstalled successfully from {1}.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Eklenti &lt;b&gt;{0}&lt;/b&gt; {1}den tam olarak kaldırıldı.&lt;/p&gt;</translation>
     </message>
@@ -67804,24 +67812,24 @@
       <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; bir dosya değil.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2424" />
-      <location filename="../QScintilla/Shell.py" line="2411" />
-      <location filename="../QScintilla/Shell.py" line="2392" />
+      <location filename="../QScintilla/Shell.py" line="2423" />
+      <location filename="../QScintilla/Shell.py" line="2410" />
+      <location filename="../QScintilla/Shell.py" line="2391" />
       <source>Save Shell Contents</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2394" />
+      <location filename="../QScintilla/Shell.py" line="2393" />
       <source>Text Files (*.txt);;All Files (*)</source>
       <translation type="unfinished">Metin Dosyaları (*.txt);;Tüm Dosyalar (*)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2412" />
+      <location filename="../QScintilla/Shell.py" line="2411" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation type="unfinished">&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; dosyası halen mevcut. Üzerine yazılsın mı?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2425" />
+      <location filename="../QScintilla/Shell.py" line="2424" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished">&lt;p&gt;Dosya &lt;b&gt;{0}&lt;/b&gt; kaydedilemiyor.&lt;/p&gt;&lt;p&gt;Sebep: {1}&lt;/p&gt;</translation>
     </message>
@@ -95731,12 +95739,12 @@
   <context>
     <name>eric7</name>
     <message>
-      <location filename="../eric7.py" line="387" />
+      <location filename="../eric7.py" line="386" />
       <source>Starting...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../eric7.py" line="393" />
+      <location filename="../eric7.py" line="392" />
       <source>Generating Main Window...</source>
       <translation type="unfinished">Anapencere üretiliyor...</translation>
     </message>
--- a/eric7/i18n/eric7_zh_CN.ts	Fri Aug 20 19:54:49 2021 +0200
+++ b/eric7/i18n/eric7_zh_CN.ts	Fri Aug 20 19:56:17 2021 +0200
@@ -56012,13 +56012,13 @@
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Plugin:</source>
-      <translation>插件:</translation>
+      <source>Plugins:</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
-      <source>Select the plugin to uninstall</source>
-      <translation>选择要卸载的插件</translation>
+      <source>Check the plugins to be uninstalled</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../PluginManager/PluginUninstallDialog.ui" line="0" />
@@ -56030,46 +56030,54 @@
       <source>Keep configuration data</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <source>Plugin:</source>
+      <translation type="vanished">插件:</translation>
+    </message>
+    <message>
+      <source>Select the plugin to uninstall</source>
+      <translation type="vanished">选择要卸载的插件</translation>
+    </message>
   </context>
   <context>
     <name>PluginUninstallWidget</name>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="58" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="57" />
       <source>User plugins directory</source>
       <translation>用户插件文件夹</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="64" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="63" />
       <source>Global plugins directory</source>
       <translation>全局插件文件夹</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="201" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="192" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="181" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="125" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="111" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="232" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="223" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="212" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="156" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="142" />
       <source>Plugin Uninstallation</source>
       <translation>插件卸载</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="112" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="143" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; could not be unloaded. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;插件 &lt;b&gt;{0}&lt;/b&gt; 无法反加载。放弃操作…&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="126" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="157" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; has no 'packageName' attribute. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="182" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="213" />
       <source>&lt;p&gt;The plugin package &lt;b&gt;{0}&lt;/b&gt; could not be removed. Aborting...&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="202" />
-      <location filename="../PluginManager/PluginUninstallDialog.py" line="193" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="233" />
+      <location filename="../PluginManager/PluginUninstallDialog.py" line="224" />
       <source>&lt;p&gt;The plugin &lt;b&gt;{0}&lt;/b&gt; was uninstalled successfully from {1}.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -69272,24 +69280,24 @@
       <translation type="unfinished">&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; 不是一个文件。&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2424" />
-      <location filename="../QScintilla/Shell.py" line="2411" />
-      <location filename="../QScintilla/Shell.py" line="2392" />
+      <location filename="../QScintilla/Shell.py" line="2423" />
+      <location filename="../QScintilla/Shell.py" line="2410" />
+      <location filename="../QScintilla/Shell.py" line="2391" />
       <source>Save Shell Contents</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2394" />
+      <location filename="../QScintilla/Shell.py" line="2393" />
       <source>Text Files (*.txt);;All Files (*)</source>
       <translation type="unfinished">文本文件 (*.txt);;所有文件 (*)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2412" />
+      <location filename="../QScintilla/Shell.py" line="2411" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation type="unfinished">&lt;p&gt;文件 &lt;b&gt;{0}&lt;/b&gt; 已经存在。是否覆盖?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Shell.py" line="2425" />
+      <location filename="../QScintilla/Shell.py" line="2424" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; could not be saved.&lt;br/&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished">&lt;p&gt;文件 &lt;b&gt;{0}&lt;/b&gt; 无法保存。&lt;br /&gt;原因:{1}&lt;/p&gt;</translation>
     </message>
@@ -97536,12 +97544,12 @@
   <context>
     <name>eric7</name>
     <message>
-      <location filename="../eric7.py" line="387" />
+      <location filename="../eric7.py" line="386" />
       <source>Starting...</source>
       <translation type="unfinished">正在启动…</translation>
     </message>
     <message>
-      <location filename="../eric7.py" line="393" />
+      <location filename="../eric7.py" line="392" />
       <source>Generating Main Window...</source>
       <translation type="unfinished">正在产生主窗口…</translation>
     </message>

eric ide

mercurial