Sun, 28 Jul 2024 11:46:18 +0200
- Implemented some enhancements related to indicating outdated packages.
- Implemented a check for executed apps before upgrading a package.
--- a/PipxInterface/ConfigurationPage/PipxPage.py Sat Jul 27 19:39:32 2024 +0200 +++ b/PipxInterface/ConfigurationPage/PipxPage.py Sun Jul 28 11:46:18 2024 +0200 @@ -37,6 +37,12 @@ self.indexEdit.setText(Preferences.getPip("PipSearchIndex")) # set initial values + self.autoCheckOutdatedCheckBox.setChecked( + self.__plugin.getPreferences("AutoCheckOutdated") + ) + self.outdatedDependenciesCheckBox.setChecked( + self.__plugin.getPreferences("IncludeOutdatedDependencies") + ) self.recentWorkdirsSpinBox.setValue( self.__plugin.getPreferences("MaxRecentAppWorkdirs") ) @@ -46,5 +52,11 @@ Public slot to save the MQTT Monitor configuration. """ self.__plugin.setPreferences( + "AutoCheckOutdated", self.autoCheckOutdatedCheckBox.isChecked() + ) + self.__plugin.setPreferences( + "IncludeOutdatedDependencies", self.outdatedDependenciesCheckBox.isChecked() + ) + self.__plugin.setPreferences( "MaxRecentAppWorkdirs", self.recentWorkdirsSpinBox.value() )
--- a/PipxInterface/ConfigurationPage/PipxPage.ui Sat Jul 27 19:39:32 2024 +0200 +++ b/PipxInterface/ConfigurationPage/PipxPage.ui Sun Jul 28 11:46:18 2024 +0200 @@ -7,10 +7,10 @@ <x>0</x> <y>0</y> <width>548</width> - <height>300</height> + <height>383</height> </rect> </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> + <layout class="QVBoxLayout" name="verticalLayout_3"> <item> <widget class="QLabel" name="headerLabel"> <property name="text"> @@ -61,6 +61,35 @@ </widget> </item> <item> + <widget class="QGroupBox" name="groupBox"> + <property name="title"> + <string>Outdated Application Packages</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QCheckBox" name="autoCheckOutdatedCheckBox"> + <property name="toolTip"> + <string>Select to determine outdated packages when loading the list of installed packages.</string> + </property> + <property name="text"> + <string>Determine outdated packages automatically</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="outdatedDependenciesCheckBox"> + <property name="toolTip"> + <string>Select to determine packages with any outdated dependencies when determining outdated packages.</string> + </property> + <property name="text"> + <string>Determine packages with outdated dependencies</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> <widget class="QGroupBox" name="groupBox_7"> <property name="title"> <string>Recent Application Working Directories</string> @@ -120,6 +149,12 @@ </item> </layout> </widget> + <tabstops> + <tabstop>indexEdit</tabstop> + <tabstop>autoCheckOutdatedCheckBox</tabstop> + <tabstop>outdatedDependenciesCheckBox</tabstop> + <tabstop>recentWorkdirsSpinBox</tabstop> + </tabstops> <resources/> <connections/> </ui>
--- a/PipxInterface/ConfigurationPage/Ui_PipxPage.py Sat Jul 27 19:39:32 2024 +0200 +++ b/PipxInterface/ConfigurationPage/Ui_PipxPage.py Sun Jul 28 11:46:18 2024 +0200 @@ -1,6 +1,6 @@ # Form implementation generated from reading ui file 'PipxInterface/ConfigurationPage/PipxPage.ui' # -# Created by: PyQt6 UI code generator 6.7.0 +# Created by: PyQt6 UI code generator 6.7.1 # # WARNING: Any manual changes made to this file will be lost when pyuic6 is # run again. Do not edit this file unless you know what you are doing. @@ -12,18 +12,18 @@ class Ui_PipxPage(object): def setupUi(self, PipxPage): PipxPage.setObjectName("PipxPage") - PipxPage.resize(548, 300) - self.verticalLayout_2 = QtWidgets.QVBoxLayout(PipxPage) - self.verticalLayout_2.setObjectName("verticalLayout_2") + PipxPage.resize(548, 383) + self.verticalLayout_3 = QtWidgets.QVBoxLayout(PipxPage) + self.verticalLayout_3.setObjectName("verticalLayout_3") self.headerLabel = QtWidgets.QLabel(parent=PipxPage) self.headerLabel.setObjectName("headerLabel") - self.verticalLayout_2.addWidget(self.headerLabel) + self.verticalLayout_3.addWidget(self.headerLabel) self.line9_3 = QtWidgets.QFrame(parent=PipxPage) self.line9_3.setFrameShape(QtWidgets.QFrame.Shape.HLine) self.line9_3.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) self.line9_3.setFrameShape(QtWidgets.QFrame.Shape.HLine) self.line9_3.setObjectName("line9_3") - self.verticalLayout_2.addWidget(self.line9_3) + self.verticalLayout_3.addWidget(self.line9_3) self.groupBox_2 = QtWidgets.QGroupBox(parent=PipxPage) self.groupBox_2.setObjectName("groupBox_2") self.verticalLayout = QtWidgets.QVBoxLayout(self.groupBox_2) @@ -37,7 +37,18 @@ self.indexLabel.setWordWrap(True) self.indexLabel.setObjectName("indexLabel") self.verticalLayout.addWidget(self.indexLabel) - self.verticalLayout_2.addWidget(self.groupBox_2) + self.verticalLayout_3.addWidget(self.groupBox_2) + self.groupBox = QtWidgets.QGroupBox(parent=PipxPage) + self.groupBox.setObjectName("groupBox") + self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox) + self.verticalLayout_2.setObjectName("verticalLayout_2") + self.autoCheckOutdatedCheckBox = QtWidgets.QCheckBox(parent=self.groupBox) + self.autoCheckOutdatedCheckBox.setObjectName("autoCheckOutdatedCheckBox") + self.verticalLayout_2.addWidget(self.autoCheckOutdatedCheckBox) + self.outdatedDependenciesCheckBox = QtWidgets.QCheckBox(parent=self.groupBox) + self.outdatedDependenciesCheckBox.setObjectName("outdatedDependenciesCheckBox") + self.verticalLayout_2.addWidget(self.outdatedDependenciesCheckBox) + self.verticalLayout_3.addWidget(self.groupBox) self.groupBox_7 = QtWidgets.QGroupBox(parent=PipxPage) self.groupBox_7.setObjectName("groupBox_7") self.hboxlayout = QtWidgets.QHBoxLayout(self.groupBox_7) @@ -53,18 +64,26 @@ self.hboxlayout.addWidget(self.recentWorkdirsSpinBox) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) self.hboxlayout.addItem(spacerItem) - self.verticalLayout_2.addWidget(self.groupBox_7) + self.verticalLayout_3.addWidget(self.groupBox_7) spacerItem1 = QtWidgets.QSpacerItem(20, 73, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding) - self.verticalLayout_2.addItem(spacerItem1) + self.verticalLayout_3.addItem(spacerItem1) self.retranslateUi(PipxPage) QtCore.QMetaObject.connectSlotsByName(PipxPage) + PipxPage.setTabOrder(self.indexEdit, self.autoCheckOutdatedCheckBox) + PipxPage.setTabOrder(self.autoCheckOutdatedCheckBox, self.outdatedDependenciesCheckBox) + PipxPage.setTabOrder(self.outdatedDependenciesCheckBox, self.recentWorkdirsSpinBox) def retranslateUi(self, PipxPage): _translate = QtCore.QCoreApplication.translate self.headerLabel.setText(_translate("PipxPage", "<b>Configure Python Application Management</b>")) self.groupBox_2.setTitle(_translate("PipxPage", "Index URL")) self.indexLabel.setText(_translate("PipxPage", "<b>Note</b>: The index URL is configured on the \'Python Package Management\' page.")) + self.groupBox.setTitle(_translate("PipxPage", "Outdated Application Packages")) + self.autoCheckOutdatedCheckBox.setToolTip(_translate("PipxPage", "Select to determine outdated packages when loading the list of installed packages.")) + self.autoCheckOutdatedCheckBox.setText(_translate("PipxPage", "Determine outdated packages automatically")) + self.outdatedDependenciesCheckBox.setToolTip(_translate("PipxPage", "Select to determine packages with any outdated dependencies when determining outdated packages.")) + self.outdatedDependenciesCheckBox.setText(_translate("PipxPage", "Determine packages with outdated dependencies")) self.groupBox_7.setTitle(_translate("PipxPage", "Recent Application Working Directories")) self.label.setText(_translate("PipxPage", "Number of recent working directories:")) self.recentWorkdirsSpinBox.setToolTip(_translate("PipxPage", "Enter the number of recently used working directories to remember"))
--- a/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.Pipx.html Sat Jul 27 19:39:32 2024 +0200 +++ b/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.Pipx.html Sun Jul 28 11:46:18 2024 +0200 @@ -232,13 +232,14 @@ <dl> <dt>Return:</dt> <dd> -latest version in case the package is outdated and None otherwise +tuple containing the latest version in case the package is outdated + or None otherwise and a flag indicating any outdated dependencies </dd> </dl> <dl> <dt>Return Type:</dt> <dd> -str or None +tuple of (str or None, bool) </dd> </dl> <a NAME="Pipx.createSpecMetadataFile" ID="Pipx.createSpecMetadataFile"></a>
--- a/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxWidget.html Sat Jul 27 19:39:32 2024 +0200 +++ b/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxWidget.html Sun Jul 28 11:46:18 2024 +0200 @@ -43,6 +43,7 @@ <table> <tr><td>AppPathRole</td></tr> <tr><td>LatestVersionRole</td></tr> +<tr><td>OutdatedDependenciesRole</td></tr> <tr><td>PackageColumn</td></tr> <tr><td>PythonVersionColumn</td></tr> <tr><td>VersionColumn</td></tr> @@ -77,6 +78,14 @@ <td>Private slot to ensure that the directory where pipx stores apps is in your PATH environment variable.</td> </tr> <tr> +<td><a href="#PipxWidget.__getAllRunningApps">__getAllRunningApps</a></td> +<td>Private method to determine all running pipx managed apps.</td> +</tr> +<tr> +<td><a href="#PipxWidget.__getRunningApps">__getRunningApps</a></td> +<td>Private method to determine, which app of the given list of apps is running.</td> +</tr> +<tr> <td><a href="#PipxWidget.__initPipxMenu">__initPipxMenu</a></td> <td>Private method to create the super menu and attach it to the super menu button.</td> </tr> @@ -89,10 +98,18 @@ <td>Private slot to install packages to be given by the user.</td> </tr> <tr> +<td><a href="#PipxWidget.__markPackageDependenciesOutdated">__markPackageDependenciesOutdated</a></td> +<td>Private method to mark the given package item as having outdated dependencies.</td> +</tr> +<tr> <td><a href="#PipxWidget.__markPackageOutdated">__markPackageOutdated</a></td> <td>Private method to mark the given package item as outdated.</td> </tr> <tr> +<td><a href="#PipxWidget.__packageApps">__packageApps</a></td> +<td>Private method to determine the apps belonging to a package item.</td> +</tr> +<tr> <td><a href="#PipxWidget.__pipxConfigure">__pipxConfigure</a></td> <td>Private slot to show the pipx configuration page.</td> </tr> @@ -113,6 +130,10 @@ <td>Private method to resize the columns of the packages list.</td> </tr> <tr> +<td><a href="#PipxWidget.__selectedPackageItems">__selectedPackageItems</a></td> +<td>Private method to determine the list of selected package items.</td> +</tr> +<tr> <td><a href="#PipxWidget.__selectedPackages">__selectedPackages</a></td> <td>Private method to determine the list of selected packages.</td> </tr> @@ -216,6 +237,51 @@ in your PATH environment variable. </p> +<a NAME="PipxWidget.__getAllRunningApps" ID="PipxWidget.__getAllRunningApps"></a> +<h4>PipxWidget.__getAllRunningApps</h4> +<b>__getAllRunningApps</b>(<i></i>) +<p> + Private method to determine all running pipx managed apps. +</p> + +<dl> +<dt>Return:</dt> +<dd> +set of running apps +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +set of str +</dd> +</dl> +<a NAME="PipxWidget.__getRunningApps" ID="PipxWidget.__getRunningApps"></a> +<h4>PipxWidget.__getRunningApps</h4> +<b>__getRunningApps</b>(<i>apps</i>) +<p> + Private method to determine, which app of the given list of apps is running. +</p> + +<dl> + +<dt><i>apps</i> (str)</dt> +<dd> +list of apps to check +</dd> +</dl> +<dl> +<dt>Return:</dt> +<dd> +set of running apps +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +set of str +</dd> +</dl> <a NAME="PipxWidget.__initPipxMenu" ID="PipxWidget.__initPipxMenu"></a> <h4>PipxWidget.__initPipxMenu</h4> <b>__initPipxMenu</b>(<i></i>) @@ -238,9 +304,23 @@ Private slot to install packages to be given by the user. </p> +<a NAME="PipxWidget.__markPackageDependenciesOutdated" ID="PipxWidget.__markPackageDependenciesOutdated"></a> +<h4>PipxWidget.__markPackageDependenciesOutdated</h4> +<b>__markPackageDependenciesOutdated</b>(<i>item</i>) +<p> + Private method to mark the given package item as having outdated dependencies. +</p> + +<dl> + +<dt><i>item</i> (QTreeWidgetItem)</dt> +<dd> +reference to the outdated package item +</dd> +</dl> <a NAME="PipxWidget.__markPackageOutdated" ID="PipxWidget.__markPackageOutdated"></a> <h4>PipxWidget.__markPackageOutdated</h4> -<b>__markPackageOutdated</b>(<i>item, latestVersion</i>) +<b>__markPackageOutdated</b>(<i>item, latestVersion, outdatedDependencies</i>) <p> Private method to mark the given package item as outdated. </p> @@ -256,6 +336,32 @@ latest version of the package </dd> </dl> +<a NAME="PipxWidget.__packageApps" ID="PipxWidget.__packageApps"></a> +<h4>PipxWidget.__packageApps</h4> +<b>__packageApps</b>(<i>packageItem</i>) +<p> + Private method to determine the apps belonging to a package item. +</p> + +<dl> + +<dt><i>packageItem</i> (QTreeWidgetItem)</dt> +<dd> +reference to the package item +</dd> +</dl> +<dl> +<dt>Return:</dt> +<dd> +list of app names +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +list of str +</dd> +</dl> <a NAME="PipxWidget.__pipxConfigure" ID="PipxWidget.__pipxConfigure"></a> <h4>PipxWidget.__pipxConfigure</h4> <b>__pipxConfigure</b>(<i></i>) @@ -291,6 +397,25 @@ Private method to resize the columns of the packages list. </p> +<a NAME="PipxWidget.__selectedPackageItems" ID="PipxWidget.__selectedPackageItems"></a> +<h4>PipxWidget.__selectedPackageItems</h4> +<b>__selectedPackageItems</b>(<i></i>) +<p> + Private method to determine the list of selected package items. +</p> + +<dl> +<dt>Return:</dt> +<dd> +list of selected package items +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +list of QTreeWidgetItem +</dd> +</dl> <a NAME="PipxWidget.__selectedPackages" ID="PipxWidget.__selectedPackages"></a> <h4>PipxWidget.__selectedPackages</h4> <b>__selectedPackages</b>(<i></i>) @@ -307,7 +432,7 @@ <dl> <dt>Return Type:</dt> <dd> -list of QTreeWidgetItem +list of str </dd> </dl> <a NAME="PipxWidget.__showInterpreters" ID="PipxWidget.__showInterpreters"></a>
--- a/PipxInterface/Pipx.py Sat Jul 27 19:39:32 2024 +0200 +++ b/PipxInterface/Pipx.py Sun Jul 28 11:46:18 2024 +0200 @@ -441,8 +441,9 @@ @param package name of the package @type str - @return latest version in case the package is outdated and None otherwise - @rtype str or None + @return tuple containing the latest version in case the package is outdated + or None otherwise and a flag indicating any outdated dependencies + @rtype tuple of (str or None, bool) """ args = ["runpip", package, "list", "--outdated", "--format", "json"] if Preferences.getPip("PipSearchIndex"): @@ -458,15 +459,15 @@ "<p>Reason: {1}</p>" ).format(package, output), ) - return None + return None, False outdatedList = json.loads(output) # check if the main package is in the list for outdatedPackage in outdatedList: if outdatedPackage["name"] == package: - return outdatedPackage["latest_version"] + return outdatedPackage["latest_version"], len(outdatedList) > 1 - return None + return None, bool(outdatedList) def upgradePackage(self, package): """
--- a/PipxInterface/PipxWidget.py Sat Jul 27 19:39:32 2024 +0200 +++ b/PipxInterface/PipxWidget.py Sun Jul 28 11:46:18 2024 +0200 @@ -36,6 +36,7 @@ AppPathRole = Qt.ItemDataRole.UserRole VersionRole = Qt.ItemDataRole.UserRole + 1 LatestVersionRole = Qt.ItemDataRole.UserRole + 2 + OutdatedDependenciesRole = Qt.ItemDataRole.UserRole + 3 def __init__(self, plugin, fromEric=True, parent=None): """ @@ -338,10 +339,16 @@ for row in range(self.packagesList.topLevelItemCount()): itm = self.packagesList.topLevelItem(row) package = itm.text(PipxWidget.PackageColumn) - latestVersion = self.__pipx.checkPackageOutdated(package) + latestVersion, outdatedDependencies = self.__pipx.checkPackageOutdated( + package + ) if latestVersion is not None: - self.__markPackageOutdated(itm, latestVersion) - # TODO: check outdated dependencies (configurable) + self.__markPackageOutdated(itm, latestVersion, outdatedDependencies) + elif ( + self.__plugin.getPreferences("IncludeOutdatedDependencies") + and outdatedDependencies + ): + self.__markPackageDependenciesOutdated(itm) self.__resizePackagesColumns() @pyqtSlot() @@ -470,7 +477,7 @@ self.packagesList.resizeColumnToContents(PipxWidget.VersionColumn) self.packagesList.resizeColumnToContents(PipxWidget.PythonVersionColumn) - def __markPackageOutdated(self, item, latestVersion): + def __markPackageOutdated(self, item, latestVersion, outdatedDependencies): """ Private method to mark the given package item as outdated. @@ -481,6 +488,7 @@ """ version = item.data(0, PipxWidget.VersionRole) item.setData(0, PipxWidget.LatestVersionRole, latestVersion) + item.setData(0, PipxWidget.OutdatedDependenciesRole, outdatedDependencies) item.setText( PipxWidget.VersionColumn, self.tr("{0} ({1})", "current version, latest version").format( @@ -489,6 +497,16 @@ ) item.setIcon(PipxWidget.VersionColumn, EricPixmapCache.getIcon("upgrade")) + def __markPackageDependenciesOutdated(self, item): + """ + Private method to mark the given package item as having outdated dependencies. + + @param item reference to the outdated package item + @type QTreeWidgetItem + """ + item.setData(0, PipxWidget.OutdatedDependenciesRole, True) + item.setIcon(PipxWidget.VersionColumn, EricPixmapCache.getIcon("upgrade")) + def __populatePackages(self): """ Private method to populate the packages list. @@ -512,6 +530,10 @@ for app, appPath in package["apps"]: itm = QTreeWidgetItem(topItem, [app]) itm.setData(0, PipxWidget.AppPathRole, appPath) + + if self.__plugin.getPreferences("AutoCheckOutdated"): + self.__checkOutdatedPackages() + self.__resizePackagesColumns() @pyqtSlot() @@ -528,8 +550,12 @@ if itm.isExpanded(): expandedPackages.append(itm.text(PipxWidget.PackageColumn)) latestVersion = itm.data(0, PipxWidget.LatestVersionRole) - if latestVersion is not None: - outdatedPackages[itm.text(PipxWidget.PackageColumn)] = latestVersion + outdatedDependencies = itm.data(0, PipxWidget.OutdatedDependenciesRole) + if latestVersion or outdatedDependencies: + outdatedPackages[itm.text(PipxWidget.PackageColumn)] = ( + latestVersion, + outdatedDependencies, + ) self.__populatePackages() @@ -539,11 +565,16 @@ if package in expandedPackages: itm.setExpanded(True) - if ( - package in outdatedPackages - and itm.data(0, PipxWidget.VersionRole) != outdatedPackages[package] - ): - self.__markPackageOutdated(itm, outdatedPackages[package]) + if package in outdatedPackages: + latestVersion, outdatedDependencies = outdatedPackages[package] + if itm.data(0, PipxWidget.VersionRole) != latestVersion: + self.__markPackageOutdated(itm, latestVersion, outdatedDependencies) + elif ( + itm.data(0, PipxWidget.OutdatedDependenciesRole) + != outdatedDependencies + and outdatedDependencies + ): + self.__markPackageDependenciesOutdated() self.__resizePackagesColumns() @@ -630,9 +661,13 @@ @rtype set of str """ runningApps = set() - - for proc in psutil.process_iter(["name"]): - if proc.info["name"] in apps: + venvs = self.venvsPathEdit.text() + for proc in psutil.process_iter(["name", "cmdline"]): + if ( + proc.info["name"] in apps + and proc.info["cmdline"] + and proc.info["cmdline"][0].startswith(venvs) + ): runningApps.add(proc.info["name"]) return runningApps
--- a/PipxInterface/i18n/pipx_de.ts Sat Jul 27 19:39:32 2024 +0200 +++ b/PipxInterface/i18n/pipx_de.ts Sun Jul 28 11:46:18 2024 +0200 @@ -54,42 +54,42 @@ <translation>Alle Pakete deinstallieren</translation> </message> <message> - <location filename="../Pipx.py" line="455" /> + <location filename="../Pipx.py" line="456" /> <source>Check Outdated Package</source> <translation>Prüfe veraltete Pakete</translation> </message> <message> - <location filename="../Pipx.py" line="456" /> + <location filename="../Pipx.py" line="457" /> <source><p>The status of package <b>{0}</b> could not be determined.</p><p>Reason: {1}</p></source> <translation><p>Der Status des Paketes <b>{0}</b> konnte nicht bestimmt werden.</p><p>Ursache: {1}</p></translation> </message> <message> - <location filename="../Pipx.py" line="483" /> + <location filename="../Pipx.py" line="484" /> <source>Upgrade Package</source> <translation>Paket aktualisieren</translation> </message> <message> - <location filename="../Pipx.py" line="493" /> + <location filename="../Pipx.py" line="494" /> <source>Upgrade All Packages</source> <translation>Alle Pakete aktualisieren</translation> </message> <message> - <location filename="../Pipx.py" line="503" /> + <location filename="../Pipx.py" line="504" /> <source>Upgrade Shared Libraries</source> <translation>Gemeinsame Bibliotheken aktualisieren</translation> </message> <message> - <location filename="../Pipx.py" line="517" /> + <location filename="../Pipx.py" line="518" /> <source>Upgrade Interpreters</source> <translation>Interpreter aktualisieren</translation> </message> <message> - <location filename="../Pipx.py" line="530" /> + <location filename="../Pipx.py" line="531" /> <source>Prune Unused Interpreters</source> <translation>Ungenutzte Interpreter entfernen</translation> </message> <message> - <location filename="../Pipx.py" line="541" /> + <location filename="../Pipx.py" line="542" /> <source>Ensure PATH Modifications</source> <translation>PATH-Änderungen sicherstellen</translation> </message> @@ -296,6 +296,31 @@ </message> <message> <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Outdated Application Packages</source> + <translation>Veraltete Anwendungspakete</translation> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Select to determine outdated packages when loading the list of installed packages.</source> + <translation>Auswählen, um veraltete Pakete beim Laden der Liste installierter Pakete zu bestimmen.</translation> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Determine outdated packages automatically</source> + <translation>Automatische Ermittlung veralteter Pakete</translation> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Select to determine packages with any outdated dependencies when determining outdated packages.</source> + <translation>Auswählen, um Pakete mit veralteten Abhängigkeiten bei der Ermittlung veralteter Pakete zu bestimmen.</translation> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Determine packages with outdated dependencies</source> + <translation>Ermittle Pakete mit veralteten Abhängigkeiten</translation> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> <source>Recent Application Working Directories</source> <translation>Arbeitsverzeichnisse für Anwendungen</translation> </message> @@ -434,172 +459,184 @@ <context> <name>PipxWidget</name> <message> - <location filename="../PipxWidget.py" line="105" /> + <location filename="../PipxWidget.py" line="108" /> <source>Install</source> <translation>Installieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="199" /> - <location filename="../PipxWidget.py" line="107" /> + <location filename="../PipxWidget.py" line="202" /> + <location filename="../PipxWidget.py" line="110" /> <source>Install Packages</source> <translation>Pakete installieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="218" /> - <location filename="../PipxWidget.py" line="110" /> + <location filename="../PipxWidget.py" line="221" /> + <location filename="../PipxWidget.py" line="113" /> <source>Install All Packages</source> <translation>Alle Pakete installieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="114" /> + <location filename="../PipxWidget.py" line="117" /> <source>Re-Install Selected Package</source> <translation>Ausgewähltes Paket neu installieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="316" /> - <location filename="../PipxWidget.py" line="117" /> + <location filename="../PipxWidget.py" line="319" /> + <location filename="../PipxWidget.py" line="120" /> <source>Re-Install All Packages</source> <translation>Alle Pakete neu installieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="274" /> - <location filename="../PipxWidget.py" line="265" /> - <location filename="../PipxWidget.py" line="253" /> - <location filename="../PipxWidget.py" line="237" /> - <location filename="../PipxWidget.py" line="121" /> + <location filename="../PipxWidget.py" line="277" /> + <location filename="../PipxWidget.py" line="268" /> + <location filename="../PipxWidget.py" line="256" /> + <location filename="../PipxWidget.py" line="240" /> + <location filename="../PipxWidget.py" line="124" /> <source>Create Spec Metadata File</source> <translation>Erzeuge Spec-Metadaten-Datei</translation> </message> <message> - <location filename="../PipxWidget.py" line="128" /> + <location filename="../PipxWidget.py" line="131" /> <source>Upgrade</source> <translation>Aktualisieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="130" /> + <location filename="../PipxWidget.py" line="133" /> <source>Check Outdated Packages</source> <translation>Prüfe veraltete Pakete</translation> </message> <message> - <location filename="../PipxWidget.py" line="134" /> + <location filename="../PipxWidget.py" line="364" /> + <location filename="../PipxWidget.py" line="137" /> <source>Upgrade Selected Package</source> <translation>Ausgewähltes Paket aktualisieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="137" /> + <location filename="../PipxWidget.py" line="385" /> + <location filename="../PipxWidget.py" line="140" /> <source>Upgrade All Packages</source> <translation>Alle Pakete aktualisieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="141" /> + <location filename="../PipxWidget.py" line="144" /> <source>Upgrade Shared Libraries</source> <translation>Gemeinsame Bibliotheken aktualisieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="148" /> + <location filename="../PipxWidget.py" line="151" /> <source>Uninstall</source> <translation>Deinstallieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="150" /> + <location filename="../PipxWidget.py" line="153" /> <source>Uninstall Selected Package</source> <translation>Ausgewähltes Paket deinstallieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="392" /> - <location filename="../PipxWidget.py" line="153" /> + <location filename="../PipxWidget.py" line="427" /> + <location filename="../PipxWidget.py" line="156" /> <source>Uninstall All Packages</source> <translation>Alle Pakete deinstallieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="168" /> + <location filename="../PipxWidget.py" line="171" /> <source>Standalone Interpreters</source> <translation>Eigenständige Interpreter</translation> </message> <message> - <location filename="../PipxWidget.py" line="172" /> + <location filename="../PipxWidget.py" line="175" /> <source>Ensure PATH Modifications</source> <translation>PATH-Änderungen sicherstellen</translation> </message> <message> - <location filename="../PipxWidget.py" line="175" /> + <location filename="../PipxWidget.py" line="178" /> <source>Configure...</source> <translation>Einstellungen...</translation> </message> <message> - <location filename="../PipxWidget.py" line="239" /> + <location filename="../PipxWidget.py" line="242" /> <source>JSON Files (*.json);;All Files (*)</source> <translation>JSON Dateien (*.json);;Alle Dateien (*)</translation> </message> <message> - <location filename="../PipxWidget.py" line="240" /> + <location filename="../PipxWidget.py" line="243" /> <source>JSON Files (*.json)</source> <translation>JSON-Dateien (*.json)</translation> </message> <message> - <location filename="../PipxWidget.py" line="254" /> + <location filename="../PipxWidget.py" line="257" /> <source><p>The file <b>{0}</b> exists already. Overwrite it?</p></source> <translation><p>Die Datei <b>{0}</b> existiert bereits. Überschreiben?</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="266" /> + <location filename="../PipxWidget.py" line="269" /> <source><p>The spec metadata file <b>{0}</b> was created successfully.</p></source> <translation><p>Die Spec-Metadaten-Datei <b>{0}</b> wurde erfolgreich erzeugt.</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="275" /> + <location filename="../PipxWidget.py" line="278" /> <source><p>The spec metadata file <b>{0}</b> could not be created.</p><p>Reason: {1}</p></source> <translation><p>Die Spec-Metadaten-Datei <b>{0}</b> konnte nicht erzeugt werden.</p><p>Ursache: {1}</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="291" /> + <location filename="../PipxWidget.py" line="294" /> <source>Re-Install Package</source> <translation>Paket neu installieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="292" /> + <location filename="../PipxWidget.py" line="295" /> <source><p>Shall the package <b>{0}</b> really be reinstalled?</p></source> <translation><p>Soll das Paket <b>{0}</b> wirklich neu installiert werden?</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="317" /> + <location filename="../PipxWidget.py" line="320" /> <source>Do you really want to reinstall all packages?</source> <translation>Sollen wirklich alle Pakete neu installiert werden?</translation> </message> <message> - <location filename="../PipxWidget.py" line="376" /> + <location filename="../PipxWidget.py" line="365" /> + <source><p>The selected package cannot be upgraded because some of its apps are running.</p><ul><li>{0}</li></ul><p>Stop these apps and try again.</p></source> + <translation><p>Das ausgewählte Paket kann nicht aktualisiert werden, da einige seiner Anwendungen ausgeführt werden.</p><ul><li>{0}</li></ul><p>Beende diese Anwendungen und versuche es erneut.</p></translation> + </message> + <message> + <location filename="../PipxWidget.py" line="386" /> + <source><p>The packages cannot be upgraded because some of their apps are running.</p><ul><li>{0}</li></ul><p>Stop these apps and try again.</p></source> + <translation><p>Die Pakete können nicht aktualisiert werden, da einige ihrer Anwendungen ausgeführt werden.</p><ul><li>{0}</li></ul><p>Beende diese Anwendungen und versuche es erneut.</p></translation> + </message> + <message> + <location filename="../PipxWidget.py" line="411" /> <source>Uninstall Package</source> <translation>Paket deinstallieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="377" /> + <location filename="../PipxWidget.py" line="412" /> <source><p>Shall the package <b>{0}</b> really be uninstalled?</p></source> <translation><p>Soll das Paket <b>{0}</b> wirklich deinstalliert werden?</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="393" /> + <location filename="../PipxWidget.py" line="428" /> <source><p>Do you really want to uninstall <b>ALL</b> packages?</p></source> <translation><p>Sollen wirklich <b>ALLE</b> Pakete deinstalliert werden?</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="433" /> + <location filename="../PipxWidget.py" line="468" /> <source><b>pipx Version {0}</b></source> <translation><b>pipx Version {0}</b></translation> </message> <message> - <location filename="../PipxWidget.py" line="458" /> + <location filename="../PipxWidget.py" line="494" /> <source>{0} ({1})</source> <comment>current version, latest version</comment> <translation>{0} ({1})</translation> </message> <message> - <location filename="../PipxWidget.py" line="476" /> + <location filename="../PipxWidget.py" line="523" /> <source>{0}{1}</source> <comment>Python version, standalone indicator</comment> <translation>{0}{1}</translation> </message> <message> - <location filename="../PipxWidget.py" line="478" /> + <location filename="../PipxWidget.py" line="525" /> <source> (standalone)</source> <translation> (eigenständig)</translation> </message> @@ -672,30 +709,30 @@ <context> <name>PluginPipxInterface</name> <message> - <location filename="../../PluginPipxInterface.py" line="188" /> + <location filename="../../PluginPipxInterface.py" line="192" /> + <location filename="../../PluginPipxInterface.py" line="191" /> <location filename="../../PluginPipxInterface.py" line="187" /> - <location filename="../../PluginPipxInterface.py" line="183" /> - <location filename="../../PluginPipxInterface.py" line="70" /> + <location filename="../../PluginPipxInterface.py" line="72" /> <source>PyPI Application Management</source> <translation>PyPI Anwendungsmanagement</translation> </message> <message> - <location filename="../../PluginPipxInterface.py" line="114" /> + <location filename="../../PluginPipxInterface.py" line="116" /> <source>Python Application Management</source> <translation>Python Anwendungsmanagement</translation> </message> <message> - <location filename="../../PluginPipxInterface.py" line="189" /> + <location filename="../../PluginPipxInterface.py" line="193" /> <source>Ctrl+Alt+Shift+A</source> <translation>Ctrl+Alt+Shift+A</translation> </message> <message> - <location filename="../../PluginPipxInterface.py" line="195" /> + <location filename="../../PluginPipxInterface.py" line="199" /> <source>Switch the input focus to the PyPI Application Management window.</source> <translation>Schalte den Eingabefokus auf die PyPI Anwendungsverwaltung um.</translation> </message> <message> - <location filename="../../PluginPipxInterface.py" line="198" /> + <location filename="../../PluginPipxInterface.py" line="202" /> <source><b>Activate PyPI Application Management</b><p>This switches the input focus to the PyPI Application Management window.</p></source> <translation><b>Aktiviere PyPI Anwendungsmanagement</b><p>Dies schaltet den Eingabefokus auf die PyPI Anwendungsverwaltung um.</p></translation> </message>
--- a/PipxInterface/i18n/pipx_empty.ts Sat Jul 27 19:39:32 2024 +0200 +++ b/PipxInterface/i18n/pipx_empty.ts Sun Jul 28 11:46:18 2024 +0200 @@ -54,42 +54,42 @@ <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="455" /> + <location filename="../Pipx.py" line="456" /> <source>Check Outdated Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="456" /> + <location filename="../Pipx.py" line="457" /> <source><p>The status of package <b>{0}</b> could not be determined.</p><p>Reason: {1}</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="483" /> + <location filename="../Pipx.py" line="484" /> <source>Upgrade Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="493" /> + <location filename="../Pipx.py" line="494" /> <source>Upgrade All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="503" /> + <location filename="../Pipx.py" line="504" /> <source>Upgrade Shared Libraries</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="517" /> + <location filename="../Pipx.py" line="518" /> <source>Upgrade Interpreters</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="530" /> + <location filename="../Pipx.py" line="531" /> <source>Prune Unused Interpreters</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="541" /> + <location filename="../Pipx.py" line="542" /> <source>Ensure PATH Modifications</source> <translation type="unfinished" /> </message> @@ -296,6 +296,31 @@ </message> <message> <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Outdated Application Packages</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Select to determine outdated packages when loading the list of installed packages.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Determine outdated packages automatically</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Select to determine packages with any outdated dependencies when determining outdated packages.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Determine packages with outdated dependencies</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> <source>Recent Application Working Directories</source> <translation type="unfinished" /> </message> @@ -434,172 +459,184 @@ <context> <name>PipxWidget</name> <message> - <location filename="../PipxWidget.py" line="105" /> + <location filename="../PipxWidget.py" line="108" /> <source>Install</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="199" /> - <location filename="../PipxWidget.py" line="107" /> + <location filename="../PipxWidget.py" line="202" /> + <location filename="../PipxWidget.py" line="110" /> <source>Install Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="218" /> - <location filename="../PipxWidget.py" line="110" /> + <location filename="../PipxWidget.py" line="221" /> + <location filename="../PipxWidget.py" line="113" /> <source>Install All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="114" /> + <location filename="../PipxWidget.py" line="117" /> <source>Re-Install Selected Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="316" /> - <location filename="../PipxWidget.py" line="117" /> + <location filename="../PipxWidget.py" line="319" /> + <location filename="../PipxWidget.py" line="120" /> <source>Re-Install All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="274" /> - <location filename="../PipxWidget.py" line="265" /> - <location filename="../PipxWidget.py" line="253" /> - <location filename="../PipxWidget.py" line="237" /> - <location filename="../PipxWidget.py" line="121" /> + <location filename="../PipxWidget.py" line="277" /> + <location filename="../PipxWidget.py" line="268" /> + <location filename="../PipxWidget.py" line="256" /> + <location filename="../PipxWidget.py" line="240" /> + <location filename="../PipxWidget.py" line="124" /> <source>Create Spec Metadata File</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="128" /> + <location filename="../PipxWidget.py" line="131" /> <source>Upgrade</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="130" /> + <location filename="../PipxWidget.py" line="133" /> <source>Check Outdated Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="134" /> + <location filename="../PipxWidget.py" line="364" /> + <location filename="../PipxWidget.py" line="137" /> <source>Upgrade Selected Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="137" /> + <location filename="../PipxWidget.py" line="385" /> + <location filename="../PipxWidget.py" line="140" /> <source>Upgrade All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="141" /> + <location filename="../PipxWidget.py" line="144" /> <source>Upgrade Shared Libraries</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="148" /> + <location filename="../PipxWidget.py" line="151" /> <source>Uninstall</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="150" /> + <location filename="../PipxWidget.py" line="153" /> <source>Uninstall Selected Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="392" /> - <location filename="../PipxWidget.py" line="153" /> + <location filename="../PipxWidget.py" line="427" /> + <location filename="../PipxWidget.py" line="156" /> <source>Uninstall All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="168" /> + <location filename="../PipxWidget.py" line="171" /> <source>Standalone Interpreters</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="172" /> - <source>Ensure PATH Modifications</source> - <translation type="unfinished" /> - </message> - <message> <location filename="../PipxWidget.py" line="175" /> + <source>Ensure PATH Modifications</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.py" line="178" /> <source>Configure...</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="239" /> + <location filename="../PipxWidget.py" line="242" /> <source>JSON Files (*.json);;All Files (*)</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="240" /> + <location filename="../PipxWidget.py" line="243" /> <source>JSON Files (*.json)</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="254" /> + <location filename="../PipxWidget.py" line="257" /> <source><p>The file <b>{0}</b> exists already. Overwrite it?</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="266" /> + <location filename="../PipxWidget.py" line="269" /> <source><p>The spec metadata file <b>{0}</b> was created successfully.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="275" /> + <location filename="../PipxWidget.py" line="278" /> <source><p>The spec metadata file <b>{0}</b> could not be created.</p><p>Reason: {1}</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="291" /> + <location filename="../PipxWidget.py" line="294" /> <source>Re-Install Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="292" /> + <location filename="../PipxWidget.py" line="295" /> <source><p>Shall the package <b>{0}</b> really be reinstalled?</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="317" /> + <location filename="../PipxWidget.py" line="320" /> <source>Do you really want to reinstall all packages?</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="376" /> + <location filename="../PipxWidget.py" line="365" /> + <source><p>The selected package cannot be upgraded because some of its apps are running.</p><ul><li>{0}</li></ul><p>Stop these apps and try again.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.py" line="386" /> + <source><p>The packages cannot be upgraded because some of their apps are running.</p><ul><li>{0}</li></ul><p>Stop these apps and try again.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.py" line="411" /> <source>Uninstall Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="377" /> + <location filename="../PipxWidget.py" line="412" /> <source><p>Shall the package <b>{0}</b> really be uninstalled?</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="393" /> + <location filename="../PipxWidget.py" line="428" /> <source><p>Do you really want to uninstall <b>ALL</b> packages?</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="433" /> + <location filename="../PipxWidget.py" line="468" /> <source><b>pipx Version {0}</b></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="458" /> + <location filename="../PipxWidget.py" line="494" /> <source>{0} ({1})</source> <comment>current version, latest version</comment> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="476" /> + <location filename="../PipxWidget.py" line="523" /> <source>{0}{1}</source> <comment>Python version, standalone indicator</comment> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="478" /> + <location filename="../PipxWidget.py" line="525" /> <source> (standalone)</source> <translation type="unfinished" /> </message> @@ -672,30 +709,30 @@ <context> <name>PluginPipxInterface</name> <message> - <location filename="../../PluginPipxInterface.py" line="188" /> + <location filename="../../PluginPipxInterface.py" line="192" /> + <location filename="../../PluginPipxInterface.py" line="191" /> <location filename="../../PluginPipxInterface.py" line="187" /> - <location filename="../../PluginPipxInterface.py" line="183" /> - <location filename="../../PluginPipxInterface.py" line="70" /> + <location filename="../../PluginPipxInterface.py" line="72" /> <source>PyPI Application Management</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginPipxInterface.py" line="114" /> + <location filename="../../PluginPipxInterface.py" line="116" /> <source>Python Application Management</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginPipxInterface.py" line="189" /> + <location filename="../../PluginPipxInterface.py" line="193" /> <source>Ctrl+Alt+Shift+A</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginPipxInterface.py" line="195" /> + <location filename="../../PluginPipxInterface.py" line="199" /> <source>Switch the input focus to the PyPI Application Management window.</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginPipxInterface.py" line="198" /> + <location filename="../../PluginPipxInterface.py" line="202" /> <source><b>Activate PyPI Application Management</b><p>This switches the input focus to the PyPI Application Management window.</p></source> <translation type="unfinished" /> </message>
--- a/PipxInterface/i18n/pipx_en.ts Sat Jul 27 19:39:32 2024 +0200 +++ b/PipxInterface/i18n/pipx_en.ts Sun Jul 28 11:46:18 2024 +0200 @@ -54,42 +54,42 @@ <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="455" /> + <location filename="../Pipx.py" line="456" /> <source>Check Outdated Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="456" /> + <location filename="../Pipx.py" line="457" /> <source><p>The status of package <b>{0}</b> could not be determined.</p><p>Reason: {1}</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="483" /> + <location filename="../Pipx.py" line="484" /> <source>Upgrade Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="493" /> + <location filename="../Pipx.py" line="494" /> <source>Upgrade All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="503" /> + <location filename="../Pipx.py" line="504" /> <source>Upgrade Shared Libraries</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="517" /> + <location filename="../Pipx.py" line="518" /> <source>Upgrade Interpreters</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="530" /> + <location filename="../Pipx.py" line="531" /> <source>Prune Unused Interpreters</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="541" /> + <location filename="../Pipx.py" line="542" /> <source>Ensure PATH Modifications</source> <translation type="unfinished" /> </message> @@ -296,6 +296,31 @@ </message> <message> <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Outdated Application Packages</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Select to determine outdated packages when loading the list of installed packages.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Determine outdated packages automatically</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Select to determine packages with any outdated dependencies when determining outdated packages.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Determine packages with outdated dependencies</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> <source>Recent Application Working Directories</source> <translation type="unfinished" /> </message> @@ -434,172 +459,184 @@ <context> <name>PipxWidget</name> <message> - <location filename="../PipxWidget.py" line="105" /> + <location filename="../PipxWidget.py" line="108" /> <source>Install</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="199" /> - <location filename="../PipxWidget.py" line="107" /> + <location filename="../PipxWidget.py" line="202" /> + <location filename="../PipxWidget.py" line="110" /> <source>Install Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="218" /> - <location filename="../PipxWidget.py" line="110" /> + <location filename="../PipxWidget.py" line="221" /> + <location filename="../PipxWidget.py" line="113" /> <source>Install All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="114" /> + <location filename="../PipxWidget.py" line="117" /> <source>Re-Install Selected Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="316" /> - <location filename="../PipxWidget.py" line="117" /> + <location filename="../PipxWidget.py" line="319" /> + <location filename="../PipxWidget.py" line="120" /> <source>Re-Install All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="274" /> - <location filename="../PipxWidget.py" line="265" /> - <location filename="../PipxWidget.py" line="253" /> - <location filename="../PipxWidget.py" line="237" /> - <location filename="../PipxWidget.py" line="121" /> + <location filename="../PipxWidget.py" line="277" /> + <location filename="../PipxWidget.py" line="268" /> + <location filename="../PipxWidget.py" line="256" /> + <location filename="../PipxWidget.py" line="240" /> + <location filename="../PipxWidget.py" line="124" /> <source>Create Spec Metadata File</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="128" /> + <location filename="../PipxWidget.py" line="131" /> <source>Upgrade</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="130" /> + <location filename="../PipxWidget.py" line="133" /> <source>Check Outdated Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="134" /> + <location filename="../PipxWidget.py" line="364" /> + <location filename="../PipxWidget.py" line="137" /> <source>Upgrade Selected Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="137" /> + <location filename="../PipxWidget.py" line="385" /> + <location filename="../PipxWidget.py" line="140" /> <source>Upgrade All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="141" /> + <location filename="../PipxWidget.py" line="144" /> <source>Upgrade Shared Libraries</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="148" /> + <location filename="../PipxWidget.py" line="151" /> <source>Uninstall</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="150" /> + <location filename="../PipxWidget.py" line="153" /> <source>Uninstall Selected Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="392" /> - <location filename="../PipxWidget.py" line="153" /> + <location filename="../PipxWidget.py" line="427" /> + <location filename="../PipxWidget.py" line="156" /> <source>Uninstall All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="168" /> + <location filename="../PipxWidget.py" line="171" /> <source>Standalone Interpreters</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="172" /> - <source>Ensure PATH Modifications</source> - <translation type="unfinished" /> - </message> - <message> <location filename="../PipxWidget.py" line="175" /> + <source>Ensure PATH Modifications</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.py" line="178" /> <source>Configure...</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="239" /> + <location filename="../PipxWidget.py" line="242" /> <source>JSON Files (*.json);;All Files (*)</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="240" /> + <location filename="../PipxWidget.py" line="243" /> <source>JSON Files (*.json)</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="254" /> + <location filename="../PipxWidget.py" line="257" /> <source><p>The file <b>{0}</b> exists already. Overwrite it?</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="266" /> + <location filename="../PipxWidget.py" line="269" /> <source><p>The spec metadata file <b>{0}</b> was created successfully.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="275" /> + <location filename="../PipxWidget.py" line="278" /> <source><p>The spec metadata file <b>{0}</b> could not be created.</p><p>Reason: {1}</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="291" /> + <location filename="../PipxWidget.py" line="294" /> <source>Re-Install Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="292" /> + <location filename="../PipxWidget.py" line="295" /> <source><p>Shall the package <b>{0}</b> really be reinstalled?</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="317" /> + <location filename="../PipxWidget.py" line="320" /> <source>Do you really want to reinstall all packages?</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="376" /> + <location filename="../PipxWidget.py" line="365" /> + <source><p>The selected package cannot be upgraded because some of its apps are running.</p><ul><li>{0}</li></ul><p>Stop these apps and try again.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.py" line="386" /> + <source><p>The packages cannot be upgraded because some of their apps are running.</p><ul><li>{0}</li></ul><p>Stop these apps and try again.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.py" line="411" /> <source>Uninstall Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="377" /> + <location filename="../PipxWidget.py" line="412" /> <source><p>Shall the package <b>{0}</b> really be uninstalled?</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="393" /> + <location filename="../PipxWidget.py" line="428" /> <source><p>Do you really want to uninstall <b>ALL</b> packages?</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="433" /> + <location filename="../PipxWidget.py" line="468" /> <source><b>pipx Version {0}</b></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="458" /> + <location filename="../PipxWidget.py" line="494" /> <source>{0} ({1})</source> <comment>current version, latest version</comment> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="476" /> + <location filename="../PipxWidget.py" line="523" /> <source>{0}{1}</source> <comment>Python version, standalone indicator</comment> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="478" /> + <location filename="../PipxWidget.py" line="525" /> <source> (standalone)</source> <translation type="unfinished" /> </message> @@ -672,30 +709,30 @@ <context> <name>PluginPipxInterface</name> <message> - <location filename="../../PluginPipxInterface.py" line="188" /> + <location filename="../../PluginPipxInterface.py" line="192" /> + <location filename="../../PluginPipxInterface.py" line="191" /> <location filename="../../PluginPipxInterface.py" line="187" /> - <location filename="../../PluginPipxInterface.py" line="183" /> - <location filename="../../PluginPipxInterface.py" line="70" /> + <location filename="../../PluginPipxInterface.py" line="72" /> <source>PyPI Application Management</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginPipxInterface.py" line="114" /> + <location filename="../../PluginPipxInterface.py" line="116" /> <source>Python Application Management</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginPipxInterface.py" line="189" /> + <location filename="../../PluginPipxInterface.py" line="193" /> <source>Ctrl+Alt+Shift+A</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginPipxInterface.py" line="195" /> + <location filename="../../PluginPipxInterface.py" line="199" /> <source>Switch the input focus to the PyPI Application Management window.</source> <translation type="unfinished" /> </message> <message> - <location filename="../../PluginPipxInterface.py" line="198" /> + <location filename="../../PluginPipxInterface.py" line="202" /> <source><b>Activate PyPI Application Management</b><p>This switches the input focus to the PyPI Application Management window.</p></source> <translation type="unfinished" /> </message>
--- a/PipxInterface/i18n/pipx_es.ts Sat Jul 27 19:39:32 2024 +0200 +++ b/PipxInterface/i18n/pipx_es.ts Sun Jul 28 11:46:18 2024 +0200 @@ -24,72 +24,72 @@ <translation>pipx no se ha podido iniciar.</translation> </message> <message> - <location filename="../Pipx.py" line="288" /> + <location filename="../Pipx.py" line="284" /> <source>Install Packages</source> <translation>Instalar Packages</translation> </message> <message> - <location filename="../Pipx.py" line="333" /> + <location filename="../Pipx.py" line="329" /> <source>Install All Packages</source> <translation>Instalar Todos los Packages</translation> </message> <message> - <location filename="../Pipx.py" line="383" /> + <location filename="../Pipx.py" line="379" /> <source>Re-Install Package</source> <translation>Reinstalar Package</translation> </message> <message> - <location filename="../Pipx.py" line="414" /> + <location filename="../Pipx.py" line="410" /> <source>Re-Install All Packages</source> <translation>Reinstalar Todos los Packages</translation> </message> <message> - <location filename="../Pipx.py" line="427" /> + <location filename="../Pipx.py" line="423" /> <source>Uninstall Package</source> <translation>Desinstalar Package</translation> </message> <message> - <location filename="../Pipx.py" line="437" /> + <location filename="../Pipx.py" line="433" /> <source>Uninstall All Packages</source> <translation>Desinstalar Todos los Packages</translation> </message> <message> - <location filename="../Pipx.py" line="459" /> + <location filename="../Pipx.py" line="456" /> <source>Check Outdated Package</source> <translation>Comprobar Package Desactualizado</translation> </message> <message> - <location filename="../Pipx.py" line="460" /> + <location filename="../Pipx.py" line="457" /> <source><p>The status of package <b>{0}</b> could not be determined.</p><p>Reason: {1}</p></source> <translation><p>El status del package <b>{0}</b> no se ha podido determinar.</p><p>Razón: {1}</p></translation> </message> <message> - <location filename="../Pipx.py" line="487" /> + <location filename="../Pipx.py" line="484" /> <source>Upgrade Package</source> <translation>Actualizar Package</translation> </message> <message> - <location filename="../Pipx.py" line="497" /> + <location filename="../Pipx.py" line="494" /> <source>Upgrade All Packages</source> <translation>Actualizar Todos los Packages</translation> </message> <message> - <location filename="../Pipx.py" line="507" /> + <location filename="../Pipx.py" line="504" /> <source>Upgrade Shared Libraries</source> <translation>Actualizar Bibliotecas Compartidas</translation> </message> <message> - <location filename="../Pipx.py" line="521" /> + <location filename="../Pipx.py" line="518" /> <source>Upgrade Interpreters</source> <translation>Actualizar Intérpretes</translation> </message> <message> - <location filename="../Pipx.py" line="534" /> + <location filename="../Pipx.py" line="531" /> <source>Prune Unused Interpreters</source> <translation>Limpiar Intérpretes no Utililizados</translation> </message> <message> - <location filename="../Pipx.py" line="545" /> + <location filename="../Pipx.py" line="542" /> <source>Ensure PATH Modifications</source> <translation>Asegurar modificaciones de PATH</translation> </message> @@ -296,6 +296,31 @@ </message> <message> <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Outdated Application Packages</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Select to determine outdated packages when loading the list of installed packages.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Determine outdated packages automatically</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Select to determine packages with any outdated dependencies when determining outdated packages.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Determine packages with outdated dependencies</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> <source>Recent Application Working Directories</source> <translation>Directorios de Trabajo de Aplicación Recientes</translation> </message> @@ -434,172 +459,184 @@ <context> <name>PipxWidget</name> <message> - <location filename="../PipxWidget.py" line="105" /> + <location filename="../PipxWidget.py" line="108" /> <source>Install</source> <translation>Instalar</translation> </message> <message> - <location filename="../PipxWidget.py" line="199" /> - <location filename="../PipxWidget.py" line="107" /> + <location filename="../PipxWidget.py" line="202" /> + <location filename="../PipxWidget.py" line="110" /> <source>Install Packages</source> <translation>Instalar Packages</translation> </message> <message> - <location filename="../PipxWidget.py" line="218" /> - <location filename="../PipxWidget.py" line="110" /> + <location filename="../PipxWidget.py" line="221" /> + <location filename="../PipxWidget.py" line="113" /> <source>Install All Packages</source> <translation>Instalar Todos los Packages</translation> </message> <message> - <location filename="../PipxWidget.py" line="114" /> + <location filename="../PipxWidget.py" line="117" /> <source>Re-Install Selected Package</source> <translation>Reinstalar Package Seleccionado</translation> </message> <message> - <location filename="../PipxWidget.py" line="316" /> - <location filename="../PipxWidget.py" line="117" /> + <location filename="../PipxWidget.py" line="319" /> + <location filename="../PipxWidget.py" line="120" /> <source>Re-Install All Packages</source> <translation>Reinstalar Todos los Packages</translation> </message> <message> - <location filename="../PipxWidget.py" line="274" /> - <location filename="../PipxWidget.py" line="265" /> - <location filename="../PipxWidget.py" line="253" /> - <location filename="../PipxWidget.py" line="237" /> - <location filename="../PipxWidget.py" line="121" /> + <location filename="../PipxWidget.py" line="277" /> + <location filename="../PipxWidget.py" line="268" /> + <location filename="../PipxWidget.py" line="256" /> + <location filename="../PipxWidget.py" line="240" /> + <location filename="../PipxWidget.py" line="124" /> <source>Create Spec Metadata File</source> <translation>Crear Archivo de Metadatos de Spec</translation> </message> <message> - <location filename="../PipxWidget.py" line="128" /> + <location filename="../PipxWidget.py" line="131" /> <source>Upgrade</source> <translation>Actualizar</translation> </message> <message> - <location filename="../PipxWidget.py" line="130" /> + <location filename="../PipxWidget.py" line="133" /> <source>Check Outdated Packages</source> <translation>Comprobar Packages Desactualizados</translation> </message> <message> - <location filename="../PipxWidget.py" line="134" /> + <location filename="../PipxWidget.py" line="364" /> + <location filename="../PipxWidget.py" line="137" /> <source>Upgrade Selected Package</source> <translation>Actualizar Package Seleccionado</translation> </message> <message> - <location filename="../PipxWidget.py" line="137" /> + <location filename="../PipxWidget.py" line="385" /> + <location filename="../PipxWidget.py" line="140" /> <source>Upgrade All Packages</source> <translation>Actualizar Todos los Packages</translation> </message> <message> - <location filename="../PipxWidget.py" line="141" /> + <location filename="../PipxWidget.py" line="144" /> <source>Upgrade Shared Libraries</source> <translation>Actualizar Bibliotecas Compartidas</translation> </message> <message> - <location filename="../PipxWidget.py" line="148" /> + <location filename="../PipxWidget.py" line="151" /> <source>Uninstall</source> <translation>Desinstalar</translation> </message> <message> - <location filename="../PipxWidget.py" line="150" /> + <location filename="../PipxWidget.py" line="153" /> <source>Uninstall Selected Package</source> <translation>Desinstalar Package Seleccionado</translation> </message> <message> - <location filename="../PipxWidget.py" line="394" /> - <location filename="../PipxWidget.py" line="153" /> + <location filename="../PipxWidget.py" line="427" /> + <location filename="../PipxWidget.py" line="156" /> <source>Uninstall All Packages</source> <translation>Desinstalar Todos los Packages</translation> </message> <message> - <location filename="../PipxWidget.py" line="168" /> + <location filename="../PipxWidget.py" line="171" /> <source>Standalone Interpreters</source> <translation>Intérpretes Independientes</translation> </message> <message> - <location filename="../PipxWidget.py" line="172" /> + <location filename="../PipxWidget.py" line="175" /> <source>Ensure PATH Modifications</source> <translation>Asegurar modificaciones de PATH</translation> </message> <message> - <location filename="../PipxWidget.py" line="175" /> + <location filename="../PipxWidget.py" line="178" /> <source>Configure...</source> <translation>Configurar...</translation> </message> <message> - <location filename="../PipxWidget.py" line="239" /> + <location filename="../PipxWidget.py" line="242" /> <source>JSON Files (*.json);;All Files (*)</source> <translation>Archivos JSON (*.json);;Todos los Archivos (*)</translation> </message> <message> - <location filename="../PipxWidget.py" line="240" /> + <location filename="../PipxWidget.py" line="243" /> <source>JSON Files (*.json)</source> <translation>Archivos JSON (*.json)</translation> </message> <message> - <location filename="../PipxWidget.py" line="254" /> + <location filename="../PipxWidget.py" line="257" /> <source><p>The file <b>{0}</b> exists already. Overwrite it?</p></source> <translation><p>El archivo <b>{0}</b> ya existe. ¿Desea sobreescribirlo?</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="266" /> + <location filename="../PipxWidget.py" line="269" /> <source><p>The spec metadata file <b>{0}</b> was created successfully.</p></source> <translation><p>El archivo de metadatos de spec <b>{0}</b> se ha creado con éxito</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="275" /> + <location filename="../PipxWidget.py" line="278" /> <source><p>The spec metadata file <b>{0}</b> could not be created.</p><p>Reason: {1}</p></source> <translation><p>El archivo de metadatos de spec <b>{0}</b> no se ha podido crear.</p><p>Razón: {1}</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="291" /> + <location filename="../PipxWidget.py" line="294" /> <source>Re-Install Package</source> <translation>Reinstalar Package</translation> </message> <message> - <location filename="../PipxWidget.py" line="292" /> + <location filename="../PipxWidget.py" line="295" /> <source><p>Shall the package <b>{0}</b> really be reinstalled?</p></source> <translation><p>¿Debe ser el package <b>{0}</b> reinstalado seguro?</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="317" /> + <location filename="../PipxWidget.py" line="320" /> <source>Do you really want to reinstall all packages?</source> <translation>¿Desea seguro reinstalar todos los packages?</translation> </message> <message> - <location filename="../PipxWidget.py" line="378" /> + <location filename="../PipxWidget.py" line="365" /> + <source><p>The selected package cannot be upgraded because some of its apps are running.</p><ul><li>{0}</li></ul><p>Stop these apps and try again.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.py" line="386" /> + <source><p>The packages cannot be upgraded because some of their apps are running.</p><ul><li>{0}</li></ul><p>Stop these apps and try again.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.py" line="411" /> <source>Uninstall Package</source> <translation>Desinstalar Package</translation> </message> <message> - <location filename="../PipxWidget.py" line="379" /> + <location filename="../PipxWidget.py" line="412" /> <source><p>Shall the package <b>{0}</b> really be uninstalled?</p></source> <translation><p>¿Debe ser el package <b>{0}</b> desinstalado seguro?</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="395" /> + <location filename="../PipxWidget.py" line="428" /> <source><p>Do you really want to uninstall <b>ALL</b> packages?</p></source> <translation><p>¿Desea seguro desinstalar <b>TODOS</b> los packages?</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="435" /> + <location filename="../PipxWidget.py" line="468" /> <source><b>pipx Version {0}</b></source> <translation><b>pipx Versión {0}</b></translation> </message> <message> - <location filename="../PipxWidget.py" line="460" /> + <location filename="../PipxWidget.py" line="494" /> <source>{0} ({1})</source> <comment>current version, latest version</comment> <translation>{0} ({1})</translation> </message> <message> - <location filename="../PipxWidget.py" line="480" /> + <location filename="../PipxWidget.py" line="523" /> <source>{0}{1}</source> <comment>Python version, standalone indicator</comment> <translation>{0}{1}</translation> </message> <message> - <location filename="../PipxWidget.py" line="482" /> + <location filename="../PipxWidget.py" line="525" /> <source> (standalone)</source> <translation> (independiente)</translation> </message> @@ -672,30 +709,30 @@ <context> <name>PluginPipxInterface</name> <message> - <location filename="../../PluginPipxInterface.py" line="189" /> - <location filename="../../PluginPipxInterface.py" line="188" /> - <location filename="../../PluginPipxInterface.py" line="184" /> - <location filename="../../PluginPipxInterface.py" line="71" /> + <location filename="../../PluginPipxInterface.py" line="192" /> + <location filename="../../PluginPipxInterface.py" line="191" /> + <location filename="../../PluginPipxInterface.py" line="187" /> + <location filename="../../PluginPipxInterface.py" line="72" /> <source>PyPI Application Management</source> <translation>Gestión de Aplicación PyPI</translation> </message> <message> - <location filename="../../PluginPipxInterface.py" line="115" /> + <location filename="../../PluginPipxInterface.py" line="116" /> <source>Python Application Management</source> <translation>Gestión de Aplicación Python</translation> </message> <message> - <location filename="../../PluginPipxInterface.py" line="190" /> + <location filename="../../PluginPipxInterface.py" line="193" /> <source>Ctrl+Alt+Shift+A</source> <translation>Ctrl+Alt+Shift+A</translation> </message> <message> - <location filename="../../PluginPipxInterface.py" line="196" /> + <location filename="../../PluginPipxInterface.py" line="199" /> <source>Switch the input focus to the PyPI Application Management window.</source> <translation>Cambiar el foco de entrada a la ventana de Gestión de Aplicación PyPI.</translation> </message> <message> - <location filename="../../PluginPipxInterface.py" line="199" /> + <location filename="../../PluginPipxInterface.py" line="202" /> <source><b>Activate PyPI Application Management</b><p>This switches the input focus to the PyPI Application Management window.</p></source> <translation><b>Activar Gestión de Aplicación PyPI</b><p>Esto cambia el foco de entrada a la ventana de Gestión de Aplicación PyPI.</p></translation> </message>
--- a/PipxInterface/i18n/pipx_ru.ts Sat Jul 27 19:39:32 2024 +0200 +++ b/PipxInterface/i18n/pipx_ru.ts Sun Jul 28 11:46:18 2024 +0200 @@ -54,42 +54,42 @@ <translation>Деинсталировать все пакеты</translation> </message> <message> - <location filename="../Pipx.py" line="455" /> + <location filename="../Pipx.py" line="456" /> <source>Check Outdated Package</source> <translation>Проверить устаревшие пакеты</translation> </message> <message> - <location filename="../Pipx.py" line="456" /> + <location filename="../Pipx.py" line="457" /> <source><p>The status of package <b>{0}</b> could not be determined.</p><p>Reason: {1}</p></source> <translation><p>Не удалось определить статус пакета <b>{0}</b>.</p><p>Причина: {1}</p></translation> </message> <message> - <location filename="../Pipx.py" line="483" /> + <location filename="../Pipx.py" line="484" /> <source>Upgrade Package</source> <translation>Обновить пакет</translation> </message> <message> - <location filename="../Pipx.py" line="493" /> + <location filename="../Pipx.py" line="494" /> <source>Upgrade All Packages</source> <translation>Обновить все пакеты</translation> </message> <message> - <location filename="../Pipx.py" line="503" /> + <location filename="../Pipx.py" line="504" /> <source>Upgrade Shared Libraries</source> <translation>Обновить общие библиотеки</translation> </message> <message> - <location filename="../Pipx.py" line="517" /> + <location filename="../Pipx.py" line="518" /> <source>Upgrade Interpreters</source> <translation>Обновить интерпретаторы</translation> </message> <message> - <location filename="../Pipx.py" line="530" /> + <location filename="../Pipx.py" line="531" /> <source>Prune Unused Interpreters</source> <translation>Удалить неиспользуемые интерпретаторы</translation> </message> <message> - <location filename="../Pipx.py" line="541" /> + <location filename="../Pipx.py" line="542" /> <source>Ensure PATH Modifications</source> <translation>Обеспечьте внесение изменений в ПУТЬ</translation> </message> @@ -296,6 +296,31 @@ </message> <message> <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Outdated Application Packages</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Select to determine outdated packages when loading the list of installed packages.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Determine outdated packages automatically</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Select to determine packages with any outdated dependencies when determining outdated packages.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> + <source>Determine packages with outdated dependencies</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../ConfigurationPage/PipxPage.ui" line="0" /> <source>Recent Application Working Directories</source> <translation>Последние рабочие директории приложений</translation> </message> @@ -434,172 +459,184 @@ <context> <name>PipxWidget</name> <message> - <location filename="../PipxWidget.py" line="105" /> + <location filename="../PipxWidget.py" line="108" /> <source>Install</source> <translation>Установить</translation> </message> <message> - <location filename="../PipxWidget.py" line="199" /> - <location filename="../PipxWidget.py" line="107" /> + <location filename="../PipxWidget.py" line="202" /> + <location filename="../PipxWidget.py" line="110" /> <source>Install Packages</source> <translation>Установить пакеты</translation> </message> <message> - <location filename="../PipxWidget.py" line="218" /> - <location filename="../PipxWidget.py" line="110" /> + <location filename="../PipxWidget.py" line="221" /> + <location filename="../PipxWidget.py" line="113" /> <source>Install All Packages</source> <translation>Установить все пакеты</translation> </message> <message> - <location filename="../PipxWidget.py" line="114" /> + <location filename="../PipxWidget.py" line="117" /> <source>Re-Install Selected Package</source> <translation>Переустановить выбранный пакет</translation> </message> <message> - <location filename="../PipxWidget.py" line="316" /> - <location filename="../PipxWidget.py" line="117" /> + <location filename="../PipxWidget.py" line="319" /> + <location filename="../PipxWidget.py" line="120" /> <source>Re-Install All Packages</source> <translation>Переустановить все пакеты</translation> </message> <message> - <location filename="../PipxWidget.py" line="274" /> - <location filename="../PipxWidget.py" line="265" /> - <location filename="../PipxWidget.py" line="253" /> - <location filename="../PipxWidget.py" line="237" /> - <location filename="../PipxWidget.py" line="121" /> + <location filename="../PipxWidget.py" line="277" /> + <location filename="../PipxWidget.py" line="268" /> + <location filename="../PipxWidget.py" line="256" /> + <location filename="../PipxWidget.py" line="240" /> + <location filename="../PipxWidget.py" line="124" /> <source>Create Spec Metadata File</source> <translation>Создайть файл метаданных спецификации</translation> </message> <message> - <location filename="../PipxWidget.py" line="128" /> + <location filename="../PipxWidget.py" line="131" /> <source>Upgrade</source> <translation>Обновлять</translation> </message> <message> - <location filename="../PipxWidget.py" line="130" /> + <location filename="../PipxWidget.py" line="133" /> <source>Check Outdated Packages</source> <translation>Проверить устаревшие пакеты</translation> </message> <message> - <location filename="../PipxWidget.py" line="134" /> + <location filename="../PipxWidget.py" line="364" /> + <location filename="../PipxWidget.py" line="137" /> <source>Upgrade Selected Package</source> <translation>Обновить выбранный пакет</translation> </message> <message> - <location filename="../PipxWidget.py" line="137" /> + <location filename="../PipxWidget.py" line="385" /> + <location filename="../PipxWidget.py" line="140" /> <source>Upgrade All Packages</source> <translation>Обновить все пакеты</translation> </message> <message> - <location filename="../PipxWidget.py" line="141" /> + <location filename="../PipxWidget.py" line="144" /> <source>Upgrade Shared Libraries</source> <translation>Обновить общие библиотеки</translation> </message> <message> - <location filename="../PipxWidget.py" line="148" /> + <location filename="../PipxWidget.py" line="151" /> <source>Uninstall</source> <translation>Деинсталировать</translation> </message> <message> - <location filename="../PipxWidget.py" line="150" /> + <location filename="../PipxWidget.py" line="153" /> <source>Uninstall Selected Package</source> <translation>Деинсталировать выбранный пакет</translation> </message> <message> - <location filename="../PipxWidget.py" line="392" /> - <location filename="../PipxWidget.py" line="153" /> + <location filename="../PipxWidget.py" line="427" /> + <location filename="../PipxWidget.py" line="156" /> <source>Uninstall All Packages</source> <translation>Деинсталировать все пакеты</translation> </message> <message> - <location filename="../PipxWidget.py" line="168" /> + <location filename="../PipxWidget.py" line="171" /> <source>Standalone Interpreters</source> <translation>Автономные интерпретаторы</translation> </message> <message> - <location filename="../PipxWidget.py" line="172" /> + <location filename="../PipxWidget.py" line="175" /> <source>Ensure PATH Modifications</source> <translation>Обеспечьте внесение изменений в ПУТЬ</translation> </message> <message> - <location filename="../PipxWidget.py" line="175" /> + <location filename="../PipxWidget.py" line="178" /> <source>Configure...</source> <translation>Настроить...</translation> </message> <message> - <location filename="../PipxWidget.py" line="239" /> + <location filename="../PipxWidget.py" line="242" /> <source>JSON Files (*.json);;All Files (*)</source> <translation>Файлы JSON (*.json);;Все файлы (*)</translation> </message> <message> - <location filename="../PipxWidget.py" line="240" /> + <location filename="../PipxWidget.py" line="243" /> <source>JSON Files (*.json)</source> <translation>Файлы JSON (*.json)</translation> </message> <message> - <location filename="../PipxWidget.py" line="254" /> + <location filename="../PipxWidget.py" line="257" /> <source><p>The file <b>{0}</b> exists already. Overwrite it?</p></source> <translation><p>Файл <b>{0}</b> уже существует. Перезаписать?</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="266" /> + <location filename="../PipxWidget.py" line="269" /> <source><p>The spec metadata file <b>{0}</b> was created successfully.</p></source> <translation><p>Файл метаданных спецификации <b>{0}</b> был успешно создан.</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="275" /> + <location filename="../PipxWidget.py" line="278" /> <source><p>The spec metadata file <b>{0}</b> could not be created.</p><p>Reason: {1}</p></source> <translation><p>Не удалось создать файл метаданных спецификации <b>{0}</b>.</p><p>Причина: {1}</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="291" /> + <location filename="../PipxWidget.py" line="294" /> <source>Re-Install Package</source> <translation>Переустановить пакет</translation> </message> <message> - <location filename="../PipxWidget.py" line="292" /> + <location filename="../PipxWidget.py" line="295" /> <source><p>Shall the package <b>{0}</b> really be reinstalled?</p></source> <translation><p>Должен ли пакет <b>{0}</b> действительно быть переустановлен?</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="317" /> + <location filename="../PipxWidget.py" line="320" /> <source>Do you really want to reinstall all packages?</source> <translation>Вы действительно хотите переустановить все пакеты?</translation> </message> <message> - <location filename="../PipxWidget.py" line="376" /> + <location filename="../PipxWidget.py" line="365" /> + <source><p>The selected package cannot be upgraded because some of its apps are running.</p><ul><li>{0}</li></ul><p>Stop these apps and try again.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.py" line="386" /> + <source><p>The packages cannot be upgraded because some of their apps are running.</p><ul><li>{0}</li></ul><p>Stop these apps and try again.</p></source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.py" line="411" /> <source>Uninstall Package</source> <translation>Деинсталировать пакет</translation> </message> <message> - <location filename="../PipxWidget.py" line="377" /> + <location filename="../PipxWidget.py" line="412" /> <source><p>Shall the package <b>{0}</b> really be uninstalled?</p></source> <translation><p>Должен ли пакет <b>{0}</b> действительно быть удален?</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="393" /> + <location filename="../PipxWidget.py" line="428" /> <source><p>Do you really want to uninstall <b>ALL</b> packages?</p></source> <translation><p>Вы действительно хотите удалить ВСЕ </b> пакеты?</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="433" /> + <location filename="../PipxWidget.py" line="468" /> <source><b>pipx Version {0}</b></source> <translation><b>Версия pipx {0}</b></translation> </message> <message> - <location filename="../PipxWidget.py" line="458" /> + <location filename="../PipxWidget.py" line="494" /> <source>{0} ({1})</source> <comment>current version, latest version</comment> <translation>{0} ({1})</translation> </message> <message> - <location filename="../PipxWidget.py" line="476" /> + <location filename="../PipxWidget.py" line="523" /> <source>{0}{1}</source> <comment>Python version, standalone indicator</comment> <translation /> </message> <message> - <location filename="../PipxWidget.py" line="478" /> + <location filename="../PipxWidget.py" line="525" /> <source> (standalone)</source> <translation> (автономный)</translation> </message> @@ -672,30 +709,30 @@ <context> <name>PluginPipxInterface</name> <message> - <location filename="../../PluginPipxInterface.py" line="188" /> + <location filename="../../PluginPipxInterface.py" line="192" /> + <location filename="../../PluginPipxInterface.py" line="191" /> <location filename="../../PluginPipxInterface.py" line="187" /> - <location filename="../../PluginPipxInterface.py" line="183" /> - <location filename="../../PluginPipxInterface.py" line="70" /> + <location filename="../../PluginPipxInterface.py" line="72" /> <source>PyPI Application Management</source> <translation>Управление приложениями PyPI</translation> </message> <message> - <location filename="../../PluginPipxInterface.py" line="114" /> + <location filename="../../PluginPipxInterface.py" line="116" /> <source>Python Application Management</source> <translation>Управление приложениями Python</translation> </message> <message> - <location filename="../../PluginPipxInterface.py" line="189" /> + <location filename="../../PluginPipxInterface.py" line="193" /> <source>Ctrl+Alt+Shift+A</source> <translation>Ctrl+Alt+Shift+A</translation> </message> <message> - <location filename="../../PluginPipxInterface.py" line="195" /> + <location filename="../../PluginPipxInterface.py" line="199" /> <source>Switch the input focus to the PyPI Application Management window.</source> <translation>Переключите фокус ввода на окно управления приложением PyPI.</translation> </message> <message> - <location filename="../../PluginPipxInterface.py" line="198" /> + <location filename="../../PluginPipxInterface.py" line="202" /> <source><b>Activate PyPI Application Management</b><p>This switches the input focus to the PyPI Application Management window.</p></source> <translation><b>Активировать управление приложениями PyPI.</b><p> Это переключит фокус ввода на окно управления приложениями PyPI.</p></translation> </message>
--- a/PluginPipxInterface.py Sat Jul 27 19:39:32 2024 +0200 +++ b/PluginPipxInterface.py Sun Jul 28 11:46:18 2024 +0200 @@ -36,7 +36,7 @@ "author": "Detlev Offenbach <detlev@die-offenbachs.de>", "autoactivate": True, "deactivateable": True, - "version": "10.1.1", + "version": "10.2.0", "className": "PluginPipxInterface", "packageName": "PipxInterface", "shortDescription": "Graphical interface to the 'pipx' command.", @@ -149,11 +149,11 @@ self.__ui = ui self.__initialize() - # TODO: add option to check outdated dependencies when checking for - # outdated status self.__defaults = { "RecentAppWorkdirs": [], "MaxRecentAppWorkdirs": 20, + "IncludeOutdatedDependencies": True, + "AutoCheckOutdated": False, } self.__translator = None @@ -284,6 +284,16 @@ self.PreferencesKey + "/" + key, self.__defaults[key] ) ) + elif key in ("IncludeOutdatedDependencies", "AutoCheckOutdated"): + return Globals.toBool( + Preferences.Prefs.settings.value( + self.PreferencesKey + "/" + key, self.__defaults[key] + ) + ) + else: + return Preferences.Prefs.settings.value( + self.PreferencesKey + "/" + key, self.__defaults[key] + ) return None
--- a/changelog.md Sat Jul 27 19:39:32 2024 +0200 +++ b/changelog.md Sun Jul 28 11:46:18 2024 +0200 @@ -1,6 +1,11 @@ ChangeLog --------- +__Version 10.2.0__ + +- Implemented some enhancements related to indicating outdated packages. +- Implemented a check for executed apps before upgrading a package. + __Version 10.1.1__ - Added Russian translations provided by Alexander Barkoff.