Fri, 13 Dec 2024 15:40:08 +0100
Added a shortcut button to repair broken dependencies of the selected package.
--- a/PKGLIST Tue Dec 10 17:53:34 2024 +0100 +++ b/PKGLIST Fri Dec 13 15:40:08 2024 +0100 @@ -41,4 +41,6 @@ PipxInterface/icons/pipx96.svg PipxInterface/icons/pipxOutdated22.svg PipxInterface/icons/pipxOutdated96.svg +PipxInterface/icons/repair-dark.svg +PipxInterface/icons/repair-light.svg PluginPipxInterface.py
--- a/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.Pipx.html Tue Dec 10 17:53:34 2024 +0100 +++ b/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.Pipx.html Fri Dec 13 15:40:08 2024 +0100 @@ -77,10 +77,18 @@ <td>Private method handling the pipx process output of a check for an outdated package.</td> </tr> <tr> +<td><a href="#Pipx.__getBrokenDependencies">__getBrokenDependencies</a></td> +<td></td> +</tr> +<tr> <td><a href="#Pipx.__getPackageDependencies">__getPackageDependencies</a></td> <td>Private method to get a list of dependencies of a given package.</td> </tr> <tr> +<td><a href="#Pipx.__getPackageInterpreter">__getPackageInterpreter</a></td> +<td>Private method to determine the executable path of the python interpreter of a package.</td> +</tr> +<tr> <td><a href="#Pipx.__getPipxExecutable">__getPipxExecutable</a></td> <td>Private method to get the path name of the pipx executable.</td> </tr> @@ -169,6 +177,10 @@ <td>Public method to reinstall the given package with given options.</td> </tr> <tr> +<td><a href="#Pipx.repairBrokenDependencies">repairBrokenDependencies</a></td> +<td>Public method to get repair broken or unmet package dependencies.</td> +</tr> +<tr> <td><a href="#Pipx.shutdown">shutdown</a></td> <td>Public method to perform shutdown actions.</td> </tr> @@ -290,6 +302,10 @@ output of the pipx process or an error message </dd> </dl> +<a NAME="Pipx.__getBrokenDependencies" ID="Pipx.__getBrokenDependencies"></a> +<h4>Pipx.__getBrokenDependencies</h4> +<b>__getBrokenDependencies</b>(<i>dependencies</i>) + <a NAME="Pipx.__getPackageDependencies" ID="Pipx.__getPackageDependencies"></a> <h4>Pipx.__getPackageDependencies</h4> <b>__getPackageDependencies</b>(<i>package, uptodate=False, outdated=False</i>) @@ -324,6 +340,33 @@ list[dict[str: str]] </dd> </dl> +<a NAME="Pipx.__getPackageInterpreter" ID="Pipx.__getPackageInterpreter"></a> +<h4>Pipx.__getPackageInterpreter</h4> +<b>__getPackageInterpreter</b>(<i>package</i>) +<p> + Private method to determine the executable path of the python interpreter + of a package. +</p> + +<dl> + +<dt><i>package</i> (str)</dt> +<dd> +name of the package +</dd> +</dl> +<dl> +<dt>Return:</dt> +<dd> +Python interpreter path +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +str +</dd> +</dl> <a NAME="Pipx.__getPipxExecutable" ID="Pipx.__getPipxExecutable"></a> <h4>Pipx.__getPipxExecutable</h4> <b>__getPipxExecutable</b>(<i></i>) @@ -834,6 +877,20 @@ on the system (defaults to False) </dd> </dl> +<a NAME="Pipx.repairBrokenDependencies" ID="Pipx.repairBrokenDependencies"></a> +<h4>Pipx.repairBrokenDependencies</h4> +<b>repairBrokenDependencies</b>(<i>package</i>) +<p> + Public method to get repair broken or unmet package dependencies. +</p> + +<dl> + +<dt><i>package</i> (str)</dt> +<dd> +name of the package +</dd> +</dl> <a NAME="Pipx.shutdown" ID="Pipx.shutdown"></a> <h4>Pipx.shutdown</h4> <b>shutdown</b>(<i></i>) @@ -900,7 +957,7 @@ </dl> <a NAME="Pipx.upgradePackageDependencies" ID="Pipx.upgradePackageDependencies"></a> <h4>Pipx.upgradePackageDependencies</h4> -<b>upgradePackageDependencies</b>(<i>package</i>) +<b>upgradePackageDependencies</b>(<i>package, dependencies=None</i>) <p> Public method to upgrade the dependencies of the given package. </p> @@ -911,6 +968,11 @@ <dd> name of the package </dd> +<dt><i>dependencies</i> (list of str or None (optional))</dt> +<dd> +list of dependencies to be upgraded or None to + upgrade all outdated dependencies (defaults to None) +</dd> </dl> <a NAME="Pipx.upgradeSharedLibraries" ID="Pipx.upgradeSharedLibraries"></a> <h4>Pipx.upgradeSharedLibraries</h4>
--- a/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxDependenciesDialog.html Tue Dec 10 17:53:34 2024 +0100 +++ b/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxDependenciesDialog.html Fri Dec 13 15:40:08 2024 +0100 @@ -46,7 +46,8 @@ <tr><td>DependencyColumn</td></tr> <tr><td>InstalledVersionColumn</td></tr> <tr><td>OutdatedMode</td></tr> -<tr><td>UpgradeDependenciesAction</td></tr> +<tr><td>UpgradeAllDependenciesAction</td></tr> +<tr><td>UpgradeSelectedDependenciesAction</td></tr> <tr><td>UptodateMode</td></tr> </table> @@ -66,9 +67,17 @@ <td>Private method to resize the columns of the dependencies list.</td> </tr> <tr> +<td><a href="#PipxDependenciesDialog.getDependencies">getDependencies</a></td> +<td>Public method to get the list of selected or all dependencies.</td> +</tr> +<tr> <td><a href="#PipxDependenciesDialog.on_buttonBox_clicked">on_buttonBox_clicked</a></td> <td>Private slot handling a button click of the button box.</td> </tr> +<tr> +<td><a href="#PipxDependenciesDialog.on_dependenciesList_itemSelectionChanged">on_dependenciesList_itemSelectionChanged</a></td> +<td>Private slot to update the UI when the package selection changes.</td> +</tr> </table> <h3>Static Methods</h3> @@ -110,6 +119,33 @@ Private method to resize the columns of the dependencies list. </p> +<a NAME="PipxDependenciesDialog.getDependencies" ID="PipxDependenciesDialog.getDependencies"></a> +<h4>PipxDependenciesDialog.getDependencies</h4> +<b>getDependencies</b>(<i>selectedOnly=True</i>) +<p> + Public method to get the list of selected or all dependencies. +</p> + +<dl> + +<dt><i>selectedOnly</i> (boolTYPE (optional))</dt> +<dd> +flag indicated to get only the selected dependencies + (defaults to True) +</dd> +</dl> +<dl> +<dt>Return:</dt> +<dd> +list of names of dependencies +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +list of str +</dd> +</dl> <a NAME="PipxDependenciesDialog.on_buttonBox_clicked" ID="PipxDependenciesDialog.on_buttonBox_clicked"></a> <h4>PipxDependenciesDialog.on_buttonBox_clicked</h4> <b>on_buttonBox_clicked</b>(<i>button</i>) @@ -124,6 +160,13 @@ reference to the clicked button </dd> </dl> +<a NAME="PipxDependenciesDialog.on_dependenciesList_itemSelectionChanged" ID="PipxDependenciesDialog.on_dependenciesList_itemSelectionChanged"></a> +<h4>PipxDependenciesDialog.on_dependenciesList_itemSelectionChanged</h4> +<b>on_dependenciesList_itemSelectionChanged</b>(<i></i>) +<p> + Private slot to update the UI when the package selection changes. +</p> + <div align="right"><a href="#top">Up</a></div> <hr /> </body></html>
--- a/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxWidget.html Tue Dec 10 17:53:34 2024 +0100 +++ b/PipxInterface/Documentation/Source/Plugin_Pipx_Interface.PipxInterface.PipxWidget.html Fri Dec 13 15:40:08 2024 +0100 @@ -150,6 +150,10 @@ <td>Private slot to force a re-installation of the selected package.</td> </tr> <tr> +<td><a href="#PipxWidget.__repairBrokenDependencies">__repairBrokenDependencies</a></td> +<td>Private slot to repair broken (unmet) dependencies.</td> +</tr> +<tr> <td><a href="#PipxWidget.__resizePackagesColumns">__resizePackagesColumns</a></td> <td>Private slot to resize the columns of the packages list.</td> </tr> @@ -556,6 +560,16 @@ Private slot to force a re-installation of the selected package. </p> +<a NAME="PipxWidget.__repairBrokenDependencies" ID="PipxWidget.__repairBrokenDependencies"></a> +<h4>PipxWidget.__repairBrokenDependencies</h4> +<b>__repairBrokenDependencies</b>(<i></i>) +<p> + Private slot to repair broken (unmet) dependencies. +</p> +<p> + Note: This could be necessary after a dependencies upgrade. pip will tell you. +</p> + <a NAME="PipxWidget.__resizePackagesColumns" ID="PipxWidget.__resizePackagesColumns"></a> <h4>PipxWidget.__resizePackagesColumns</h4> <b>__resizePackagesColumns</b>(<i></i>) @@ -668,11 +682,19 @@ <a NAME="PipxWidget.__upgradeDependencies" ID="PipxWidget.__upgradeDependencies"></a> <h4>PipxWidget.__upgradeDependencies</h4> -<b>__upgradeDependencies</b>(<i></i>) +<b>__upgradeDependencies</b>(<i>dependencies=None</i>) <p> Private slot to upgrade the outdated dependencies of the selected package. </p> +<dl> + +<dt><i>dependencies</i> (list of str or None (optional))</dt> +<dd> +list of dependencies to be upgraded or None to + upgrade all outdated dependencies (defaults to None) +</dd> +</dl> <a NAME="PipxWidget.__upgradePackage" ID="PipxWidget.__upgradePackage"></a> <h4>PipxWidget.__upgradePackage</h4> <b>__upgradePackage</b>(<i></i>)
--- a/PipxInterface/Pipx.py Tue Dec 10 17:53:34 2024 +0100 +++ b/PipxInterface/Pipx.py Fri Dec 13 15:40:08 2024 +0100 @@ -14,11 +14,12 @@ import pathlib import sysconfig +from packaging.specifiers import InvalidSpecifier, SpecifierSet from PyQt6.QtCore import QObject, QProcess, pyqtSignal from eric7 import Preferences from eric7.EricWidgets import EricMessageBox -from eric7.SystemUtilities import OSUtilities +from eric7.SystemUtilities import OSUtilities, PythonUtilities try: from eric7.EricCore.EricProcess import EricProcess @@ -818,3 +819,148 @@ self.tr("Upgrade Dependencies"), self.tr("""All dependencies are already up-to-date."""), ) + + def __getPackageInterpreter(self, package): + """ + Private method to determine the executable path of the python interpreter + of a package. + + @param package name of the package + @type str + @return Python interpreter path + @rtype str + """ + from pipx.paths import ctx # noqa: I102 + from pipx.venv import Venv # noqa: I102 + + packagePath = ctx.venvs / package + _venv = Venv(packagePath) + return str(_venv.python_path) +## + ##def __addDependency(self, dependency, parent): + ##""" + ##Private method to add a dependency branch to a given parent. +## + ##@param dependency dependency to be added + ##@type dict + ##@param parent reference to the parent item + ##@type QTreeWidget or QTreeWidgetItem + ##""" + ##itm = QTreeWidgetItem( + ##parent, + ##[ + ##dependency["package_name"], + ##dependency["installed_version"], + ##dependency["required_version"], + ##], + ##) + ##itm.setExpanded(True) +## + ##if dependency["installed_version"] == "?": + ##itm.setText(PipPackagesWidget.DepInstalledVersionColumn, self.tr("unknown")) +## + ##if dependency["required_version"].lower() not in ("any", "?"): + ##spec = ( + ##"=={0}".format(dependency["required_version"]) + ##if dependency["required_version"][0] in "0123456789" + ##else dependency["required_version"] + ##) + ##try: + ##specifierSet = SpecifierSet(specifiers=spec) + ##if not specifierSet.contains(dependency["installed_version"]): + ##itm.setIcon( + ##PipPackagesWidget.DepRequiredVersionColumn, + ##EricPixmapCache.getIcon("warning"), + ##) + ##except InvalidSpecifier: + ##itm.setText( + ##PipPackagesWidget.DepRequiredVersionColumn, + ##dependency["required_version"], + ##) +## + ##elif dependency["required_version"].lower() == "any": + ##itm.setText(PipPackagesWidget.DepRequiredVersionColumn, self.tr("any")) +## + ##elif dependency["required_version"] == "?": + ##itm.setText(PipPackagesWidget.DepRequiredVersionColumn, self.tr("unknown")) +## + ### recursively add sub-dependencies + ##for dep in dependency["dependencies"]: + ##self.__addDependency(dep, itm) + + def __getBrokenDependencies(self, dependencies): + brokenDependecies = [] + + for dependency in dependencies: + if dependency["required_version"].lower() not in ("any", "?"): + spec = ( + "=={0}".format(dependency["required_version"]) + if dependency["required_version"][0] in "0123456789" + else dependency["required_version"] + ) + with contextlib.suppress(InvalidSpecifier): + specifierSet = SpecifierSet(specifiers=spec) + if not specifierSet.contains(dependency["installed_version"]): + brokenDependecies.append(f"{dependency["package_name"]}{spec}") + + # recursively add sub-dependencies + brokenDependecies.extend( + self.__getBrokenDependencies(dependency["dependencies"]) + ) + + return brokenDependecies + + def repairBrokenDependencies(self, package): + """ + Public method to get repair broken or unmet package dependencies. + + @param package name of the package + @type str + """ + dependencies = [] + + interpreter = self.__getPackageInterpreter(package=package) + if interpreter: + args = ["-m", "pipdeptree", "--python", interpreter, "--json-tree"] + + proc = QProcess() + proc.start(PythonUtilities.getPythonExecutable(), args) + if proc.waitForStarted(15000) and proc.waitForFinished(30000): + output = str( + proc.readAllStandardOutput(), + Preferences.getSystem("IOEncoding"), + "replace", + ).strip() + with contextlib.suppress(json.JSONDecodeError): + dependencies = json.loads(output) + + brokenDependecies = self.__getBrokenDependencies(dependencies) + if brokenDependecies: + args = [ + "runpip", + package, + "install", + "--prefer-binary", + ] + brokenDependecies + + dia = PipxExecDialog( + self.tr("Repair Broken Dependencies"), parent=self.__ui + ) + res = dia.startProcess(self.__getPipxExecutable(), args) + if res: + dia.exec() + else: + EricMessageBox.information( + self.__ui, + self.tr("Repair Broken Dependencies"), + self.tr("There are no broken dependencies."), + ) + else: + EricMessageBox.critical( + self.__ui, + self.tr("Repair Broken Dependencies"), + self.tr( + "<p>The interpreter for package <b>{0}</b> could not be determined." + " Aborting...</p>" + ).format(package), + )
--- a/PipxInterface/PipxWidget.py Tue Dec 10 17:53:34 2024 +0100 +++ b/PipxInterface/PipxWidget.py Fri Dec 13 15:40:08 2024 +0100 @@ -80,6 +80,13 @@ ) ) ) + self.repairDependenciesButton.setIcon( + EricPixmapCache.getIcon( + os.path.join( + "PipxInterface", "icons", "repair{0}".format(iconSuffix) + ) + ) + ) self.installButton.clicked.connect(self.__installPackages) self.outdatedButton.clicked.connect(self.__checkOutdatedPackages) @@ -88,6 +95,7 @@ self.showOutdatedDependenciesButton.clicked.connect( self.__showOutdatedDependencies ) + self.repairDependenciesButton.clicked.connect(self.__repairBrokenDependencies) self.pipxMenuButton.setShowMenuInside(True) @@ -652,6 +660,16 @@ self.__resizePackagesColumns() self.__plugin.setOutdatedIndicator(self.__hasOutdatedItems()) + @pyqtSlot() + def __repairBrokenDependencies(self): + """ + Private slot to repair broken (unmet) dependencies. + + Note: This could be necessary after a dependencies upgrade. pip will tell you. + """ + package = self.__selectedPackages()[0] + self.__pipx.repairBrokenDependencies(package) + ####################################################################### ## Main widget related methods below ####################################################################### @@ -857,6 +875,7 @@ selectedPackageItems[0].data(0, PipxWidget.OutdatedDependenciesRole) ) ) + self.repairDependenciesButton.setEnabled(len(selectedPackageItems) == 1) def __selectedPackages(self): """
--- a/PipxInterface/PipxWidget.ui Tue Dec 10 17:53:34 2024 +0100 +++ b/PipxInterface/PipxWidget.ui Fri Dec 13 15:40:08 2024 +0100 @@ -185,6 +185,13 @@ </widget> </item> <item> + <widget class="QToolButton" name="repairDependenciesButton"> + <property name="toolTip"> + <string>Press to repair broken dependencies of the selected package.</string> + </property> + </widget> + </item> + <item> <spacer name="horizontalSpacer_3"> <property name="orientation"> <enum>Qt::Orientation::Horizontal</enum> @@ -244,6 +251,7 @@ <tabstop>upgradeButton</tabstop> <tabstop>uninstallButton</tabstop> <tabstop>showOutdatedDependenciesButton</tabstop> + <tabstop>repairDependenciesButton</tabstop> <tabstop>pipxMenuButton</tabstop> <tabstop>venvsPathEdit</tabstop> <tabstop>applicationsPathEdit</tabstop>
--- a/PipxInterface/Ui_PipxWidget.py Tue Dec 10 17:53:34 2024 +0100 +++ b/PipxInterface/Ui_PipxWidget.py Fri Dec 13 15:40:08 2024 +0100 @@ -90,6 +90,9 @@ self.showOutdatedDependenciesButton = QtWidgets.QToolButton(parent=PipxWidget) self.showOutdatedDependenciesButton.setObjectName("showOutdatedDependenciesButton") self.horizontalLayout_2.addWidget(self.showOutdatedDependenciesButton) + self.repairDependenciesButton = QtWidgets.QToolButton(parent=PipxWidget) + self.repairDependenciesButton.setObjectName("repairDependenciesButton") + self.horizontalLayout_2.addWidget(self.repairDependenciesButton) spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum) self.horizontalLayout_2.addItem(spacerItem3) self.verticalLayout.addLayout(self.horizontalLayout_2) @@ -107,7 +110,8 @@ PipxWidget.setTabOrder(self.outdatedButton, self.upgradeButton) PipxWidget.setTabOrder(self.upgradeButton, self.uninstallButton) PipxWidget.setTabOrder(self.uninstallButton, self.showOutdatedDependenciesButton) - PipxWidget.setTabOrder(self.showOutdatedDependenciesButton, self.pipxMenuButton) + PipxWidget.setTabOrder(self.showOutdatedDependenciesButton, self.repairDependenciesButton) + PipxWidget.setTabOrder(self.repairDependenciesButton, self.pipxMenuButton) PipxWidget.setTabOrder(self.pipxMenuButton, self.venvsPathEdit) PipxWidget.setTabOrder(self.venvsPathEdit, self.applicationsPathEdit) PipxWidget.setTabOrder(self.applicationsPathEdit, self.manPagesPathEdit) @@ -126,6 +130,7 @@ self.upgradeButton.setToolTip(_translate("PipxWidget", "Press to upgrade the selected package.")) self.uninstallButton.setToolTip(_translate("PipxWidget", "Press to uninstall the selected package.")) self.showOutdatedDependenciesButton.setToolTip(_translate("PipxWidget", "Press to show a dialog with the outdated dependencies.")) + self.repairDependenciesButton.setToolTip(_translate("PipxWidget", "Press to repair broken dependencies of the selected package.")) self.packagesList.setSortingEnabled(True) self.packagesList.headerItem().setText(0, _translate("PipxWidget", "Package/Application")) self.packagesList.headerItem().setText(1, _translate("PipxWidget", "Version"))
--- a/PipxInterface/i18n/pipx_de.ts Tue Dec 10 17:53:34 2024 +0100 +++ b/PipxInterface/i18n/pipx_de.ts Fri Dec 13 15:40:08 2024 +0100 @@ -4,150 +4,167 @@ <context> <name>Pipx</name> <message> - <location filename="../Pipx.py" line="273" /> - <location filename="../Pipx.py" line="163" /> + <location filename="../Pipx.py" line="274" /> + <location filename="../Pipx.py" line="164" /> <source><p>Message: {0}</p></source> <translation><p>Meldung: {0}</p></translation> </message> <message> - <location filename="../Pipx.py" line="285" /> - <location filename="../Pipx.py" line="277" /> - <location filename="../Pipx.py" line="166" /> + <location filename="../Pipx.py" line="286" /> + <location filename="../Pipx.py" line="278" /> + <location filename="../Pipx.py" line="167" /> <source><p>pipx exited with an error ({0}).</p>{1}</source> <translation><p>pipx wurde mit einem Fehler beendet ({0}).</p>{1}</translation> </message> <message> - <location filename="../Pipx.py" line="175" /> + <location filename="../Pipx.py" line="176" /> <source>pipx did not finish within 30 seconds.</source> <translation>pipx endete nicht innerhalb 30 Sekunden.</translation> </message> <message> - <location filename="../Pipx.py" line="231" /> - <location filename="../Pipx.py" line="177" /> + <location filename="../Pipx.py" line="232" /> + <location filename="../Pipx.py" line="178" /> <source>pipx could not be started.</source> <translation>pipx konnte nicht gestarted werden.</translation> </message> <message> - <location filename="../Pipx.py" line="231" /> + <location filename="../Pipx.py" line="232" /> <source>pipx Start Error</source> <translation>pipx Startfehler</translation> </message> <message> - <location filename="../Pipx.py" line="236" /> + <location filename="../Pipx.py" line="237" /> <source>pipx Runtime Error</source> <translation>pipx Laufzeitfehler</translation> </message> <message> - <location filename="../Pipx.py" line="237" /> + <location filename="../Pipx.py" line="238" /> <source><p>The pipx process reported an error.</p><p>Error: {0}</p></source> <translation><p>Der pipx Prozess meldete einen Fehler.</p><p>Fehler: {0}</p></translation> </message> <message> - <location filename="../Pipx.py" line="257" /> + <location filename="../Pipx.py" line="258" /> <source>pipx did not finish within {0} seconds.</source> <translation>pipx endete nicht innerhalb {0} Sekunden.</translation> </message> <message> - <location filename="../Pipx.py" line="263" /> + <location filename="../Pipx.py" line="264" /> <source>pipx Timeout Error</source> <translation>pipx Zeitüberschreitungsfehler</translation> </message> <message> - <location filename="../Pipx.py" line="284" /> + <location filename="../Pipx.py" line="285" /> <source>pipx Execution Error</source> <translation>pipx Ausführungsfehler</translation> </message> <message> - <location filename="../Pipx.py" line="409" /> + <location filename="../Pipx.py" line="410" /> <source>Install Packages</source> <translation>Pakete installieren</translation> </message> <message> - <location filename="../Pipx.py" line="454" /> + <location filename="../Pipx.py" line="455" /> <source>Install All Packages</source> <translation>Alle Pakete installieren</translation> </message> <message> - <location filename="../Pipx.py" line="504" /> + <location filename="../Pipx.py" line="505" /> <source>Re-Install Package</source> <translation>Paket neu installieren</translation> </message> <message> - <location filename="../Pipx.py" line="535" /> + <location filename="../Pipx.py" line="536" /> <source>Re-Install All Packages</source> <translation>Alle Pakete neu installieren</translation> </message> <message> - <location filename="../Pipx.py" line="548" /> + <location filename="../Pipx.py" line="549" /> <source>Uninstall Package</source> <translation>Paket deinstallieren</translation> </message> <message> - <location filename="../Pipx.py" line="558" /> + <location filename="../Pipx.py" line="559" /> <source>Uninstall All Packages</source> <translation>Alle Pakete deinstallieren</translation> </message> <message> - <location filename="../Pipx.py" line="575" /> + <location filename="../Pipx.py" line="576" /> <source>Upgrade Package</source> <translation>Paket aktualisieren</translation> </message> <message> - <location filename="../Pipx.py" line="585" /> + <location filename="../Pipx.py" line="586" /> <source>Upgrade All Packages</source> <translation>Alle Pakete aktualisieren</translation> </message> <message> - <location filename="../Pipx.py" line="595" /> + <location filename="../Pipx.py" line="596" /> <source>Upgrade Shared Libraries</source> <translation>Gemeinsame Bibliotheken aktualisieren</translation> </message> <message> - <location filename="../Pipx.py" line="609" /> + <location filename="../Pipx.py" line="610" /> <source>Upgrade Interpreters</source> <translation>Interpreter aktualisieren</translation> </message> <message> - <location filename="../Pipx.py" line="622" /> + <location filename="../Pipx.py" line="623" /> <source>Prune Unused Interpreters</source> <translation>Ungenutzte Interpreter entfernen</translation> </message> <message> - <location filename="../Pipx.py" line="633" /> + <location filename="../Pipx.py" line="634" /> <source>Ensure PATH Modifications</source> <translation>PATH-Änderungen sicherstellen</translation> </message> <message> - <location filename="../Pipx.py" line="672" /> + <location filename="../Pipx.py" line="673" /> <source>Check Outdated Package</source> <translation>Prüfe veraltete Pakete</translation> </message> <message> - <location filename="../Pipx.py" line="673" /> + <location filename="../Pipx.py" line="674" /> <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="734" /> + <location filename="../Pipx.py" line="735" /> <source>Get Package Dependencies</source> <translation>Paketabhängigkeiten abrufen</translation> </message> <message> - <location filename="../Pipx.py" line="735" /> + <location filename="../Pipx.py" line="736" /> <source><p>The status of dependencies of package <b>{0}</b> could not be determined.</p><p>Reason: {1}</p></source> <translation><p>Der Status der Abhängigkeiten des Pakets <b>{0}</b> konnte nicht ermittelt werden.</p><p>Ursache: {1}</p></translation> </message> <message> - <location filename="../Pipx.py" line="818" /> - <location filename="../Pipx.py" line="811" /> + <location filename="../Pipx.py" line="819" /> + <location filename="../Pipx.py" line="812" /> <source>Upgrade Dependencies</source> <translation>Abhängigkeiten aktualisieren</translation> </message> <message> - <location filename="../Pipx.py" line="819" /> + <location filename="../Pipx.py" line="820" /> <source>All dependencies are already up-to-date.</source> <translation>Alle Abhängigkeiten sind bereits aktuell.</translation> </message> + <message> + <location filename="../Pipx.py" line="961" /> + <location filename="../Pipx.py" line="955" /> + <location filename="../Pipx.py" line="947" /> + <source>Repair Broken Dependencies</source> + <translation>Defekte Abhängigkeiten reparieren</translation> + </message> + <message> + <location filename="../Pipx.py" line="956" /> + <source>There are no broken dependencies.</source> + <translation>Es gibt keine defekten Abhängigkeiten.</translation> + </message> + <message> + <location filename="../Pipx.py" line="962" /> + <source><p>The interpreter for package <b>{0}</b> could not be determined. Aborting...</p></source> + <translation><p>Der Interpreter für das Paket <b>{0}</b> konnte nicht ermittelt werden. Abbruch...</p></translation> + </message> </context> <context> <name>PipxAppStartDialog</name> @@ -582,229 +599,229 @@ <context> <name>PipxWidget</name> <message> - <location filename="../PipxWidget.py" line="137" /> + <location filename="../PipxWidget.py" line="145" /> <source>Install</source> <translation>Installieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="270" /> - <location filename="../PipxWidget.py" line="139" /> + <location filename="../PipxWidget.py" line="278" /> + <location filename="../PipxWidget.py" line="147" /> <source>Install Packages</source> <translation>Pakete installieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="289" /> - <location filename="../PipxWidget.py" line="142" /> + <location filename="../PipxWidget.py" line="297" /> + <location filename="../PipxWidget.py" line="150" /> <source>Install All Packages</source> <translation>Alle Pakete installieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="146" /> + <location filename="../PipxWidget.py" line="154" /> <source>Re-Install Selected Package</source> <translation>Ausgewähltes Paket neu installieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="387" /> - <location filename="../PipxWidget.py" line="149" /> + <location filename="../PipxWidget.py" line="395" /> + <location filename="../PipxWidget.py" line="157" /> <source>Re-Install All Packages</source> <translation>Alle Pakete neu installieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="345" /> - <location filename="../PipxWidget.py" line="336" /> - <location filename="../PipxWidget.py" line="324" /> - <location filename="../PipxWidget.py" line="308" /> - <location filename="../PipxWidget.py" line="153" /> + <location filename="../PipxWidget.py" line="353" /> + <location filename="../PipxWidget.py" line="344" /> + <location filename="../PipxWidget.py" line="332" /> + <location filename="../PipxWidget.py" line="316" /> + <location filename="../PipxWidget.py" line="161" /> <source>Create Spec Metadata File</source> <translation>Erzeuge Spec-Metadaten-Datei</translation> </message> <message> - <location filename="../PipxWidget.py" line="160" /> + <location filename="../PipxWidget.py" line="168" /> <source>Upgrade</source> <translation>Aktualisieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="162" /> + <location filename="../PipxWidget.py" line="170" /> <source>Check Outdated Packages</source> <translation>Prüfe veraltete Pakete</translation> </message> <message> - <location filename="../PipxWidget.py" line="475" /> - <location filename="../PipxWidget.py" line="166" /> + <location filename="../PipxWidget.py" line="483" /> + <location filename="../PipxWidget.py" line="174" /> <source>Upgrade Selected Package</source> <translation>Ausgewähltes Paket aktualisieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="500" /> - <location filename="../PipxWidget.py" line="169" /> + <location filename="../PipxWidget.py" line="508" /> + <location filename="../PipxWidget.py" line="177" /> <source>Upgrade All Packages</source> <translation>Alle Pakete aktualisieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="173" /> + <location filename="../PipxWidget.py" line="181" /> <source>Upgrade Shared Libraries</source> <translation>Gemeinsame Bibliotheken aktualisieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="180" /> + <location filename="../PipxWidget.py" line="188" /> <source>Uninstall</source> <translation>Deinstallieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="182" /> + <location filename="../PipxWidget.py" line="190" /> <source>Uninstall Selected Package</source> <translation>Ausgewähltes Paket deinstallieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="542" /> - <location filename="../PipxWidget.py" line="185" /> + <location filename="../PipxWidget.py" line="550" /> + <location filename="../PipxWidget.py" line="193" /> <source>Uninstall All Packages</source> <translation>Alle Pakete deinstallieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="192" /> + <location filename="../PipxWidget.py" line="200" /> <source>Dependencies</source> <translation>Abhängigkeiten</translation> </message> <message> - <location filename="../PipxWidget.py" line="194" /> + <location filename="../PipxWidget.py" line="202" /> <source>Show All Dependencies</source> <translation>Zeige Alle Abhängigkeiten</translation> </message> <message> - <location filename="../PipxWidget.py" line="197" /> + <location filename="../PipxWidget.py" line="205" /> <source>Show Outdated Dependencies</source> <translation>Zeige Veraltete Abhängigkeiten</translation> </message> <message> - <location filename="../PipxWidget.py" line="200" /> + <location filename="../PipxWidget.py" line="208" /> <source>Show Up-to-date Dependencies</source> <translation>Zeige Aktuelle Abhängigkeiten</translation> </message> <message> - <location filename="../PipxWidget.py" line="204" /> + <location filename="../PipxWidget.py" line="212" /> <source>Upgrade All Dependencies</source> <translation>Alle Abhängigkeiten aktualisieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="223" /> + <location filename="../PipxWidget.py" line="231" /> <source>Standalone Interpreters</source> <translation>Eigenständige Interpreter</translation> </message> <message> - <location filename="../PipxWidget.py" line="227" /> + <location filename="../PipxWidget.py" line="235" /> <source>Ensure PATH Modifications</source> <translation>PATH-Änderungen sicherstellen</translation> </message> <message> - <location filename="../PipxWidget.py" line="230" /> + <location filename="../PipxWidget.py" line="238" /> <source>Configure...</source> <translation>Einstellungen...</translation> </message> <message> - <location filename="../PipxWidget.py" line="310" /> + <location filename="../PipxWidget.py" line="318" /> <source>JSON Files (*.json);;All Files (*)</source> <translation>JSON Dateien (*.json);;Alle Dateien (*)</translation> </message> <message> - <location filename="../PipxWidget.py" line="311" /> + <location filename="../PipxWidget.py" line="319" /> <source>JSON Files (*.json)</source> <translation>JSON-Dateien (*.json)</translation> </message> <message> - <location filename="../PipxWidget.py" line="325" /> + <location filename="../PipxWidget.py" line="333" /> <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="337" /> + <location filename="../PipxWidget.py" line="345" /> <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="346" /> + <location filename="../PipxWidget.py" line="354" /> <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="362" /> + <location filename="../PipxWidget.py" line="370" /> <source>Re-Install Package</source> <translation>Paket neu installieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="363" /> + <location filename="../PipxWidget.py" line="371" /> <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="388" /> + <location filename="../PipxWidget.py" line="396" /> <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="476" /> + <location filename="../PipxWidget.py" line="484" /> <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="501" /> + <location filename="../PipxWidget.py" line="509" /> <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="526" /> + <location filename="../PipxWidget.py" line="534" /> <source>Uninstall Package</source> <translation>Paket deinstallieren</translation> </message> <message> - <location filename="../PipxWidget.py" line="527" /> + <location filename="../PipxWidget.py" line="535" /> <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="543" /> + <location filename="../PipxWidget.py" line="551" /> <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="664" /> + <location filename="../PipxWidget.py" line="682" /> <source><b>pipx Version {0}</b></source> <translation><b>pipx Version {0}</b></translation> </message> <message> - <location filename="../PipxWidget.py" line="694" /> + <location filename="../PipxWidget.py" line="712" /> <source>{0} ({1})</source> <comment>current version, latest version</comment> <translation>{0} ({1})</translation> </message> <message> - <location filename="../PipxWidget.py" line="702" /> + <location filename="../PipxWidget.py" line="720" /> <source>package and some dependencies outdated</source> <translation>Paket und einige Abhängigkeiten veraltet</translation> </message> <message> - <location filename="../PipxWidget.py" line="705" /> + <location filename="../PipxWidget.py" line="723" /> <source>package outdated</source> <translation>Paket veraltet</translation> </message> <message> - <location filename="../PipxWidget.py" line="719" /> + <location filename="../PipxWidget.py" line="737" /> <source>some dependencies outdated</source> <translation>einige Abhängigkeiten veraltet</translation> </message> <message> - <location filename="../PipxWidget.py" line="734" /> + <location filename="../PipxWidget.py" line="752" /> <source>everything up-to-date</source> <translation>alles aktuell</translation> </message> <message> - <location filename="../PipxWidget.py" line="761" /> + <location filename="../PipxWidget.py" line="779" /> <source>{0}{1}</source> <comment>Python version, standalone indicator</comment> <translation>{0}{1}</translation> </message> <message> - <location filename="../PipxWidget.py" line="763" /> + <location filename="../PipxWidget.py" line="781" /> <source> (standalone)</source> <translation> (eigenständig)</translation> </message> @@ -865,6 +882,11 @@ </message> <message> <location filename="../PipxWidget.ui" line="0" /> + <source>Press to repair broken dependencies of the selected package.</source> + <translation>Drücken, um defekte Abhängigkeiten des ausgewählten Paketes zu reparieren.</translation> + </message> + <message> + <location filename="../PipxWidget.ui" line="0" /> <source>Package/Application</source> <translation>Paket/Anwendung</translation> </message>
--- a/PipxInterface/i18n/pipx_empty.ts Tue Dec 10 17:53:34 2024 +0100 +++ b/PipxInterface/i18n/pipx_empty.ts Fri Dec 13 15:40:08 2024 +0100 @@ -4,150 +4,167 @@ <context> <name>Pipx</name> <message> - <location filename="../Pipx.py" line="273" /> - <location filename="../Pipx.py" line="163" /> + <location filename="../Pipx.py" line="274" /> + <location filename="../Pipx.py" line="164" /> <source><p>Message: {0}</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="285" /> - <location filename="../Pipx.py" line="277" /> - <location filename="../Pipx.py" line="166" /> + <location filename="../Pipx.py" line="286" /> + <location filename="../Pipx.py" line="278" /> + <location filename="../Pipx.py" line="167" /> <source><p>pipx exited with an error ({0}).</p>{1}</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="175" /> + <location filename="../Pipx.py" line="176" /> <source>pipx did not finish within 30 seconds.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="231" /> - <location filename="../Pipx.py" line="177" /> + <location filename="../Pipx.py" line="232" /> + <location filename="../Pipx.py" line="178" /> <source>pipx could not be started.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="231" /> + <location filename="../Pipx.py" line="232" /> <source>pipx Start Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="236" /> + <location filename="../Pipx.py" line="237" /> <source>pipx Runtime Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="237" /> + <location filename="../Pipx.py" line="238" /> <source><p>The pipx process reported an error.</p><p>Error: {0}</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="257" /> + <location filename="../Pipx.py" line="258" /> <source>pipx did not finish within {0} seconds.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="263" /> + <location filename="../Pipx.py" line="264" /> <source>pipx Timeout Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="284" /> + <location filename="../Pipx.py" line="285" /> <source>pipx Execution Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="409" /> + <location filename="../Pipx.py" line="410" /> <source>Install Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="454" /> + <location filename="../Pipx.py" line="455" /> <source>Install All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="504" /> + <location filename="../Pipx.py" line="505" /> <source>Re-Install Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="535" /> + <location filename="../Pipx.py" line="536" /> <source>Re-Install All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="548" /> + <location filename="../Pipx.py" line="549" /> <source>Uninstall Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="558" /> + <location filename="../Pipx.py" line="559" /> <source>Uninstall All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="575" /> + <location filename="../Pipx.py" line="576" /> <source>Upgrade Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="585" /> + <location filename="../Pipx.py" line="586" /> <source>Upgrade All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="595" /> + <location filename="../Pipx.py" line="596" /> <source>Upgrade Shared Libraries</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="609" /> + <location filename="../Pipx.py" line="610" /> <source>Upgrade Interpreters</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="622" /> + <location filename="../Pipx.py" line="623" /> <source>Prune Unused Interpreters</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="633" /> + <location filename="../Pipx.py" line="634" /> <source>Ensure PATH Modifications</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="672" /> - <source>Check Outdated Package</source> - <translation type="unfinished" /> - </message> - <message> <location filename="../Pipx.py" line="673" /> - <source><p>The status of package <b>{0}</b> could not be determined.</p><p>Reason: {1}</p></source> + <source>Check Outdated Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="734" /> - <source>Get Package Dependencies</source> + <location filename="../Pipx.py" line="674" /> + <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="735" /> + <source>Get Package Dependencies</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Pipx.py" line="736" /> <source><p>The status of dependencies 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="818" /> - <location filename="../Pipx.py" line="811" /> + <location filename="../Pipx.py" line="819" /> + <location filename="../Pipx.py" line="812" /> <source>Upgrade Dependencies</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="819" /> + <location filename="../Pipx.py" line="820" /> <source>All dependencies are already up-to-date.</source> <translation type="unfinished" /> </message> + <message> + <location filename="../Pipx.py" line="961" /> + <location filename="../Pipx.py" line="955" /> + <location filename="../Pipx.py" line="947" /> + <source>Repair Broken Dependencies</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Pipx.py" line="956" /> + <source>There are no broken dependencies.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Pipx.py" line="962" /> + <source><p>The interpreter for package <b>{0}</b> could not be determined. Aborting...</p></source> + <translation type="unfinished" /> + </message> </context> <context> <name>PipxAppStartDialog</name> @@ -582,229 +599,229 @@ <context> <name>PipxWidget</name> <message> - <location filename="../PipxWidget.py" line="137" /> + <location filename="../PipxWidget.py" line="145" /> <source>Install</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="270" /> - <location filename="../PipxWidget.py" line="139" /> + <location filename="../PipxWidget.py" line="278" /> + <location filename="../PipxWidget.py" line="147" /> <source>Install Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="289" /> - <location filename="../PipxWidget.py" line="142" /> + <location filename="../PipxWidget.py" line="297" /> + <location filename="../PipxWidget.py" line="150" /> <source>Install All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="146" /> + <location filename="../PipxWidget.py" line="154" /> <source>Re-Install Selected Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="387" /> - <location filename="../PipxWidget.py" line="149" /> + <location filename="../PipxWidget.py" line="395" /> + <location filename="../PipxWidget.py" line="157" /> <source>Re-Install All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="345" /> - <location filename="../PipxWidget.py" line="336" /> - <location filename="../PipxWidget.py" line="324" /> - <location filename="../PipxWidget.py" line="308" /> - <location filename="../PipxWidget.py" line="153" /> + <location filename="../PipxWidget.py" line="353" /> + <location filename="../PipxWidget.py" line="344" /> + <location filename="../PipxWidget.py" line="332" /> + <location filename="../PipxWidget.py" line="316" /> + <location filename="../PipxWidget.py" line="161" /> <source>Create Spec Metadata File</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="160" /> + <location filename="../PipxWidget.py" line="168" /> <source>Upgrade</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="162" /> + <location filename="../PipxWidget.py" line="170" /> <source>Check Outdated Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="475" /> - <location filename="../PipxWidget.py" line="166" /> + <location filename="../PipxWidget.py" line="483" /> + <location filename="../PipxWidget.py" line="174" /> <source>Upgrade Selected Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="500" /> - <location filename="../PipxWidget.py" line="169" /> + <location filename="../PipxWidget.py" line="508" /> + <location filename="../PipxWidget.py" line="177" /> <source>Upgrade All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="173" /> + <location filename="../PipxWidget.py" line="181" /> <source>Upgrade Shared Libraries</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="180" /> + <location filename="../PipxWidget.py" line="188" /> <source>Uninstall</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="182" /> + <location filename="../PipxWidget.py" line="190" /> <source>Uninstall Selected Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="542" /> - <location filename="../PipxWidget.py" line="185" /> + <location filename="../PipxWidget.py" line="550" /> + <location filename="../PipxWidget.py" line="193" /> <source>Uninstall All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="192" /> - <source>Dependencies</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../PipxWidget.py" line="194" /> - <source>Show All Dependencies</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../PipxWidget.py" line="197" /> - <source>Show Outdated Dependencies</source> - <translation type="unfinished" /> - </message> - <message> <location filename="../PipxWidget.py" line="200" /> + <source>Dependencies</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.py" line="202" /> + <source>Show All Dependencies</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.py" line="205" /> + <source>Show Outdated Dependencies</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.py" line="208" /> <source>Show Up-to-date Dependencies</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="204" /> + <location filename="../PipxWidget.py" line="212" /> <source>Upgrade All Dependencies</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="223" /> + <location filename="../PipxWidget.py" line="231" /> <source>Standalone Interpreters</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="227" /> + <location filename="../PipxWidget.py" line="235" /> <source>Ensure PATH Modifications</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="230" /> + <location filename="../PipxWidget.py" line="238" /> <source>Configure...</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="310" /> + <location filename="../PipxWidget.py" line="318" /> <source>JSON Files (*.json);;All Files (*)</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="311" /> + <location filename="../PipxWidget.py" line="319" /> <source>JSON Files (*.json)</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="325" /> + <location filename="../PipxWidget.py" line="333" /> <source><p>The file <b>{0}</b> exists already. Overwrite it?</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="337" /> + <location filename="../PipxWidget.py" line="345" /> <source><p>The spec metadata file <b>{0}</b> was created successfully.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="346" /> + <location filename="../PipxWidget.py" line="354" /> <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="362" /> + <location filename="../PipxWidget.py" line="370" /> <source>Re-Install Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="363" /> + <location filename="../PipxWidget.py" line="371" /> <source><p>Shall the package <b>{0}</b> really be reinstalled?</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="388" /> + <location filename="../PipxWidget.py" line="396" /> <source>Do you really want to reinstall all packages?</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="476" /> + <location filename="../PipxWidget.py" line="484" /> <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="501" /> + <location filename="../PipxWidget.py" line="509" /> <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="526" /> + <location filename="../PipxWidget.py" line="534" /> <source>Uninstall Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="527" /> + <location filename="../PipxWidget.py" line="535" /> <source><p>Shall the package <b>{0}</b> really be uninstalled?</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="543" /> + <location filename="../PipxWidget.py" line="551" /> <source><p>Do you really want to uninstall <b>ALL</b> packages?</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="664" /> + <location filename="../PipxWidget.py" line="682" /> <source><b>pipx Version {0}</b></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="694" /> + <location filename="../PipxWidget.py" line="712" /> <source>{0} ({1})</source> <comment>current version, latest version</comment> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="702" /> + <location filename="../PipxWidget.py" line="720" /> <source>package and some dependencies outdated</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="705" /> + <location filename="../PipxWidget.py" line="723" /> <source>package outdated</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="719" /> + <location filename="../PipxWidget.py" line="737" /> <source>some dependencies outdated</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="734" /> + <location filename="../PipxWidget.py" line="752" /> <source>everything up-to-date</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="761" /> + <location filename="../PipxWidget.py" line="779" /> <source>{0}{1}</source> <comment>Python version, standalone indicator</comment> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="763" /> + <location filename="../PipxWidget.py" line="781" /> <source> (standalone)</source> <translation type="unfinished" /> </message> @@ -865,6 +882,11 @@ </message> <message> <location filename="../PipxWidget.ui" line="0" /> + <source>Press to repair broken dependencies of the selected package.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.ui" line="0" /> <source>Package/Application</source> <translation type="unfinished" /> </message>
--- a/PipxInterface/i18n/pipx_en.ts Tue Dec 10 17:53:34 2024 +0100 +++ b/PipxInterface/i18n/pipx_en.ts Fri Dec 13 15:40:08 2024 +0100 @@ -4,150 +4,167 @@ <context> <name>Pipx</name> <message> - <location filename="../Pipx.py" line="273" /> - <location filename="../Pipx.py" line="163" /> + <location filename="../Pipx.py" line="274" /> + <location filename="../Pipx.py" line="164" /> <source><p>Message: {0}</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="285" /> - <location filename="../Pipx.py" line="277" /> - <location filename="../Pipx.py" line="166" /> + <location filename="../Pipx.py" line="286" /> + <location filename="../Pipx.py" line="278" /> + <location filename="../Pipx.py" line="167" /> <source><p>pipx exited with an error ({0}).</p>{1}</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="175" /> + <location filename="../Pipx.py" line="176" /> <source>pipx did not finish within 30 seconds.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="231" /> - <location filename="../Pipx.py" line="177" /> + <location filename="../Pipx.py" line="232" /> + <location filename="../Pipx.py" line="178" /> <source>pipx could not be started.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="231" /> + <location filename="../Pipx.py" line="232" /> <source>pipx Start Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="236" /> + <location filename="../Pipx.py" line="237" /> <source>pipx Runtime Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="237" /> + <location filename="../Pipx.py" line="238" /> <source><p>The pipx process reported an error.</p><p>Error: {0}</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="257" /> + <location filename="../Pipx.py" line="258" /> <source>pipx did not finish within {0} seconds.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="263" /> + <location filename="../Pipx.py" line="264" /> <source>pipx Timeout Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="284" /> + <location filename="../Pipx.py" line="285" /> <source>pipx Execution Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="409" /> + <location filename="../Pipx.py" line="410" /> <source>Install Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="454" /> + <location filename="../Pipx.py" line="455" /> <source>Install All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="504" /> + <location filename="../Pipx.py" line="505" /> <source>Re-Install Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="535" /> + <location filename="../Pipx.py" line="536" /> <source>Re-Install All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="548" /> + <location filename="../Pipx.py" line="549" /> <source>Uninstall Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="558" /> + <location filename="../Pipx.py" line="559" /> <source>Uninstall All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="575" /> + <location filename="../Pipx.py" line="576" /> <source>Upgrade Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="585" /> + <location filename="../Pipx.py" line="586" /> <source>Upgrade All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="595" /> + <location filename="../Pipx.py" line="596" /> <source>Upgrade Shared Libraries</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="609" /> + <location filename="../Pipx.py" line="610" /> <source>Upgrade Interpreters</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="622" /> + <location filename="../Pipx.py" line="623" /> <source>Prune Unused Interpreters</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="633" /> + <location filename="../Pipx.py" line="634" /> <source>Ensure PATH Modifications</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="672" /> - <source>Check Outdated Package</source> - <translation type="unfinished" /> - </message> - <message> <location filename="../Pipx.py" line="673" /> - <source><p>The status of package <b>{0}</b> could not be determined.</p><p>Reason: {1}</p></source> + <source>Check Outdated Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="734" /> - <source>Get Package Dependencies</source> + <location filename="../Pipx.py" line="674" /> + <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="735" /> + <source>Get Package Dependencies</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Pipx.py" line="736" /> <source><p>The status of dependencies 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="818" /> - <location filename="../Pipx.py" line="811" /> + <location filename="../Pipx.py" line="819" /> + <location filename="../Pipx.py" line="812" /> <source>Upgrade Dependencies</source> <translation type="unfinished" /> </message> <message> - <location filename="../Pipx.py" line="819" /> + <location filename="../Pipx.py" line="820" /> <source>All dependencies are already up-to-date.</source> <translation type="unfinished" /> </message> + <message> + <location filename="../Pipx.py" line="961" /> + <location filename="../Pipx.py" line="955" /> + <location filename="../Pipx.py" line="947" /> + <source>Repair Broken Dependencies</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Pipx.py" line="956" /> + <source>There are no broken dependencies.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Pipx.py" line="962" /> + <source><p>The interpreter for package <b>{0}</b> could not be determined. Aborting...</p></source> + <translation type="unfinished" /> + </message> </context> <context> <name>PipxAppStartDialog</name> @@ -582,229 +599,229 @@ <context> <name>PipxWidget</name> <message> - <location filename="../PipxWidget.py" line="137" /> + <location filename="../PipxWidget.py" line="145" /> <source>Install</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="270" /> - <location filename="../PipxWidget.py" line="139" /> + <location filename="../PipxWidget.py" line="278" /> + <location filename="../PipxWidget.py" line="147" /> <source>Install Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="289" /> - <location filename="../PipxWidget.py" line="142" /> + <location filename="../PipxWidget.py" line="297" /> + <location filename="../PipxWidget.py" line="150" /> <source>Install All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="146" /> + <location filename="../PipxWidget.py" line="154" /> <source>Re-Install Selected Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="387" /> - <location filename="../PipxWidget.py" line="149" /> + <location filename="../PipxWidget.py" line="395" /> + <location filename="../PipxWidget.py" line="157" /> <source>Re-Install All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="345" /> - <location filename="../PipxWidget.py" line="336" /> - <location filename="../PipxWidget.py" line="324" /> - <location filename="../PipxWidget.py" line="308" /> - <location filename="../PipxWidget.py" line="153" /> + <location filename="../PipxWidget.py" line="353" /> + <location filename="../PipxWidget.py" line="344" /> + <location filename="../PipxWidget.py" line="332" /> + <location filename="../PipxWidget.py" line="316" /> + <location filename="../PipxWidget.py" line="161" /> <source>Create Spec Metadata File</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="160" /> + <location filename="../PipxWidget.py" line="168" /> <source>Upgrade</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="162" /> + <location filename="../PipxWidget.py" line="170" /> <source>Check Outdated Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="475" /> - <location filename="../PipxWidget.py" line="166" /> + <location filename="../PipxWidget.py" line="483" /> + <location filename="../PipxWidget.py" line="174" /> <source>Upgrade Selected Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="500" /> - <location filename="../PipxWidget.py" line="169" /> + <location filename="../PipxWidget.py" line="508" /> + <location filename="../PipxWidget.py" line="177" /> <source>Upgrade All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="173" /> + <location filename="../PipxWidget.py" line="181" /> <source>Upgrade Shared Libraries</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="180" /> + <location filename="../PipxWidget.py" line="188" /> <source>Uninstall</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="182" /> + <location filename="../PipxWidget.py" line="190" /> <source>Uninstall Selected Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="542" /> - <location filename="../PipxWidget.py" line="185" /> + <location filename="../PipxWidget.py" line="550" /> + <location filename="../PipxWidget.py" line="193" /> <source>Uninstall All Packages</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="192" /> - <source>Dependencies</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../PipxWidget.py" line="194" /> - <source>Show All Dependencies</source> - <translation type="unfinished" /> - </message> - <message> - <location filename="../PipxWidget.py" line="197" /> - <source>Show Outdated Dependencies</source> - <translation type="unfinished" /> - </message> - <message> <location filename="../PipxWidget.py" line="200" /> + <source>Dependencies</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.py" line="202" /> + <source>Show All Dependencies</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.py" line="205" /> + <source>Show Outdated Dependencies</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.py" line="208" /> <source>Show Up-to-date Dependencies</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="204" /> + <location filename="../PipxWidget.py" line="212" /> <source>Upgrade All Dependencies</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="223" /> + <location filename="../PipxWidget.py" line="231" /> <source>Standalone Interpreters</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="227" /> + <location filename="../PipxWidget.py" line="235" /> <source>Ensure PATH Modifications</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="230" /> + <location filename="../PipxWidget.py" line="238" /> <source>Configure...</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="310" /> + <location filename="../PipxWidget.py" line="318" /> <source>JSON Files (*.json);;All Files (*)</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="311" /> + <location filename="../PipxWidget.py" line="319" /> <source>JSON Files (*.json)</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="325" /> + <location filename="../PipxWidget.py" line="333" /> <source><p>The file <b>{0}</b> exists already. Overwrite it?</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="337" /> + <location filename="../PipxWidget.py" line="345" /> <source><p>The spec metadata file <b>{0}</b> was created successfully.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="346" /> + <location filename="../PipxWidget.py" line="354" /> <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="362" /> + <location filename="../PipxWidget.py" line="370" /> <source>Re-Install Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="363" /> + <location filename="../PipxWidget.py" line="371" /> <source><p>Shall the package <b>{0}</b> really be reinstalled?</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="388" /> + <location filename="../PipxWidget.py" line="396" /> <source>Do you really want to reinstall all packages?</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="476" /> + <location filename="../PipxWidget.py" line="484" /> <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="501" /> + <location filename="../PipxWidget.py" line="509" /> <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="526" /> + <location filename="../PipxWidget.py" line="534" /> <source>Uninstall Package</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="527" /> + <location filename="../PipxWidget.py" line="535" /> <source><p>Shall the package <b>{0}</b> really be uninstalled?</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="543" /> + <location filename="../PipxWidget.py" line="551" /> <source><p>Do you really want to uninstall <b>ALL</b> packages?</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="664" /> + <location filename="../PipxWidget.py" line="682" /> <source><b>pipx Version {0}</b></source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="694" /> + <location filename="../PipxWidget.py" line="712" /> <source>{0} ({1})</source> <comment>current version, latest version</comment> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="702" /> + <location filename="../PipxWidget.py" line="720" /> <source>package and some dependencies outdated</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="705" /> + <location filename="../PipxWidget.py" line="723" /> <source>package outdated</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="719" /> + <location filename="../PipxWidget.py" line="737" /> <source>some dependencies outdated</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="734" /> + <location filename="../PipxWidget.py" line="752" /> <source>everything up-to-date</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="761" /> + <location filename="../PipxWidget.py" line="779" /> <source>{0}{1}</source> <comment>Python version, standalone indicator</comment> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="763" /> + <location filename="../PipxWidget.py" line="781" /> <source> (standalone)</source> <translation type="unfinished" /> </message> @@ -865,6 +882,11 @@ </message> <message> <location filename="../PipxWidget.ui" line="0" /> + <source>Press to repair broken dependencies of the selected package.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.ui" line="0" /> <source>Package/Application</source> <translation type="unfinished" /> </message>
--- a/PipxInterface/i18n/pipx_es.ts Tue Dec 10 17:53:34 2024 +0100 +++ b/PipxInterface/i18n/pipx_es.ts Fri Dec 13 15:40:08 2024 +0100 @@ -4,150 +4,167 @@ <context> <name>Pipx</name> <message> - <location filename="../Pipx.py" line="273" /> - <location filename="../Pipx.py" line="163" /> + <location filename="../Pipx.py" line="274" /> + <location filename="../Pipx.py" line="164" /> <source><p>Message: {0}</p></source> <translation><p>Mensaje: {0}</p></translation> </message> <message> - <location filename="../Pipx.py" line="285" /> - <location filename="../Pipx.py" line="277" /> - <location filename="../Pipx.py" line="166" /> + <location filename="../Pipx.py" line="286" /> + <location filename="../Pipx.py" line="278" /> + <location filename="../Pipx.py" line="167" /> <source><p>pipx exited with an error ({0}).</p>{1}</source> <translation><p>pipx ha terminado con un error ({0}).</p>{1}</translation> </message> <message> - <location filename="../Pipx.py" line="175" /> + <location filename="../Pipx.py" line="176" /> <source>pipx did not finish within 30 seconds.</source> <translation>pipx no ha terminado antes de 30 segundos.</translation> </message> <message> - <location filename="../Pipx.py" line="231" /> - <location filename="../Pipx.py" line="177" /> + <location filename="../Pipx.py" line="232" /> + <location filename="../Pipx.py" line="178" /> <source>pipx could not be started.</source> <translation>pipx no se ha podido iniciar.</translation> </message> <message> - <location filename="../Pipx.py" line="231" /> + <location filename="../Pipx.py" line="232" /> <source>pipx Start Error</source> <translation>Error de Inicio de pipx</translation> </message> <message> - <location filename="../Pipx.py" line="236" /> + <location filename="../Pipx.py" line="237" /> <source>pipx Runtime Error</source> <translation>Error Tiempo de Ejecución de pipx</translation> </message> <message> - <location filename="../Pipx.py" line="237" /> + <location filename="../Pipx.py" line="238" /> <source><p>The pipx process reported an error.</p><p>Error: {0}</p></source> <translation><p>El proceso de pipx ha reportado un error.</p><p>Error: {0}</p></translation> </message> <message> - <location filename="../Pipx.py" line="257" /> + <location filename="../Pipx.py" line="258" /> <source>pipx did not finish within {0} seconds.</source> <translation>pipx no ha terminado antes de {0} segundos.</translation> </message> <message> - <location filename="../Pipx.py" line="263" /> + <location filename="../Pipx.py" line="264" /> <source>pipx Timeout Error</source> <translation>Error de Tiempo Agotado de pipx</translation> </message> <message> - <location filename="../Pipx.py" line="284" /> + <location filename="../Pipx.py" line="285" /> <source>pipx Execution Error</source> <translation>Error de Ejecución de pipx</translation> </message> <message> - <location filename="../Pipx.py" line="409" /> + <location filename="../Pipx.py" line="410" /> <source>Install Packages</source> <translation>Instalar Packages</translation> </message> <message> - <location filename="../Pipx.py" line="454" /> + <location filename="../Pipx.py" line="455" /> <source>Install All Packages</source> <translation>Instalar Todos los Packages</translation> </message> <message> - <location filename="../Pipx.py" line="504" /> + <location filename="../Pipx.py" line="505" /> <source>Re-Install Package</source> <translation>Reinstalar Package</translation> </message> <message> - <location filename="../Pipx.py" line="535" /> + <location filename="../Pipx.py" line="536" /> <source>Re-Install All Packages</source> <translation>Reinstalar Todos los Packages</translation> </message> <message> - <location filename="../Pipx.py" line="548" /> + <location filename="../Pipx.py" line="549" /> <source>Uninstall Package</source> <translation>Desinstalar Package</translation> </message> <message> - <location filename="../Pipx.py" line="558" /> + <location filename="../Pipx.py" line="559" /> <source>Uninstall All Packages</source> <translation>Desinstalar Todos los Packages</translation> </message> <message> - <location filename="../Pipx.py" line="575" /> + <location filename="../Pipx.py" line="576" /> <source>Upgrade Package</source> <translation>Actualizar Package</translation> </message> <message> - <location filename="../Pipx.py" line="585" /> + <location filename="../Pipx.py" line="586" /> <source>Upgrade All Packages</source> <translation>Actualizar Todos los Packages</translation> </message> <message> - <location filename="../Pipx.py" line="595" /> + <location filename="../Pipx.py" line="596" /> <source>Upgrade Shared Libraries</source> <translation>Actualizar Bibliotecas Compartidas</translation> </message> <message> - <location filename="../Pipx.py" line="609" /> + <location filename="../Pipx.py" line="610" /> <source>Upgrade Interpreters</source> <translation>Actualizar Intérpretes</translation> </message> <message> - <location filename="../Pipx.py" line="622" /> + <location filename="../Pipx.py" line="623" /> <source>Prune Unused Interpreters</source> <translation>Limpiar Intérpretes no Utililizados</translation> </message> <message> - <location filename="../Pipx.py" line="633" /> + <location filename="../Pipx.py" line="634" /> <source>Ensure PATH Modifications</source> <translation>Asegurar modificaciones de PATH</translation> </message> <message> - <location filename="../Pipx.py" line="672" /> + <location filename="../Pipx.py" line="673" /> <source>Check Outdated Package</source> <translation>Comprobar Package Desactualizado</translation> </message> <message> - <location filename="../Pipx.py" line="673" /> + <location filename="../Pipx.py" line="674" /> <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="734" /> + <location filename="../Pipx.py" line="735" /> <source>Get Package Dependencies</source> <translation>Obtener Dependencias del PAckage</translation> </message> <message> - <location filename="../Pipx.py" line="735" /> + <location filename="../Pipx.py" line="736" /> <source><p>The status of dependencies of package <b>{0}</b> could not be determined.</p><p>Reason: {1}</p></source> <translation><p>El estado de las dependencias del package <b>{0}</b> no se han podido determinar.</p><p>Razón: {1}</p></translation> </message> <message> - <location filename="../Pipx.py" line="818" /> - <location filename="../Pipx.py" line="811" /> + <location filename="../Pipx.py" line="819" /> + <location filename="../Pipx.py" line="812" /> <source>Upgrade Dependencies</source> <translation>Actualizar Dependencias</translation> </message> <message> - <location filename="../Pipx.py" line="819" /> + <location filename="../Pipx.py" line="820" /> <source>All dependencies are already up-to-date.</source> <translation type="unfinished" /> </message> + <message> + <location filename="../Pipx.py" line="961" /> + <location filename="../Pipx.py" line="955" /> + <location filename="../Pipx.py" line="947" /> + <source>Repair Broken Dependencies</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Pipx.py" line="956" /> + <source>There are no broken dependencies.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Pipx.py" line="962" /> + <source><p>The interpreter for package <b>{0}</b> could not be determined. Aborting...</p></source> + <translation type="unfinished" /> + </message> </context> <context> <name>PipxAppStartDialog</name> @@ -586,229 +603,229 @@ <context> <name>PipxWidget</name> <message> - <location filename="../PipxWidget.py" line="137" /> + <location filename="../PipxWidget.py" line="145" /> <source>Install</source> <translation>Instalar</translation> </message> <message> - <location filename="../PipxWidget.py" line="270" /> - <location filename="../PipxWidget.py" line="139" /> + <location filename="../PipxWidget.py" line="278" /> + <location filename="../PipxWidget.py" line="147" /> <source>Install Packages</source> <translation>Instalar Packages</translation> </message> <message> - <location filename="../PipxWidget.py" line="289" /> - <location filename="../PipxWidget.py" line="142" /> + <location filename="../PipxWidget.py" line="297" /> + <location filename="../PipxWidget.py" line="150" /> <source>Install All Packages</source> <translation>Instalar Todos los Packages</translation> </message> <message> - <location filename="../PipxWidget.py" line="146" /> + <location filename="../PipxWidget.py" line="154" /> <source>Re-Install Selected Package</source> <translation>Reinstalar Package Seleccionado</translation> </message> <message> - <location filename="../PipxWidget.py" line="387" /> - <location filename="../PipxWidget.py" line="149" /> + <location filename="../PipxWidget.py" line="395" /> + <location filename="../PipxWidget.py" line="157" /> <source>Re-Install All Packages</source> <translation>Reinstalar Todos los Packages</translation> </message> <message> - <location filename="../PipxWidget.py" line="345" /> - <location filename="../PipxWidget.py" line="336" /> - <location filename="../PipxWidget.py" line="324" /> - <location filename="../PipxWidget.py" line="308" /> - <location filename="../PipxWidget.py" line="153" /> + <location filename="../PipxWidget.py" line="353" /> + <location filename="../PipxWidget.py" line="344" /> + <location filename="../PipxWidget.py" line="332" /> + <location filename="../PipxWidget.py" line="316" /> + <location filename="../PipxWidget.py" line="161" /> <source>Create Spec Metadata File</source> <translation>Crear Archivo de Metadatos de Spec</translation> </message> <message> - <location filename="../PipxWidget.py" line="160" /> + <location filename="../PipxWidget.py" line="168" /> <source>Upgrade</source> <translation>Actualizar</translation> </message> <message> - <location filename="../PipxWidget.py" line="162" /> + <location filename="../PipxWidget.py" line="170" /> <source>Check Outdated Packages</source> <translation>Comprobar Packages Desactualizados</translation> </message> <message> - <location filename="../PipxWidget.py" line="475" /> - <location filename="../PipxWidget.py" line="166" /> + <location filename="../PipxWidget.py" line="483" /> + <location filename="../PipxWidget.py" line="174" /> <source>Upgrade Selected Package</source> <translation>Actualizar Package Seleccionado</translation> </message> <message> - <location filename="../PipxWidget.py" line="500" /> - <location filename="../PipxWidget.py" line="169" /> + <location filename="../PipxWidget.py" line="508" /> + <location filename="../PipxWidget.py" line="177" /> <source>Upgrade All Packages</source> <translation>Actualizar Todos los Packages</translation> </message> <message> - <location filename="../PipxWidget.py" line="173" /> + <location filename="../PipxWidget.py" line="181" /> <source>Upgrade Shared Libraries</source> <translation>Actualizar Bibliotecas Compartidas</translation> </message> <message> - <location filename="../PipxWidget.py" line="180" /> + <location filename="../PipxWidget.py" line="188" /> <source>Uninstall</source> <translation>Desinstalar</translation> </message> <message> - <location filename="../PipxWidget.py" line="182" /> + <location filename="../PipxWidget.py" line="190" /> <source>Uninstall Selected Package</source> <translation>Desinstalar Package Seleccionado</translation> </message> <message> - <location filename="../PipxWidget.py" line="542" /> - <location filename="../PipxWidget.py" line="185" /> + <location filename="../PipxWidget.py" line="550" /> + <location filename="../PipxWidget.py" line="193" /> <source>Uninstall All Packages</source> <translation>Desinstalar Todos los Packages</translation> </message> <message> - <location filename="../PipxWidget.py" line="192" /> + <location filename="../PipxWidget.py" line="200" /> <source>Dependencies</source> <translation>Dependencias</translation> </message> <message> - <location filename="../PipxWidget.py" line="194" /> + <location filename="../PipxWidget.py" line="202" /> <source>Show All Dependencies</source> <translation>Mostrar Todas las Dependencias</translation> </message> <message> - <location filename="../PipxWidget.py" line="197" /> + <location filename="../PipxWidget.py" line="205" /> <source>Show Outdated Dependencies</source> <translation>Mostrar Dependencias Desactualizadas</translation> </message> <message> - <location filename="../PipxWidget.py" line="200" /> + <location filename="../PipxWidget.py" line="208" /> <source>Show Up-to-date Dependencies</source> <translation>Mostrar Dependencias Actualizadas</translation> </message> <message> - <location filename="../PipxWidget.py" line="204" /> + <location filename="../PipxWidget.py" line="212" /> <source>Upgrade All Dependencies</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="223" /> + <location filename="../PipxWidget.py" line="231" /> <source>Standalone Interpreters</source> <translation>Intérpretes Independientes</translation> </message> <message> - <location filename="../PipxWidget.py" line="227" /> + <location filename="../PipxWidget.py" line="235" /> <source>Ensure PATH Modifications</source> <translation>Asegurar modificaciones de PATH</translation> </message> <message> - <location filename="../PipxWidget.py" line="230" /> + <location filename="../PipxWidget.py" line="238" /> <source>Configure...</source> <translation>Configurar...</translation> </message> <message> - <location filename="../PipxWidget.py" line="310" /> + <location filename="../PipxWidget.py" line="318" /> <source>JSON Files (*.json);;All Files (*)</source> <translation>Archivos JSON (*.json);;Todos los Archivos (*)</translation> </message> <message> - <location filename="../PipxWidget.py" line="311" /> + <location filename="../PipxWidget.py" line="319" /> <source>JSON Files (*.json)</source> <translation>Archivos JSON (*.json)</translation> </message> <message> - <location filename="../PipxWidget.py" line="325" /> + <location filename="../PipxWidget.py" line="333" /> <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="337" /> + <location filename="../PipxWidget.py" line="345" /> <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="346" /> + <location filename="../PipxWidget.py" line="354" /> <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="362" /> + <location filename="../PipxWidget.py" line="370" /> <source>Re-Install Package</source> <translation>Reinstalar Package</translation> </message> <message> - <location filename="../PipxWidget.py" line="363" /> + <location filename="../PipxWidget.py" line="371" /> <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="388" /> + <location filename="../PipxWidget.py" line="396" /> <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="476" /> + <location filename="../PipxWidget.py" line="484" /> <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>El package seleccionado no se puede actualizar porque algunas de sus apps están en ejecución.</p><ul><li>{0}</li></ul><p>Detener estasapps e intentar de nuevo.</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="501" /> + <location filename="../PipxWidget.py" line="509" /> <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>Los packages no se pueden actualizar porque algunas de sus apps están en ejecución.</p><ul><li>{0}</li></ul><p>Detener estas apps e intentar de nuevo.</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="526" /> + <location filename="../PipxWidget.py" line="534" /> <source>Uninstall Package</source> <translation>Desinstalar Package</translation> </message> <message> - <location filename="../PipxWidget.py" line="527" /> + <location filename="../PipxWidget.py" line="535" /> <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="543" /> + <location filename="../PipxWidget.py" line="551" /> <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="664" /> + <location filename="../PipxWidget.py" line="682" /> <source><b>pipx Version {0}</b></source> <translation><b>pipx Versión {0}</b></translation> </message> <message> - <location filename="../PipxWidget.py" line="694" /> + <location filename="../PipxWidget.py" line="712" /> <source>{0} ({1})</source> <comment>current version, latest version</comment> <translation>{0} ({1})</translation> </message> <message> - <location filename="../PipxWidget.py" line="702" /> + <location filename="../PipxWidget.py" line="720" /> <source>package and some dependencies outdated</source> <translation>package y algunas dependencias desactualizados</translation> </message> <message> - <location filename="../PipxWidget.py" line="705" /> + <location filename="../PipxWidget.py" line="723" /> <source>package outdated</source> <translation>package desactualizado</translation> </message> <message> - <location filename="../PipxWidget.py" line="719" /> + <location filename="../PipxWidget.py" line="737" /> <source>some dependencies outdated</source> <translation>algunas dependencias desactualizadas</translation> </message> <message> - <location filename="../PipxWidget.py" line="734" /> + <location filename="../PipxWidget.py" line="752" /> <source>everything up-to-date</source> <translation>todo actualizado</translation> </message> <message> - <location filename="../PipxWidget.py" line="761" /> + <location filename="../PipxWidget.py" line="779" /> <source>{0}{1}</source> <comment>Python version, standalone indicator</comment> <translation>{0}{1}</translation> </message> <message> - <location filename="../PipxWidget.py" line="763" /> + <location filename="../PipxWidget.py" line="781" /> <source> (standalone)</source> <translation> (independiente)</translation> </message> @@ -869,6 +886,11 @@ </message> <message> <location filename="../PipxWidget.ui" line="0" /> + <source>Press to repair broken dependencies of the selected package.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.ui" line="0" /> <source>Package/Application</source> <translation>Package/Aplicación</translation> </message>
--- a/PipxInterface/i18n/pipx_ru.ts Tue Dec 10 17:53:34 2024 +0100 +++ b/PipxInterface/i18n/pipx_ru.ts Fri Dec 13 15:40:08 2024 +0100 @@ -4,150 +4,167 @@ <context> <name>Pipx</name> <message> - <location filename="../Pipx.py" line="273" /> - <location filename="../Pipx.py" line="163" /> + <location filename="../Pipx.py" line="274" /> + <location filename="../Pipx.py" line="164" /> <source><p>Message: {0}</p></source> <translation><p>Сообщение: {0}</p></translation> </message> <message> - <location filename="../Pipx.py" line="285" /> - <location filename="../Pipx.py" line="277" /> - <location filename="../Pipx.py" line="166" /> + <location filename="../Pipx.py" line="286" /> + <location filename="../Pipx.py" line="278" /> + <location filename="../Pipx.py" line="167" /> <source><p>pipx exited with an error ({0}).</p>{1}</source> <translation><p>pipx завершился с ошибкой ({0}).</p>{1}</translation> </message> <message> - <location filename="../Pipx.py" line="175" /> + <location filename="../Pipx.py" line="176" /> <source>pipx did not finish within 30 seconds.</source> <translation>pipx не была завершена в течение 30 секунд.</translation> </message> <message> - <location filename="../Pipx.py" line="231" /> - <location filename="../Pipx.py" line="177" /> + <location filename="../Pipx.py" line="232" /> + <location filename="../Pipx.py" line="178" /> <source>pipx could not be started.</source> <translation>pipx не удалось запустить.</translation> </message> <message> - <location filename="../Pipx.py" line="231" /> + <location filename="../Pipx.py" line="232" /> <source>pipx Start Error</source> <translation>Ошибка запуска pipx</translation> </message> <message> - <location filename="../Pipx.py" line="236" /> + <location filename="../Pipx.py" line="237" /> <source>pipx Runtime Error</source> <translation>Ошибка времени выполнения pipx</translation> </message> <message> - <location filename="../Pipx.py" line="237" /> + <location filename="../Pipx.py" line="238" /> <source><p>The pipx process reported an error.</p><p>Error: {0}</p></source> <translation><p>Процесс pipx сообщил об ошибке.</p><p>Ошибка: {0}</p></translation> </message> <message> - <location filename="../Pipx.py" line="257" /> + <location filename="../Pipx.py" line="258" /> <source>pipx did not finish within {0} seconds.</source> <translation>pipx не завершился в течение {0} секунд.</translation> </message> <message> - <location filename="../Pipx.py" line="263" /> + <location filename="../Pipx.py" line="264" /> <source>pipx Timeout Error</source> <translation>Ошибка тайм-аута pipx</translation> </message> <message> - <location filename="../Pipx.py" line="284" /> + <location filename="../Pipx.py" line="285" /> <source>pipx Execution Error</source> <translation>Ошибка выполнения pipx</translation> </message> <message> - <location filename="../Pipx.py" line="409" /> + <location filename="../Pipx.py" line="410" /> <source>Install Packages</source> <translation>Установить пакеты</translation> </message> <message> - <location filename="../Pipx.py" line="454" /> + <location filename="../Pipx.py" line="455" /> <source>Install All Packages</source> <translation>Установить все пакеты</translation> </message> <message> - <location filename="../Pipx.py" line="504" /> + <location filename="../Pipx.py" line="505" /> <source>Re-Install Package</source> <translation>Переустановить пакет</translation> </message> <message> - <location filename="../Pipx.py" line="535" /> + <location filename="../Pipx.py" line="536" /> <source>Re-Install All Packages</source> <translation>Переустановить все пакеты</translation> </message> <message> - <location filename="../Pipx.py" line="548" /> + <location filename="../Pipx.py" line="549" /> <source>Uninstall Package</source> <translation>Деинсталировать пакет</translation> </message> <message> - <location filename="../Pipx.py" line="558" /> + <location filename="../Pipx.py" line="559" /> <source>Uninstall All Packages</source> <translation>Деинсталировать все пакеты</translation> </message> <message> - <location filename="../Pipx.py" line="575" /> + <location filename="../Pipx.py" line="576" /> <source>Upgrade Package</source> <translation>Обновить пакет</translation> </message> <message> - <location filename="../Pipx.py" line="585" /> + <location filename="../Pipx.py" line="586" /> <source>Upgrade All Packages</source> <translation>Обновить все пакеты</translation> </message> <message> - <location filename="../Pipx.py" line="595" /> + <location filename="../Pipx.py" line="596" /> <source>Upgrade Shared Libraries</source> <translation>Обновить общие библиотеки</translation> </message> <message> - <location filename="../Pipx.py" line="609" /> + <location filename="../Pipx.py" line="610" /> <source>Upgrade Interpreters</source> <translation>Обновить интерпретаторы</translation> </message> <message> - <location filename="../Pipx.py" line="622" /> + <location filename="../Pipx.py" line="623" /> <source>Prune Unused Interpreters</source> <translation>Удалить неиспользуемые интерпретаторы</translation> </message> <message> - <location filename="../Pipx.py" line="633" /> + <location filename="../Pipx.py" line="634" /> <source>Ensure PATH Modifications</source> <translation>Внести изменения в переменную PATH</translation> </message> <message> - <location filename="../Pipx.py" line="672" /> + <location filename="../Pipx.py" line="673" /> <source>Check Outdated Package</source> <translation>Проверить устаревшие пакеты</translation> </message> <message> - <location filename="../Pipx.py" line="673" /> + <location filename="../Pipx.py" line="674" /> <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="734" /> + <location filename="../Pipx.py" line="735" /> <source>Get Package Dependencies</source> <translation>Получение зависимостей пакетов</translation> </message> <message> - <location filename="../Pipx.py" line="735" /> + <location filename="../Pipx.py" line="736" /> <source><p>The status of dependencies 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="818" /> - <location filename="../Pipx.py" line="811" /> + <location filename="../Pipx.py" line="819" /> + <location filename="../Pipx.py" line="812" /> <source>Upgrade Dependencies</source> <translation>Обновление зависимостей</translation> </message> <message> - <location filename="../Pipx.py" line="819" /> + <location filename="../Pipx.py" line="820" /> <source>All dependencies are already up-to-date.</source> <translation type="unfinished" /> </message> + <message> + <location filename="../Pipx.py" line="961" /> + <location filename="../Pipx.py" line="955" /> + <location filename="../Pipx.py" line="947" /> + <source>Repair Broken Dependencies</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Pipx.py" line="956" /> + <source>There are no broken dependencies.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Pipx.py" line="962" /> + <source><p>The interpreter for package <b>{0}</b> could not be determined. Aborting...</p></source> + <translation type="unfinished" /> + </message> </context> <context> <name>PipxAppStartDialog</name> @@ -586,229 +603,229 @@ <context> <name>PipxWidget</name> <message> - <location filename="../PipxWidget.py" line="137" /> + <location filename="../PipxWidget.py" line="145" /> <source>Install</source> <translation>Установить</translation> </message> <message> - <location filename="../PipxWidget.py" line="270" /> - <location filename="../PipxWidget.py" line="139" /> + <location filename="../PipxWidget.py" line="278" /> + <location filename="../PipxWidget.py" line="147" /> <source>Install Packages</source> <translation>Установить пакеты</translation> </message> <message> - <location filename="../PipxWidget.py" line="289" /> - <location filename="../PipxWidget.py" line="142" /> + <location filename="../PipxWidget.py" line="297" /> + <location filename="../PipxWidget.py" line="150" /> <source>Install All Packages</source> <translation>Установить все пакеты</translation> </message> <message> - <location filename="../PipxWidget.py" line="146" /> + <location filename="../PipxWidget.py" line="154" /> <source>Re-Install Selected Package</source> <translation>Переустановить выбранный пакет</translation> </message> <message> - <location filename="../PipxWidget.py" line="387" /> - <location filename="../PipxWidget.py" line="149" /> + <location filename="../PipxWidget.py" line="395" /> + <location filename="../PipxWidget.py" line="157" /> <source>Re-Install All Packages</source> <translation>Переустановить все пакеты</translation> </message> <message> - <location filename="../PipxWidget.py" line="345" /> - <location filename="../PipxWidget.py" line="336" /> - <location filename="../PipxWidget.py" line="324" /> - <location filename="../PipxWidget.py" line="308" /> - <location filename="../PipxWidget.py" line="153" /> + <location filename="../PipxWidget.py" line="353" /> + <location filename="../PipxWidget.py" line="344" /> + <location filename="../PipxWidget.py" line="332" /> + <location filename="../PipxWidget.py" line="316" /> + <location filename="../PipxWidget.py" line="161" /> <source>Create Spec Metadata File</source> <translation>Создать файл спецификации метаданных</translation> </message> <message> - <location filename="../PipxWidget.py" line="160" /> + <location filename="../PipxWidget.py" line="168" /> <source>Upgrade</source> <translation>Обновить</translation> </message> <message> - <location filename="../PipxWidget.py" line="162" /> + <location filename="../PipxWidget.py" line="170" /> <source>Check Outdated Packages</source> <translation>Проверить устаревшие пакеты</translation> </message> <message> - <location filename="../PipxWidget.py" line="475" /> - <location filename="../PipxWidget.py" line="166" /> + <location filename="../PipxWidget.py" line="483" /> + <location filename="../PipxWidget.py" line="174" /> <source>Upgrade Selected Package</source> <translation>Обновить выбранный пакет</translation> </message> <message> - <location filename="../PipxWidget.py" line="500" /> - <location filename="../PipxWidget.py" line="169" /> + <location filename="../PipxWidget.py" line="508" /> + <location filename="../PipxWidget.py" line="177" /> <source>Upgrade All Packages</source> <translation>Обновить все пакеты</translation> </message> <message> - <location filename="../PipxWidget.py" line="173" /> + <location filename="../PipxWidget.py" line="181" /> <source>Upgrade Shared Libraries</source> <translation>Обновить общие библиотеки</translation> </message> <message> - <location filename="../PipxWidget.py" line="180" /> + <location filename="../PipxWidget.py" line="188" /> <source>Uninstall</source> <translation>Деинсталировать</translation> </message> <message> - <location filename="../PipxWidget.py" line="182" /> + <location filename="../PipxWidget.py" line="190" /> <source>Uninstall Selected Package</source> <translation>Деинсталировать выбранный пакет</translation> </message> <message> - <location filename="../PipxWidget.py" line="542" /> - <location filename="../PipxWidget.py" line="185" /> + <location filename="../PipxWidget.py" line="550" /> + <location filename="../PipxWidget.py" line="193" /> <source>Uninstall All Packages</source> <translation>Деинсталировать все пакеты</translation> </message> <message> - <location filename="../PipxWidget.py" line="192" /> + <location filename="../PipxWidget.py" line="200" /> <source>Dependencies</source> <translation>Зависимости</translation> </message> <message> - <location filename="../PipxWidget.py" line="194" /> + <location filename="../PipxWidget.py" line="202" /> <source>Show All Dependencies</source> <translation>Показать все зависимости</translation> </message> <message> - <location filename="../PipxWidget.py" line="197" /> + <location filename="../PipxWidget.py" line="205" /> <source>Show Outdated Dependencies</source> <translation>Показать устаревшие зависимости</translation> </message> <message> - <location filename="../PipxWidget.py" line="200" /> + <location filename="../PipxWidget.py" line="208" /> <source>Show Up-to-date Dependencies</source> <translation>Показать актуальные зависимости</translation> </message> <message> - <location filename="../PipxWidget.py" line="204" /> + <location filename="../PipxWidget.py" line="212" /> <source>Upgrade All Dependencies</source> <translation type="unfinished" /> </message> <message> - <location filename="../PipxWidget.py" line="223" /> + <location filename="../PipxWidget.py" line="231" /> <source>Standalone Interpreters</source> <translation>Автономные интерпретаторы</translation> </message> <message> - <location filename="../PipxWidget.py" line="227" /> + <location filename="../PipxWidget.py" line="235" /> <source>Ensure PATH Modifications</source> <translation>Внести изменения в переменную PATH</translation> </message> <message> - <location filename="../PipxWidget.py" line="230" /> + <location filename="../PipxWidget.py" line="238" /> <source>Configure...</source> <translation>Настройка...</translation> </message> <message> - <location filename="../PipxWidget.py" line="310" /> + <location filename="../PipxWidget.py" line="318" /> <source>JSON Files (*.json);;All Files (*)</source> <translation>Файлы JSON (*.json);;Все файлы (*)</translation> </message> <message> - <location filename="../PipxWidget.py" line="311" /> + <location filename="../PipxWidget.py" line="319" /> <source>JSON Files (*.json)</source> <translation>Файлы JSON (*.json)</translation> </message> <message> - <location filename="../PipxWidget.py" line="325" /> + <location filename="../PipxWidget.py" line="333" /> <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="337" /> + <location filename="../PipxWidget.py" line="345" /> <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="346" /> + <location filename="../PipxWidget.py" line="354" /> <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="362" /> + <location filename="../PipxWidget.py" line="370" /> <source>Re-Install Package</source> <translation>Переустановить пакет</translation> </message> <message> - <location filename="../PipxWidget.py" line="363" /> + <location filename="../PipxWidget.py" line="371" /> <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="388" /> + <location filename="../PipxWidget.py" line="396" /> <source>Do you really want to reinstall all packages?</source> <translation>Вы действительно хотите переустановить все пакеты?</translation> </message> <message> - <location filename="../PipxWidget.py" line="476" /> + <location filename="../PipxWidget.py" line="484" /> <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>Выбранный пакет не может быть обновлен, поскольку некоторые из его приложений запущены.</p><ul><li>{0}</li></ul><p>Остановите эти приложения и повторите попытку.</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="501" /> + <location filename="../PipxWidget.py" line="509" /> <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>Обновление пакетов невозможно, поскольку некоторые из их приложений запущены.</p><ul><li>{0}</li></ul><p>Остановите эти приложения и повторите попытку.</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="526" /> + <location filename="../PipxWidget.py" line="534" /> <source>Uninstall Package</source> <translation>Деинсталировать пакет</translation> </message> <message> - <location filename="../PipxWidget.py" line="527" /> + <location filename="../PipxWidget.py" line="535" /> <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="543" /> + <location filename="../PipxWidget.py" line="551" /> <source><p>Do you really want to uninstall <b>ALL</b> packages?</p></source> <translation><p>Вы действительно хотите удалить </b>ВСЕ </b> пакеты?</p></translation> </message> <message> - <location filename="../PipxWidget.py" line="664" /> + <location filename="../PipxWidget.py" line="682" /> <source><b>pipx Version {0}</b></source> <translation><b>Версия pipx {0}</b></translation> </message> <message> - <location filename="../PipxWidget.py" line="694" /> + <location filename="../PipxWidget.py" line="712" /> <source>{0} ({1})</source> <comment>current version, latest version</comment> <translation>{0} ({1})</translation> </message> <message> - <location filename="../PipxWidget.py" line="702" /> + <location filename="../PipxWidget.py" line="720" /> <source>package and some dependencies outdated</source> <translation>пакет и некоторые зависимости устарели</translation> </message> <message> - <location filename="../PipxWidget.py" line="705" /> + <location filename="../PipxWidget.py" line="723" /> <source>package outdated</source> <translation>пакет устарел</translation> </message> <message> - <location filename="../PipxWidget.py" line="719" /> + <location filename="../PipxWidget.py" line="737" /> <source>some dependencies outdated</source> <translation>некоторые зависимости устарели</translation> </message> <message> - <location filename="../PipxWidget.py" line="734" /> + <location filename="../PipxWidget.py" line="752" /> <source>everything up-to-date</source> <translation>все обновлено</translation> </message> <message> - <location filename="../PipxWidget.py" line="761" /> + <location filename="../PipxWidget.py" line="779" /> <source>{0}{1}</source> <comment>Python version, standalone indicator</comment> <translation /> </message> <message> - <location filename="../PipxWidget.py" line="763" /> + <location filename="../PipxWidget.py" line="781" /> <source> (standalone)</source> <translation> (автономный)</translation> </message> @@ -869,6 +886,11 @@ </message> <message> <location filename="../PipxWidget.ui" line="0" /> + <source>Press to repair broken dependencies of the selected package.</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../PipxWidget.ui" line="0" /> <source>Package/Application</source> <translation>Пакет/Приложение</translation> </message>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PipxInterface/icons/repair-dark.svg Fri Dec 13 15:40:08 2024 +0100 @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + fill="none" + version="1.1" + viewBox="0 0 22 22" + id="svg4" + sodipodi:docname="repair-dark.svg" + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs8" /> + <sodipodi:namedview + id="namedview6" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="46.681818" + inkscape:cx="11.032132" + inkscape:cy="11.257059" + inkscape:window-width="2580" + inkscape:window-height="1316" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="0" + inkscape:current-layer="svg4" /> + <path + d="m 17.497184,20.42414 c -0.197666,0.191361 -0.432229,0.340877 -0.689612,0.439481 -0.257401,0.09861 -0.532271,0.144281 -0.808032,0.13433 -0.494508,0.02252 -0.979669,-0.141214 -1.358945,-0.458664 -0.395087,-0.325064 -0.65092,-0.787734 -0.715338,-1.293634 -0.05631,-2.040015 -0.05978,-5.956471 -0.03232,-8.775392 C 12.764885,9.9527806 11.871011,9.0345438 11.386835,7.8958138 10.980776,6.9515499 10.891575,5.9024766 11.132586,4.9047433 11.296692,4.0972268 11.660555,3.3435251 12.191224,2.7118767 12.721899,2.0802341 13.402547,1.5906535 14.171797,1.2872447 L 14.902559,1 l 0.07481,4.7871631 2.077294,0.00489 0.05099,-4.7901561 0.732872,0.2900823 c 0.61783,0.244613 1.180989,0.6087871 1.656807,1.0714971 0.475801,0.4626582 0.854759,1.0146203 1.114853,1.6238448 0.256729,0.602905 0.389317,1.2507841 0.389814,1.9051614 -0.0037,0.3668447 -0.04811,0.7320606 -0.132559,1.0890171 -0.151688,0.7614833 -0.482756,1.475926 -0.965974,2.084598 -0.483316,0.6087587 -1.104984,1.0943703 -1.813947,1.4169373 0.01462,1.819978 0.03405,6.345952 -0.04527,8.701144 -0.0221,0.466289 -0.216153,0.90775 -0.54507,1.239837 z M 13.25796,3.1510078 c -0.544619,0.539507 -0.915657,1.2281875 -1.066038,1.978643 -0.06848,0.2829051 -0.105007,0.5725902 -0.108932,0.8636797 0.0039,0.7884079 0.249798,1.5571777 0.704764,2.2033015 0.454961,0.6460833 1.097233,1.1385786 1.840655,1.4114117 L 14.986,9.7412392 14.98173,10.12005 c -0.03203,2.826575 -0.03446,6.985918 0.02335,9.044235 0.04398,0.22193 0.167037,0.420654 0.346474,0.559451 0.179506,0.138888 0.403278,0.208508 0.629964,0.195984 0.145884,0.008 0.291855,-0.01398 0.428726,-0.06458 0.120199,-0.04504 0.229951,-0.113795 0.322784,-0.202097 0.134374,-0.14069 0.213146,-0.325053 0.22206,-0.519086 0.08446,-2.502708 0.05469,-7.530398 0.04492,-9.006767 l -0.0019,-0.3788221 0.35506,-0.1318142 C 17.975622,9.391391 18.528634,9.0097141 18.958604,8.5084934 19.388567,8.00729 19.680793,7.4036713 19.806969,6.7562008 19.87452,6.4717072 19.909512,6.1804451 19.911247,5.88798 19.911524,5.378805 19.809419,4.8745799 19.611038,4.4049344 19.412576,3.935358 19.121807,3.5098637 18.755951,3.1535115 18.57753,2.9758763 18.381872,2.8162678 18.171702,2.6772413 L 18.124002,6.8678364 13.90952,6.8671458 13.84443,2.6665934 C 13.633285,2.808283 13.436856,2.9705553 13.25805,3.151029 Z" + fill="#eff0f1" + stroke-width="1.16638" + id="path2" /> + <path + style="color:#232629;fill:#eff0f1;fill-opacity:1;stroke:none;stroke-width:1.195;stroke-dasharray:none" + d="m 5,1 -4,8.75 1.0223214,0.559083 2.40625,-5.2636729 V 9.75 H 5.5714286 V 5.0454101 L 7.9776789,10.309083 9,9.75 Z M 4.4285714,11 v 2.5 H 5.5714286 V 11 Z m 0,3.75 v 2.5 h 1.1428572 v -2.5 z m 0,3.75 V 21 h 1.1428572 v -2.5 z" + class="ColorScheme-Text" + id="path6178" /> +</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PipxInterface/icons/repair-light.svg Fri Dec 13 15:40:08 2024 +0100 @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + fill="none" + version="1.1" + viewBox="0 0 22 22" + id="svg4" + sodipodi:docname="repair-light.svg" + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs8" /> + <sodipodi:namedview + id="namedview6" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="46.681818" + inkscape:cx="11.439143" + inkscape:cy="11.278481" + inkscape:window-width="2580" + inkscape:window-height="1310" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="0" + inkscape:current-layer="svg4" /> + <path + d="m 17.497183,20.424139 c -0.197666,0.191361 -0.432229,0.340877 -0.689612,0.439481 -0.257401,0.09861 -0.532271,0.144282 -0.808032,0.13433 -0.494509,0.02252 -0.979669,-0.141214 -1.358944,-0.458664 -0.395087,-0.325064 -0.65092,-0.787734 -0.715338,-1.293634 -0.05631,-2.040014 -0.05977,-5.956471 -0.03231,-8.775391 C 12.764884,9.9527803 11.871011,9.0345434 11.386835,7.8958135 10.980775,6.9515496 10.891575,5.9024764 11.132586,4.9047431 11.296692,4.0972266 11.660555,3.343525 12.191223,2.7118767 12.721899,2.080234 13.402547,1.5906535 14.171796,1.2872447 L 14.902558,1 l 0.07481,4.7871629 2.077294,0.00489 0.05099,-4.7901559 0.732872,0.2900822 c 0.61783,0.244613 1.180988,0.6087871 1.656806,1.0714971 0.475802,0.4626582 0.854759,1.0146203 1.114853,1.6238448 0.256729,0.6029049 0.389317,1.250784 0.389814,1.9051613 -0.0037,0.3668447 -0.04811,0.7320606 -0.132559,1.0890171 -0.151688,0.7614832 -0.482756,1.4759259 -0.965974,2.0845978 -0.483316,0.6087587 -1.104984,1.0943697 -1.813946,1.4169377 0.01462,1.819978 0.03405,6.345951 -0.04527,8.701143 -0.0221,0.466289 -0.216153,0.90775 -0.54507,1.239838 z M 13.257959,3.1510077 c -0.544618,0.539507 -0.915655,1.2281874 -1.066038,1.9786429 -0.06848,0.2829051 -0.105006,0.5725902 -0.108932,0.8636797 0.0038,0.7884079 0.249799,1.5571776 0.704765,2.2033014 0.454961,0.6460833 1.097232,1.1385785 1.840655,1.4114116 l 0.35759,0.1331955 -0.0043,0.3788122 c -0.03203,2.826573 -0.03445,6.985916 0.02335,9.044234 0.04397,0.221929 0.167036,0.420654 0.346473,0.559451 0.179508,0.138887 0.40328,0.208508 0.629965,0.195983 0.145884,0.008 0.291855,-0.01398 0.428726,-0.06459 0.120198,-0.04504 0.229951,-0.113795 0.322783,-0.202097 0.134374,-0.14069 0.213147,-0.325052 0.222061,-0.519085 0.08446,-2.502708 0.05469,-7.530399 0.04492,-9.006767 l -0.0019,-0.3788175 0.355059,-0.1318142 C 17.975648,9.3913857 18.528659,9.0097088 18.958629,8.5084881 19.388592,8.0072847 19.680818,7.403666 19.806994,6.7561956 19.874544,6.4717019 19.909538,6.1804399 19.911272,5.8879748 19.91155,5.3787998 19.809445,4.8745748 19.611063,4.4049292 19.412575,3.9353579 19.121806,3.5098635 18.755949,3.1535114 18.577528,2.9758762 18.38187,2.8162677 18.171701,2.6772412 l -0.0477,4.1905949 -4.214481,-6.906e-4 -0.0651,-4.2005521 c -0.211144,0.1416895 -0.407573,0.3039618 -0.586379,0.4844355 z" + fill="#232629" + stroke-width="1.16638" + id="path2" /> + <path + style="color:#232629;fill:currentColor;fill-opacity:1;stroke:none;stroke-width:1.19522" + d="M 5,1 1,9.7499998 2.0223214,10.309083 4.4285714,5.0454101 V 9.7499998 H 5.5714286 V 5.0454101 L 7.9776789,10.309083 9,9.7499998 Z M 4.4285714,11 v 2.5 H 5.5714286 V 11 Z m 0,3.75 v 2.5 h 1.1428572 v -2.5 z m 0,3.75 V 21 h 1.1428572 v -2.5 z" + class="ColorScheme-Text" + id="path6178" /> +</svg>
--- a/PluginPipxInterface.epj Tue Dec 10 17:53:34 2024 +0100 +++ b/PluginPipxInterface.epj Fri Dec 13 15:40:08 2024 +0100 @@ -234,11 +234,15 @@ "PKGLIST", "PipxInterface/Documentation/LICENSE.GPL", "PipxInterface/Documentation/Source", + "PipxInterface/icons/dependency-dark.svg", + "PipxInterface/icons/dependency-light.svg", "PipxInterface/icons/pipx22.svg", "PipxInterface/icons/pipx48.svg", "PipxInterface/icons/pipx96.svg", "PipxInterface/icons/pipxOutdated22.svg", "PipxInterface/icons/pipxOutdated96.svg", + "PipxInterface/icons/repair-dark.svg", + "PipxInterface/icons/repair-light.svg", "PluginPipxInterface.epj", "PluginPipxInterface.zip", "changelog.md",
--- a/PluginPipxInterface.py Tue Dec 10 17:53:34 2024 +0100 +++ b/PluginPipxInterface.py Fri Dec 13 15:40:08 2024 +0100 @@ -36,7 +36,7 @@ "author": "Detlev Offenbach <detlev@die-offenbachs.de>", "autoactivate": True, "deactivateable": True, - "version": "10.6.0", + "version": "10.6.1", "className": "PluginPipxInterface", "packageName": "PipxInterface", "shortDescription": "Graphical interface to the 'pipx' command.",
--- a/changelog.md Tue Dec 10 17:53:34 2024 +0100 +++ b/changelog.md Fri Dec 13 15:40:08 2024 +0100 @@ -1,6 +1,10 @@ ChangeLog --------- +__Version 10.6.1__ + +- Added a shortcut button to repair broken dependencies of the selected package. + __Version 10.6.0__ - Added a shortcut button to show the outdated dependencies of the selected package.