CycloneDX Interface eric7

Sun, 13 Nov 2022 14:10:57 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 13 Nov 2022 14:10:57 +0100
branch
eric7
changeset 9509
c06561080e32
parent 9508
5a02bdb1dcba
child 9510
b1c92d588478

CycloneDX Interface
- addad capability to generate readable (prettified) output

docs/changelog.md file | annotate | diff | comparison | revisions
src/eric7/APIs/Python3/eric7.api file | annotate | diff | comparison | revisions
src/eric7/CycloneDXInterface/CycloneDXConfigDialog.py file | annotate | diff | comparison | revisions
src/eric7/CycloneDXInterface/CycloneDXConfigDialog.ui file | annotate | diff | comparison | revisions
src/eric7/CycloneDXInterface/CycloneDXUtilities.py file | annotate | diff | comparison | revisions
src/eric7/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
src/eric7/Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
src/eric7/Documentation/Source/eric7.CycloneDXInterface.CycloneDXConfigDialog.html file | annotate | diff | comparison | revisions
src/eric7/Documentation/Source/eric7.CycloneDXInterface.CycloneDXUtilities.html file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_cs.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_de.qm file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_de.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_empty.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_en.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_es.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_fr.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_it.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_pt.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_ru.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_tr.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_zh_CN.ts file | annotate | diff | comparison | revisions
--- a/docs/changelog.md	Sat Nov 12 17:49:08 2022 +0100
+++ b/docs/changelog.md	Sun Nov 13 14:10:57 2022 +0100
@@ -8,6 +8,8 @@
 - Code Style Checker
     - added a few imports style options and added a sorting function iaw. the 'isort'
       utility
+- CycloneDX Interface
+    - addad capability to generate readable (prettified) output
 - MicroPython
     - introduced a configuration option to enable manual selection of devices
       (e.g. for unknown devices or inside the Linux container of ChromeOS)
--- a/src/eric7/APIs/Python3/eric7.api	Sat Nov 12 17:49:08 2022 +0100
+++ b/src/eric7/APIs/Python3/eric7.api	Sun Nov 13 14:10:57 2022 +0100
@@ -226,6 +226,8 @@
 eric7.CycloneDXInterface.CycloneDXUtilities.CycloneDXEnvironmentParser?1(venvName)
 eric7.CycloneDXInterface.CycloneDXUtilities._addCycloneDXDependency?5(dependency, components)
 eric7.CycloneDXInterface.CycloneDXUtilities._amendMetaData?5(bomMetaData, metadataDict)
+eric7.CycloneDXInterface.CycloneDXUtilities._prettifyJSON?5(inputStr)
+eric7.CycloneDXInterface.CycloneDXUtilities._prettifyXML?5(inputStr)
 eric7.CycloneDXInterface.CycloneDXUtilities.addCycloneDXDependencies?4(parser, venvName)
 eric7.CycloneDXInterface.CycloneDXUtilities.addCycloneDXVulnerabilities?4(parser)
 eric7.CycloneDXInterface.CycloneDXUtilities.createCycloneDXFile?4(venvName)
--- a/src/eric7/CycloneDXInterface/CycloneDXConfigDialog.py	Sat Nov 12 17:49:08 2022 +0100
+++ b/src/eric7/CycloneDXInterface/CycloneDXConfigDialog.py	Sun Nov 13 14:10:57 2022 +0100
@@ -189,9 +189,9 @@
         @return tuple containing the input source, the input file name, the
             file format, the schema version, the path of the SBOM file to be
             written, a flag indicating to include vulnerability information,
-            a flag indicating to include dependency information and a
-            dictionary containing the SBOM meta data
-        @rtype tuple of (str, str, str, str, str, bool, bool, dict)
+            a flag indicating to include dependency information, a flag indicating
+            to generate readable output and a dictionary containing the SBOM meta data
+        @rtype tuple of (str, str, str, str, str, bool, bool, bool, dict)
         """
         if self.environmentButton.isChecked():
             inputSource = "environment"
@@ -237,5 +237,6 @@
             sbomFile,
             self.vulnerabilityCheckBox.isChecked(),
             self.dependenciesCheckBox.isChecked(),
+            self.readableCheckBox.isChecked(),
             self.__metadata,
         )
--- a/src/eric7/CycloneDXInterface/CycloneDXConfigDialog.ui	Sat Nov 12 17:49:08 2022 +0100
+++ b/src/eric7/CycloneDXInterface/CycloneDXConfigDialog.ui	Sun Nov 13 14:10:57 2022 +0100
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>650</width>
-    <height>338</height>
+    <height>368</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -99,40 +99,6 @@
       <string>SBOM Output</string>
      </property>
      <layout class="QGridLayout" name="gridLayout">
-      <item row="3" column="0">
-       <widget class="QLabel" name="label_3">
-        <property name="text">
-         <string>Schema Version:</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="0">
-       <widget class="QLabel" name="label_4">
-        <property name="text">
-         <string>File Name:</string>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="1">
-       <widget class="QComboBox" name="schemaVersionComboBox">
-        <property name="toolTip">
-         <string>Select the SBOM schema version of the SBOM file</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="2">
-       <spacer name="horizontalSpacer">
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>413</width>
-          <height>20</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
       <item row="2" column="1">
        <widget class="QComboBox" name="fileFormatComboBox">
         <property name="toolTip">
@@ -150,23 +116,6 @@
         </item>
        </widget>
       </item>
-      <item row="2" column="0">
-       <widget class="QLabel" name="label_2">
-        <property name="text">
-         <string>File Format:</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="1" colspan="2">
-       <widget class="EricPathPicker" name="filePicker" native="true">
-        <property name="focusPolicy">
-         <enum>Qt::StrongFocus</enum>
-        </property>
-        <property name="toolTip">
-         <string>Enter the file path for the SBOM file (leave empty for default)</string>
-        </property>
-       </widget>
-      </item>
       <item row="0" column="0" colspan="3">
        <widget class="QCheckBox" name="vulnerabilityCheckBox">
         <property name="toolTip">
@@ -193,6 +142,67 @@
         </property>
        </widget>
       </item>
+      <item row="2" column="0">
+       <widget class="QLabel" name="label_2">
+        <property name="text">
+         <string>File Format:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="1">
+       <widget class="QComboBox" name="schemaVersionComboBox">
+        <property name="toolTip">
+         <string>Select the SBOM schema version of the SBOM file</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="2">
+       <spacer name="horizontalSpacer">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>413</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="5" column="1" colspan="2">
+       <widget class="EricPathPicker" name="filePicker" native="true">
+        <property name="focusPolicy">
+         <enum>Qt::StrongFocus</enum>
+        </property>
+        <property name="toolTip">
+         <string>Enter the file path for the SBOM file (leave empty for default)</string>
+        </property>
+       </widget>
+      </item>
+      <item row="5" column="0">
+       <widget class="QLabel" name="label_4">
+        <property name="text">
+         <string>File Name:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0">
+       <widget class="QLabel" name="label_3">
+        <property name="text">
+         <string>Schema Version:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="0" colspan="3">
+       <widget class="QCheckBox" name="readableCheckBox">
+        <property name="toolTip">
+         <string>Select to generate non-compact, readable output</string>
+        </property>
+        <property name="text">
+         <string>Generate Readable Output</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
@@ -225,6 +235,7 @@
   <tabstop>dependenciesCheckBox</tabstop>
   <tabstop>fileFormatComboBox</tabstop>
   <tabstop>schemaVersionComboBox</tabstop>
+  <tabstop>readableCheckBox</tabstop>
   <tabstop>filePicker</tabstop>
  </tabstops>
  <resources/>
--- a/src/eric7/CycloneDXInterface/CycloneDXUtilities.py	Sat Nov 12 17:49:08 2022 +0100
+++ b/src/eric7/CycloneDXInterface/CycloneDXUtilities.py	Sun Nov 13 14:10:57 2022 +0100
@@ -7,8 +7,12 @@
 Module implementing the interface to CycloneDX.
 """
 
+import contextlib
+import json
 import os
 
+from xml.etree import ElementTree
+
 from cyclonedx.model import (
     ExternalReference,
     ExternalReferenceType,
@@ -91,6 +95,7 @@
             sbomFile,
             withVulnerabilities,
             withDependencies,
+            readableOutput,
             metadataDict,
         ) = dlg.getData()
 
@@ -162,16 +167,68 @@
                 "V{0}".format(schemaVersion.replace(".", "_"))
             ],
         )
-        output.output_to_file(filename=sbomFile, allow_overwrite=True)
+        outputStr = output.output_as_string()
+        if readableOutput:
+            if fileFormat == "XML":
+                outputStr = _prettifyXML(outputStr)
+            elif fileFormat == "JSON":
+                outputStr = _prettifyJSON(outputStr)
+
+        try:
+            with open(sbomFile, "w", encoding="utf-8") as f:
+                f.write(outputStr)
+            EricMessageBox.information(
+                None,
+                QCoreApplication.translate("CycloneDX", "CycloneDX - SBOM Creation"),
+                QCoreApplication.translate(
+                    "CycloneDX", "<p>The SBOM data was written to file <b>{0}</b>.</p>"
+                ).format(sbomFile),
+            )
+        except OSError as err:
+            EricMessageBox.critical(
+                None,
+                QCoreApplication.translate("CycloneDX", "CycloneDX - SBOM Creation"),
+                QCoreApplication.translate(
+                    "CycloneDX",
+                    "<p>The SBOM file <b>{0}</b> could not be written.</p>"
+                    "<p>Reason: {1}</p>",
+                ).format(sbomFile, str(err)),
+            )
+
 
-        EricMessageBox.information(
-            None,
-            QCoreApplication.translate("CycloneDX", "CycloneDX - SBOM Creation"),
-            QCoreApplication.translate(
-                "CycloneDX", "<p>The SBOM data was written to file <b>{0}</b>.</p>"
-            ).format(sbomFile),
+def _prettifyXML(inputStr):
+    """
+    Function to prettify the SBOM XML output generated by CycloneDX.
+
+    Note: Prettifying an XML tree works only with Python 3.9 and above!
+
+    @param inputStr output generated by CycloneDX
+    @type str
+    @return prettified SBOM string
+    @rtype str
+    """
+    tree = ElementTree.fromstring(inputStr)
+    with contextlib.suppress(AttributeError):
+        ElementTree.indent(tree)
+        return '<?xml version="1.0" encoding="UTF-8"?>\n' + ElementTree.tostring(
+            tree, encoding="unicode"
         )
 
+    return inputStr
+
+
+def _prettifyJSON(inputStr):
+    """
+    Function to prettify the SBOM JSON output generated by CycloneDX.
+
+    @param inputStr output generated by CycloneDX
+    @type str
+    @return prettified SBOM string
+    @rtype str
+    """
+    sbom = json.loads(inputStr)
+    return json.dumps(sbom, indent="  ")
+
 
 def addCycloneDXVulnerabilities(parser):
     """
Binary file src/eric7/Documentation/Help/source.qch has changed
--- a/src/eric7/Documentation/Help/source.qhp	Sat Nov 12 17:49:08 2022 +0100
+++ b/src/eric7/Documentation/Help/source.qhp	Sun Nov 13 14:10:57 2022 +0100
@@ -18498,6 +18498,8 @@
       <keyword name="_main" id="_main" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#_main" />
       <keyword name="_parse_multi_options" id="_parse_multi_options" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#_parse_multi_options" />
       <keyword name="_percentReplacementFunc" id="_percentReplacementFunc" ref="eric7.Utilities.__init__.html#_percentReplacementFunc" />
+      <keyword name="_prettifyJSON" id="_prettifyJSON" ref="eric7.CycloneDXInterface.CycloneDXUtilities.html#_prettifyJSON" />
+      <keyword name="_prettifyXML" id="_prettifyXML" ref="eric7.CycloneDXInterface.CycloneDXUtilities.html#_prettifyXML" />
       <keyword name="_shallPatch" id="_shallPatch" ref="eric7.DebugClients.Python.MultiProcessDebugExtension.html#_shallPatch" />
       <keyword name="_statIsDangerous" id="_statIsDangerous" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalFilePermissions.html#_statIsDangerous" />
       <keyword name="_stylesheet" id="_stylesheet" ref="eric7.UI.CodeDocumentationViewerTemplate.html#_stylesheet" />
--- a/src/eric7/Documentation/Source/eric7.CycloneDXInterface.CycloneDXConfigDialog.html	Sat Nov 12 17:49:08 2022 +0100
+++ b/src/eric7/Documentation/Source/eric7.CycloneDXInterface.CycloneDXConfigDialog.html	Sun Nov 13 14:10:57 2022 +0100
@@ -126,14 +126,14 @@
 tuple containing the input source, the input file name, the
             file format, the schema version, the path of the SBOM file to be
             written, a flag indicating to include vulnerability information,
-            a flag indicating to include dependency information and a
-            dictionary containing the SBOM meta data
+            a flag indicating to include dependency information, a flag indicating
+            to generate readable output and a dictionary containing the SBOM meta data
 </dd>
 </dl>
 <dl>
 <dt>Return Type:</dt>
 <dd>
-tuple of (str, str, str, str, str, bool, bool, dict)
+tuple of (str, str, str, str, str, bool, bool, bool, dict)
 </dd>
 </dl>
 <a NAME="CycloneDXConfigDialog.on_fileFormatComboBox_currentTextChanged" ID="CycloneDXConfigDialog.on_fileFormatComboBox_currentTextChanged"></a>
--- a/src/eric7/Documentation/Source/eric7.CycloneDXInterface.CycloneDXUtilities.html	Sat Nov 12 17:49:08 2022 +0100
+++ b/src/eric7/Documentation/Source/eric7.CycloneDXInterface.CycloneDXUtilities.html	Sun Nov 13 14:10:57 2022 +0100
@@ -38,6 +38,14 @@
 <td>Function to amend the SBOM meta data according the given data.</td>
 </tr>
 <tr>
+<td><a href="#_prettifyJSON">_prettifyJSON</a></td>
+<td>Function to prettify the SBOM JSON output generated by CycloneDX.</td>
+</tr>
+<tr>
+<td><a href="#_prettifyXML">_prettifyXML</a></td>
+<td>Function to prettify the SBOM XML output generated by CycloneDX.</td>
+</tr>
+<tr>
 <td><a href="#addCycloneDXDependencies">addCycloneDXDependencies</a></td>
 <td>Function to add dependency data to the list of created components.</td>
 </tr>
@@ -166,6 +174,67 @@
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
+<a NAME="_prettifyJSON" ID="_prettifyJSON"></a>
+<h2>_prettifyJSON</h2>
+<b>_prettifyJSON</b>(<i>inputStr</i>)
+
+<p>
+    Function to prettify the SBOM JSON output generated by CycloneDX.
+</p>
+<dl>
+
+<dt><i>inputStr</i> (str)</dt>
+<dd>
+output generated by CycloneDX
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+prettified SBOM string
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="_prettifyXML" ID="_prettifyXML"></a>
+<h2>_prettifyXML</h2>
+<b>_prettifyXML</b>(<i>inputStr</i>)
+
+<p>
+    Function to prettify the SBOM XML output generated by CycloneDX.
+</p>
+<p>
+    Note: Prettifying an XML tree works only with Python 3.9 and above!
+</p>
+<dl>
+
+<dt><i>inputStr</i> (str)</dt>
+<dd>
+output generated by CycloneDX
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+prettified SBOM string
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
 <a NAME="addCycloneDXDependencies" ID="addCycloneDXDependencies"></a>
 <h2>addCycloneDXDependencies</h2>
 <b>addCycloneDXDependencies</b>(<i>parser, venvName</i>)
--- a/src/eric7/i18n/eric7_cs.ts	Sat Nov 12 17:49:08 2022 +0100
+++ b/src/eric7/i18n/eric7_cs.ts	Sun Nov 13 14:10:57 2022 +0100
@@ -5555,7 +5555,7 @@
   <context>
     <name>CodingError</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="210" />
+      <location filename="../Utilities/__init__.py" line="206" />
       <source>The coding '{0}' is wrong for the given text.</source>
       <translation>Nesprávné kódování '{0}' pro daný text.</translation>
     </message>
@@ -7781,27 +7781,33 @@
   <context>
     <name>CycloneDX</name>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="169" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="146" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="110" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="190" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="182" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="151" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="115" />
       <source>CycloneDX - SBOM Creation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="113" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="118" />
       <source>&lt;p&gt;The configured input file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="147" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="152" />
       <source>&lt;p&gt;Some of the dependencies do not have pinned version numbers.&lt;ul&gt;{0}&lt;/ul&gt;The above listed packages will NOT be included in the generated CycloneDX SBOM file as version is a mandatory field.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="170" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="183" />
       <source>&lt;p&gt;The SBOM data was written to file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="191" />
+      <source>&lt;p&gt;The SBOM file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>CycloneDXConfigDialog</name>
@@ -7867,21 +7873,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Schema Version:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Name:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Select the SBOM schema version of the SBOM file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select the format of the SBOM file</source>
       <translation type="unfinished" />
     </message>
@@ -7897,16 +7888,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Format:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Enter the file path for the SBOM file (leave empty for default)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select to include vulnerability data in the generated SBOM (requires Schema 1.4 or newer)</source>
       <translation type="unfinished" />
     </message>
@@ -7926,6 +7907,41 @@
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Format:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select the SBOM schema version of the SBOM file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Enter the file path for the SBOM file (leave empty for default)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Schema Version:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select to generate non-compact, readable output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Generate Readable Output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.py" line="110" />
       <source>Edit Metadata...</source>
       <translation type="unfinished" />
@@ -78352,28 +78368,28 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="52" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="53" />
       <source>Show</source>
       <translation>Zobrazit</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="55" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="56" />
       <source>Press to show all files containing an issue</source>
       <translation>Stisknout pro zobrazení všech souborů, které obsahují problém</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="105" />
       <source>Errors</source>
       <translation type="unfinished">Chyby</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="304" />
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="311" />
       <source>Error: {0}</source>
       <translation type="unfinished">Chyby: {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="416" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="460" />
       <source>No issues found.</source>
       <translation>Žádné problémy nenalezeny.</translation>
     </message>
@@ -78381,28 +78397,28 @@
   <context>
     <name>SyntaxCheckerPlugin</name>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="194" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="196" />
       <source>Check Syntax</source>
       <translation>Kontrola syntaxe</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="195" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="197" />
       <source>&amp;Syntax...</source>
       <translation>&amp;Syntaxe...</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="201" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
       <source>Check syntax.</source>
       <translation>Kontrola syntaxe.</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="298" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="216" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="300" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="218" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="205" />
       <source>&lt;b&gt;Check Syntax...&lt;/b&gt;&lt;p&gt;This checks Python files for syntax errors.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Kontrola Syntaxe...&lt;/b&gt;&lt;p&gt;Zkontroluje všechny Python soubory na syntaktické chyby.&lt;/p&gt;</translation>
     </message>
@@ -85621,7 +85637,7 @@
   <context>
     <name>Utilities</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="1605" />
+      <location filename="../Utilities/__init__.py" line="1616" />
       <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
       <translation>&lt;p&gt;Můžete použít %-kódy a rezervovaná místa ve stringu. Podporované kódy jsou:&lt;table&gt;&lt;tr&gt;    &lt;td&gt;%C&lt;/td&gt;    &lt;td&gt;sloupec kurzoru v aktuálním editoru&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%D&lt;/td&gt;    &lt;td&gt;adresář v aktuálním editoru&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%F&lt;/td&gt;    &lt;td&gt;jméno souboru v aktuálním editoru&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%H&lt;/td&gt;    &lt;td&gt;home adresář aktuálního uživatele&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%L&lt;/td&gt;    &lt;td&gt;řádek s kurzorem v aktuálním editoru&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%P&lt;/td&gt;    &lt;td&gt;cesta aktuálního projektu&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%S&lt;/td&gt;    &lt;td&gt;vybraný text v aktuálním editoru&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%U&lt;/td&gt;    &lt;td&gt;uživatelské jméno aktuálního uživatele&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;    &lt;td&gt;%%&lt;/td&gt;    &lt;td&gt;znak procenta&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
@@ -91463,54 +91479,54 @@
   <context>
     <name>VirtualenvManager</name>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="296" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="304" />
       <source>Add Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="297" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="305" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="369" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="377" />
       <source>Change Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="434" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="370" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="442" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="378" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting!</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="433" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="441" />
       <source>Rename Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="532" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="467" />
-      <source>{0} - {1}</source>
-      <translation type="unfinished">{0} - {1}</translation>
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="474" />
-      <source>Delete Virtual Environments</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
-      <source>Do you really want to delete these virtual environments?</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="539" />
-      <source>Remove Virtual Environments</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../VirtualEnv/VirtualenvManager.py" line="540" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
+      <source>{0} - {1}</source>
+      <translation type="unfinished">{0} - {1}</translation>
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="482" />
+      <source>Delete Virtual Environments</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="483" />
+      <source>Do you really want to delete these virtual environments?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="547" />
+      <source>Remove Virtual Environments</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="548" />
       <source>Do you really want to remove these virtual environments?</source>
       <translation type="unfinished" />
     </message>
Binary file src/eric7/i18n/eric7_de.qm has changed
--- a/src/eric7/i18n/eric7_de.ts	Sat Nov 12 17:49:08 2022 +0100
+++ b/src/eric7/i18n/eric7_de.ts	Sun Nov 13 14:10:57 2022 +0100
@@ -5563,7 +5563,7 @@
 <context>
     <name>CodingError</name>
     <message>
-        <location filename="../Utilities/__init__.py" line="210"/>
+        <location filename="../Utilities/__init__.py" line="206"/>
         <source>The coding &apos;{0}&apos; is wrong for the given text.</source>
         <translation>Die Kodierung „{0}“ ist für den übergebenen Text falsch.</translation>
     </message>
@@ -7796,27 +7796,33 @@
 <context>
     <name>CycloneDX</name>
     <message>
-        <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="169"/>
-        <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="146"/>
-        <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="110"/>
+        <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="190"/>
+        <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="182"/>
+        <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="151"/>
+        <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="115"/>
         <source>CycloneDX - SBOM Creation</source>
         <translation>CyccloneDX - STL Erzeugung</translation>
     </message>
     <message>
-        <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="113"/>
+        <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="118"/>
         <source>&lt;p&gt;The configured input file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die konfigurierte Eingabedatei &lt;b&gt;{0}&lt;/b&gt; existiert nicht. Abbruch...&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="147"/>
+        <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="152"/>
         <source>&lt;p&gt;Some of the dependencies do not have pinned version numbers.&lt;ul&gt;{0}&lt;/ul&gt;The above listed packages will NOT be included in the generated CycloneDX SBOM file as version is a mandatory field.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Einige der Abhängigkeiten haben keine feste Versionsnummer.&lt;ul&gt;{0}&lt;/ul&gt;Die oben aufgeführten Pakete werden NICHT in der erzeugten CycloneDX STL Datei enthalten sein, da die Version ein Pflichtfeld ist.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="170"/>
+        <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="183"/>
         <source>&lt;p&gt;The SBOM data was written to file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Die STL Daten wurden in die Datei &lt;b&gt;{0}&lt;/b&gt; geschrieben.&lt;/p&gt;</translation>
     </message>
+    <message>
+        <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="191"/>
+        <source>&lt;p&gt;The SBOM file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+        <translation>&lt;p&gt;Die SBOM Datei &lt;b&gt;{0}&lt;/b&gt; konnte nicht geschrieben werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
+    </message>
 </context>
 <context>
     <name>CycloneDXConfigDialog</name>
@@ -7882,21 +7888,6 @@
     </message>
     <message>
         <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0"/>
-        <source>Schema Version:</source>
-        <translation>Schemaversion:</translation>
-    </message>
-    <message>
-        <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0"/>
-        <source>File Name:</source>
-        <translation>Dateiname:</translation>
-    </message>
-    <message>
-        <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0"/>
-        <source>Select the SBOM schema version of the SBOM file</source>
-        <translation>Wähle die STL Schemaversion der STL Datei</translation>
-    </message>
-    <message>
-        <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0"/>
         <source>Select the format of the SBOM file</source>
         <translation>Wähle das Format der STL Datei</translation>
     </message>
@@ -7912,16 +7903,6 @@
     </message>
     <message>
         <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0"/>
-        <source>File Format:</source>
-        <translation>Dateiformat:</translation>
-    </message>
-    <message>
-        <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0"/>
-        <source>Enter the file path for the SBOM file (leave empty for default)</source>
-        <translation>Gib den Dateipfad für die STL Datei ein (leer lassen für Standardwert)</translation>
-    </message>
-    <message>
-        <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0"/>
         <source>Select to include vulnerability data in the generated SBOM (requires Schema 1.4 or newer)</source>
         <translation>Auswählen, um Verwundbarkeitsdaten in der erzeugten STL aufzunehmen (erfordert Schema 1.4 oder neuer)</translation>
     </message>
@@ -7941,6 +7922,41 @@
         <translation>Abhängigkeiten aufnehmen</translation>
     </message>
     <message>
+        <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0"/>
+        <source>File Format:</source>
+        <translation>Dateiformat:</translation>
+    </message>
+    <message>
+        <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0"/>
+        <source>Select the SBOM schema version of the SBOM file</source>
+        <translation>Wähle die STL Schemaversion der STL Datei</translation>
+    </message>
+    <message>
+        <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0"/>
+        <source>Enter the file path for the SBOM file (leave empty for default)</source>
+        <translation>Gib den Dateipfad für die STL Datei ein (leer lassen für Standardwert)</translation>
+    </message>
+    <message>
+        <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0"/>
+        <source>File Name:</source>
+        <translation>Dateiname:</translation>
+    </message>
+    <message>
+        <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0"/>
+        <source>Schema Version:</source>
+        <translation>Schemaversion:</translation>
+    </message>
+    <message>
+        <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0"/>
+        <source>Select to generate non-compact, readable output</source>
+        <translation>Auswählen, um eine lesbare Ausgabe zu erzeugen</translation>
+    </message>
+    <message>
+        <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0"/>
+        <source>Generate Readable Output</source>
+        <translation>Erzeuge lesbare Ausgabe</translation>
+    </message>
+    <message>
         <location filename="../CycloneDXInterface/CycloneDXConfigDialog.py" line="110"/>
         <source>Edit Metadata...</source>
         <translation>Metadaten bearbeiten...</translation>
@@ -78568,28 +78584,28 @@
         <translation>%v/%m Dateien</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="52"/>
+        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="53"/>
         <source>Show</source>
         <translation>Zeige</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="55"/>
+        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="56"/>
         <source>Press to show all files containing an issue</source>
         <translation>Drücken, um alle Dateien mit Problemen anzuzeigen</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="104"/>
+        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="105"/>
         <source>Errors</source>
         <translation>Fehler</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="304"/>
-        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="269"/>
+        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="346"/>
+        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="311"/>
         <source>Error: {0}</source>
         <translation>Fehler: {0}</translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="416"/>
+        <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="460"/>
         <source>No issues found.</source>
         <translation>Keine Probleme gefunden.</translation>
     </message>
@@ -78597,28 +78613,28 @@
 <context>
     <name>SyntaxCheckerPlugin</name>
     <message>
-        <location filename="../Plugins/PluginSyntaxChecker.py" line="295"/>
-        <location filename="../Plugins/PluginSyntaxChecker.py" line="213"/>
-        <location filename="../Plugins/PluginSyntaxChecker.py" line="194"/>
+        <location filename="../Plugins/PluginSyntaxChecker.py" line="297"/>
+        <location filename="../Plugins/PluginSyntaxChecker.py" line="215"/>
+        <location filename="../Plugins/PluginSyntaxChecker.py" line="196"/>
         <source>Check Syntax</source>
         <translation>Syntax prüfen</translation>
     </message>
     <message>
-        <location filename="../Plugins/PluginSyntaxChecker.py" line="295"/>
-        <location filename="../Plugins/PluginSyntaxChecker.py" line="213"/>
-        <location filename="../Plugins/PluginSyntaxChecker.py" line="195"/>
+        <location filename="../Plugins/PluginSyntaxChecker.py" line="297"/>
+        <location filename="../Plugins/PluginSyntaxChecker.py" line="215"/>
+        <location filename="../Plugins/PluginSyntaxChecker.py" line="197"/>
         <source>&amp;Syntax...</source>
         <translation>&amp;Syntax...</translation>
     </message>
     <message>
-        <location filename="../Plugins/PluginSyntaxChecker.py" line="201"/>
+        <location filename="../Plugins/PluginSyntaxChecker.py" line="203"/>
         <source>Check syntax.</source>
         <translation>Syntax prüfen.</translation>
     </message>
     <message>
-        <location filename="../Plugins/PluginSyntaxChecker.py" line="298"/>
-        <location filename="../Plugins/PluginSyntaxChecker.py" line="216"/>
-        <location filename="../Plugins/PluginSyntaxChecker.py" line="203"/>
+        <location filename="../Plugins/PluginSyntaxChecker.py" line="300"/>
+        <location filename="../Plugins/PluginSyntaxChecker.py" line="218"/>
+        <location filename="../Plugins/PluginSyntaxChecker.py" line="205"/>
         <source>&lt;b&gt;Check Syntax...&lt;/b&gt;&lt;p&gt;This checks Python files for syntax errors.&lt;/p&gt;</source>
         <translation>&lt;b&gt;Syntax prüfen...&lt;/b&gt;&lt;p&gt;Dies überprüft Python-Dateien auf Syntaxfehler.&lt;/p&gt;</translation>
     </message>
@@ -85863,7 +85879,7 @@
 <context>
     <name>Utilities</name>
     <message>
-        <location filename="../Utilities/__init__.py" line="1605"/>
+        <location filename="../Utilities/__init__.py" line="1616"/>
         <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
         <translation>&lt;p&gt;Sie können %-Codes als Platzhalter in der Eingabe verwenden. Unterstützte Codes sind:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;Spalte des Cursor des aktuellen Editors&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;Verzeichnis des aktuellen Editors&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;Dateiname des aktuellen Editors&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;Home-Verzeichnis des aktullen Nutzers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;Zeile des Cursor des aktuellen Editors&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;Pfad des aktuellen Projektes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selektierter Text des aktuellen Editors&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;Nutzername des aktuellen Nutzers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;das Prozentzeichen&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
@@ -91709,54 +91725,54 @@
 <context>
     <name>VirtualenvManager</name>
     <message>
-        <location filename="../VirtualEnv/VirtualenvManager.py" line="296"/>
+        <location filename="../VirtualEnv/VirtualenvManager.py" line="304"/>
         <source>Add Virtual Environment</source>
         <translation>Virtuelle Umgebung hinzufügen</translation>
     </message>
     <message>
-        <location filename="../VirtualEnv/VirtualenvManager.py" line="297"/>
+        <location filename="../VirtualEnv/VirtualenvManager.py" line="305"/>
         <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?</source>
         <translation>Eine virtuelle Umgebung mit Namen &lt;b&gt;{0}&lt;/b&gt; existiert bereits. Soll sie ersetzt werden?</translation>
     </message>
     <message>
-        <location filename="../VirtualEnv/VirtualenvManager.py" line="369"/>
+        <location filename="../VirtualEnv/VirtualenvManager.py" line="377"/>
         <source>Change Virtual Environment</source>
         <translation>Virtuelle Umgebung ändern</translation>
     </message>
     <message>
-        <location filename="../VirtualEnv/VirtualenvManager.py" line="434"/>
-        <location filename="../VirtualEnv/VirtualenvManager.py" line="370"/>
+        <location filename="../VirtualEnv/VirtualenvManager.py" line="442"/>
+        <location filename="../VirtualEnv/VirtualenvManager.py" line="378"/>
         <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting!</source>
         <translation>Eine virtuelle Umgebung mit Namen &lt;b&gt;{0}&lt;/b&gt; existiert nicht. Abbruch!</translation>
     </message>
     <message>
-        <location filename="../VirtualEnv/VirtualenvManager.py" line="433"/>
+        <location filename="../VirtualEnv/VirtualenvManager.py" line="441"/>
         <source>Rename Virtual Environment</source>
         <translation>Virtuelle Umgebung umbenennen</translation>
     </message>
     <message>
-        <location filename="../VirtualEnv/VirtualenvManager.py" line="532"/>
-        <location filename="../VirtualEnv/VirtualenvManager.py" line="467"/>
-        <source>{0} - {1}</source>
-        <translation>{0} – {1}</translation>
-    </message>
-    <message>
-        <location filename="../VirtualEnv/VirtualenvManager.py" line="474"/>
-        <source>Delete Virtual Environments</source>
-        <translation>Virtuelle Umgebung löschen</translation>
-    </message>
-    <message>
-        <location filename="../VirtualEnv/VirtualenvManager.py" line="475"/>
-        <source>Do you really want to delete these virtual environments?</source>
-        <translation>Sollen diese virtuellen Umgebungen wirklich gelöscht werden?</translation>
-    </message>
-    <message>
-        <location filename="../VirtualEnv/VirtualenvManager.py" line="539"/>
-        <source>Remove Virtual Environments</source>
-        <translation>Virtuelle Umgebung entfernen</translation>
-    </message>
-    <message>
         <location filename="../VirtualEnv/VirtualenvManager.py" line="540"/>
+        <location filename="../VirtualEnv/VirtualenvManager.py" line="475"/>
+        <source>{0} - {1}</source>
+        <translation>{0} – {1}</translation>
+    </message>
+    <message>
+        <location filename="../VirtualEnv/VirtualenvManager.py" line="482"/>
+        <source>Delete Virtual Environments</source>
+        <translation>Virtuelle Umgebung löschen</translation>
+    </message>
+    <message>
+        <location filename="../VirtualEnv/VirtualenvManager.py" line="483"/>
+        <source>Do you really want to delete these virtual environments?</source>
+        <translation>Sollen diese virtuellen Umgebungen wirklich gelöscht werden?</translation>
+    </message>
+    <message>
+        <location filename="../VirtualEnv/VirtualenvManager.py" line="547"/>
+        <source>Remove Virtual Environments</source>
+        <translation>Virtuelle Umgebung entfernen</translation>
+    </message>
+    <message>
+        <location filename="../VirtualEnv/VirtualenvManager.py" line="548"/>
         <source>Do you really want to remove these virtual environments?</source>
         <translation>Sollen diese virtuellen Umgebungen wirklich entfernt werden?</translation>
     </message>
--- a/src/eric7/i18n/eric7_empty.ts	Sat Nov 12 17:49:08 2022 +0100
+++ b/src/eric7/i18n/eric7_empty.ts	Sun Nov 13 14:10:57 2022 +0100
@@ -5512,7 +5512,7 @@
   <context>
     <name>CodingError</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="210" />
+      <location filename="../Utilities/__init__.py" line="206" />
       <source>The coding '{0}' is wrong for the given text.</source>
       <translation type="unfinished" />
     </message>
@@ -7737,27 +7737,33 @@
   <context>
     <name>CycloneDX</name>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="169" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="146" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="110" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="190" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="182" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="151" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="115" />
       <source>CycloneDX - SBOM Creation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="113" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="118" />
       <source>&lt;p&gt;The configured input file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="147" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="152" />
       <source>&lt;p&gt;Some of the dependencies do not have pinned version numbers.&lt;ul&gt;{0}&lt;/ul&gt;The above listed packages will NOT be included in the generated CycloneDX SBOM file as version is a mandatory field.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="170" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="183" />
       <source>&lt;p&gt;The SBOM data was written to file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="191" />
+      <source>&lt;p&gt;The SBOM file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>CycloneDXConfigDialog</name>
@@ -7823,21 +7829,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Schema Version:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Name:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Select the SBOM schema version of the SBOM file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select the format of the SBOM file</source>
       <translation type="unfinished" />
     </message>
@@ -7853,16 +7844,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Format:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Enter the file path for the SBOM file (leave empty for default)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select to include vulnerability data in the generated SBOM (requires Schema 1.4 or newer)</source>
       <translation type="unfinished" />
     </message>
@@ -7882,6 +7863,41 @@
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Format:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select the SBOM schema version of the SBOM file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Enter the file path for the SBOM file (leave empty for default)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Schema Version:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select to generate non-compact, readable output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Generate Readable Output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.py" line="110" />
       <source>Edit Metadata...</source>
       <translation type="unfinished" />
@@ -78022,28 +78038,28 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="52" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="53" />
       <source>Show</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="55" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="56" />
       <source>Press to show all files containing an issue</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="105" />
       <source>Errors</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="304" />
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="311" />
       <source>Error: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="416" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="460" />
       <source>No issues found.</source>
       <translation type="unfinished" />
     </message>
@@ -78051,28 +78067,28 @@
   <context>
     <name>SyntaxCheckerPlugin</name>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="194" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="196" />
       <source>Check Syntax</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="195" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="197" />
       <source>&amp;Syntax...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="201" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
       <source>Check syntax.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="298" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="216" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="300" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="218" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="205" />
       <source>&lt;b&gt;Check Syntax...&lt;/b&gt;&lt;p&gt;This checks Python files for syntax errors.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -85277,7 +85293,7 @@
   <context>
     <name>Utilities</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="1605" />
+      <location filename="../Utilities/__init__.py" line="1616" />
       <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -91084,54 +91100,54 @@
   <context>
     <name>VirtualenvManager</name>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="296" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="304" />
       <source>Add Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="297" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="305" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="369" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="377" />
       <source>Change Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="434" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="370" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="442" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="378" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting!</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="433" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="441" />
       <source>Rename Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="532" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="467" />
-      <source>{0} - {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="474" />
-      <source>Delete Virtual Environments</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
-      <source>Do you really want to delete these virtual environments?</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="539" />
-      <source>Remove Virtual Environments</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../VirtualEnv/VirtualenvManager.py" line="540" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
+      <source>{0} - {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="482" />
+      <source>Delete Virtual Environments</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="483" />
+      <source>Do you really want to delete these virtual environments?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="547" />
+      <source>Remove Virtual Environments</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="548" />
       <source>Do you really want to remove these virtual environments?</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_en.ts	Sat Nov 12 17:49:08 2022 +0100
+++ b/src/eric7/i18n/eric7_en.ts	Sun Nov 13 14:10:57 2022 +0100
@@ -5520,7 +5520,7 @@
   <context>
     <name>CodingError</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="210" />
+      <location filename="../Utilities/__init__.py" line="206" />
       <source>The coding '{0}' is wrong for the given text.</source>
       <translation type="unfinished" />
     </message>
@@ -7745,27 +7745,33 @@
   <context>
     <name>CycloneDX</name>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="169" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="146" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="110" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="190" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="182" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="151" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="115" />
       <source>CycloneDX - SBOM Creation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="113" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="118" />
       <source>&lt;p&gt;The configured input file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="147" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="152" />
       <source>&lt;p&gt;Some of the dependencies do not have pinned version numbers.&lt;ul&gt;{0}&lt;/ul&gt;The above listed packages will NOT be included in the generated CycloneDX SBOM file as version is a mandatory field.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="170" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="183" />
       <source>&lt;p&gt;The SBOM data was written to file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="191" />
+      <source>&lt;p&gt;The SBOM file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>CycloneDXConfigDialog</name>
@@ -7831,21 +7837,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Schema Version:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Name:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Select the SBOM schema version of the SBOM file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select the format of the SBOM file</source>
       <translation type="unfinished" />
     </message>
@@ -7861,16 +7852,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Format:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Enter the file path for the SBOM file (leave empty for default)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select to include vulnerability data in the generated SBOM (requires Schema 1.4 or newer)</source>
       <translation type="unfinished" />
     </message>
@@ -7890,6 +7871,41 @@
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Format:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select the SBOM schema version of the SBOM file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Enter the file path for the SBOM file (leave empty for default)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Schema Version:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select to generate non-compact, readable output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Generate Readable Output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.py" line="110" />
       <source>Edit Metadata...</source>
       <translation type="unfinished" />
@@ -78071,28 +78087,28 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="52" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="53" />
       <source>Show</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="55" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="56" />
       <source>Press to show all files containing an issue</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="105" />
       <source>Errors</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="304" />
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="311" />
       <source>Error: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="416" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="460" />
       <source>No issues found.</source>
       <translation type="unfinished" />
     </message>
@@ -78100,28 +78116,28 @@
   <context>
     <name>SyntaxCheckerPlugin</name>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="194" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="196" />
       <source>Check Syntax</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="195" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="197" />
       <source>&amp;Syntax...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="201" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
       <source>Check syntax.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="298" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="216" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="300" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="218" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="205" />
       <source>&lt;b&gt;Check Syntax...&lt;/b&gt;&lt;p&gt;This checks Python files for syntax errors.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -85330,7 +85346,7 @@
   <context>
     <name>Utilities</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="1605" />
+      <location filename="../Utilities/__init__.py" line="1616" />
       <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -91137,54 +91153,54 @@
   <context>
     <name>VirtualenvManager</name>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="296" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="304" />
       <source>Add Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="297" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="305" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="369" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="377" />
       <source>Change Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="434" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="370" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="442" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="378" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting!</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="433" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="441" />
       <source>Rename Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="532" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="467" />
-      <source>{0} - {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="474" />
-      <source>Delete Virtual Environments</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
-      <source>Do you really want to delete these virtual environments?</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="539" />
-      <source>Remove Virtual Environments</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../VirtualEnv/VirtualenvManager.py" line="540" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
+      <source>{0} - {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="482" />
+      <source>Delete Virtual Environments</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="483" />
+      <source>Do you really want to delete these virtual environments?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="547" />
+      <source>Remove Virtual Environments</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="548" />
       <source>Do you really want to remove these virtual environments?</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_es.ts	Sat Nov 12 17:49:08 2022 +0100
+++ b/src/eric7/i18n/eric7_es.ts	Sun Nov 13 14:10:57 2022 +0100
@@ -5582,7 +5582,7 @@
   <context>
     <name>CodingError</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="210" />
+      <location filename="../Utilities/__init__.py" line="206" />
       <source>The coding '{0}' is wrong for the given text.</source>
       <translation>La codificación '{0}' es incorrecta para el texto indicado.</translation>
     </message>
@@ -7815,27 +7815,33 @@
   <context>
     <name>CycloneDX</name>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="169" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="146" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="110" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="190" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="182" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="151" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="115" />
       <source>CycloneDX - SBOM Creation</source>
       <translation>CycloneDX - Creation de SBOM</translation>
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="113" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="118" />
       <source>&lt;p&gt;The configured input file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;El archivo de input configurado &lt;b&gt;{0}&lt;/b&gt; no existe. Abortando...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="147" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="152" />
       <source>&lt;p&gt;Some of the dependencies do not have pinned version numbers.&lt;ul&gt;{0}&lt;/ul&gt;The above listed packages will NOT be included in the generated CycloneDX SBOM file as version is a mandatory field.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Algunas de las dependencias no tienen establecidos números de versión.&lt;ul&gt;{0}&lt;/ul&gt;Los packages listados arriba NO se incluirán en el archivo CycloneDX SBOM generado puesto que la versión es un campo obligatorio.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="170" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="183" />
       <source>&lt;p&gt;The SBOM data was written to file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Los datos de SBOM se han escrito al archivo &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="191" />
+      <source>&lt;p&gt;The SBOM file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>CycloneDXConfigDialog</name>
@@ -7901,21 +7907,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Schema Version:</source>
-      <translation>Versión de Schema:</translation>
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Name:</source>
-      <translation>Nombre de Archivo:</translation>
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Select the SBOM schema version of the SBOM file</source>
-      <translation>Seleccionar la versión de schema de SBOM del archivo SBOM</translation>
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select the format of the SBOM file</source>
       <translation>Seleccionar el formato del archivo SBOM</translation>
     </message>
@@ -7931,16 +7922,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Format:</source>
-      <translation>Formato de Archivo:</translation>
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Enter the file path for the SBOM file (leave empty for default)</source>
-      <translation>Introducir la ruta de archivo para el archivo SBOM (dejar en blanco para valor por defecto)</translation>
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select to include vulnerability data in the generated SBOM (requires Schema 1.4 or newer)</source>
       <translation>Seleccionar para incluir datos de vulnerabilidad en el SBOM generado (necesita Schema 1.4 o mayor)</translation>
     </message>
@@ -7960,6 +7941,41 @@
       <translation>Incluir Dependencias</translation>
     </message>
     <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Format:</source>
+      <translation>Formato de Archivo:</translation>
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select the SBOM schema version of the SBOM file</source>
+      <translation>Seleccionar la versión de schema de SBOM del archivo SBOM</translation>
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Enter the file path for the SBOM file (leave empty for default)</source>
+      <translation>Introducir la ruta de archivo para el archivo SBOM (dejar en blanco para valor por defecto)</translation>
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Name:</source>
+      <translation>Nombre de Archivo:</translation>
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Schema Version:</source>
+      <translation>Versión de Schema:</translation>
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select to generate non-compact, readable output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Generate Readable Output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.py" line="110" />
       <source>Edit Metadata...</source>
       <translation>Editar Metadatos...</translation>
@@ -78594,28 +78610,28 @@
       <translation>%v/%m Archivos</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="52" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="53" />
       <source>Show</source>
       <translation>Mostrar</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="55" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="56" />
       <source>Press to show all files containing an issue</source>
       <translation>Pulsar para mostrar todos los archivos con algún problema</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="105" />
       <source>Errors</source>
       <translation>Errores</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="304" />
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="311" />
       <source>Error: {0}</source>
       <translation>Error: {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="416" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="460" />
       <source>No issues found.</source>
       <translation>No se han encontrado problemas.</translation>
     </message>
@@ -78623,28 +78639,28 @@
   <context>
     <name>SyntaxCheckerPlugin</name>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="194" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="196" />
       <source>Check Syntax</source>
       <translation>Verificar sintaxis</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="195" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="197" />
       <source>&amp;Syntax...</source>
       <translation>&amp;Sintaxis...</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="201" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
       <source>Check syntax.</source>
       <translation>Verificar sintaxis.</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="298" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="216" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="300" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="218" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="205" />
       <source>&lt;b&gt;Check Syntax...&lt;/b&gt;&lt;p&gt;This checks Python files for syntax errors.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Verificar Sintaxis...&lt;/b&gt;&lt;p&gt;Chequea archivos de Python buscando errores sintácticos.&lt;/p&gt;</translation>
     </message>
@@ -85888,7 +85904,7 @@
   <context>
     <name>Utilities</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="1605" />
+      <location filename="../Utilities/__init__.py" line="1616" />
       <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
       <translation>&lt;p&gt;Puede utilizar %-códigos como marcadores en la cadena. Los valores sportados son:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;columna del cursos en el editor actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directorio del editor actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;nombre de archivo del editor actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;directorio home del usuario actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;línea del cursor en el editor actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;ruta del proyecto actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;texto seleccionado en el editor actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;nombre de usuario del usuario actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;signo de porcentaje&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
@@ -91734,54 +91750,54 @@
   <context>
     <name>VirtualenvManager</name>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="296" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="304" />
       <source>Add Virtual Environment</source>
       <translation>Añadir Entorno Virtual</translation>
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="297" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="305" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?</source>
       <translation>Un entorno virtual llamado &lt;b&gt;{0}&lt;/b&gt; ya existe. ¿Desea reemplazarlo?</translation>
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="369" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="377" />
       <source>Change Virtual Environment</source>
       <translation>Cambiar Entorno Virtual</translation>
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="434" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="370" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="442" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="378" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting!</source>
       <translation>Un entorno virtual llamado &lt;b&gt;{0}&lt;/b&gt; no existe. ¡Abortando!</translation>
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="433" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="441" />
       <source>Rename Virtual Environment</source>
       <translation>Renombrar Entorno Virtual</translation>
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="532" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="467" />
-      <source>{0} - {1}</source>
-      <translation>{0} - {1}</translation>
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="474" />
-      <source>Delete Virtual Environments</source>
-      <translation>Borrar Entornos Virtuales</translation>
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
-      <source>Do you really want to delete these virtual environments?</source>
-      <translation>¿Desea borrar estos entornos virtuales?</translation>
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="539" />
-      <source>Remove Virtual Environments</source>
-      <translation>Eliminar Entornos Virtuales</translation>
-    </message>
-    <message>
       <location filename="../VirtualEnv/VirtualenvManager.py" line="540" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
+      <source>{0} - {1}</source>
+      <translation>{0} - {1}</translation>
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="482" />
+      <source>Delete Virtual Environments</source>
+      <translation>Borrar Entornos Virtuales</translation>
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="483" />
+      <source>Do you really want to delete these virtual environments?</source>
+      <translation>¿Desea borrar estos entornos virtuales?</translation>
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="547" />
+      <source>Remove Virtual Environments</source>
+      <translation>Eliminar Entornos Virtuales</translation>
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="548" />
       <source>Do you really want to remove these virtual environments?</source>
       <translation>¿Desea eliminar estos entornos virtuales?</translation>
     </message>
--- a/src/eric7/i18n/eric7_fr.ts	Sat Nov 12 17:49:08 2022 +0100
+++ b/src/eric7/i18n/eric7_fr.ts	Sun Nov 13 14:10:57 2022 +0100
@@ -5585,7 +5585,7 @@
   <context>
     <name>CodingError</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="210" />
+      <location filename="../Utilities/__init__.py" line="206" />
       <source>The coding '{0}' is wrong for the given text.</source>
       <translation>L'encodage '{0}' n'est pas adapté pour le texte.</translation>
     </message>
@@ -7816,27 +7816,33 @@
   <context>
     <name>CycloneDX</name>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="169" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="146" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="110" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="190" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="182" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="151" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="115" />
       <source>CycloneDX - SBOM Creation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="113" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="118" />
       <source>&lt;p&gt;The configured input file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="147" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="152" />
       <source>&lt;p&gt;Some of the dependencies do not have pinned version numbers.&lt;ul&gt;{0}&lt;/ul&gt;The above listed packages will NOT be included in the generated CycloneDX SBOM file as version is a mandatory field.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="170" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="183" />
       <source>&lt;p&gt;The SBOM data was written to file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="191" />
+      <source>&lt;p&gt;The SBOM file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>CycloneDXConfigDialog</name>
@@ -7902,21 +7908,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Schema Version:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Name:</source>
-      <translation type="unfinished">Nom de fichier :</translation>
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Select the SBOM schema version of the SBOM file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select the format of the SBOM file</source>
       <translation type="unfinished" />
     </message>
@@ -7932,16 +7923,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Format:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Enter the file path for the SBOM file (leave empty for default)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select to include vulnerability data in the generated SBOM (requires Schema 1.4 or newer)</source>
       <translation type="unfinished" />
     </message>
@@ -7961,6 +7942,41 @@
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Format:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select the SBOM schema version of the SBOM file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Enter the file path for the SBOM file (leave empty for default)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Name:</source>
+      <translation type="unfinished">Nom de fichier :</translation>
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Schema Version:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select to generate non-compact, readable output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Generate Readable Output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.py" line="110" />
       <source>Edit Metadata...</source>
       <translation type="unfinished" />
@@ -78525,28 +78541,28 @@
       <translation>Fichiers %v/%m</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="52" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="53" />
       <source>Show</source>
       <translation>Afficher</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="55" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="56" />
       <source>Press to show all files containing an issue</source>
       <translation>Cliquer pour afficher tous les fichiers contenant une issue</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="105" />
       <source>Errors</source>
       <translation>Erreurs</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="304" />
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="311" />
       <source>Error: {0}</source>
       <translation>Erreur : {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="416" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="460" />
       <source>No issues found.</source>
       <translation>Pas d'issue trouvée.</translation>
     </message>
@@ -78562,28 +78578,28 @@
   <context>
     <name>SyntaxCheckerPlugin</name>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="194" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="196" />
       <source>Check Syntax</source>
       <translation>Vérification de la syntaxe</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="195" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="197" />
       <source>&amp;Syntax...</source>
       <translation>&amp;Syntaxe...</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="201" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
       <source>Check syntax.</source>
       <translation>Vérification de la syntaxe.</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="298" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="216" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="300" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="218" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="205" />
       <source>&lt;b&gt;Check Syntax...&lt;/b&gt;&lt;p&gt;This checks Python files for syntax errors.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Vérification de la syntaxe...&lt;/b&gt;&lt;p&gt;Vérifie les erreurs de syntaxe des fichiers Python.&lt;/p&gt;</translation>
     </message>
@@ -85820,7 +85836,7 @@
   <context>
     <name>Utilities</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="1605" />
+      <location filename="../Utilities/__init__.py" line="1616" />
       <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
       <translation>&lt;p&gt;Vous pouvez utiliser la syntaxe "%-code" dans la chaine de caractères. Les codes supportés sont :&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;colonne du curseur de l'éditeur courant&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;répertoire de l'éditeur courant&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;nom de fichier de l'éditeur courant&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;répertoire 'home' de l'utilisateur courant&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;ligne du curseur de l'éditeur courant&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;chemin du projet courant&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;texte sélectionné dans l'éditeur courant&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;nom d'utilisateur de l'utilisateur courant&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;le signe pourcent&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
@@ -91678,54 +91694,54 @@
   <context>
     <name>VirtualenvManager</name>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="296" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="304" />
       <source>Add Virtual Environment</source>
       <translation>Ajouter environnement virtuel</translation>
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="297" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="305" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?</source>
       <translation>Un environnement virtuel nommé &lt;b&gt;{0}&lt;/b&gt; existe déjà. Faut il le remplacer ?</translation>
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="369" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="377" />
       <source>Change Virtual Environment</source>
       <translation>Modifier l'environnement virtuel</translation>
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="434" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="370" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="442" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="378" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting!</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="433" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="441" />
       <source>Rename Virtual Environment</source>
       <translation>Renommer l'environnement virtuel</translation>
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="532" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="467" />
-      <source>{0} - {1}</source>
-      <translation>{0} - {1}</translation>
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="474" />
-      <source>Delete Virtual Environments</source>
-      <translation>Supprimer les environnements virtuels</translation>
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
-      <source>Do you really want to delete these virtual environments?</source>
-      <translation>Voulez-vous vraiment supprimer ces environnements virtuels ?</translation>
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="539" />
-      <source>Remove Virtual Environments</source>
-      <translation>Supprimer les environnements virtuels</translation>
-    </message>
-    <message>
       <location filename="../VirtualEnv/VirtualenvManager.py" line="540" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
+      <source>{0} - {1}</source>
+      <translation>{0} - {1}</translation>
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="482" />
+      <source>Delete Virtual Environments</source>
+      <translation>Supprimer les environnements virtuels</translation>
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="483" />
+      <source>Do you really want to delete these virtual environments?</source>
+      <translation>Voulez-vous vraiment supprimer ces environnements virtuels ?</translation>
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="547" />
+      <source>Remove Virtual Environments</source>
+      <translation>Supprimer les environnements virtuels</translation>
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="548" />
       <source>Do you really want to remove these virtual environments?</source>
       <translation>Voulez-vous vraiment supprimer ces environnements virtuels ?</translation>
     </message>
--- a/src/eric7/i18n/eric7_it.ts	Sat Nov 12 17:49:08 2022 +0100
+++ b/src/eric7/i18n/eric7_it.ts	Sun Nov 13 14:10:57 2022 +0100
@@ -5570,7 +5570,7 @@
   <context>
     <name>CodingError</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="210" />
+      <location filename="../Utilities/__init__.py" line="206" />
       <source>The coding '{0}' is wrong for the given text.</source>
       <translation>La codifica '{0}' è errata per questo testo.</translation>
     </message>
@@ -7797,27 +7797,33 @@
   <context>
     <name>CycloneDX</name>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="169" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="146" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="110" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="190" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="182" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="151" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="115" />
       <source>CycloneDX - SBOM Creation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="113" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="118" />
       <source>&lt;p&gt;The configured input file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="147" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="152" />
       <source>&lt;p&gt;Some of the dependencies do not have pinned version numbers.&lt;ul&gt;{0}&lt;/ul&gt;The above listed packages will NOT be included in the generated CycloneDX SBOM file as version is a mandatory field.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="170" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="183" />
       <source>&lt;p&gt;The SBOM data was written to file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="191" />
+      <source>&lt;p&gt;The SBOM file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>CycloneDXConfigDialog</name>
@@ -7883,21 +7889,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Schema Version:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Name:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Select the SBOM schema version of the SBOM file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select the format of the SBOM file</source>
       <translation type="unfinished" />
     </message>
@@ -7913,16 +7904,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Format:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Enter the file path for the SBOM file (leave empty for default)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select to include vulnerability data in the generated SBOM (requires Schema 1.4 or newer)</source>
       <translation type="unfinished" />
     </message>
@@ -7942,6 +7923,41 @@
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Format:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select the SBOM schema version of the SBOM file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Enter the file path for the SBOM file (leave empty for default)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Schema Version:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select to generate non-compact, readable output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Generate Readable Output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.py" line="110" />
       <source>Edit Metadata...</source>
       <translation type="unfinished" />
@@ -78435,28 +78451,28 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="52" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="53" />
       <source>Show</source>
       <translation>Mostra</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="55" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="56" />
       <source>Press to show all files containing an issue</source>
       <translation>Premi per mostrare tutti i file che contengono errori di sintassi</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="105" />
       <source>Errors</source>
       <translation type="unfinished">Errori</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="304" />
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="311" />
       <source>Error: {0}</source>
       <translation>Errore: {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="416" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="460" />
       <source>No issues found.</source>
       <translation>Nessun problema trovato.</translation>
     </message>
@@ -78464,28 +78480,28 @@
   <context>
     <name>SyntaxCheckerPlugin</name>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="194" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="196" />
       <source>Check Syntax</source>
       <translation>Controlla sintassi</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="195" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="197" />
       <source>&amp;Syntax...</source>
       <translation>&amp;Sintassi...</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="201" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
       <source>Check syntax.</source>
       <translation>Controlla sintassi.</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="298" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="216" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="300" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="218" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="205" />
       <source>&lt;b&gt;Check Syntax...&lt;/b&gt;&lt;p&gt;This checks Python files for syntax errors.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Controlla sintassi...&lt;/b&gt;&lt;p&gt;Controlla i file Python per errori di sintassi.&lt;/p&gt;</translation>
     </message>
@@ -85719,7 +85735,7 @@
   <context>
     <name>Utilities</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="1605" />
+      <location filename="../Utilities/__init__.py" line="1616" />
       <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
       <translation>&lt;p&gt;Puoi usare i codici % come segnaposti nella stringa. I codici supportati sono: &lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;colonna del cursore nell'editor attuale&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory dell'editor attuale&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;nome file dell'editor corrente&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;directory home dell'utente attuale&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;linea del cursore dell'editor attuale&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;percorso del progetto attuale&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;testo selezionato dell'editor attuale&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username dell'utente attuale&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;Segno percentuale&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
@@ -91542,54 +91558,54 @@
   <context>
     <name>VirtualenvManager</name>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="296" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="304" />
       <source>Add Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="297" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="305" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="369" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="377" />
       <source>Change Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="434" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="370" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="442" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="378" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting!</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="433" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="441" />
       <source>Rename Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="532" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="467" />
-      <source>{0} - {1}</source>
-      <translation type="unfinished">{0} - {1}</translation>
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="474" />
-      <source>Delete Virtual Environments</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
-      <source>Do you really want to delete these virtual environments?</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="539" />
-      <source>Remove Virtual Environments</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../VirtualEnv/VirtualenvManager.py" line="540" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
+      <source>{0} - {1}</source>
+      <translation type="unfinished">{0} - {1}</translation>
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="482" />
+      <source>Delete Virtual Environments</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="483" />
+      <source>Do you really want to delete these virtual environments?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="547" />
+      <source>Remove Virtual Environments</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="548" />
       <source>Do you really want to remove these virtual environments?</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_pt.ts	Sat Nov 12 17:49:08 2022 +0100
+++ b/src/eric7/i18n/eric7_pt.ts	Sun Nov 13 14:10:57 2022 +0100
@@ -5585,7 +5585,7 @@
   <context>
     <name>CodingError</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="210" />
+      <location filename="../Utilities/__init__.py" line="206" />
       <source>The coding '{0}' is wrong for the given text.</source>
       <translation>A codificação '{0}' é incorreta para o texto indicado.</translation>
     </message>
@@ -7812,27 +7812,33 @@
   <context>
     <name>CycloneDX</name>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="169" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="146" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="110" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="190" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="182" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="151" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="115" />
       <source>CycloneDX - SBOM Creation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="113" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="118" />
       <source>&lt;p&gt;The configured input file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="147" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="152" />
       <source>&lt;p&gt;Some of the dependencies do not have pinned version numbers.&lt;ul&gt;{0}&lt;/ul&gt;The above listed packages will NOT be included in the generated CycloneDX SBOM file as version is a mandatory field.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="170" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="183" />
       <source>&lt;p&gt;The SBOM data was written to file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="191" />
+      <source>&lt;p&gt;The SBOM file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>CycloneDXConfigDialog</name>
@@ -7898,21 +7904,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Schema Version:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Name:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Select the SBOM schema version of the SBOM file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select the format of the SBOM file</source>
       <translation type="unfinished" />
     </message>
@@ -7928,16 +7919,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Format:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Enter the file path for the SBOM file (leave empty for default)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select to include vulnerability data in the generated SBOM (requires Schema 1.4 or newer)</source>
       <translation type="unfinished" />
     </message>
@@ -7957,6 +7938,41 @@
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Format:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select the SBOM schema version of the SBOM file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Enter the file path for the SBOM file (leave empty for default)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Schema Version:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select to generate non-compact, readable output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Generate Readable Output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.py" line="110" />
       <source>Edit Metadata...</source>
       <translation type="unfinished" />
@@ -78281,28 +78297,28 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="52" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="53" />
       <source>Show</source>
       <translation>Mostrar</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="55" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="56" />
       <source>Press to show all files containing an issue</source>
       <translation type="unfinished">Pressionar para mostrar todos os ficheiros que tenham algum problema</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="105" />
       <source>Errors</source>
       <translation type="unfinished">Erros</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="304" />
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="311" />
       <source>Error: {0}</source>
       <translation type="unfinished">Erro: {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="416" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="460" />
       <source>No issues found.</source>
       <translation type="unfinished">Não se encontraram problemas.</translation>
     </message>
@@ -78318,28 +78334,28 @@
   <context>
     <name>SyntaxCheckerPlugin</name>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="194" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="196" />
       <source>Check Syntax</source>
       <translation>Verificar Sintaxe</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="195" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="197" />
       <source>&amp;Syntax...</source>
       <translation>&amp;Sintaxe...</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="201" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
       <source>Check syntax.</source>
       <translation>Verificar sintaxe.</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="298" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="216" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="300" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="218" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="205" />
       <source>&lt;b&gt;Check Syntax...&lt;/b&gt;&lt;p&gt;This checks Python files for syntax errors.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Verificar Sintaxe...&lt;/b&gt;&lt;b&gt;Verifica erros de  sintaxe nos ficheiros Python.&lt;/p&gt;</translation>
     </message>
@@ -85569,7 +85585,7 @@
   <context>
     <name>Utilities</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="1605" />
+      <location filename="../Utilities/__init__.py" line="1616" />
       <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
       <translation>&lt;p&gt;Pode usar códigos % como espaços reservados dentro da string. Os códigos suportados são:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;coluna do cursor do editor atual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directório do editor atual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;nome do ficheiro do editor atual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;diretório home do usuário atual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;linha do cursor do editor atual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;rota do projeto atual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;texto selecionado do editor atual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;nome de usuário do usuário atual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;sinal de percentagem&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
@@ -91376,54 +91392,54 @@
   <context>
     <name>VirtualenvManager</name>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="296" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="304" />
       <source>Add Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="297" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="305" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="369" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="377" />
       <source>Change Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="434" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="370" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="442" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="378" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting!</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="433" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="441" />
       <source>Rename Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="532" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="467" />
-      <source>{0} - {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="474" />
-      <source>Delete Virtual Environments</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
-      <source>Do you really want to delete these virtual environments?</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="539" />
-      <source>Remove Virtual Environments</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../VirtualEnv/VirtualenvManager.py" line="540" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
+      <source>{0} - {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="482" />
+      <source>Delete Virtual Environments</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="483" />
+      <source>Do you really want to delete these virtual environments?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="547" />
+      <source>Remove Virtual Environments</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="548" />
       <source>Do you really want to remove these virtual environments?</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_ru.ts	Sat Nov 12 17:49:08 2022 +0100
+++ b/src/eric7/i18n/eric7_ru.ts	Sun Nov 13 14:10:57 2022 +0100
@@ -5593,7 +5593,7 @@
   <context>
     <name>CodingError</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="210" />
+      <location filename="../Utilities/__init__.py" line="206" />
       <source>The coding '{0}' is wrong for the given text.</source>
       <translation>Кодировка '{0}' не подходит для выбранного текста.</translation>
     </message>
@@ -7827,27 +7827,33 @@
   <context>
     <name>CycloneDX</name>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="169" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="146" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="110" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="190" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="182" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="151" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="115" />
       <source>CycloneDX - SBOM Creation</source>
       <translation>Создание SBOM - CycloneDX</translation>
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="113" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="118" />
       <source>&lt;p&gt;The configured input file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...&lt;/p&gt;</source>
       <translation>&lt;p&gt;Конфигурированный файл ввода &lt;b&gt;{0}&lt;/b&gt; не существует. Прерывание...&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="147" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="152" />
       <source>&lt;p&gt;Some of the dependencies do not have pinned version numbers.&lt;ul&gt;{0}&lt;/ul&gt;The above listed packages will NOT be included in the generated CycloneDX SBOM file as version is a mandatory field.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Некоторые зависимости не имеют закрепленных номеров версий.&lt;ul&gt;{0}&lt;/ul&gt;Перечисленные выше пакеты НЕ будут включены в сгенерированный файл CycloneDX SBOM, поскольку версия является обязательным полем.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="170" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="183" />
       <source>&lt;p&gt;The SBOM data was written to file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Данные SBOM были записаны в файл &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="191" />
+      <source>&lt;p&gt;The SBOM file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>CycloneDXConfigDialog</name>
@@ -7913,21 +7919,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Schema Version:</source>
-      <translation>Версия схемы:</translation>
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Name:</source>
-      <translation>Имя файла:</translation>
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Select the SBOM schema version of the SBOM file</source>
-      <translation>Выберите версию схемы SBOM файла SBOM</translation>
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select the format of the SBOM file</source>
       <translation>Выберите формат файла SBOM</translation>
     </message>
@@ -7943,16 +7934,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Format:</source>
-      <translation>Формат файла:</translation>
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Enter the file path for the SBOM file (leave empty for default)</source>
-      <translation>Укажите путь к файлу SBOM (оставьте пустым по умолчанию)</translation>
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select to include vulnerability data in the generated SBOM (requires Schema 1.4 or newer)</source>
       <translation>Разрешить включать данные об уязвимостях в сгенерированный SBOM (требуется схема 1.4 или новее)</translation>
     </message>
@@ -7972,6 +7953,41 @@
       <translation>Включать зависимости</translation>
     </message>
     <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Format:</source>
+      <translation>Формат файла:</translation>
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select the SBOM schema version of the SBOM file</source>
+      <translation>Выберите версию схемы SBOM файла SBOM</translation>
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Enter the file path for the SBOM file (leave empty for default)</source>
+      <translation>Укажите путь к файлу SBOM (оставьте пустым по умолчанию)</translation>
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Name:</source>
+      <translation>Имя файла:</translation>
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Schema Version:</source>
+      <translation>Версия схемы:</translation>
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select to generate non-compact, readable output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Generate Readable Output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.py" line="110" />
       <source>Edit Metadata...</source>
       <translation>Правка метаданных...</translation>
@@ -78762,28 +78778,28 @@
       <translation>%v из %m файла(ов)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="52" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="53" />
       <source>Show</source>
       <translation>Показать</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="55" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="56" />
       <source>Press to show all files containing an issue</source>
       <translation>Показать все файлы, содержащие ошибки</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="105" />
       <source>Errors</source>
       <translation>Ошибки</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="304" />
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="311" />
       <source>Error: {0}</source>
       <translation>Ошибка: {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="416" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="460" />
       <source>No issues found.</source>
       <translation>Проблем со стилем не найдено.</translation>
     </message>
@@ -78791,28 +78807,28 @@
   <context>
     <name>SyntaxCheckerPlugin</name>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="194" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="196" />
       <source>Check Syntax</source>
       <translation>Проверить синтаксис</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="195" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="197" />
       <source>&amp;Syntax...</source>
       <translation>&amp;Синтаксис...</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="201" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
       <source>Check syntax.</source>
       <translation>Проверить синтаксис.</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="298" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="216" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="300" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="218" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="205" />
       <source>&lt;b&gt;Check Syntax...&lt;/b&gt;&lt;p&gt;This checks Python files for syntax errors.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Проверить синтаксис...&lt;/b&gt;&lt;p&gt;Проверка файлов Python на синтаксические ошибки.&lt;/p&gt;</translation>
     </message>
@@ -86073,7 +86089,7 @@
   <context>
     <name>Utilities</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="1605" />
+      <location filename="../Utilities/__init__.py" line="1616" />
       <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
       <translation>&lt;p&gt;Вы можете использовать %-коды как заполнители в строке:
 &lt;table&gt;
@@ -91966,54 +91982,54 @@
   <context>
     <name>VirtualenvManager</name>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="296" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="304" />
       <source>Add Virtual Environment</source>
       <translation>Добавить виртуальное окружение</translation>
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="297" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="305" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?</source>
       <translation>Виртуальное окружение с именем &lt;b&gt;{0}&lt;/b&gt; уже существует.Заменить его?</translation>
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="369" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="377" />
       <source>Change Virtual Environment</source>
       <translation>Изменить виртуальное окружение</translation>
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="434" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="370" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="442" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="378" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting!</source>
       <translation>Виртуальное окружение с именем &lt;b&gt;{0}&lt;/b&gt; не существует. Прерывание!</translation>
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="433" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="441" />
       <source>Rename Virtual Environment</source>
       <translation>Переименовать виртуальное окружение</translation>
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="532" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="467" />
-      <source>{0} - {1}</source>
-      <translation>{0} - {1}</translation>
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="474" />
-      <source>Delete Virtual Environments</source>
-      <translation>Удалить виртуальные окружения</translation>
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
-      <source>Do you really want to delete these virtual environments?</source>
-      <translation>Вы действительно хотите удалить эти виртуальные окружения?</translation>
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="539" />
-      <source>Remove Virtual Environments</source>
-      <translation>Убрать виртуальные окружения из списка</translation>
-    </message>
-    <message>
       <location filename="../VirtualEnv/VirtualenvManager.py" line="540" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
+      <source>{0} - {1}</source>
+      <translation>{0} - {1}</translation>
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="482" />
+      <source>Delete Virtual Environments</source>
+      <translation>Удалить виртуальные окружения</translation>
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="483" />
+      <source>Do you really want to delete these virtual environments?</source>
+      <translation>Вы действительно хотите удалить эти виртуальные окружения?</translation>
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="547" />
+      <source>Remove Virtual Environments</source>
+      <translation>Убрать виртуальные окружения из списка</translation>
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="548" />
       <source>Do you really want to remove these virtual environments?</source>
       <translation>Вы действительно хотите убрать эти виртуальные окружения из списка?</translation>
     </message>
--- a/src/eric7/i18n/eric7_tr.ts	Sat Nov 12 17:49:08 2022 +0100
+++ b/src/eric7/i18n/eric7_tr.ts	Sun Nov 13 14:10:57 2022 +0100
@@ -5547,7 +5547,7 @@
   <context>
     <name>CodingError</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="210" />
+      <location filename="../Utilities/__init__.py" line="206" />
       <source>The coding '{0}' is wrong for the given text.</source>
       <translation>Verilen metin için '{0}'nun kodlaması hatalı.</translation>
     </message>
@@ -7773,27 +7773,33 @@
   <context>
     <name>CycloneDX</name>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="169" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="146" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="110" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="190" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="182" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="151" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="115" />
       <source>CycloneDX - SBOM Creation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="113" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="118" />
       <source>&lt;p&gt;The configured input file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="147" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="152" />
       <source>&lt;p&gt;Some of the dependencies do not have pinned version numbers.&lt;ul&gt;{0}&lt;/ul&gt;The above listed packages will NOT be included in the generated CycloneDX SBOM file as version is a mandatory field.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="170" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="183" />
       <source>&lt;p&gt;The SBOM data was written to file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="191" />
+      <source>&lt;p&gt;The SBOM file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>CycloneDXConfigDialog</name>
@@ -7859,21 +7865,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Schema Version:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Name:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Select the SBOM schema version of the SBOM file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select the format of the SBOM file</source>
       <translation type="unfinished" />
     </message>
@@ -7889,16 +7880,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Format:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Enter the file path for the SBOM file (leave empty for default)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select to include vulnerability data in the generated SBOM (requires Schema 1.4 or newer)</source>
       <translation type="unfinished" />
     </message>
@@ -7918,6 +7899,41 @@
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Format:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select the SBOM schema version of the SBOM file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Enter the file path for the SBOM file (leave empty for default)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Schema Version:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select to generate non-compact, readable output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Generate Readable Output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.py" line="110" />
       <source>Edit Metadata...</source>
       <translation type="unfinished" />
@@ -78233,28 +78249,28 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="52" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="53" />
       <source>Show</source>
       <translation>Göster</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="55" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="56" />
       <source>Press to show all files containing an issue</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="105" />
       <source>Errors</source>
       <translation type="unfinished">Hatalar</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="304" />
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="311" />
       <source>Error: {0}</source>
       <translation>Hata: {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="416" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="460" />
       <source>No issues found.</source>
       <translation>Sorun bulunamadı.</translation>
     </message>
@@ -78262,28 +78278,28 @@
   <context>
     <name>SyntaxCheckerPlugin</name>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="194" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="196" />
       <source>Check Syntax</source>
       <translation>Sözdizimi Kontrolü</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="195" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="197" />
       <source>&amp;Syntax...</source>
       <translation>&amp;Sözdizimi...</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="201" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
       <source>Check syntax.</source>
       <translation>Sözdizimini kontrol et.</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="298" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="216" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="300" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="218" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="205" />
       <source>&lt;b&gt;Check Syntax...&lt;/b&gt;&lt;p&gt;This checks Python files for syntax errors.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Sözdizimini Kontrol Et...&lt;/b&gt;&lt;p&gt;Bu kontrol Python dosyalarını sözdizimi hatalarına karşı yapılır.&lt;/p&gt;</translation>
     </message>
@@ -85506,7 +85522,7 @@
   <context>
     <name>Utilities</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="1605" />
+      <location filename="../Utilities/__init__.py" line="1616" />
       <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
       <translation>&lt;p&gt;%-alanlarda çeşitli kodları kullanabilirsiniz. Tanımlanan kodlar:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;geçerli düzenleyicinin imlecinin sütunu&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;geçerli düzenleyicinin dizini&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;geçerli düzenleyicinin dosya adı&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;geçerli kullancının ana dizini&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;geçerli düzenleyicinin imlecinin satırı&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;geçerli projenin yolu&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;Geçici kullanıcının kullanıcı adı&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;oran işareti&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
@@ -91316,54 +91332,54 @@
   <context>
     <name>VirtualenvManager</name>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="296" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="304" />
       <source>Add Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="297" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="305" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="369" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="377" />
       <source>Change Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="434" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="370" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="442" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="378" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting!</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="433" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="441" />
       <source>Rename Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="532" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="467" />
-      <source>{0} - {1}</source>
-      <translation type="unfinished">{0} - {1}</translation>
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="474" />
-      <source>Delete Virtual Environments</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
-      <source>Do you really want to delete these virtual environments?</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="539" />
-      <source>Remove Virtual Environments</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../VirtualEnv/VirtualenvManager.py" line="540" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
+      <source>{0} - {1}</source>
+      <translation type="unfinished">{0} - {1}</translation>
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="482" />
+      <source>Delete Virtual Environments</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="483" />
+      <source>Do you really want to delete these virtual environments?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="547" />
+      <source>Remove Virtual Environments</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="548" />
       <source>Do you really want to remove these virtual environments?</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_zh_CN.ts	Sat Nov 12 17:49:08 2022 +0100
+++ b/src/eric7/i18n/eric7_zh_CN.ts	Sun Nov 13 14:10:57 2022 +0100
@@ -5585,7 +5585,7 @@
   <context>
     <name>CodingError</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="210" />
+      <location filename="../Utilities/__init__.py" line="206" />
       <source>The coding '{0}' is wrong for the given text.</source>
       <translation>跟据所给文本,编码 “{0}” 是错误的。</translation>
     </message>
@@ -7816,27 +7816,33 @@
   <context>
     <name>CycloneDX</name>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="169" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="146" />
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="110" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="190" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="182" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="151" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="115" />
       <source>CycloneDX - SBOM Creation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="113" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="118" />
       <source>&lt;p&gt;The configured input file &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting...&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="147" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="152" />
       <source>&lt;p&gt;Some of the dependencies do not have pinned version numbers.&lt;ul&gt;{0}&lt;/ul&gt;The above listed packages will NOT be included in the generated CycloneDX SBOM file as version is a mandatory field.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="170" />
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="183" />
       <source>&lt;p&gt;The SBOM data was written to file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXUtilities.py" line="191" />
+      <source>&lt;p&gt;The SBOM file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>CycloneDXConfigDialog</name>
@@ -7902,21 +7908,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Schema Version:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Name:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Select the SBOM schema version of the SBOM file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select the format of the SBOM file</source>
       <translation type="unfinished" />
     </message>
@@ -7932,16 +7923,6 @@
     </message>
     <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>File Format:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
-      <source>Enter the file path for the SBOM file (leave empty for default)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
       <source>Select to include vulnerability data in the generated SBOM (requires Schema 1.4 or newer)</source>
       <translation type="unfinished" />
     </message>
@@ -7961,6 +7942,41 @@
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Format:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select the SBOM schema version of the SBOM file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Enter the file path for the SBOM file (leave empty for default)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>File Name:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Schema Version:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Select to generate non-compact, readable output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../CycloneDXInterface/CycloneDXConfigDialog.ui" line="0" />
+      <source>Generate Readable Output</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../CycloneDXInterface/CycloneDXConfigDialog.py" line="110" />
       <source>Edit Metadata...</source>
       <translation type="unfinished" />
@@ -78387,28 +78403,28 @@
       <translation type="unfinished">%v/%m 文件</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="52" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="53" />
       <source>Show</source>
       <translation>显示</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="55" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="56" />
       <source>Press to show all files containing an issue</source>
       <translation type="unfinished">按下以统计所有有问题的文件</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="105" />
       <source>Errors</source>
       <translation>错误</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="304" />
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="311" />
       <source>Error: {0}</source>
       <translation type="unfinished">错误:{0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="416" />
+      <location filename="../Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py" line="460" />
       <source>No issues found.</source>
       <translation type="unfinished">未发现问题。</translation>
     </message>
@@ -78424,28 +78440,28 @@
   <context>
     <name>SyntaxCheckerPlugin</name>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="194" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="196" />
       <source>Check Syntax</source>
       <translation>检查语法</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="295" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="213" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="195" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="297" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="215" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="197" />
       <source>&amp;Syntax...</source>
       <translation>语法(&amp;S)…</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="201" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
       <source>Check syntax.</source>
       <translation>检查语法。</translation>
     </message>
     <message>
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="298" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="216" />
-      <location filename="../Plugins/PluginSyntaxChecker.py" line="203" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="300" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="218" />
+      <location filename="../Plugins/PluginSyntaxChecker.py" line="205" />
       <source>&lt;b&gt;Check Syntax...&lt;/b&gt;&lt;p&gt;This checks Python files for syntax errors.&lt;/p&gt;</source>
       <translation>&lt;b&gt;检查语法…&lt;/b&gt;&lt;p&gt;检查 Python 文件的语法错误。&lt;/p&gt;</translation>
     </message>
@@ -85676,7 +85692,7 @@
   <context>
     <name>Utilities</name>
     <message>
-      <location filename="../Utilities/__init__.py" line="1605" />
+      <location filename="../Utilities/__init__.py" line="1616" />
       <source>&lt;p&gt;You may use %-codes as placeholders in the string. Supported codes are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;column of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;directory of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;filename of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;home directory of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;line of the cursor of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;path of the current project&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;selected text of the current editor&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;username of the current user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;the percent sign&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</source>
       <translation>&lt;p&gt;可以在字符串中使用“%-代码”作为占位符。支持的代码有:&lt;table&gt;&lt;tr&gt;&lt;td&gt;%C&lt;/td&gt;&lt;td&gt;当前编辑器的光标所在列&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%D&lt;/td&gt;&lt;td&gt;当前编辑器的文件夹&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%F&lt;/td&gt;&lt;td&gt;当前编辑器的文件名&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%H&lt;/td&gt;&lt;td&gt;当前用户的根目录&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%L&lt;/td&gt;&lt;td&gt;当前编辑器的光标所在行&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%P&lt;/td&gt;&lt;td&gt;当前项目的路径&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%S&lt;/td&gt;&lt;td&gt;当前编辑器中选择的文本&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%U&lt;/td&gt;&lt;td&gt;当前用户的用户名&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;%%&lt;/td&gt;&lt;td&gt;百分比符号&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;</translation>
     </message>
@@ -91499,54 +91515,54 @@
   <context>
     <name>VirtualenvManager</name>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="296" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="304" />
       <source>Add Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="297" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="305" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; exists already. Shall it be replaced?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="369" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="377" />
       <source>Change Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="434" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="370" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="442" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="378" />
       <source>A virtual environment named &lt;b&gt;{0}&lt;/b&gt; does not exist. Aborting!</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="433" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="441" />
       <source>Rename Virtual Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="532" />
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="467" />
-      <source>{0} - {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="474" />
-      <source>Delete Virtual Environments</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
-      <source>Do you really want to delete these virtual environments?</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../VirtualEnv/VirtualenvManager.py" line="539" />
-      <source>Remove Virtual Environments</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../VirtualEnv/VirtualenvManager.py" line="540" />
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="475" />
+      <source>{0} - {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="482" />
+      <source>Delete Virtual Environments</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="483" />
+      <source>Do you really want to delete these virtual environments?</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="547" />
+      <source>Remove Virtual Environments</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../VirtualEnv/VirtualenvManager.py" line="548" />
       <source>Do you really want to remove these virtual environments?</source>
       <translation type="unfinished" />
     </message>

eric ide

mercurial