Merged with branch 'eric7' in order to get the latest changes and bug fixes. mpy_network

Mon, 24 Apr 2023 17:51:11 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 24 Apr 2023 17:51:11 +0200
branch
mpy_network
changeset 9988
1ba9d07ba9da
parent 9979
dbafba79461d (current diff)
parent 9987
4fc496b56772 (diff)
child 9989
286c2a21f36f

Merged with branch 'eric7' in order to get the latest changes and bug fixes.

--- a/docs/changelog.md	Sat Apr 15 18:22:09 2023 +0200
+++ b/docs/changelog.md	Mon Apr 24 17:51:11 2023 +0200
@@ -13,9 +13,15 @@
       page of the configuration dialog.
     - Added a package installer for devices lacking network connectivity and the `mip`
       package manager.
+- Plugin Repository
+    - Added the capability to enforce the download of plugin packages using the
+      `http://` protocol (in case of missing/non-functional system `SSL` libraries).
 - Translator
     - Added support for the LibreTranslate translator (see
       https://github.com/LibreTranslate/LibreTranslate).
+- Web Browser
+    - Added the capability to enforce the download of spell check dictionaries using
+      the `http://` protocol (in case of missing/non-functional system `SSL` libraries).
 
 ### Version 23.4.2
 - bug fixes
--- a/scripts/compileUiFiles.py	Sat Apr 15 18:22:09 2023 +0200
+++ b/scripts/compileUiFiles.py	Mon Apr 24 17:51:11 2023 +0200
@@ -11,7 +11,9 @@
 import os
 import sys
 
-from PyQt6.uic import compileUiDir
+from functools import partial
+
+from PyQt6.uic import compileUi
 
 
 def __pyName(py_dir, py_file):
@@ -26,16 +28,104 @@
     return py_dir, "Ui_{0}".format(py_file)
 
 
+def __compileOneUi(ui_path, mapFunc=None, execute=False, indent=4):
+    """
+    Function to compile a single form file to Python code.
+
+    @param ui_path path of the Qt form file
+    @type str
+    @param mapFunc function to change directory and/or name of the resulting Python file
+        (defaults to None)
+    @type func (optional)
+    @param execute flag indicating to generate code to execute the form in standalone
+        mode (defaults to False)
+    @type bool (optional)
+    @param indent indentation width using spaces (defaults to 4)
+    @type int (optional)
+    """
+    py_dir, py_file = os.path.split(ui_path[:-3] + ".py")
+
+    # Allow the caller to change the name of the .py file or generate
+    # it in a different directory.
+    if mapFunc is not None:
+        py_dir, py_file = mapFunc(py_dir, py_file)
+
+    # Make sure the destination directory exists.
+    os.makedirs(py_dir, exist_ok=True)
+
+    py_path = os.path.join(py_dir, py_file)
+
+    with open(py_path, "w", encoding="utf-8") as py_file:
+        compileUi(ui_path, py_file, execute=execute, indent=indent)
+
+
+def compileUiDir(root, recurse=False, mapFunc=None, workers=1, execute=False, indent=4):
+    """
+    Function to compile all Qt form files of a directory or directory tree
+    to Python code.
+
+    @param root directory to scan for Qt form files (i.e. files ending with '.ui'
+    @type str
+    @param recurse flag indicating to recurse into sub-directories (defaults to False)
+    @type bool (optional)
+    @param mapFunc function to change directory and/or name of the resulting Python file
+        (defaults to None)
+    @type func (optional)
+    @param workers number of worker processes to be used to compile (defaults to 1)
+    @type int (optional)
+    @param execute flag indicating to generate code to execute the form in standalone
+        mode (defaults to False)
+    @type bool (optional)
+    @param indent indentation width using spaces (defaults to 4)
+    @type int (optional)
+    """
+    if recurse:
+        ui_files = []
+        for rootDir, _, files in os.walk(root):
+            ui_files.extend(
+                os.path.join(rootDir, ui) for ui in files if ui.endswith(".ui")
+            )
+    else:
+        ui_files = [
+            os.path.join(root, ui)
+            for ui in os.listdir(root)
+            if os.path.isfile(os.path.join(root, ui) and ui.endswith(".ui"))
+        ]
+
+    ProcessPoolExecutor = None
+    if workers != 1:
+        try:
+            from concurrent.futures import ProcessPoolExecutor  # __IGNORE_WARNING__
+        except NotImplementedError:
+            workers = 1
+
+    if workers != 1 and ProcessPoolExecutor is not None:
+        # If workers == 0, let ProcessPoolExecutor determine worker count.
+        workers = workers or None
+        with ProcessPoolExecutor(max_workers=workers) as executor:
+            executor.map(
+                partial(
+                    __compileOneUi, mapFunc=mapFunc, execute=execute, indent=indent
+                ),
+                ui_files,
+            )
+    else:
+        for ui_file in ui_files:
+            __compileOneUi(ui_file, mapFunc=mapFunc, execute=execute, indent=indent)
+
+
 def compileUiFiles():
     """
     Compile the .ui files to Python sources.
     """
     if os.path.exists("src"):
         # eric7 with 'src' layout
-        compileUiDir(os.path.join("src", "eric7"), recurse=True, map=__pyName)
+        compileUiDir(
+            os.path.join("src", "eric7"), recurse=True, mapFunc=__pyName, workers=0
+        )
     elif os.path.exists("eric7"):
         # old layout or invoked from within 'src'
-        compileUiDir("eric7", recurse=True, map=__pyName)
+        compileUiDir("eric7", recurse=True, mapFunc=__pyName, workers=0)
     else:
         print("No valid 'eric7' source layout could be found. Aborting...")
 
--- a/scripts/install.py	Sat Apr 15 18:22:09 2023 +0200
+++ b/scripts/install.py	Mon Apr 24 17:51:11 2023 +0200
@@ -29,6 +29,8 @@
 import sysconfig
 import time
 
+from functools import partial
+
 # Define the globals.
 progName = None
 currDir = os.getcwd()
@@ -1923,13 +1925,80 @@
     return py_dir, "Ui_{0}".format(py_file)
 
 
-def compileUiFiles():
+def __compileOneUi(ui_path, mapFunc=None):
+    """
+    Function to compile a single form file to Python code.
+
+    @param ui_path path of the Qt form file
+    @type str
+    @param mapFunc function to change directory and/or name of the resulting Python file
+        (defaults to None)
+    @type func (optional)
     """
-    Compile the .ui files to Python sources.
+    from PyQt6.uic import compileUi
+
+    py_dir, py_file = os.path.split(ui_path[:-3] + ".py")
+
+    # Allow the caller to change the name of the .py file or generate
+    # it in a different directory.
+    if mapFunc is not None:
+        py_dir, py_file = mapFunc(py_dir, py_file)
+
+    # Make sure the destination directory exists.
+    os.makedirs(py_dir, exist_ok=True)
+
+    py_path = os.path.join(py_dir, py_file)
+
+    with open(py_path, "w", encoding="utf-8") as py_file:
+        compileUi(ui_path, py_file, execute=False, indent=4)
+
+
+def compileUiDir(root, recurse=False, mapFunc=None, workers=1):
     """
-    from PyQt6.uic import compileUiDir
+    Function to compile all Qt form files of a directory or directory tree
+    to Python code.
 
-    compileUiDir(eric7SourceDir, True, __pyName)
+    @param root directory to scan for Qt form files (i.e. files ending with '.ui'
+    @type str
+    @param recurse flag indicating to recurse into sub-directories (defaults to False)
+    @type bool (optional)
+    @param mapFunc function to change directory and/or name of the resulting Python file
+        (defaults to None)
+    @type func (optional)
+    @param workers number of worker processes to be used to compile (defaults to 1)
+    @type int (optional)
+    """
+    if recurse:
+        ui_files = []
+        for rootDir, _, files in os.walk(root):
+            ui_files.extend(
+                os.path.join(rootDir, ui) for ui in files if ui.endswith(".ui")
+            )
+    else:
+        ui_files = [
+            os.path.join(root, ui)
+            for ui in os.listdir(root)
+            if os.path.isfile(os.path.join(root, ui) and ui.endswith(".ui"))
+        ]
+
+    ProcessPoolExecutor = None
+    if workers != 1:
+        try:
+            from concurrent.futures import ProcessPoolExecutor  # __IGNORE_WARNING__
+        except NotImplementedError:
+            workers = 1
+
+    if workers != 1 and ProcessPoolExecutor is not None:
+        # If workers == 0, let ProcessPoolExecutor determine worker count.
+        workers = workers or None
+        with ProcessPoolExecutor(max_workers=workers) as executor:
+            executor.map(
+                partial(__compileOneUi, mapFunc=mapFunc),
+                ui_files,
+            )
+    else:
+        for ui_file in ui_files:
+            __compileOneUi(ui_file, mapFunc=mapFunc)
 
 
 def prepareInfoFile(fileName):
@@ -2274,7 +2343,7 @@
         for file in [f for f in files if fnmatch.fnmatch(f, "Ui_*.py")]:
             os.remove(os.path.join(root, file))
     # step 2: compile the forms
-    compileUiFiles()
+    compileUiDir(eric7SourceDir, recurse=True, mapFunc=__pyName, workers=0)
     print(" Done")
 
     if doCompile:
--- a/src/eric7/APIs/Python3/eric7.api	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/APIs/Python3/eric7.api	Mon Apr 24 17:51:11 2023 +0200
@@ -12545,7 +12545,7 @@
 eric7.WebBrowser.SpellCheck.ManageDictionariesDialog.ManageDictionariesDialog.on_dictionariesList_itemSelectionChanged?4()
 eric7.WebBrowser.SpellCheck.ManageDictionariesDialog.ManageDictionariesDialog.on_dictionariesUrlEditButton_toggled?4(checked)
 eric7.WebBrowser.SpellCheck.ManageDictionariesDialog.ManageDictionariesDialog.on_locationComboBox_currentTextChanged?4(txt)
-eric7.WebBrowser.SpellCheck.ManageDictionariesDialog.ManageDictionariesDialog?1(writeableDirectories, parent=None)
+eric7.WebBrowser.SpellCheck.ManageDictionariesDialog.ManageDictionariesDialog?1(writeableDirectories, enforceUnencryptedDownloads=False, parent=None, )
 eric7.WebBrowser.StatusBar.ImagesIcon.ImagesIcon.preferencesChanged?4()
 eric7.WebBrowser.StatusBar.ImagesIcon.ImagesIcon?1(window)
 eric7.WebBrowser.StatusBar.JavaScriptIcon.JavaScriptIcon.preferencesChanged?4()
Binary file src/eric7/Documentation/Help/source.qch has changed
--- a/src/eric7/Documentation/Source/eric7.WebBrowser.SpellCheck.ManageDictionariesDialog.html	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/Documentation/Source/eric7.WebBrowser.SpellCheck.ManageDictionariesDialog.html	Mon Apr 24 17:51:11 2023 +0200
@@ -131,7 +131,7 @@
 
 <a NAME="ManageDictionariesDialog.__init__" ID="ManageDictionariesDialog.__init__"></a>
 <h4>ManageDictionariesDialog (Constructor)</h4>
-<b>ManageDictionariesDialog</b>(<i>writeableDirectories, parent=None</i>)
+<b>ManageDictionariesDialog</b>(<i>writeableDirectories, enforceUnencryptedDownloads=False, parent=None, </i>)
 
 <p>
         Constructor
@@ -142,9 +142,14 @@
 <dd>
 list of writable directories
 </dd>
-<dt><i>parent</i> (QWidget)</dt>
+<dt><i>enforceUnencryptedDownloads</i> (bool (optional))</dt>
 <dd>
-reference to the parent widget
+flag indicating to perform unencrypted
+            downloads (defaults to False)
+</dd>
+<dt><i>parent</i> (QWidget (optional))</dt>
+<dd>
+reference to the parent widget (defaults to None)
 </dd>
 </dl>
 <a NAME="ManageDictionariesDialog.__checkInstalledDictionaries" ID="ManageDictionariesDialog.__checkInstalledDictionaries"></a>
--- a/src/eric7/PluginManager/PluginManager.py	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/PluginManager/PluginManager.py	Mon Apr 24 17:51:11 2023 +0200
@@ -1280,6 +1280,8 @@
 
         if url is None:
             url = Preferences.getUI("PluginRepositoryUrl7")
+            if Preferences.getPluginManager("ForceHttpPluginDownload"):
+                url = url.replace("https://", "http://")
         request = QNetworkRequest(QUrl(url))
         request.setAttribute(
             QNetworkRequest.Attribute.CacheLoadControlAttribute,
--- a/src/eric7/PluginManager/PluginRepositoryDialog.py	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/PluginManager/PluginRepositoryDialog.py	Mon Apr 24 17:51:11 2023 +0200
@@ -337,7 +337,11 @@
         @rtype str
         """
         if not newScheme:
-            newScheme = self.repositoryUrlEdit.text().split("//", 1)[0]
+            newScheme = (
+                "http:"
+                if Preferences.getPluginManager("ForceHttpPluginDownload")
+                else self.repositoryUrlEdit.text().split("//", 1)[0]
+            )
 
         return newScheme + "//" + url.split("//", 1)[1]
 
@@ -418,6 +422,8 @@
         Private slot to download a new list and display the contents.
         """
         url = self.repositoryUrlEdit.text()
+        if Preferences.getPluginManager("ForceHttpPluginDownload"):
+            url = url.replace("https://", "http://")
         self.__pluginManager.downLoadRepositoryFile(url=url)
 
     def __downloadRepositoryFileDone(self, status, filename):
@@ -469,7 +475,11 @@
         self.__downloadInstallButton.setEnabled(False)
         self.__installButton.setEnabled(False)
 
-        newScheme = self.repositoryUrlEdit.text().split("//", 1)[0]
+        newScheme = (
+            "http:"
+            if Preferences.getPluginManager("ForceHttpPluginDownload")
+            else self.repositoryUrlEdit.text().split("//", 1)[0]
+        )
         for itm in self.repositoryList.selectedItems():
             if itm not in [
                 self.__stableItem,
@@ -606,6 +616,9 @@
                 self.__closeButton.setEnabled(False)
             self.__downloadCancelButton.setEnabled(True)
 
+            if Preferences.getPluginManager("ForceHttpPluginDownload"):
+                url = url.replace("https://", "http://")
+
             self.statusLabel.setText(url)
 
             request = QNetworkRequest(QUrl(url))
--- a/src/eric7/Preferences/ConfigurationPages/PluginManagerPage.py	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/Preferences/ConfigurationPages/PluginManagerPage.py	Mon Apr 24 17:51:11 2023 +0200
@@ -43,6 +43,9 @@
         self.startupCleanupCheckBox.setChecked(
             Preferences.getPluginManager("StartupCleanup")
         )
+        self.unencryptedCheckBox.setChecked(
+            Preferences.getPluginManager("ForceHttpPluginDownload")
+        )
 
         period = Preferences.getPluginManager("UpdatesCheckInterval")
         if period == 0:
@@ -83,6 +86,9 @@
         Preferences.setPluginManager(
             "StartupCleanup", self.startupCleanupCheckBox.isChecked()
         )
+        Preferences.setPluginManager(
+            "ForceHttpPluginDownload", self.unencryptedCheckBox.isChecked()
+        )
 
         if self.noCheckRadioButton.isChecked():
             period = 0
--- a/src/eric7/Preferences/ConfigurationPages/PluginManagerPage.ui	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/Preferences/ConfigurationPages/PluginManagerPage.ui	Mon Apr 24 17:51:11 2023 +0200
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>528</width>
-    <height>520</height>
+    <height>608</height>
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout_3">
@@ -125,6 +125,16 @@
     </widget>
    </item>
    <item>
+    <widget class="QCheckBox" name="unencryptedCheckBox">
+     <property name="toolTip">
+      <string>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</string>
+     </property>
+     <property name="text">
+      <string>Enforce unencrypted downloads</string>
+     </property>
+    </widget>
+   </item>
+   <item>
     <widget class="QLabel" name="TextLabel1_2_2_2_3">
      <property name="text">
       <string>&lt;font color=&quot;#FF0000&quot;&gt;&lt;b&gt;Note:&lt;/b&gt; The following settings are activated at the next startup of the application.&lt;/font&gt;</string>
@@ -291,6 +301,7 @@
   <tabstop>generationsSpinBox</tabstop>
   <tabstop>keepHiddenCheckBox</tabstop>
   <tabstop>startupCleanupCheckBox</tabstop>
+  <tabstop>unencryptedCheckBox</tabstop>
   <tabstop>activateExternalPluginsCheckBox</tabstop>
   <tabstop>noCheckRadioButton</tabstop>
   <tabstop>alwaysCheckRadioButton</tabstop>
@@ -300,6 +311,7 @@
   <tabstop>downloadedOnlyCheckBox</tabstop>
   <tabstop>repositoryUrlEdit</tabstop>
   <tabstop>repositoryUrlEditButton</tabstop>
+  <tabstop>autoInstallCheckBox</tabstop>
  </tabstops>
  <resources/>
  <connections/>
--- a/src/eric7/Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.py	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.py	Mon Apr 24 17:51:11 2023 +0200
@@ -40,6 +40,9 @@
             Preferences.getWebBrowser("SpellCheckEnabled")
         )
         self.on_spellCheckEnabledCheckBox_clicked()
+        self.unencryptedCheckBox.setChecked(
+            Preferences.getWebBrowser("ForceHttpDictionaryDownload")
+        )
 
         if OSUtilities.isMacPlatform():
             self.__dictionaryDirectories = {
@@ -140,6 +143,9 @@
         Preferences.setWebBrowser(
             "SpellCheckEnabled", self.spellCheckEnabledCheckBox.isChecked()
         )
+        Preferences.setWebBrowser(
+            "ForceHttpDictionaryDownload", self.unencryptedCheckBox.isChecked()
+        )
         Preferences.setWebBrowser("SpellCheckLanguages", languages)
 
     @pyqtSlot()
@@ -179,7 +185,10 @@
             ManageDictionariesDialog,
         )
 
-        dlg = ManageDictionariesDialog(self.__writeableDirectories, self)
+        dlg = ManageDictionariesDialog(
+            self.__writeableDirectories,
+            enforceUnencryptedDownloads=self.unencryptedCheckBox.isChecked(),
+            parent=self)
         dlg.exec()
 
         self.__populateDictionariesList()
--- a/src/eric7/Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui	Mon Apr 24 17:51:11 2023 +0200
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>499</width>
-    <height>519</height>
+    <height>608</height>
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout_3">
@@ -102,6 +102,16 @@
     </widget>
    </item>
    <item>
+    <widget class="QCheckBox" name="unencryptedCheckBox">
+     <property name="toolTip">
+      <string>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</string>
+     </property>
+     <property name="text">
+      <string>Enforce unencrypted downloads</string>
+     </property>
+    </widget>
+   </item>
+   <item>
     <layout class="QHBoxLayout" name="horizontalLayout">
      <item>
       <spacer name="horizontalSpacer">
@@ -160,6 +170,8 @@
   <tabstop>spellCheckEnabledCheckBox</tabstop>
   <tabstop>spellCheckLanguagesList</tabstop>
   <tabstop>spellCheckDictionaryDirectoriesEdit</tabstop>
+  <tabstop>unencryptedCheckBox</tabstop>
+  <tabstop>manageDictionariesButton</tabstop>
  </tabstops>
  <resources/>
  <connections/>
--- a/src/eric7/Preferences/__init__.py	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/Preferences/__init__.py	Mon Apr 24 17:51:11 2023 +0200
@@ -1098,6 +1098,7 @@
             "https://eric-ide.python-projects.org/qwebengine_dictionaries/"
             "dictionaries.xml"
         ),
+        "ForceHttpDictionaryDownload": False,
         # Sync
         "SyncEnabled": False,
         "SyncBookmarks": True,
@@ -1424,6 +1425,7 @@
         "KeepHidden": False,
         "StartupCleanup": True,
         "AutoInstallDependencies": True,
+        "ForceHttpPluginDownload": False,
     }
 
     # defaults for the printer settings
@@ -3117,6 +3119,7 @@
         "PrintElementBackgrounds",
         "AllowRunningInsecureContent",
         "SpellCheckEnabled",
+        "ForceHttpDictionaryDownload",
         "ShowToolbars",
         "MenuBarVisible",
         "BookmarksToolBarVisible",
--- a/src/eric7/Project/CreateDialogCodeDialog.py	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/Project/CreateDialogCodeDialog.py	Mon Apr 24 17:51:11 2023 +0200
@@ -35,10 +35,9 @@
 
 pyqtSignatureRole = Qt.ItemDataRole.UserRole + 1
 pythonSignatureRole = Qt.ItemDataRole.UserRole + 2
-rubySignatureRole = Qt.ItemDataRole.UserRole + 3
-returnTypeRole = Qt.ItemDataRole.UserRole + 4
-parameterTypesListRole = Qt.ItemDataRole.UserRole + 5
-parameterNamesListRole = Qt.ItemDataRole.UserRole + 6
+returnTypeRole = Qt.ItemDataRole.UserRole + 3
+parameterTypesListRole = Qt.ItemDataRole.UserRole + 4
+parameterNamesListRole = Qt.ItemDataRole.UserRole + 5
 
 
 class CreateDialogCodeDialog(QDialog, Ui_CreateDialogCodeDialog):
@@ -218,11 +217,20 @@
         if started and finished:
             output = proc.readAllStandardError()
             outText = str(output, "utf-8", "replace")
-            if "@@eric_start@@" in outText and "@@eric_end@@" in outText:
+            if "@@eric_start@@" in outText:
+                # it is something we sent via UicLoadUi[56].py
+                outText = outText.split("@@eric_start@@")[1]
+                ok = True
+            elif "@@eric_error@@" in outText:
                 # it is something we sent via UicLoadUi[56].py
-                outText = outText.split("@@eric_start@@")[1].split("@@eric_end@@")[0]
-            if proc.exitCode() == 0:
-                ok = True
+                outText = outText.split("@@eric_error@@")[1]
+                ok = False
+            else:
+                ok = False
+            if "@@eric_end@@" in outText:
+                # it is something we sent via UicLoadUi[56].py
+                outText = outText.split("@@eric_end@@")[0]
+            if ok:
                 uicText = outText.strip()
             else:
                 EricMessageBox.critical(
@@ -395,20 +403,6 @@
 
     def __generateCode(self):
         """
-        Private slot to generate the code as requested by the user.
-        """
-        if (
-            self.filenameEdit.text().endswith(".rb")
-            or self.project.getProjectLanguage() == "Ruby"
-        ):
-            # Ruby code generation is not supported
-            pass
-        else:
-            # assume Python (our global default)
-            self.__generatePythonCode()
-
-    def __generatePythonCode(self):
-        """
         Private slot to generate Python code as requested by the user.
         """
         if self.project.getProjectLanguage() != "Python3":
--- a/src/eric7/Project/ProjectFormsBrowser.py	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/Project/ProjectFormsBrowser.py	Mon Apr 24 17:51:11 2023 +0200
@@ -930,9 +930,6 @@
                             self.project.getProjectData(dataKey="UICPARAMS")["RcSuffix"]
                         )
                     )
-        elif self.project.getProjectLanguage() == "Ruby":
-            self.compiledFile = ofn + ".rb"
-            args.append("-x")
 
         args.append(fn)
         self.compileProc.finished.connect(self.__compileUIDone)
@@ -1116,8 +1113,6 @@
                     if self.project.getProjectLanguage() == "Python3":
                         dirname, filename = os.path.split(os.path.splitext(ifn)[0])
                         ofn = os.path.join(dirname, "Ui_" + filename + ".py")
-                    elif self.project.getProjectLanguage() == "Ruby":
-                        ofn = os.path.splitext(ifn)[0] + ".rb"
                     if (
                         not os.path.exists(ofn)
                         or os.stat(ifn).st_mtime > os.stat(ofn).st_mtime
--- a/src/eric7/Project/ProjectResourcesBrowser.py	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/Project/ProjectResourcesBrowser.py	Mon Apr 24 17:51:11 2023 +0200
@@ -47,7 +47,6 @@
     showMenu = pyqtSignal(str, QMenu)
 
     RCFilenameFormatPython = "{0}_rc.py"
-    RCFilenameFormatRuby = "{0}_rc.rb"
 
     def __init__(self, project, projectBrowser, parent=None):
         """
@@ -775,10 +774,6 @@
             self.compiledFile = os.path.join(
                 dirname, self.RCFilenameFormatPython.format(filename)
             )
-        elif self.project.getProjectLanguage() == "Ruby":
-            self.compiledFile = os.path.join(
-                dirname, self.RCFilenameFormatRuby.format(filename)
-            )
 
         args.append(fn)
         self.compileProc.finished.connect(self.__compileQRCDone)
@@ -964,11 +959,6 @@
                         ofn = os.path.join(
                             dirname, self.RCFilenameFormatPython.format(filename)
                         )
-                    elif self.project.getProjectLanguage() == "Ruby":
-                        dirname, filename = os.path.split(os.path.splitext(ifn)[0])
-                        ofn = os.path.join(
-                            dirname, self.RCFilenameFormatRuby.format(filename)
-                        )
                     else:
                         return
                     if (
--- a/src/eric7/Project/ProjectTranslationsBrowser.py	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/Project/ProjectTranslationsBrowser.py	Mon Apr 24 17:51:11 2023 +0200
@@ -1188,14 +1188,7 @@
                     self.hooks["generateSelectedWithObsolete"](li)
                     return
 
-        # generate a minimal temporary project file suitable for pylupdate
-        self.__tmpProjects = []
-        if self.project.getProjectLanguage() in ["Python", "Python3"]:
-            if self.project.getProjectType() not in ["PyQt6", "PyQt6C", "E7Plugin"]:
-                ok = self.__writeTempProjectFile(langs, [".py"])
-                if not ok:
-                    return
-        else:
+        if self.project.getProjectLanguage() not in ["Python", "Python3"]:
             return
 
         if self.project.getProjectType() in ["PyQt5", "PyQt5C"]:
@@ -1297,6 +1290,12 @@
                             ).format(self.pylupdate),
                         )
         else:
+            # generate a minimal temporary project file suitable for pylupdate
+            self.__tmpProjects = []
+            ok = self.__writeTempProjectFile(langs, [".py"])
+            if not ok:
+                return
+
             QGuiApplication.setOverrideCursor(QCursor(Qt.CursorShape.WaitCursor))
             QGuiApplication.processEvents(
                 QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents
--- a/src/eric7/Project/UicLoadUi5.py	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/Project/UicLoadUi5.py	Mon Apr 24 17:51:11 2023 +0200
@@ -15,7 +15,7 @@
 
 def _printout(dataString):
     """
-    Function to print the given string to sys.stdout with a guard string.
+    Function to print the given string as output to sys.stderr with a guard string.
 
     @param dataString string to be printed
     @type str
@@ -23,6 +23,16 @@
     print("@@eric_start@@{0}@@eric_end@@".format(dataString), file=sys.stderr)
 
 
+def _printerr(dataString):
+    """
+    Function to print the given string as error to sys.stdoerr with a guard string.
+
+    @param dataString string to be printed
+    @type str
+    """
+    print("@@eric_error@@{0}@@eric_end@@".format(dataString), file=sys.stderr)
+
+
 try:
     from PyQt5 import uic
     from PyQt5.QtCore import QByteArray, QMetaMethod
@@ -31,7 +41,7 @@
     _printout("PyQt5 could not be found.")
     sys.exit(1)
 except ImportError as err:
-    _printout("PyQt5 could not be imported. Issue: {0}".format(str(err)))
+    _printerr("PyQt5 could not be imported. Issue: {0}".format(str(err)))
     sys.exit(1)
 
 with contextlib.suppress(ImportError):
@@ -55,7 +65,7 @@
         _printout(dlg.objectName())
         sys.exit(0)
     except (AttributeError, ImportError, xml.etree.ElementTree.ParseError) as err:
-        _printout(str(err))
+        _printerr(str(err))
         sys.exit(1)
 
 
@@ -76,7 +86,7 @@
         _printout(dlg.metaObject().className())
         sys.exit(0)
     except (AttributeError, ImportError, xml.etree.ElementTree.ParseError) as err:
-        _printout(str(err))
+        _printerr(str(err))
         sys.exit(1)
 
 
@@ -204,13 +214,13 @@
         _printout(json.dumps(objectsList))
         sys.exit(0)
     except (AttributeError, ImportError, xml.etree.ElementTree.ParseError) as err:
-        _printout(str(err))
+        _printerr(str(err))
         sys.exit(1)
 
 
 if __name__ == "__main__":
     if len(sys.argv) != 4:
-        _printout("Wrong number of arguments.")
+        _printerr("Wrong number of arguments.")
         sys.exit(1)
 
     if sys.argv[1] == "object_name":
@@ -220,7 +230,7 @@
     elif sys.argv[1] == "signatures":
         signatures(sys.argv[2], sys.argv[3])
     else:
-        _printout("Unknow operation given.")
+        _printerr("Unknow operation given.")
         sys.exit(1)
 
 #
--- a/src/eric7/Project/UicLoadUi6.py	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/Project/UicLoadUi6.py	Mon Apr 24 17:51:11 2023 +0200
@@ -16,7 +16,7 @@
 
 def _printout(dataString):
     """
-    Function to print the given string to sys.stdout with a guard string.
+    Function to print the given string as output to sys.stderr with a guard string.
 
     @param dataString string to be printed
     @type str
@@ -24,6 +24,16 @@
     print("@@eric_start@@{0}@@eric_end@@".format(dataString), file=sys.stderr)
 
 
+def _printerr(dataString):
+    """
+    Function to print the given string as error to sys.stdoerr with a guard string.
+
+    @param dataString string to be printed
+    @type str
+    """
+    print("@@eric_error@@{0}@@eric_end@@".format(dataString), file=sys.stderr)
+
+
 try:
     from PyQt6 import uic
     from PyQt6.QtCore import QByteArray, QMetaMethod
@@ -33,7 +43,7 @@
     _printout("PyQt6 could not be found.")
     sys.exit(1)
 except ImportError as err:
-    _printout("PyQt6 could not be imported. Issue: {0}".format(str(err)))
+    _printerr("PyQt6 could not be imported. Issue: {0}".format(str(err)))
     sys.exit(1)
 
 with contextlib.suppress(ImportError):
@@ -60,7 +70,7 @@
         _printout(dlg.objectName())
         sys.exit(0)
     except (AttributeError, ImportError, xml.etree.ElementTree.ParseError) as err:
-        _printout(str(err))
+        _printerr(str(err))
         sys.exit(1)
 
 
@@ -81,7 +91,7 @@
         _printout(dlg.metaObject().className())
         sys.exit(0)
     except (AttributeError, ImportError, xml.etree.ElementTree.ParseError) as err:
-        _printout(str(err))
+        _printerr(str(err))
         sys.exit(1)
 
 
@@ -209,13 +219,13 @@
         _printout(json.dumps(objectsList))
         sys.exit(0)
     except (AttributeError, ImportError, xml.etree.ElementTree.ParseError) as err:
-        _printout(str(err))
+        _printerr(str(err))
         sys.exit(1)
 
 
 if __name__ == "__main__":
     if len(sys.argv) != 4:
-        _printout("Wrong number of arguments.")
+        _printerr("Wrong number of arguments.")
         sys.exit(1)
 
     if sys.argv[1] == "object_name":
@@ -225,7 +235,7 @@
     elif sys.argv[1] == "signatures":
         signatures(sys.argv[2], sys.argv[3])
     else:
-        _printout("Unknow operation given.")
+        _printerr("Unknow operation given.")
         sys.exit(1)
 
 #
--- a/src/eric7/QScintilla/SearchReplaceWidget.py	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/QScintilla/SearchReplaceWidget.py	Mon Apr 24 17:51:11 2023 +0200
@@ -1464,9 +1464,7 @@
         self.__searchReplaceWidget.setMaximumHeight(
             self.__searchReplaceWidget.sizeHint().height()
         )
-
         self.setMaximumHeight(self.__searchReplaceWidget.sizeHint().height())
-        self.adjustSize()
 
         self.__enableScrollerButtons()
 
--- a/src/eric7/WebBrowser/SpellCheck/ManageDictionariesDialog.py	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/WebBrowser/SpellCheck/ManageDictionariesDialog.py	Mon Apr 24 17:51:11 2023 +0200
@@ -36,18 +36,28 @@
     DocumentationDirRole = Qt.ItemDataRole.UserRole + 2
     LocalesRole = Qt.ItemDataRole.UserRole + 3
 
-    def __init__(self, writeableDirectories, parent=None):
+    def __init__(
+        self,
+        writeableDirectories,
+        enforceUnencryptedDownloads=False,
+        parent=None,
+    ):
         """
         Constructor
 
         @param writeableDirectories list of writable directories
         @type list of str
-        @param parent reference to the parent widget
-        @type QWidget
+        @param enforceUnencryptedDownloads flag indicating to perform unencrypted
+            downloads (defaults to False)
+        @type bool (optional)
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
         """
         super().__init__(parent)
         self.setupUi(self)
 
+        self.__enforceUnencryptedDownloads = enforceUnencryptedDownloads
+
         self.__refreshButton = self.buttonBox.addButton(
             self.tr("Refresh"), QDialogButtonBox.ButtonRole.ActionRole
         )
@@ -176,6 +186,11 @@
         self.downloadProgress.setValue(0)
 
         url = self.dictionariesUrlEdit.text()
+        if (
+            self.__enforceUnencryptedDownloads
+            or Preferences.getWebBrowser("ForceHttpDictionaryDownload")
+        ):
+            url = url.replace("https://", "http://")
 
         if self.__online:
             self.__refreshButton.setEnabled(False)
@@ -371,6 +386,11 @@
         if self.__online:
             if self.__dictionariesToDownload:
                 url = self.__dictionariesToDownload.pop(0)
+                if (
+                    self.__enforceUnencryptedDownloads
+                    or Preferences.getWebBrowser("ForceHttpDictionaryDownload")
+                ):
+                    url = url.replace("https://", "http://")
                 self.statusLabel.setText(url)
 
                 self.__downloadCancelled = False
--- a/src/eric7/i18n/eric7_cs.ts	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/i18n/eric7_cs.ts	Mon Apr 24 17:51:11 2023 +0200
@@ -49392,71 +49392,71 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="202" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="204" />
       <source>Error populating list of dictionaries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="231" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="203" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="233" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="205" />
       <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="206" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="400" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="208" />
       <source>No connection to Internet.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="230" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="232" />
       <source>Error downloading dictionaries list</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="251" />
       <source>Dictionaries URL Changed</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="250" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="252" />
       <source>The URL of the spell check dictionaries has changed. Select the "Refresh" button to get the new dictionaries list.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="263" />
       <source>Error installing dictionaries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="262" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="264" />
       <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="311" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="313" />
       <source>{0} ({1})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="416" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="392" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="420" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
       <source>Error downloading dictionary file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="417" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="393" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="421" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="397" />
       <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="431" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="435" />
       <source>Error downloading dictionary</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="432" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="436" />
       <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -57925,12 +57925,12 @@
       <translation>&lt;p&gt;Download plugin adresář &lt;b&gt;{0}&lt;/b&gt; se nepodařilo vytvořit. Prosím, upravte nastavení přes konfigurační dialog.&lt;/p&gt;&lt;p&gt;Důvod: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1305" />
+      <location filename="../PluginManager/PluginManager.py" line="1307" />
       <source>Error downloading file</source>
       <translation type="unfinished">Chyba při stahování souboru</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1306" />
+      <location filename="../PluginManager/PluginManager.py" line="1308" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished">&lt;p&gt;Nelze stáhnout požadovaný soubor z {0}.&lt;/p&gt;&lt;p&gt;Chyba: {1}&lt;/p&gt;</translation>
     </message>
@@ -57989,6 +57989,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
       <source>&lt;font color="#FF0000"&gt;&lt;b&gt;Note:&lt;/b&gt; The following settings are activated at the next startup of the application.&lt;/font&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -58326,76 +58336,76 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="657" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="625" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="660" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="628" />
       <source>Error downloading file</source>
       <translation>Chyba při stahování souboru</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="658" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="626" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="661" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Nelze stáhnout požadovaný soubor z {0}.&lt;/p&gt;&lt;p&gt;Chyba: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="632" />
       <source>No connection to Internet.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="739" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="742" />
       <source>Stable</source>
       <translation>Stabilní</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="746" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="749" />
       <source>Unstable</source>
       <translation>Nestabilní</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="753" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="756" />
       <source>Obsolete</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="760" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="763" />
       <source>Unknown</source>
       <translation>Neznámý</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="783" />
-      <source>up-to-date</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PluginManager/PluginRepositoryDialog.py" line="786" />
+      <source>up-to-date</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="789" />
       <source>new download available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="790" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="793" />
       <source>update installable</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="794" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="797" />
       <source>updated download available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="798" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="801" />
       <source>error determining status</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1168" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1140" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1171" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
       <source>Cleanup of Plugin Downloads</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1172" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1175" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1146" />
       <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -58403,17 +58413,17 @@
   <context>
     <name>PluginRepositoryWindow</name>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1045" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1048" />
       <source>Process Generation Error</source>
       <translation>Chyba v procesu generování</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1046" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1049" />
       <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Nemohu spustit zveřejnění.&lt;br&gt;Ověřte jestli je dostupný jako &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1050" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1053" />
       <source>OK</source>
       <translation>OK</translation>
     </message>
@@ -58760,18 +58770,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1813" />
+      <location filename="../Preferences/__init__.py" line="1815" />
       <source>Export Preferences</source>
       <translation>Předvolby exportu</translation>
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1844" />
+      <location filename="../Preferences/__init__.py" line="1817" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1842" />
-      <location filename="../Preferences/__init__.py" line="1815" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1840" />
       <source>Import Preferences</source>
       <translation>Předvolby importu</translation>
     </message>
@@ -97429,6 +97439,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
       <source>Press to open a dialog to manage spell checking dictionaries</source>
       <translation type="unfinished" />
     </message>
Binary file src/eric7/i18n/eric7_de.qm has changed
--- a/src/eric7/i18n/eric7_de.ts	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/i18n/eric7_de.ts	Mon Apr 24 17:51:11 2023 +0200
@@ -49270,71 +49270,71 @@
       <translation>Interneterreichbarkeitsstatus: nicht erreichbar</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="202" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="204" />
       <source>Error populating list of dictionaries</source>
       <translation>Fehler beim Laden der Wörterbuchliste</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="231" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="203" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="233" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="205" />
       <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Wörterbuchliste konnte nicht von {0} heruntergeladen werden.&lt;/p&gt;&lt;p&gt;Fehler: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="206" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="400" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="208" />
       <source>No connection to Internet.</source>
       <translation>Keine Verbindung zum Internet.</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="230" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="232" />
       <source>Error downloading dictionaries list</source>
       <translation>Fehler beim Herunterladen der Wörterbuchliste</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="251" />
       <source>Dictionaries URL Changed</source>
       <translation>URL der Wörterbücher geändert</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="250" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="252" />
       <source>The URL of the spell check dictionaries has changed. Select the "Refresh" button to get the new dictionaries list.</source>
       <translation>Die URL für die Rechtschreibwörterbücher hat sich geändert. Wählen Sie den „Aktualisieren“-Knopf, um die neue Liste zu erhalten.</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="263" />
       <source>Error installing dictionaries</source>
       <translation>Fehler beid er Installation von Wörterbücher</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="262" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="264" />
       <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Keines der Wörterbuchverzeichnisse ist durch sie veränderbar. Bitte laden sie die benötigten Wörterbücher manuell herunter und installieren sie sie als Administrator.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="311" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="313" />
       <source>{0} ({1})</source>
       <translation>{0} ({1})</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="416" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="392" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="420" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
       <source>Error downloading dictionary file</source>
       <translation>Fehler beim Herunterladen der Wörterbuchdatei</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="417" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="393" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="421" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="397" />
       <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die angefragte Wörterbuchdatei konnte nicht von {0} heruntergeladen werden.&lt;/p&gt;&lt;p&gt;Fehler: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="431" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="435" />
       <source>Error downloading dictionary</source>
       <translation>Fehler beim Herunterladen der Wörterbuchdatei</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="432" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="436" />
       <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Das heruntergeladene Wörterbucharchiv ist fehlerhaft. Überspringe es.&lt;/p&gt;</translation>
     </message>
@@ -57807,12 +57807,12 @@
       <translation>&lt;p&gt;Das Downloadverzeichnis für Plugins &lt;b&gt;{0}&lt;/b&gt; konnte nicht erzeugt werden. Bitte über den Konfigurationsdialog einstellen.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1305" />
+      <location filename="../PluginManager/PluginManager.py" line="1307" />
       <source>Error downloading file</source>
       <translation>Fehler beim Herunterladen der Datei</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1306" />
+      <location filename="../PluginManager/PluginManager.py" line="1308" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die angefragte Datei konnte nicht von {0} gedownloaded werden.&lt;/p&gt;&lt;p&gt;Fehler: {1}&lt;/p&gt;</translation>
     </message>
@@ -57871,6 +57871,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Auswählen, um die Verwendung von &lt;b&gt;http://&lt;/b&gt; anstelle &lt;b&gt;https://&lt;/b&gt; zu erzwingen.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation>Unverschlüsselte Downloads erzwingen</translation>
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
       <source>&lt;font color="#FF0000"&gt;&lt;b&gt;Note:&lt;/b&gt; The following settings are activated at the next startup of the application.&lt;/font&gt;</source>
       <translation>&lt;font color="#FF0000"&gt;&lt;b&gt;Hinweis:&lt;/b&gt; Alle folgenden Einstellungen werden erst beim nächsten Programmstart aktiv.&lt;/font&gt;</translation>
     </message>
@@ -58208,76 +58218,76 @@
       <translation>Entfernte Aktualisierungen: &lt;b&gt;{0}&lt;/b&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="657" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="625" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="660" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="628" />
       <source>Error downloading file</source>
       <translation>Fehler beim Herunterladen der Datei</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="658" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="626" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="661" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die angefragte Datei konnte nicht von {0} gedownloaded werden.&lt;/p&gt;&lt;p&gt;Fehler: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="632" />
       <source>No connection to Internet.</source>
       <translation>Keine Verbindung zum Internet.</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="739" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="742" />
       <source>Stable</source>
       <translation>Stabil</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="746" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="749" />
       <source>Unstable</source>
       <translation>Instabil</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="753" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="756" />
       <source>Obsolete</source>
       <translation>Überholt</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="760" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="763" />
       <source>Unknown</source>
       <translation>Unbekannt</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="783" />
-      <source>up-to-date</source>
-      <translation>aktuell</translation>
-    </message>
-    <message>
       <location filename="../PluginManager/PluginRepositoryDialog.py" line="786" />
+      <source>up-to-date</source>
+      <translation>aktuell</translation>
+    </message>
+    <message>
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="789" />
       <source>new download available</source>
       <translation>neuer Download verfügbar</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="790" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="793" />
       <source>update installable</source>
       <translation>Aktualisierung installierbar</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="794" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="797" />
       <source>updated download available</source>
       <translation>aktualisiertes Download verfügbar</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="798" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="801" />
       <source>error determining status</source>
       <translation>Fehler bei der Ermittlung des Status</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1168" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1140" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1171" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
       <source>Cleanup of Plugin Downloads</source>
       <translation>Wartung der Plugin Downloads</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1172" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1175" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1146" />
       <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Plugindatei &lt;b&gt;{0}&lt;/b&gt; konnte nicht gelöscht werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
     </message>
@@ -58285,17 +58295,17 @@
   <context>
     <name>PluginRepositoryWindow</name>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1045" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1048" />
       <source>Process Generation Error</source>
       <translation>Fehler beim Prozessstart</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1046" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1049" />
       <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Der Prozess konnte nicht gestartet werden.&lt;br&gt;Stellen Sie sicher, dass er als &lt;b&gt;{0}&lt;/b&gt; verfügbar ist.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1050" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1053" />
       <source>OK</source>
       <translation>OK</translation>
     </message>
@@ -58642,18 +58652,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1813" />
+      <location filename="../Preferences/__init__.py" line="1815" />
       <source>Export Preferences</source>
       <translation>Einstellungen exportieren</translation>
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1844" />
+      <location filename="../Preferences/__init__.py" line="1817" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation>Properties-Dateien (*.ini);;Alle Dateien (*)</translation>
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1842" />
-      <location filename="../Preferences/__init__.py" line="1815" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation>Properties-Dateien (*.ini);;Alle Dateien (*)</translation>
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1840" />
       <source>Import Preferences</source>
       <translation>Einstellungen importieren</translation>
     </message>
@@ -97227,6 +97237,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Auswählen, um die Verwendung von &lt;b&gt;http://&lt;/b&gt; anstelle &lt;b&gt;https://&lt;/b&gt; zu erzwingen.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation>Unverschlüsselte Downloads erzwingen</translation>
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
       <source>Press to open a dialog to manage spell checking dictionaries</source>
       <translation>Drücken, um einen Dialog zur Verwaltung der Rechtschreibwörterbücher zu öffnen</translation>
     </message>
--- a/src/eric7/i18n/eric7_empty.ts	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/i18n/eric7_empty.ts	Mon Apr 24 17:51:11 2023 +0200
@@ -49034,71 +49034,71 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="202" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="204" />
       <source>Error populating list of dictionaries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="231" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="203" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="233" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="205" />
       <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="206" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="400" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="208" />
       <source>No connection to Internet.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="230" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="232" />
       <source>Error downloading dictionaries list</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="251" />
       <source>Dictionaries URL Changed</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="250" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="252" />
       <source>The URL of the spell check dictionaries has changed. Select the "Refresh" button to get the new dictionaries list.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="263" />
       <source>Error installing dictionaries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="262" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="264" />
       <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="311" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="313" />
       <source>{0} ({1})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="416" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="392" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="420" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
       <source>Error downloading dictionary file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="417" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="393" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="421" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="397" />
       <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="431" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="435" />
       <source>Error downloading dictionary</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="432" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="436" />
       <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -57543,12 +57543,12 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1305" />
+      <location filename="../PluginManager/PluginManager.py" line="1307" />
       <source>Error downloading file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1306" />
+      <location filename="../PluginManager/PluginManager.py" line="1308" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -57607,6 +57607,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
       <source>&lt;font color="#FF0000"&gt;&lt;b&gt;Note:&lt;/b&gt; The following settings are activated at the next startup of the application.&lt;/font&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -57943,76 +57953,76 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="657" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="625" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="660" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="628" />
       <source>Error downloading file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="658" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="626" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="661" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="632" />
       <source>No connection to Internet.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="739" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="742" />
       <source>Stable</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="746" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="749" />
       <source>Unstable</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="753" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="756" />
       <source>Obsolete</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="760" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="763" />
       <source>Unknown</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="783" />
-      <source>up-to-date</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PluginManager/PluginRepositoryDialog.py" line="786" />
+      <source>up-to-date</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="789" />
       <source>new download available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="790" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="793" />
       <source>update installable</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="794" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="797" />
       <source>updated download available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="798" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="801" />
       <source>error determining status</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1168" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1140" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1171" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
       <source>Cleanup of Plugin Downloads</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1172" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1175" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1146" />
       <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -58020,17 +58030,17 @@
   <context>
     <name>PluginRepositoryWindow</name>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1045" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1048" />
       <source>Process Generation Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1046" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1049" />
       <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1050" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1053" />
       <source>OK</source>
       <translation type="unfinished" />
     </message>
@@ -58377,18 +58387,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1813" />
+      <location filename="../Preferences/__init__.py" line="1815" />
       <source>Export Preferences</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1844" />
+      <location filename="../Preferences/__init__.py" line="1817" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1842" />
-      <location filename="../Preferences/__init__.py" line="1815" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1840" />
       <source>Import Preferences</source>
       <translation type="unfinished" />
     </message>
@@ -96564,6 +96574,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
       <source>Press to open a dialog to manage spell checking dictionaries</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_en.ts	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/i18n/eric7_en.ts	Mon Apr 24 17:51:11 2023 +0200
@@ -49076,71 +49076,71 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="202" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="204" />
       <source>Error populating list of dictionaries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="231" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="203" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="233" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="205" />
       <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="206" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="400" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="208" />
       <source>No connection to Internet.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="230" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="232" />
       <source>Error downloading dictionaries list</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="251" />
       <source>Dictionaries URL Changed</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="250" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="252" />
       <source>The URL of the spell check dictionaries has changed. Select the "Refresh" button to get the new dictionaries list.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="263" />
       <source>Error installing dictionaries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="262" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="264" />
       <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="311" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="313" />
       <source>{0} ({1})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="416" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="392" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="420" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
       <source>Error downloading dictionary file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="417" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="393" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="421" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="397" />
       <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="431" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="435" />
       <source>Error downloading dictionary</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="432" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="436" />
       <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -57592,12 +57592,12 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1305" />
+      <location filename="../PluginManager/PluginManager.py" line="1307" />
       <source>Error downloading file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1306" />
+      <location filename="../PluginManager/PluginManager.py" line="1308" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -57656,6 +57656,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
       <source>&lt;font color="#FF0000"&gt;&lt;b&gt;Note:&lt;/b&gt; The following settings are activated at the next startup of the application.&lt;/font&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -57992,76 +58002,76 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="657" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="625" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="660" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="628" />
       <source>Error downloading file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="658" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="626" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="661" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="632" />
       <source>No connection to Internet.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="739" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="742" />
       <source>Stable</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="746" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="749" />
       <source>Unstable</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="753" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="756" />
       <source>Obsolete</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="760" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="763" />
       <source>Unknown</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="783" />
-      <source>up-to-date</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PluginManager/PluginRepositoryDialog.py" line="786" />
+      <source>up-to-date</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="789" />
       <source>new download available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="790" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="793" />
       <source>update installable</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="794" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="797" />
       <source>updated download available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="798" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="801" />
       <source>error determining status</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1168" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1140" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1171" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
       <source>Cleanup of Plugin Downloads</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1172" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1175" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1146" />
       <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -58069,17 +58079,17 @@
   <context>
     <name>PluginRepositoryWindow</name>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1045" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1048" />
       <source>Process Generation Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1046" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1049" />
       <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1050" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1053" />
       <source>OK</source>
       <translation type="unfinished" />
     </message>
@@ -58426,18 +58436,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1813" />
+      <location filename="../Preferences/__init__.py" line="1815" />
       <source>Export Preferences</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1844" />
+      <location filename="../Preferences/__init__.py" line="1817" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1842" />
-      <location filename="../Preferences/__init__.py" line="1815" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1840" />
       <source>Import Preferences</source>
       <translation type="unfinished" />
     </message>
@@ -96620,6 +96630,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
       <source>Press to open a dialog to manage spell checking dictionaries</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_es.ts	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/i18n/eric7_es.ts	Mon Apr 24 17:51:11 2023 +0200
@@ -49289,71 +49289,71 @@
       <translation>Estado de Alcance de Internet: No Alcanzable</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="202" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="204" />
       <source>Error populating list of dictionaries</source>
       <translation>Error populando lista de diccionarios</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="231" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="203" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="233" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="205" />
       <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;No se ha podido descargar la lista de diccionarios desde {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="206" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="400" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="208" />
       <source>No connection to Internet.</source>
       <translation>Sin conexión a Internet.</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="230" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="232" />
       <source>Error downloading dictionaries list</source>
       <translation>Error descargando la lista de diccionarios</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="251" />
       <source>Dictionaries URL Changed</source>
       <translation>URL de Diccionarios Cambiada</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="250" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="252" />
       <source>The URL of the spell check dictionaries has changed. Select the "Refresh" button to get the new dictionaries list.</source>
       <translation>La URL de los diccionarios de corrección ortográfica ha cambiado. Seleccionar el botón de "Actualizar" para obtener la nueva lista de diccionarios.</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="263" />
       <source>Error installing dictionaries</source>
       <translation>Error instalando los diccionarios</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="262" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="264" />
       <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Ninguna de las ubicaciones para diccionarios tiene permisos de escritura. Por favor, descargue manualmente los diccionarios requeridos e instálelos como administrador.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="311" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="313" />
       <source>{0} ({1})</source>
       <translation>{0} ({1})</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="416" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="392" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="420" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
       <source>Error downloading dictionary file</source>
       <translation>Error descargando archivo de diccionario</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="417" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="393" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="421" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="397" />
       <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;No se ha podido descargar el archivo de diccionario requerido de {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="431" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="435" />
       <source>Error downloading dictionary</source>
       <translation>Error descargando diccionario</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="432" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="436" />
       <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
       <translation>&lt;p&gt;El archivo de diccionario que se ha descargado no es válido. Cancelando.&lt;/p&gt;</translation>
     </message>
@@ -57893,12 +57893,12 @@
       <translation>&lt;p&gt;El directorio de descaga del plugin &lt;b&gt;{0}&lt;/b&gt; no ha podido ser creado. Por favor, configúrelo a través del diálogo de configuración.&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1305" />
+      <location filename="../PluginManager/PluginManager.py" line="1307" />
       <source>Error downloading file</source>
       <translation>Error al descargar el fichero</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1306" />
+      <location filename="../PluginManager/PluginManager.py" line="1308" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;No se pudo descargar el archivo solicitado desde {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</translation>
     </message>
@@ -57957,6 +57957,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
       <source>&lt;font color="#FF0000"&gt;&lt;b&gt;Note:&lt;/b&gt; The following settings are activated at the next startup of the application.&lt;/font&gt;</source>
       <translation>&lt;font color="#FF0000"&gt;&lt;b&gt;Nota:&lt;/b&gt; Estos ajustes se activarán la siguiente vez que se ejecute la aplicacion.&lt;/font&gt;</translation>
     </message>
@@ -58294,76 +58304,76 @@
       <translation>Actualizaciones Remotas: &lt;b&gt;{0}&lt;/b&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="657" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="625" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="660" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="628" />
       <source>Error downloading file</source>
       <translation>Error al descargar el fichero</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="658" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="626" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="661" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;No se pudo descargar el archivo solicitado desde {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="632" />
       <source>No connection to Internet.</source>
       <translation>Sin conexión a Internet.</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="739" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="742" />
       <source>Stable</source>
       <translation>Estable</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="746" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="749" />
       <source>Unstable</source>
       <translation>Inestable</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="753" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="756" />
       <source>Obsolete</source>
       <translation>Obsoleto</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="760" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="763" />
       <source>Unknown</source>
       <translation>Desconocido</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="783" />
-      <source>up-to-date</source>
-      <translation>al dia</translation>
-    </message>
-    <message>
       <location filename="../PluginManager/PluginRepositoryDialog.py" line="786" />
+      <source>up-to-date</source>
+      <translation>al dia</translation>
+    </message>
+    <message>
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="789" />
       <source>new download available</source>
       <translation>mueva descarga disponible</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="790" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="793" />
       <source>update installable</source>
       <translation>actualización instalable</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="794" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="797" />
       <source>updated download available</source>
       <translation>descarga actualizada disponible</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="798" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="801" />
       <source>error determining status</source>
       <translation>Error al determinar el estado</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1168" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1140" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1171" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
       <source>Cleanup of Plugin Downloads</source>
       <translation>Limpieza de Descargas de Plugins</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1172" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1175" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1146" />
       <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;La descarga del plugin &lt;b&gt;{0}&lt;/b&gt; no se ha podido borrar.&lt;/p&gt;&lt;p&gt;Razón: {1}&lt;/p&gt;</translation>
     </message>
@@ -58371,17 +58381,17 @@
   <context>
     <name>PluginRepositoryWindow</name>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1045" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1048" />
       <source>Process Generation Error</source>
       <translation>Error de Generación de Proceso</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1046" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1049" />
       <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation>&lt;p&gt;No se ha podido ejecutar el proceso.&lt;br&gt;Asegúrese de que esta disponible como &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1050" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1053" />
       <source>OK</source>
       <translation>Aceptar</translation>
     </message>
@@ -58728,18 +58738,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1813" />
+      <location filename="../Preferences/__init__.py" line="1815" />
       <source>Export Preferences</source>
       <translation>Exportar Preferencias</translation>
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1844" />
+      <location filename="../Preferences/__init__.py" line="1817" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation>Archivo de Propiedades (*.ini);;Todos los archivos (*)</translation>
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1842" />
-      <location filename="../Preferences/__init__.py" line="1815" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation>Archivo de Propiedades (*.ini);;Todos los archivos (*)</translation>
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1840" />
       <source>Import Preferences</source>
       <translation>Importar Preferencias</translation>
     </message>
@@ -97302,6 +97312,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
       <source>Press to open a dialog to manage spell checking dictionaries</source>
       <translation>Pulsar para abrir un diálogo para gestionar diccionarios de corrección ortográfica</translation>
     </message>
--- a/src/eric7/i18n/eric7_fr.ts	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/i18n/eric7_fr.ts	Mon Apr 24 17:51:11 2023 +0200
@@ -49516,71 +49516,71 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="202" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="204" />
       <source>Error populating list of dictionaries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="231" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="203" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="233" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="205" />
       <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Ne peut télécharger la liste des dictionnaires depuis {0}.&lt;/p&gt;&lt;p&gt;Erreur : {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="206" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="400" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="208" />
       <source>No connection to Internet.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="230" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="232" />
       <source>Error downloading dictionaries list</source>
       <translation>Erreur lors du téléchargement de la liste des dictionnaire</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="251" />
       <source>Dictionaries URL Changed</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="250" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="252" />
       <source>The URL of the spell check dictionaries has changed. Select the "Refresh" button to get the new dictionaries list.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="263" />
       <source>Error installing dictionaries</source>
       <translation>Erreur lors de l'installation des dictionnaires</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="262" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="264" />
       <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="311" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="313" />
       <source>{0} ({1})</source>
       <translation>{0} ({1})</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="416" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="392" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="420" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
       <source>Error downloading dictionary file</source>
       <translation>Erreur lors du téléchargement du fichier du dictionnaire</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="417" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="393" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="421" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="397" />
       <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="431" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="435" />
       <source>Error downloading dictionary</source>
       <translation>Erreur lors du téléchargement du dictionnaire</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="432" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="436" />
       <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
       <translation>&lt;p&gt;L'archive de dictionnaire téléchargée est non valide. Passer.&lt;/p&gt;</translation>
     </message>
@@ -58174,12 +58174,12 @@
       <translation>&lt;p&gt;Le répertoire de téléchargement de plugin&lt;b&gt;{0}&lt;/b&gt; n'a pas pu être créé. Veuillez le reconfigurer.&lt;/p&gt;&lt;p&gt;Raison : {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1305" />
+      <location filename="../PluginManager/PluginManager.py" line="1307" />
       <source>Error downloading file</source>
       <translation>Erreur de téléchargement du fichier</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1306" />
+      <location filename="../PluginManager/PluginManager.py" line="1308" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Ne peut télécharger le fichier demandé depuis {0}.&lt;/p&gt;&lt;p&gt;Erreur : {1}&lt;/p&gt;</translation>
     </message>
@@ -58238,6 +58238,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
       <source>&lt;font color="#FF0000"&gt;&lt;b&gt;Note:&lt;/b&gt; The following settings are activated at the next startup of the application.&lt;/font&gt;</source>
       <translation>&lt;font color="#FF0000"&gt;&lt;b&gt;Note :&lt;/b&gt; Les paramètres suivants seront activés au prochain démarrage de l'application.&lt;/font&gt;</translation>
     </message>
@@ -58575,76 +58585,76 @@
       <translation>Mises à jour distantes: &lt;b&gt;{0}&lt;/b&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="657" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="625" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="660" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="628" />
       <source>Error downloading file</source>
       <translation>Erreur de téléchargement</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="658" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="626" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="661" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Ne peut télécharger le fichier demandé depuis {0}.&lt;/p&gt;&lt;p&gt;Erreur : {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="632" />
       <source>No connection to Internet.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="739" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="742" />
       <source>Stable</source>
       <translation>Stable</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="746" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="749" />
       <source>Unstable</source>
       <translation>Instable</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="753" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="756" />
       <source>Obsolete</source>
       <translation>Obsolète</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="760" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="763" />
       <source>Unknown</source>
       <translation>Inconnu</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="783" />
-      <source>up-to-date</source>
-      <translation>à jour</translation>
-    </message>
-    <message>
       <location filename="../PluginManager/PluginRepositoryDialog.py" line="786" />
+      <source>up-to-date</source>
+      <translation>à jour</translation>
+    </message>
+    <message>
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="789" />
       <source>new download available</source>
       <translation>nouveau téléchargement disponible</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="790" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="793" />
       <source>update installable</source>
       <translation>mise à jour installable</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="794" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="797" />
       <source>updated download available</source>
       <translation>téléchargement à jour disponible</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="798" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="801" />
       <source>error determining status</source>
       <translation>erreur lors de la détermination du statu</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1168" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1140" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1171" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
       <source>Cleanup of Plugin Downloads</source>
       <translation>Nettoyer les téléchargements de plugin</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1172" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1175" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1146" />
       <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Le téléchargement de plugin&lt;b&gt;{0}&lt;/b&gt; ne peut être supprimé.&lt;/p&gt;&lt;p&gt;Raison : {1}&lt;/p&gt;</translation>
     </message>
@@ -58652,17 +58662,17 @@
   <context>
     <name>PluginRepositoryWindow</name>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1045" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1048" />
       <source>Process Generation Error</source>
       <translation>Erreur du processus</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1046" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1049" />
       <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Ne peut démarrer le processus.&lt;br&gt;Vérifier qu'il est disponible en tant que&lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1050" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1053" />
       <source>OK</source>
       <translation>OK</translation>
     </message>
@@ -59017,18 +59027,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1813" />
+      <location filename="../Preferences/__init__.py" line="1815" />
       <source>Export Preferences</source>
       <translation>Export des préférences</translation>
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1844" />
+      <location filename="../Preferences/__init__.py" line="1817" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation>Fichier propriétés (*.ini);;Tous les fichiers (*)</translation>
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1842" />
-      <location filename="../Preferences/__init__.py" line="1815" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation>Fichier propriétés (*.ini);;Tous les fichiers (*)</translation>
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1840" />
       <source>Import Preferences</source>
       <translation>Import des préférences</translation>
     </message>
@@ -97903,6 +97913,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
       <source>Press to open a dialog to manage spell checking dictionaries</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_it.ts	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/i18n/eric7_it.ts	Mon Apr 24 17:51:11 2023 +0200
@@ -49454,71 +49454,71 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="202" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="204" />
       <source>Error populating list of dictionaries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="231" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="203" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="233" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="205" />
       <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="206" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="400" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="208" />
       <source>No connection to Internet.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="230" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="232" />
       <source>Error downloading dictionaries list</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="251" />
       <source>Dictionaries URL Changed</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="250" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="252" />
       <source>The URL of the spell check dictionaries has changed. Select the "Refresh" button to get the new dictionaries list.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="263" />
       <source>Error installing dictionaries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="262" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="264" />
       <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="311" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="313" />
       <source>{0} ({1})</source>
       <translation type="unfinished">{0} ({1})</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="416" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="392" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="420" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
       <source>Error downloading dictionary file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="417" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="393" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="421" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="397" />
       <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="431" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="435" />
       <source>Error downloading dictionary</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="432" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="436" />
       <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -58048,12 +58048,12 @@
       <translation>&lt;p&gt;La directory di download dei plugin &lt;b&gt;{0}&lt;/b&gt; non può essere creata. Per favore configurarla con il dialogo di configurazione.&lt;/p&gt;&lt;p&gt;Motivo: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1305" />
+      <location filename="../PluginManager/PluginManager.py" line="1307" />
       <source>Error downloading file</source>
       <translation>Errone nello scaricamento del file</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1306" />
+      <location filename="../PluginManager/PluginManager.py" line="1308" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Non posso scaricare il file richiesto da {0}&lt;/p&gt;&lt;p&gt;Errore: {1}&lt;/p&gt;</translation>
     </message>
@@ -58112,6 +58112,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
       <source>&lt;font color="#FF0000"&gt;&lt;b&gt;Note:&lt;/b&gt; The following settings are activated at the next startup of the application.&lt;/font&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -58449,76 +58459,76 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="657" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="625" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="660" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="628" />
       <source>Error downloading file</source>
       <translation>Errone nello scaricamento del file</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="658" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="626" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="661" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Non posso scaricare il file richiesto da {0}&lt;/p&gt;&lt;p&gt;Errore: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="632" />
       <source>No connection to Internet.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="739" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="742" />
       <source>Stable</source>
       <translation>Stabile</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="746" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="749" />
       <source>Unstable</source>
       <translation>Instabile</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="753" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="756" />
       <source>Obsolete</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="760" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="763" />
       <source>Unknown</source>
       <translation>Sconosciuto</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="783" />
-      <source>up-to-date</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PluginManager/PluginRepositoryDialog.py" line="786" />
+      <source>up-to-date</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="789" />
       <source>new download available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="790" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="793" />
       <source>update installable</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="794" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="797" />
       <source>updated download available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="798" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="801" />
       <source>error determining status</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1168" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1140" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1171" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
       <source>Cleanup of Plugin Downloads</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1172" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1175" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1146" />
       <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -58526,17 +58536,17 @@
   <context>
     <name>PluginRepositoryWindow</name>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1045" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1048" />
       <source>Process Generation Error</source>
       <translation>Errore Generazione Processo</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1046" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1049" />
       <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Non posso avviare il processo.&lt;br&gt;Assicurarsi sia disponibile come &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1050" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1053" />
       <source>OK</source>
       <translation>OK</translation>
     </message>
@@ -58883,18 +58893,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1813" />
+      <location filename="../Preferences/__init__.py" line="1815" />
       <source>Export Preferences</source>
       <translation>Esporta Preferenze</translation>
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1844" />
+      <location filename="../Preferences/__init__.py" line="1817" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation>File proprietà (*.ini);;Tutti i file(*)</translation>
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1842" />
-      <location filename="../Preferences/__init__.py" line="1815" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation>File proprietà (*.ini);;Tutti i file(*)</translation>
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1840" />
       <source>Import Preferences</source>
       <translation>Importa Preferenze</translation>
     </message>
@@ -97588,6 +97598,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
       <source>Press to open a dialog to manage spell checking dictionaries</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_pt.ts	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/i18n/eric7_pt.ts	Mon Apr 24 17:51:11 2023 +0200
@@ -49447,71 +49447,71 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="202" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="204" />
       <source>Error populating list of dictionaries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="231" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="203" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="233" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="205" />
       <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="206" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="400" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="208" />
       <source>No connection to Internet.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="230" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="232" />
       <source>Error downloading dictionaries list</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="251" />
       <source>Dictionaries URL Changed</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="250" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="252" />
       <source>The URL of the spell check dictionaries has changed. Select the "Refresh" button to get the new dictionaries list.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="263" />
       <source>Error installing dictionaries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="262" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="264" />
       <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="311" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="313" />
       <source>{0} ({1})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="416" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="392" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="420" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
       <source>Error downloading dictionary file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="417" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="393" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="421" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="397" />
       <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="431" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="435" />
       <source>Error downloading dictionary</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="432" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="436" />
       <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -58027,12 +58027,12 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1305" />
+      <location filename="../PluginManager/PluginManager.py" line="1307" />
       <source>Error downloading file</source>
       <translation>Erro ao descarregar ficheiro</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1306" />
+      <location filename="../PluginManager/PluginManager.py" line="1308" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -58091,6 +58091,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
       <source>&lt;font color="#FF0000"&gt;&lt;b&gt;Note:&lt;/b&gt; The following settings are activated at the next startup of the application.&lt;/font&gt;</source>
       <translation>&lt;font color="#FF0000"&gt;&lt;b&gt;Nota:&lt;/b&gt; As definições seguintes serão ativadas no próximo arranque da aplicação.&lt;/font&gt;</translation>
     </message>
@@ -58427,76 +58437,76 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="657" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="625" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="660" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="628" />
       <source>Error downloading file</source>
       <translation type="unfinished">Erro ao descarregar ficheiro</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="658" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="626" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="661" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="632" />
       <source>No connection to Internet.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="739" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="742" />
       <source>Stable</source>
       <translation type="unfinished">Estável</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="746" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="749" />
       <source>Unstable</source>
       <translation type="unfinished">Instável</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="753" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="756" />
       <source>Obsolete</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="760" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="763" />
       <source>Unknown</source>
       <translation>Desconhecido</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="783" />
-      <source>up-to-date</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PluginManager/PluginRepositoryDialog.py" line="786" />
+      <source>up-to-date</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="789" />
       <source>new download available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="790" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="793" />
       <source>update installable</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="794" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="797" />
       <source>updated download available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="798" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="801" />
       <source>error determining status</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1168" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1140" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1171" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
       <source>Cleanup of Plugin Downloads</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1172" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1175" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1146" />
       <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -58504,17 +58514,17 @@
   <context>
     <name>PluginRepositoryWindow</name>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1045" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1048" />
       <source>Process Generation Error</source>
       <translation>Erro na Criação de Processo</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1046" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1049" />
       <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Não pode começar o processo. &lt;br&gt; Assegurar de que está disponível como &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1050" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1053" />
       <source>OK</source>
       <translation />
     </message>
@@ -58869,18 +58879,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1813" />
+      <location filename="../Preferences/__init__.py" line="1815" />
       <source>Export Preferences</source>
       <translation>Exportar Preferências</translation>
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1844" />
+      <location filename="../Preferences/__init__.py" line="1817" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation>Ficheiro de Propriedades (*.ini);;Ficheiros Todos (*)</translation>
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1842" />
-      <location filename="../Preferences/__init__.py" line="1815" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation>Ficheiro de Propriedades (*.ini);;Ficheiros Todos (*)</translation>
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1840" />
       <source>Import Preferences</source>
       <translation>Importar Preferências</translation>
     </message>
@@ -97378,6 +97388,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
       <source>Press to open a dialog to manage spell checking dictionaries</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_ru.ts	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/i18n/eric7_ru.ts	Mon Apr 24 17:51:11 2023 +0200
@@ -49356,71 +49356,71 @@
       <translation>Статус доступности Интернета: Не доступен</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="202" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="204" />
       <source>Error populating list of dictionaries</source>
       <translation>Ошибка заполнения списка словарей</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="231" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="203" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="233" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="205" />
       <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Не удалось загрузить список словарей из {0}.&lt;/p&gt;&lt;p&gt; Ошибка: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="206" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="400" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="208" />
       <source>No connection to Internet.</source>
       <translation>Нет подключения к Интернету.</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="230" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="232" />
       <source>Error downloading dictionaries list</source>
       <translation>Ошибка загрузки списка словарей</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="251" />
       <source>Dictionaries URL Changed</source>
       <translation>URL-адрес словарей изменен</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="250" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="252" />
       <source>The URL of the spell check dictionaries has changed. Select the "Refresh" button to get the new dictionaries list.</source>
       <translation>URL-адрес словарей проверки орфографии изменился. Выберите кнопку «Обновить», чтобы получить список новых словарей.</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="263" />
       <source>Error installing dictionaries</source>
       <translation>Ошибка установки словарей</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="262" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="264" />
       <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
       <translation>&lt;p&gt; Ни одно из мест размещения в словаре не доступно для записи. Загрузите необходимые словари вручную и установите их как администратор.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="311" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="313" />
       <source>{0} ({1})</source>
       <translation>{0} ({1})</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="416" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="392" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="420" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
       <source>Error downloading dictionary file</source>
       <translation>Ошибка загрузки файла словаря</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="417" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="393" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="421" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="397" />
       <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Не удалось загрузить запрошенный файл слова из {0}.&lt;/p&gt;&lt;p&gt; Ошибка: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="431" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="435" />
       <source>Error downloading dictionary</source>
       <translation>Ошибка загрузки словаря</translation>
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="432" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="436" />
       <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Загруженный архив словаря недействителен. Пропущен.&lt;/p&gt;</translation>
     </message>
@@ -57984,12 +57984,12 @@
       <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/PluginManager.py" line="1305" />
+      <location filename="../PluginManager/PluginManager.py" line="1307" />
       <source>Error downloading file</source>
       <translation>Ошибка загрузки файла</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1306" />
+      <location filename="../PluginManager/PluginManager.py" line="1308" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Не удалось загрузить запрашиваемый файл из {0}.&lt;/p&gt;&lt;p&gt;Ошибка: {1}&lt;/p&gt;</translation>
     </message>
@@ -58048,6 +58048,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
       <source>&lt;font color="#FF0000"&gt;&lt;b&gt;Note:&lt;/b&gt; The following settings are activated at the next startup of the application.&lt;/font&gt;</source>
       <translation>&lt;font color="#FF0000"&gt;&lt;b&gt;Примечание:&lt;/b&gt; Эти изменения вступят в силу при следующем запуске приложения.&lt;/font&gt;</translation>
     </message>
@@ -58386,76 +58396,76 @@
       <translation>Удаленные обновления: &lt;b&gt;{0}&lt;/b&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="657" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="625" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="660" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="628" />
       <source>Error downloading file</source>
       <translation>Ошибка загрузки файла</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="658" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="626" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="661" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Не удалось загрузить запрашиваемый файл из {0}.&lt;/p&gt;&lt;p&gt;Ошибка: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="632" />
       <source>No connection to Internet.</source>
       <translation>Нет подключения к интернету.</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="739" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="742" />
       <source>Stable</source>
       <translation>Стабильные</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="746" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="749" />
       <source>Unstable</source>
       <translation>Нестабильные</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="753" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="756" />
       <source>Obsolete</source>
       <translation>Устаревшие</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="760" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="763" />
       <source>Unknown</source>
       <translation>Неизвестный</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="783" />
-      <source>up-to-date</source>
-      <translation>новейший</translation>
-    </message>
-    <message>
       <location filename="../PluginManager/PluginRepositoryDialog.py" line="786" />
+      <source>up-to-date</source>
+      <translation>новейший</translation>
+    </message>
+    <message>
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="789" />
       <source>new download available</source>
       <translation>имеются обновления для загрузки</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="790" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="793" />
       <source>update installable</source>
       <translation>обновления готовы к установке</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="794" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="797" />
       <source>updated download available</source>
       <translation>имеется обновление</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="798" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="801" />
       <source>error determining status</source>
       <translation>статус определения ошибки</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1168" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1140" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1171" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
       <source>Cleanup of Plugin Downloads</source>
       <translation>Очистить загруженные плагины</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1172" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1175" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1146" />
       <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&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>
@@ -58463,17 +58473,17 @@
   <context>
     <name>PluginRepositoryWindow</name>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1045" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1048" />
       <source>Process Generation Error</source>
       <translation>Ошибка при запуске процесса</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1046" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1049" />
       <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Невозможно запустить процесс.&lt;br&gt;Убедитесь, что он доступен как &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1050" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1053" />
       <source>OK</source>
       <translation>ОК</translation>
     </message>
@@ -58820,18 +58830,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1813" />
+      <location filename="../Preferences/__init__.py" line="1815" />
       <source>Export Preferences</source>
       <translation>Экспорт Preferences</translation>
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1844" />
+      <location filename="../Preferences/__init__.py" line="1817" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation>Файлы Preferences (*.ini);;Все файлы (*)</translation>
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1842" />
-      <location filename="../Preferences/__init__.py" line="1815" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation>Файлы Preferences (*.ini);;Все файлы (*)</translation>
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1840" />
       <source>Import Preferences</source>
       <translation>Импорт Preferences</translation>
     </message>
@@ -97537,6 +97547,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
       <source>Press to open a dialog to manage spell checking dictionaries</source>
       <translation>Открыть диалог управления словарями проверки орфографии</translation>
     </message>
--- a/src/eric7/i18n/eric7_tr.ts	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/i18n/eric7_tr.ts	Mon Apr 24 17:51:11 2023 +0200
@@ -49379,71 +49379,71 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="202" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="204" />
       <source>Error populating list of dictionaries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="231" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="203" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="233" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="205" />
       <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="206" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="400" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="208" />
       <source>No connection to Internet.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="230" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="232" />
       <source>Error downloading dictionaries list</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="251" />
       <source>Dictionaries URL Changed</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="250" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="252" />
       <source>The URL of the spell check dictionaries has changed. Select the "Refresh" button to get the new dictionaries list.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="263" />
       <source>Error installing dictionaries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="262" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="264" />
       <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="311" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="313" />
       <source>{0} ({1})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="416" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="392" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="420" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
       <source>Error downloading dictionary file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="417" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="393" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="421" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="397" />
       <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="431" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="435" />
       <source>Error downloading dictionary</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="432" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="436" />
       <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -57905,12 +57905,12 @@
       <translation>&lt;p&gt;eklenti dizini &lt;b&gt;{0}&lt;/b&gt; oluşturulamıyor. Lütfen ayarlama diyaloğu aracılığı ile düzenleyin.&lt;/p&gt;&lt;p&gt;Sebep: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1305" />
+      <location filename="../PluginManager/PluginManager.py" line="1307" />
       <source>Error downloading file</source>
       <translation type="unfinished">Dosya yüklenirken hata</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1306" />
+      <location filename="../PluginManager/PluginManager.py" line="1308" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -57969,6 +57969,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
       <source>&lt;font color="#FF0000"&gt;&lt;b&gt;Note:&lt;/b&gt; The following settings are activated at the next startup of the application.&lt;/font&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -58305,76 +58315,76 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="657" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="625" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="660" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="628" />
       <source>Error downloading file</source>
       <translation>Dosya yüklenirken hata</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="658" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="626" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="661" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="632" />
       <source>No connection to Internet.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="739" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="742" />
       <source>Stable</source>
       <translation>Dengeli</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="746" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="749" />
       <source>Unstable</source>
       <translation>Dengesiz</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="753" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="756" />
       <source>Obsolete</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="760" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="763" />
       <source>Unknown</source>
       <translation>Bilinmeyen</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="783" />
-      <source>up-to-date</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PluginManager/PluginRepositoryDialog.py" line="786" />
+      <source>up-to-date</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="789" />
       <source>new download available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="790" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="793" />
       <source>update installable</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="794" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="797" />
       <source>updated download available</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="798" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="801" />
       <source>error determining status</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1168" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1140" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1171" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
       <source>Cleanup of Plugin Downloads</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1172" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1175" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1146" />
       <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -58382,17 +58392,17 @@
   <context>
     <name>PluginRepositoryWindow</name>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1045" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1048" />
       <source>Process Generation Error</source>
       <translation>İşlem Üretecinde Hata</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1046" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1049" />
       <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation>&lt;p&gt;İşlem başlatılamıyor.&lt;br&gt;Bu durum büyük olasılıkla şundan kaynaklanıyto &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1050" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1053" />
       <source>OK</source>
       <translation>TAMAM</translation>
     </message>
@@ -58739,18 +58749,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1813" />
+      <location filename="../Preferences/__init__.py" line="1815" />
       <source>Export Preferences</source>
       <translation>Seçenekleri Dışa Aktar</translation>
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1844" />
+      <location filename="../Preferences/__init__.py" line="1817" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1842" />
-      <location filename="../Preferences/__init__.py" line="1815" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1840" />
       <source>Import Preferences</source>
       <translation>Seçenekleri İçe Aktar</translation>
     </message>
@@ -97286,6 +97296,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
       <source>Press to open a dialog to manage spell checking dictionaries</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_zh_CN.ts	Sat Apr 15 18:22:09 2023 +0200
+++ b/src/eric7/i18n/eric7_zh_CN.ts	Mon Apr 24 17:51:11 2023 +0200
@@ -49426,71 +49426,71 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="202" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="204" />
       <source>Error populating list of dictionaries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="231" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="203" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="233" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="205" />
       <source>&lt;p&gt;Could not download the dictionaries list from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="206" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="400" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="208" />
       <source>No connection to Internet.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="230" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="232" />
       <source>Error downloading dictionaries list</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="249" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="251" />
       <source>Dictionaries URL Changed</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="250" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="252" />
       <source>The URL of the spell check dictionaries has changed. Select the "Refresh" button to get the new dictionaries list.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="261" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="263" />
       <source>Error installing dictionaries</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="262" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="264" />
       <source>&lt;p&gt;None of the dictionary locations is writable by you. Please download required dictionaries manually and install them as administrator.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="311" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="313" />
       <source>{0} ({1})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="416" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="392" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="420" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="396" />
       <source>Error downloading dictionary file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="417" />
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="393" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="421" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="397" />
       <source>&lt;p&gt;Could not download the requested dictionary file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="431" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="435" />
       <source>Error downloading dictionary</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="432" />
+      <location filename="../WebBrowser/SpellCheck/ManageDictionariesDialog.py" line="436" />
       <source>&lt;p&gt;The downloaded dictionary archive is invalid. Skipping it.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -58033,12 +58033,12 @@
       <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/PluginManager.py" line="1305" />
+      <location filename="../PluginManager/PluginManager.py" line="1307" />
       <source>Error downloading file</source>
       <translation>下载文件出错</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginManager.py" line="1306" />
+      <location filename="../PluginManager/PluginManager.py" line="1308" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;无法从 {0} 下载指定文件。&lt;/p&gt;&lt;p&gt;错误:{1}&lt;/p&gt;</translation>
     </message>
@@ -58097,6 +58097,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PluginManagerPage.ui" line="0" />
       <source>&lt;font color="#FF0000"&gt;&lt;b&gt;Note:&lt;/b&gt; The following settings are activated at the next startup of the application.&lt;/font&gt;</source>
       <translation>&lt;font color="#FF0000"&gt;&lt;b&gt;注意:&lt;/b&gt; 以下设置将在下次启动应用程序时生效。&lt;/font&gt;</translation>
     </message>
@@ -58434,76 +58444,76 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="657" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="625" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="660" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="628" />
       <source>Error downloading file</source>
       <translation>下载文件出错</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="658" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="626" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="661" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
       <source>&lt;p&gt;Could not download the requested file from {0}.&lt;/p&gt;&lt;p&gt;Error: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;无法从 {0} 下载指定文件。&lt;/p&gt;&lt;p&gt;错误:{1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="629" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="632" />
       <source>No connection to Internet.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="739" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="742" />
       <source>Stable</source>
       <translation>稳定</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="746" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="749" />
       <source>Unstable</source>
       <translation>不稳定</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="753" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="756" />
       <source>Obsolete</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="760" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="763" />
       <source>Unknown</source>
       <translation>未知</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="783" />
-      <source>up-to-date</source>
-      <translation>最新</translation>
-    </message>
-    <message>
       <location filename="../PluginManager/PluginRepositoryDialog.py" line="786" />
+      <source>up-to-date</source>
+      <translation>最新</translation>
+    </message>
+    <message>
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="789" />
       <source>new download available</source>
       <translation>新的下载可用</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="790" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="793" />
       <source>update installable</source>
       <translation>更新可安装</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="794" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="797" />
       <source>updated download available</source>
       <translation>更新下载可用</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="798" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="801" />
       <source>error determining status</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1168" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1140" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1171" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
       <source>Cleanup of Plugin Downloads</source>
       <translation>清理插件安装</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1172" />
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1143" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1175" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1146" />
       <source>&lt;p&gt;The plugin download &lt;b&gt;{0}&lt;/b&gt; could not be deleted.&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>
@@ -58511,17 +58521,17 @@
   <context>
     <name>PluginRepositoryWindow</name>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1045" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1048" />
       <source>Process Generation Error</source>
       <translation>进程生成错误</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1046" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1049" />
       <source>&lt;p&gt;Could not start the process.&lt;br&gt;Ensure that it is available as &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation>&lt;p&gt;无法启动进程。&lt;br&gt;请确保它作为 &lt;b&gt;{0}&lt;/b&gt; 可用。&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1050" />
+      <location filename="../PluginManager/PluginRepositoryDialog.py" line="1053" />
       <source>OK</source>
       <translation>确定</translation>
     </message>
@@ -58868,18 +58878,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1813" />
+      <location filename="../Preferences/__init__.py" line="1815" />
       <source>Export Preferences</source>
       <translation>导出首选项</translation>
     </message>
     <message>
+      <location filename="../Preferences/__init__.py" line="1844" />
+      <location filename="../Preferences/__init__.py" line="1817" />
+      <source>Properties File (*.ini);;All Files (*)</source>
+      <translation>属性文件 (*.ini);;所有文件 (*)</translation>
+    </message>
+    <message>
       <location filename="../Preferences/__init__.py" line="1842" />
-      <location filename="../Preferences/__init__.py" line="1815" />
-      <source>Properties File (*.ini);;All Files (*)</source>
-      <translation>属性文件 (*.ini);;所有文件 (*)</translation>
-    </message>
-    <message>
-      <location filename="../Preferences/__init__.py" line="1840" />
       <source>Import Preferences</source>
       <translation>导入首选项</translation>
     </message>
@@ -97632,6 +97642,16 @@
     </message>
     <message>
       <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>&lt;p&gt;Select to force the use of &lt;b&gt;http://&lt;/b&gt; instead of &lt;b&gt;https://&lt;/b&gt;.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
+      <source>Enforce unencrypted downloads</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/WebBrowserSpellCheckingPage.ui" line="0" />
       <source>Press to open a dialog to manage spell checking dictionaries</source>
       <translation type="unfinished" />
     </message>

eric ide

mercurial