diff --git a/SOURCES/0026-Update-translations-RhBug-2017272.patch b/SOURCES/0026-Update-translations-RhBug-2017272.patch deleted file mode 100644 index a79437f..0000000 --- a/SOURCES/0026-Update-translations-RhBug-2017272.patch +++ /dev/null @@ -1,5677 +0,0 @@ -From dbfe35f3601262c739966ed5a790d5bb3db9ae9a Mon Sep 17 00:00:00 2001 -From: rpm-build -Date: Fri, 18 Mar 2022 15:05:55 +0100 -Subject: [PATCH] Update translations (RhBug:2017272) - ---- - po/fr.po | 500 ++++++++++++++++++++++----------- - po/ja.po | 550 +++++++++++++++++++++++++------------ - po/ko.po | 748 +++++++++++++++++++++++++++++++------------------- - po/libdnf.pot | 444 ++++++++++++++++++++---------- - po/zh_CN.po | 644 +++++++++++++++++++++++++++---------------- - 5 files changed, 1906 insertions(+), 980 deletions(-) - -diff --git a/po/fr.po b/po/fr.po -index 055cdaf..4e7dd87 100644 ---- a/po/fr.po -+++ b/po/fr.po -@@ -2,23 +2,26 @@ - # José Fournier , 2016. #zanata - # José Fournier , 2017. #zanata - # Jérôme Fenal , 2017. #zanata --# Ludek Janda , 2018. #zanata -+# Ludek Janda , 2018. #zanata, 2021. - # Jean-Baptiste Holcroft , 2019. #zanata - # Julien Humbert , 2020. -+# Sundeep Anand , 2021. -+# Titouan Bénard , 2021. - msgid "" - msgstr "" - "Project-Id-Version: PACKAGE VERSION\n" - "Report-Msgid-Bugs-To: \n" --"POT-Creation-Date: 2020-10-05 09:18-0400\n" --"PO-Revision-Date: 2020-06-29 02:40+0000\n" --"Last-Translator: Julien Humbert \n" --"Language-Team: French \n" -+"POT-Creation-Date: 2022-02-28 11:03+0100\n" -+"PO-Revision-Date: 2021-10-10 00:45+0000\n" -+"Last-Translator: Titouan Bénard \n" -+"Language-Team: French \n" - "Language: fr\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" - "Plural-Forms: nplurals=2; plural=n > 1;\n" --"X-Generator: Weblate 4.1.1\n" -+"X-Generator: Weblate 4.8\n" - - #: libdnf/conf/ConfigMain.cpp:62 libdnf/conf/OptionSeconds.cpp:40 - msgid "no value specified" -@@ -39,17 +42,30 @@ msgstr "n’a pu convertir « %s » en octets" - msgid "unknown unit '%s'" - msgstr "unité « %s » inconnue" - --#: libdnf/conf/ConfigMain.cpp:332 -+#: libdnf/conf/ConfigMain.cpp:204 libdnf/conf/OptionEnum.cpp:83 -+#: libdnf/conf/OptionNumber.cpp:88 -+msgid "invalid value" -+msgstr "valeur non valide" -+ -+#: libdnf/conf/ConfigMain.cpp:207 -+msgid "value 1 is not allowed" -+msgstr "la valeur 1 n’est pas autorisée" -+ -+#: libdnf/conf/ConfigMain.cpp:209 -+msgid "negative value is not allowed" -+msgstr "la valeur négative n'est pas autorisée" -+ -+#: libdnf/conf/ConfigMain.cpp:341 - #, c-format - msgid "percentage '%s' is out of range" - msgstr "le pourcentage « %s » est en dehors des limites" - --#: libdnf/conf/OptionBinds.cpp:76 -+#: libdnf/conf/OptionBinds.cpp:85 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" does not exist" - msgstr "Configuration : OptionBinding ayant pour id « %s » n’existe pas" - --#: libdnf/conf/OptionBinds.cpp:88 -+#: libdnf/conf/OptionBinds.cpp:97 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" already exists" - msgstr "Configuration : OptionBinding ayant pour « %s » n’existe pas" -@@ -60,15 +76,11 @@ msgid "invalid boolean value '%s'" - msgstr "valeur booléenne invalide : « %s »" - - #: libdnf/conf/OptionEnum.cpp:72 libdnf/conf/OptionEnum.cpp:158 --#: libdnf/conf/OptionString.cpp:59 libdnf/conf/OptionStringList.cpp:59 -+#: libdnf/conf/OptionString.cpp:64 libdnf/conf/OptionStringList.cpp:59 - #, c-format - msgid "'%s' is not an allowed value" - msgstr "la valeur « %s » n’est pas autorisée" - --#: libdnf/conf/OptionEnum.cpp:83 libdnf/conf/OptionNumber.cpp:88 --msgid "invalid value" --msgstr "valeur non valide" -- - #: libdnf/conf/OptionNumber.cpp:73 - #, c-format - msgid "given value [%d] should be less than allowed value [%d]." -@@ -94,27 +106,141 @@ msgstr "le chemin fourni « %s » n’existe pas." - msgid "could not convert '%s' to seconds" - msgstr "n’a pu convertir « %s » en secondes" - --#: libdnf/conf/OptionString.cpp:74 -+#: libdnf/conf/OptionString.cpp:79 - msgid "GetValue(): Value not set" - msgstr "GetValue() : valeur non définie" - --#: libdnf/dnf-goal.cpp:68 -+#: libdnf/dnf-context.cpp:3170 libdnf/dnf-context.cpp:3179 -+#, c-format -+msgid "Cannot enable more streams from module '%s' at the same time" -+msgstr "Ne peut pas activer plus de flux du module '%s' en même temps" -+ -+#: libdnf/dnf-context.cpp:3188 libdnf/dnf-context.cpp:3206 -+#, c-format -+msgid "" -+"Cannot enable module '%1$s' stream '%2$s': State of module already modified" -+msgstr "" -+"Impossible d'activer le flux de module '%1$s' stream '%2$s' : état du module " -+"déjà modifié" -+ -+#: libdnf/dnf-context.cpp:3253 -+#, c-format -+msgid "Modular dependency problem with Defaults: %s" -+msgstr "Problème de dépendance modulaire avec les valeurs par défaut : %s" -+ -+#: libdnf/dnf-context.cpp:3256 -+#, c-format -+msgid "Modular dependency problem: %s" -+msgstr "Problème de dépendance modulaire : %s" -+ -+#: libdnf/dnf-context.cpp:3290 libdnf/dnf-context.cpp:3314 -+#: libdnf/dnf-context.cpp:3325 libdnf/dnf-context.cpp:3364 -+#: libdnf/dnf-context.cpp:3380 libdnf/dnf-context.cpp:3412 -+#: libdnf/dnf-context.cpp:3456 libdnf/dnf-context.cpp:3466 -+#, c-format -+msgid "Unable to resolve argument '%s'" -+msgstr "Impossible de résoudre le paramètre ’%s’" -+ -+#: libdnf/dnf-context.cpp:3297 -+#, c-format -+msgid "" -+"Only module name is required. Ignoring unneeded information in argument: '%s'" -+msgstr "" -+"Seul le nom du module est nécessaire. Les paramètres inutiles ont été " -+"ignorés : ’%s’" -+ -+#: libdnf/dnf-context.cpp:3311 -+#, c-format -+msgid "Cannot reset module '%s': State of module already modified" -+msgstr "" -+"Impossible de réinitialiser le module '%s' : État du module déjà modifié" -+ -+#: libdnf/dnf-context.cpp:3322 -+#, c-format -+msgid "Cannot disable module '%s': State of module already modified" -+msgstr "Impossible de désactiver le module '%s' : État du module déjà modifié" -+ -+#: libdnf/dnf-context.cpp:3353 libdnf/dnf-context.cpp:3445 -+#: libdnf/dnf-context.cpp:3558 -+msgid "No modular data available" -+msgstr "Aucune donnée modulaire disponible" -+ -+#: libdnf/dnf-context.cpp:3370 -+#, c-format -+msgid "Ignoring unneeded information in argument: '%s'" -+msgstr "Ignorer les informations inutiles dans l'argumentation : '%s'" -+ -+#: libdnf/dnf-context.cpp:3408 -+#, c-format -+msgid "" -+"Problem during enablement of dependency tree for module '%1$s' stream " -+"'%2$s': %3$s" -+msgstr "" -+"Problème lors de l'activation de l'arbre des dépendances pour le module " -+"'%1$s' flux '%2$s' : %3$s" -+ -+#: libdnf/dnf-context.cpp:3420 -+msgid "Problems appeared for module enable request" -+msgstr "Des problèmes sont apparus pour la demande d'activation du module" -+ -+#. this really should never happen; unless the modular repodata is corrupted -+#: libdnf/dnf-context.cpp:3495 -+#, c-format -+msgid "Failed to parse module artifact NEVRA '%s'" -+msgstr "Échec de l'analyse de l'artefact de module '%s'" -+ -+#: libdnf/dnf-context.cpp:3529 -+msgid "Problems appeared for module install request" -+msgstr "Des problèmes sont apparus pour la demande d'installation du module" -+ -+#: libdnf/dnf-context.cpp:3589 -+msgid "Problems appeared for module reset request" -+msgstr "" -+"Des problèmes sont apparus pour la demande de réinitialisation des modules" -+ -+#: libdnf/dnf-context.cpp:3591 -+msgid "Problems appeared for module disable request" -+msgstr "Des problèmes sont apparus pour la demande de désactivation du module" -+ -+#: libdnf/dnf-context.cpp:3627 -+#, c-format -+msgid "" -+"The operation would result in switching of module '%s' stream '%s' to stream " -+"'%s'" -+msgstr "" -+"Le résultat de l’opération sera le basculement du flux « %s » du module « %s " -+"» vers le flux « %s »" -+ -+#: libdnf/dnf-context.cpp:3631 -+msgid "" -+"It is not possible to switch enabled streams of a module.\n" -+"It is recommended to remove all installed content from the module, and reset " -+"the module using 'microdnf module reset ' command. After you " -+"reset the module, you can install the other stream." -+msgstr "" -+"Il n’est pas possible de basculer les flux actifs d’un module. \n" -+"Il est recommandé de retirer tout contenu installé par le module, et de " -+"réinitialiser le mode en utilisant la commande 'microdnf module reset " -+"’. Après la réinitialisation du module, vous pouvez installer " -+"les autres flux." -+ -+#: libdnf/dnf-goal.cpp:85 - msgid "Could not depsolve transaction; " - msgstr "Impossible de depsolve la transaction ; " - --#: libdnf/dnf-goal.cpp:70 -+#: libdnf/dnf-goal.cpp:87 - #, c-format - msgid "%i problem detected:\n" - msgid_plural "%i problems detected:\n" - msgstr[0] "%i problème détecté :\n" - msgstr[1] "%i problèmes détectés :\n" - --#: libdnf/dnf-goal.cpp:78 -+#: libdnf/dnf-goal.cpp:95 - #, c-format - msgid " Problem %1$i: %2$s\n" - msgstr " Problème %1$i : %2$s\n" - --#: libdnf/dnf-goal.cpp:80 -+#: libdnf/dnf-goal.cpp:97 - #, c-format - msgid " Problem: %s\n" - msgstr " Problème : %s\n" -@@ -181,84 +307,84 @@ msgstr "n’a pas pu trouver le package %s" - msgid "could not add erase element %1$s(%2$i)" - msgstr "n’a pas pu ajouter d’élément pour effacer %1$s(%2$i)" - --#: libdnf/dnf-sack.cpp:381 -+#: libdnf/dnf-sack.cpp:395 -+msgid "failed to add solv" -+msgstr "n’a pu ajouter solv" -+ -+#: libdnf/dnf-sack.cpp:414 - #, c-format - msgid "no %1$s string for %2$s" - msgstr "aucune chaine %1$s pour %2$s" - --#: libdnf/dnf-sack.cpp:404 --msgid "failed to add solv" --msgstr "n’a pu ajouter solv" -- --#: libdnf/dnf-sack.cpp:422 -+#: libdnf/dnf-sack.cpp:424 - #, c-format - msgid "failed to open: %s" - msgstr "n’a pas pu ouvrir : %s" - --#: libdnf/dnf-sack.cpp:501 -+#: libdnf/dnf-sack.cpp:503 - #, c-format - msgid "cannot create temporary file: %s" - msgstr "n’a pas pu créer le fichier temporaire : %s" - --#: libdnf/dnf-sack.cpp:511 -+#: libdnf/dnf-sack.cpp:513 - #, c-format - msgid "failed opening tmp file: %s" - msgstr "n’a pas pu ouvrir le fichier tmp : %s" - --#: libdnf/dnf-sack.cpp:523 -+#: libdnf/dnf-sack.cpp:525 - #, c-format - msgid "write_main() failed writing data: %i" - msgstr "write_main() n’a pu écrire les données : %i" - --#: libdnf/dnf-sack.cpp:540 -+#: libdnf/dnf-sack.cpp:542 - msgid "write_main() failed to re-load written solv file" - msgstr "write_main() n’a pas pu charger à nouveau le fichier solv" - --#: libdnf/dnf-sack.cpp:605 -+#: libdnf/dnf-sack.cpp:607 - #, c-format - msgid "can not create temporary file %s" - msgstr "n’a pas pu créer le fichier temporaire %s" - --#: libdnf/dnf-sack.cpp:623 -+#: libdnf/dnf-sack.cpp:625 - #, c-format - msgid "write_ext(%1$d) has failed: %2$d" - msgstr "write_ext(%1$d) a échoué : %2$d" - --#: libdnf/dnf-sack.cpp:678 -+#: libdnf/dnf-sack.cpp:680 - msgid "null repo md file" --msgstr "null repo md file" -+msgstr "fichier md de dépôt nul" - --#: libdnf/dnf-sack.cpp:687 -+#: libdnf/dnf-sack.cpp:689 - #, c-format - msgid "can not read file %1$s: %2$s" - msgstr "n’a pu lire le fichier %1$s : %2$s" - --#: libdnf/dnf-sack.cpp:701 -+#: libdnf/dnf-sack.cpp:703 - msgid "repo_add_solv() has failed." - msgstr "repo_add_solv() a échoué." - --#: libdnf/dnf-sack.cpp:714 -+#: libdnf/dnf-sack.cpp:716 - msgid "loading of MD_TYPE_PRIMARY has failed." - msgstr "échec du chargement du MD_TYPE_PRIMARY." - --#: libdnf/dnf-sack.cpp:727 -+#: libdnf/dnf-sack.cpp:729 - msgid "repo_add_repomdxml/rpmmd() has failed." - msgstr "repo_add_repomdxml/rpmmd() a échoué." - --#: libdnf/dnf-sack.cpp:794 -+#: libdnf/dnf-sack.cpp:796 - msgid "failed to auto-detect architecture" - msgstr "n’a pu auto-détecter l’architecture" - --#: libdnf/dnf-sack.cpp:919 -+#: libdnf/dnf-sack.cpp:961 - #, c-format - msgid "failed creating cachedir %s" - msgstr "n’a pu créer le cachedir %s" - --#: libdnf/dnf-sack.cpp:1696 -+#: libdnf/dnf-sack.cpp:1738 - msgid "failed loading RPMDB" - msgstr "n’a pu télécharger RPMDB" - --#: libdnf/dnf-sack.cpp:2403 -+#: libdnf/dnf-sack.cpp:2463 - #, c-format - msgid "No module defaults found: %s" - msgstr "Aucun module par défaut n’a été trouvé : %s" -@@ -331,31 +457,30 @@ msgstr "N’a pas pu obtenir la taille libre du système de fichiers pour %s" - #, c-format - msgid "Not enough free space in %1$s: needed %2$s, available %3$s" - msgstr "" --"Pas suffisamment d’espace libre dans %1$s : a besoin de %2$s, disponible " --"%3$s" -+"Pas suffisamment d’espace libre dans %1$s : a besoin de %2$s, disponible %3$s" - --#: libdnf/dnf-transaction.cpp:1196 -+#: libdnf/dnf-transaction.cpp:1195 - msgid "failed to set root" - msgstr "n’a pu réussi à définir root" - --#: libdnf/dnf-transaction.cpp:1418 -+#: libdnf/dnf-transaction.cpp:1416 - #, c-format - msgid "Error %i running transaction test" - msgstr "Erreur %i lors du test transactionnel" - --#: libdnf/dnf-transaction.cpp:1458 -+#: libdnf/dnf-transaction.cpp:1456 - #, c-format - msgid "Error %i running transaction" - msgstr "Erreur %i pendant la transaction" - --#: libdnf/dnf-transaction.cpp:1473 -+#: libdnf/dnf-transaction.cpp:1472 - #, c-format - msgid "Transaction did not go to writing phase, but returned no error(%i)" - msgstr "" - "La transaction n’a pas pu opérer en phase d’écriture, mais a renvoyé « no " - "error(%i) »" - --#: libdnf/dnf-utils.cpp:111 libdnf/hy-iutil.cpp:399 -+#: libdnf/dnf-utils.cpp:111 libdnf/hy-iutil.cpp:403 - #, c-format - msgid "cannot open directory %1$s: %2$s" - msgstr "impossible d’ouvrir le dossier %1$s : %2$s" -@@ -365,283 +490,291 @@ msgstr "impossible d’ouvrir le dossier %1$s : %2$s" - msgid "failed to remove %s" - msgstr "n’a pas pu supprimer %s" - --#: libdnf/goal/Goal.cpp:55 -+#: libdnf/goal/Goal.cpp:74 - msgid "Ill-formed Selector, presence of multiple match objects in the filter" - msgstr "" - "Sélecteur Ill-formed, présence de plusieurs objets correspondants dans le " - "filtre" - --#: libdnf/goal/Goal.cpp:56 -+#: libdnf/goal/Goal.cpp:75 - msgid "Ill-formed Selector used for the operation, incorrect comparison type" - msgstr "" --"Sélecteur Ill-formed utilisé pour l’opération, type de comparaison " --"incorrecte" -+"Sélecteur Ill-formed utilisé pour l’opération, type de comparaison incorrecte" - --#: libdnf/goal/Goal.cpp:67 libdnf/goal/Goal.cpp:94 -+#: libdnf/goal/Goal.cpp:86 libdnf/goal/Goal.cpp:113 - msgid " does not belong to a distupgrade repository" - msgstr " n’appartient pas à un dépôt distupgrade" - --#: libdnf/goal/Goal.cpp:68 libdnf/goal/Goal.cpp:95 -+#: libdnf/goal/Goal.cpp:87 libdnf/goal/Goal.cpp:114 - msgid " has inferior architecture" - msgstr " a une architecture inférieure" - --#: libdnf/goal/Goal.cpp:69 -+#: libdnf/goal/Goal.cpp:88 - msgid "problem with installed package " - msgstr "problème avec le paquet installé " - --#: libdnf/goal/Goal.cpp:70 libdnf/goal/Goal.cpp:97 -+#: libdnf/goal/Goal.cpp:89 libdnf/goal/Goal.cpp:116 - msgid "conflicting requests" - msgstr "requêtes conflictuelles" - --#: libdnf/goal/Goal.cpp:71 libdnf/goal/Goal.cpp:98 -+#: libdnf/goal/Goal.cpp:90 libdnf/goal/Goal.cpp:117 - msgid "unsupported request" - msgstr "requête non prise en charge" - --#: libdnf/goal/Goal.cpp:72 libdnf/goal/Goal.cpp:99 -+#: libdnf/goal/Goal.cpp:91 libdnf/goal/Goal.cpp:118 - msgid "nothing provides requested " - msgstr "rien ne fourni ce qui a été demandé " - --#: libdnf/goal/Goal.cpp:73 -+#: libdnf/goal/Goal.cpp:92 - #, c-format - msgid "package %s does not exist" - msgstr "le paquet %s n’existe pas" - --#: libdnf/goal/Goal.cpp:74 libdnf/goal/Goal.cpp:101 -+#: libdnf/goal/Goal.cpp:93 libdnf/goal/Goal.cpp:120 - msgid " is provided by the system" - msgstr " est fourni par le système" - --#: libdnf/goal/Goal.cpp:75 libdnf/goal/Goal.cpp:102 -+#: libdnf/goal/Goal.cpp:94 libdnf/goal/Goal.cpp:121 - msgid "some dependency problem" - msgstr "quelques problèmes de dépendances" - --#: libdnf/goal/Goal.cpp:76 -+#: libdnf/goal/Goal.cpp:95 - msgid "cannot install the best update candidate for package " - msgstr "installation impossible du meilleur candidat pour le paquet " - --#: libdnf/goal/Goal.cpp:77 libdnf/goal/Goal.cpp:104 -+#: libdnf/goal/Goal.cpp:96 libdnf/goal/Goal.cpp:123 - msgid "cannot install the best candidate for the job" - msgstr "installation impossible du meilleur candidat pour la tâche" - --#: libdnf/goal/Goal.cpp:78 -+#: libdnf/goal/Goal.cpp:97 - #, c-format - msgid "package %s is filtered out by modular filtering" - msgstr "le paquet %s a été filtré par filtrage modulaire" - --#: libdnf/goal/Goal.cpp:79 -+#: libdnf/goal/Goal.cpp:98 - #, c-format - msgid "package %s does not have a compatible architecture" - msgstr "le paquet %s n’a pas d’architecture compatible" - --#: libdnf/goal/Goal.cpp:80 -+#: libdnf/goal/Goal.cpp:99 - #, c-format - msgid "package %s is not installable" - msgstr "le paquet %s n’est pas installable" - --#: libdnf/goal/Goal.cpp:81 -+#: libdnf/goal/Goal.cpp:100 - #, c-format - msgid "package %s is filtered out by exclude filtering" - msgstr "le paquet %s a été filtré en excluant le filtrage" - --#: libdnf/goal/Goal.cpp:82 -+#: libdnf/goal/Goal.cpp:101 - #, c-format - msgid "nothing provides %s needed by %s" - msgstr "rien de fournit %s rendu nécessaire par %s" - --#: libdnf/goal/Goal.cpp:83 -+#: libdnf/goal/Goal.cpp:102 - #, c-format - msgid "cannot install both %s and %s" - msgstr "installation impossible à la fois de %s et %s" - --#: libdnf/goal/Goal.cpp:84 -+#: libdnf/goal/Goal.cpp:103 - #, c-format - msgid "package %s conflicts with %s provided by %s" - msgstr "le paquet %s est en conflit avec %s fourni par %s" - --#: libdnf/goal/Goal.cpp:85 -+#: libdnf/goal/Goal.cpp:104 - #, c-format - msgid "package %s obsoletes %s provided by %s" - msgstr "le paquet %s rend obsolète %s fourni par %s" - --#: libdnf/goal/Goal.cpp:86 -+#: libdnf/goal/Goal.cpp:105 - #, c-format - msgid "installed package %s obsoletes %s provided by %s" - msgstr "le paquet installé %s rend obsolète %s fourni par %s" - --#: libdnf/goal/Goal.cpp:87 -+#: libdnf/goal/Goal.cpp:106 - #, c-format - msgid "package %s implicitly obsoletes %s provided by %s" - msgstr "le paquet %s rend implicitement obsolète %s fourni par %s" - --#: libdnf/goal/Goal.cpp:88 -+#: libdnf/goal/Goal.cpp:107 - #, c-format - msgid "package %s requires %s, but none of the providers can be installed" - msgstr "" - "le paquet %s nécessite %s, mais aucun fournisseur ne peut être installé" - --#: libdnf/goal/Goal.cpp:89 -+#: libdnf/goal/Goal.cpp:108 - #, c-format - msgid "package %s conflicts with %s provided by itself" - msgstr "le paquet %s est en conflit avec %s fourni par lui-même" - --#: libdnf/goal/Goal.cpp:90 -+#: libdnf/goal/Goal.cpp:109 - #, c-format - msgid "both package %s and %s obsolete %s" - msgstr "à la fois le paquet %s et %s rendent obsolète %s" - --#: libdnf/goal/Goal.cpp:96 -+#: libdnf/goal/Goal.cpp:115 - msgid "problem with installed module " - msgstr "problème avec le module installé " - --#: libdnf/goal/Goal.cpp:100 -+#: libdnf/goal/Goal.cpp:119 - #, c-format - msgid "module %s does not exist" - msgstr "le module %s n’existe pas" - --#: libdnf/goal/Goal.cpp:103 -+#: libdnf/goal/Goal.cpp:122 - msgid "cannot install the best update candidate for module " - msgstr "" - "installation impossible du meilleur candidat de mise à jour pour le module " - --#: libdnf/goal/Goal.cpp:105 libdnf/goal/Goal.cpp:108 -+#: libdnf/goal/Goal.cpp:124 libdnf/goal/Goal.cpp:127 - #, c-format - msgid "module %s is disabled" - msgstr "le module %s est désactivé" - --#: libdnf/goal/Goal.cpp:106 -+#: libdnf/goal/Goal.cpp:125 - #, c-format - msgid "module %s does not have a compatible architecture" - msgstr "le module %s n’a pas d’architecture compatible" - --#: libdnf/goal/Goal.cpp:107 -+#: libdnf/goal/Goal.cpp:126 - #, c-format - msgid "module %s is not installable" - msgstr "le module %s n’est pas installable" - --#: libdnf/goal/Goal.cpp:109 -+#: libdnf/goal/Goal.cpp:128 - #, c-format - msgid "nothing provides %s needed by module %s" - msgstr "rien de fournit %s rendu nécessaire par le module %s" - --#: libdnf/goal/Goal.cpp:110 -+#: libdnf/goal/Goal.cpp:129 - #, c-format - msgid "cannot install both modules %s and %s" - msgstr "installation impossible à la fois des modules %s et %s" - --#: libdnf/goal/Goal.cpp:111 -+#: libdnf/goal/Goal.cpp:130 - #, c-format - msgid "module %s conflicts with %s provided by %s" - msgstr "le module %s est en conflit avec %s fourni par %s" - --#: libdnf/goal/Goal.cpp:112 -+#: libdnf/goal/Goal.cpp:131 - #, c-format - msgid "module %s obsoletes %s provided by %s" - msgstr "le module %s rend obsolète %s fourni par %s" - --#: libdnf/goal/Goal.cpp:113 -+#: libdnf/goal/Goal.cpp:132 - #, c-format - msgid "installed module %s obsoletes %s provided by %s" - msgstr "le module installé %s rend obsolète %s fourni par %s" - --#: libdnf/goal/Goal.cpp:114 -+#: libdnf/goal/Goal.cpp:133 - #, c-format - msgid "module %s implicitly obsoletes %s provided by %s" - msgstr "le module %s rend implicitement obsolète %s fourni par %s" - --#: libdnf/goal/Goal.cpp:115 -+#: libdnf/goal/Goal.cpp:134 - #, c-format - msgid "module %s requires %s, but none of the providers can be installed" - msgstr "" - "le module %s nécessite %s, mais aucun fournisseur ne peut être installé" - --#: libdnf/goal/Goal.cpp:116 -+#: libdnf/goal/Goal.cpp:135 - #, c-format - msgid "module %s conflicts with %s provided by itself" - msgstr "le module %s est en conflit avec %s fourni par lui-même" - --#: libdnf/goal/Goal.cpp:117 -+#: libdnf/goal/Goal.cpp:136 - #, c-format - msgid "both module %s and %s obsolete %s" - msgstr "à la fois le module %s et %s rendent obsolète %s" - --#: libdnf/goal/Goal.cpp:1038 -+#: libdnf/goal/Goal.cpp:1051 - msgid "no solver set" - msgstr "aucun solveur défini" - --#: libdnf/goal/Goal.cpp:1043 -+#: libdnf/goal/Goal.cpp:1056 - #, c-format - msgid "failed to make %s absolute" - msgstr "n’a pas pu rendre %s absolu" - --#: libdnf/goal/Goal.cpp:1050 -+#: libdnf/goal/Goal.cpp:1063 - #, c-format - msgid "failed writing debugdata to %1$s: %2$s" - msgstr "échec de l’écriture des debugdata dans %1$s : %2$s" - --#: libdnf/goal/Goal.cpp:1062 -+#: libdnf/goal/Goal.cpp:1075 - msgid "no solv in the goal" - msgstr "pas de solv dans l’objectif" - --#: libdnf/goal/Goal.cpp:1064 -+#: libdnf/goal/Goal.cpp:1077 - msgid "no solution, cannot remove protected package" - msgstr "aucune solution, n’a pas pu supprimer le package protégé" - --#: libdnf/goal/Goal.cpp:1067 -+#: libdnf/goal/Goal.cpp:1080 - msgid "no solution possible" - msgstr "aucune solution n’est possible" - --#: libdnf/goal/Goal.cpp:1479 -+#: libdnf/goal/Goal.cpp:1206 -+msgid "Problem: " -+msgstr "Problème : " -+ -+#: libdnf/goal/Goal.cpp:1211 -+#, c-format -+msgid "Problem %d: " -+msgstr "Probléme %d : " -+ -+#: libdnf/goal/Goal.cpp:1538 - msgid "" - "The operation would result in removing the following protected packages: " - msgstr "" - "L’opération résulterait en la suppression des packages protégés suivants : " - --#: libdnf/hy-iutil.cpp:322 -+#: libdnf/hy-iutil.cpp:326 - #, c-format - msgid "Failed renaming %1$s to %2$s: %3$s" - msgstr "N’a pas pu renommer %1$s en %2$s : %3$s" - --#: libdnf/hy-iutil.cpp:330 -+#: libdnf/hy-iutil.cpp:334 - #, c-format - msgid "Failed setting perms on %1$s: %2$s" - msgstr "N’a pas pu définir les permissions sur %1$s : %2$s" - --#: libdnf/hy-iutil.cpp:376 -+#: libdnf/hy-iutil.cpp:380 - #, c-format - msgid "cannot create directory %1$s: %2$s" - msgstr "impossible de créer le dossier %1$s : %2$s" - --#: libdnf/hy-iutil.cpp:411 -+#: libdnf/hy-iutil.cpp:415 - #, c-format - msgid "cannot stat path %1$s: %2$s" - msgstr "impossible de stat le chemin %1$s : %2$s" - --#: libdnf/module/ModulePackage.cpp:499 -+#: libdnf/module/ModulePackage.cpp:560 - #, c-format - msgid "Invalid format of Platform module: %s" - msgstr "Format invalide du module de plateforme : %s" - --#: libdnf/module/ModulePackage.cpp:514 -+#: libdnf/module/ModulePackage.cpp:575 - msgid "Multiple module platforms provided by available packages\n" - msgstr "" - "De multiples modules de plateformes sont fournis par les paquets " - "disponibles\n" - --#: libdnf/module/ModulePackage.cpp:527 -+#: libdnf/module/ModulePackage.cpp:588 - msgid "Multiple module platforms provided by installed packages\n" - msgstr "" - "De multiples modules de plateformes sont fournis par les paquets installés\n" - --#: libdnf/module/ModulePackage.cpp:554 -+#: libdnf/module/ModulePackage.cpp:615 - #, c-format - msgid "Detection of Platform Module in %s failed: %s" - msgstr "La détection des modules de plateformes dans %s a échoué : %s" - --#: libdnf/module/ModulePackage.cpp:563 -+#: libdnf/module/ModulePackage.cpp:624 - #, c-format - msgid "Missing PLATFORM_ID in %s" - msgstr "L'identifiant de la platforme est manquant dans %s" - --#: libdnf/module/ModulePackage.cpp:568 -+#: libdnf/module/ModulePackage.cpp:629 - msgid "No valid Platform ID detected" - msgstr "Aucun identifiant de plateforme n'a été détecté" - -@@ -650,41 +783,73 @@ msgstr "Aucun identifiant de plateforme n'a été détecté" - msgid "Cannot enable multiple streams for module '%s'" - msgstr "Impossible d’activer les flux pour le module « %s »" - --#: libdnf/module/ModulePackageContainer.cpp:294 -+#: libdnf/module/ModulePackageContainer.cpp:295 - #, c-format - msgid "Conflicting defaults with repo '%s': %s" - msgstr "Valeurs par défaut en conflit avec le dépôt « %s » : %s" - --#: libdnf/module/ModulePackageContainer.cpp:1569 -+#: libdnf/module/ModulePackageContainer.cpp:841 -+msgid "Installing module profiles:\n" -+msgstr "Installation des profils de module :\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:856 -+msgid "Disabling module profiles:\n" -+msgstr "Désactivation des profils de module :\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:871 -+msgid "Enabling module streams:\n" -+msgstr "Activation des flux de modules :\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:885 -+msgid "Switching module streams:\n" -+msgstr "Basculement des flux de modules :\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:903 -+msgid "Disabling modules:\n" -+msgstr "Désactivation des modules :\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:914 -+msgid "Resetting modules:\n" -+msgstr "Réinitialisation des modules :\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:1638 - #, c-format - msgid "Unable to load modular Fail-Safe data at '%s'" - msgstr "Impossible de charger les données de sécurité à « %s »" - --#: libdnf/module/ModulePackageContainer.cpp:1575 -+#: libdnf/module/ModulePackageContainer.cpp:1644 - #, c-format - msgid "Unable to load modular Fail-Safe data for module '%s:%s'" - msgstr "" - "Impossible de charger les données de sécurité modulaires pour le module " - "« %s : %s »" - --#: libdnf/module/ModulePackageContainer.cpp:1639 -+#: libdnf/module/ModulePackageContainer.cpp:1702 - #, c-format - msgid "Unable to create directory \"%s\" for modular Fail Safe data: %s" - msgstr "" - "Impossible de créer le dossier « %s » pour les données de sécurité " - "modulaires : %s" - --#: libdnf/module/ModulePackageContainer.cpp:1661 -+#: libdnf/module/ModulePackageContainer.cpp:1718 - #, c-format - msgid "Unable to save a modular Fail Safe data to '%s'" - msgstr "" - "Impossible d’enregistrer les données de sécurité modulaires vers « %s »" - --#: libdnf/module/ModulePackageContainer.cpp:1686 -+#: libdnf/module/ModulePackageContainer.cpp:1741 - #, c-format - msgid "Unable to remove a modular Fail Safe data in '%s'" -+msgstr "Impossible de supprimer les données de sécurité modulaires dans « %s »" -+ -+#: libdnf/module/ModulePackageContainer.cpp:1773 -+#, c-format -+msgid "" -+"Unable to apply modular obsoletes to '%s:%s' because target module '%s' is " -+"disabled" - msgstr "" --"Impossible de supprimer les données de sécurité modulaires dans « %s »" -+"Impossible d'appliquer les obsolètes modulaires à '%s:%s' car le module " -+"cible '%s' est désactivé" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:86 - #, c-format -@@ -712,6 +877,13 @@ msgstr "Échec de la mise à jour des paramètres par défaut : %s" - msgid "Failed to upgrade streams: %s" - msgstr "Échec de la mise à jour des flux : %s" - -+#: libdnf/module/modulemd/ModuleMetadata.cpp:212 -+#, c-format -+msgid "Cannot retrieve module obsoletes because no stream matching %s: %s" -+msgstr "" -+"Impossible de récupérer les modules obsolètes car aucune correspondance de " -+"flux %s : %s" -+ - #: libdnf/plugin/plugin.cpp:46 - #, c-format - msgid "Can't load shared library \"%s\": %s" -@@ -755,8 +927,8 @@ msgid "" - "operator instead." - msgstr "" - "L’utilisation de l’opérateur « == » dans reldeps peut entraîner un " --"comportement indéfini. Il est déprécié et le support sera abandonné dans les" --" prochaines versions. Utilisez plutôt l’opérateur « = »." -+"comportement indéfini. Il est déprécié et le support sera abandonné dans les " -+"prochaines versions. Utilisez plutôt l’opérateur « = »." - - #: libdnf/repo/Repo.cpp:321 - #, c-format -@@ -769,152 +941,169 @@ msgid "Repository '%s' has unsupported type: 'type=%s', skipping." - msgstr "" - "Le dépôt « %s » n’a pas de type pris en charge : « type=%s », passer outre." - --#: libdnf/repo/Repo.cpp:546 -+#: libdnf/repo/Repo.cpp:489 libdnf/repo/Repo.cpp:610 libdnf/repo/Repo.cpp:641 -+#: libdnf/repo/Repo.cpp:1382 - #, c-format --msgid "Cannot find a valid baseurl for repo: %s" --msgstr "Impossible de trouver une adresse de base pour le dépôt : %s" -+msgid "repo '%s': 'basecachedir' is not set" -+msgstr "repo '%s' : 'basecachedir' n'est pas fixé" - --#: libdnf/repo/Repo.cpp:583 libdnf/repo/Repo.cpp:1672 -+#: libdnf/repo/Repo.cpp:512 - msgid "" --"Maximum download speed is lower than minimum. Please change configuration of" --" minrate or throttle" -+"Maximum download speed is lower than minimum. Please change configuration of " -+"minrate or throttle" - msgstr "" - "La vitesse de téléchargement maximale est plus basse que le minimum. " - "Veuillez modifier les paramètres minrate ou throttle" - --#: libdnf/repo/Repo.cpp:633 libdnf/repo/Repo.cpp:655 -+#: libdnf/repo/Repo.cpp:546 -+#, c-format -+msgid "repo '%s': 'proxy_username' is set but not 'proxy_password'" -+msgstr "repo '%s' : 'proxy_username' est défini mais pas 'proxy_password'" -+ -+#: libdnf/repo/Repo.cpp:548 -+msgid "'proxy_username' is set but not 'proxy_password'" -+msgstr "" -+"Le nom d'utilisateur \"proxy_username\" est défini mais pas le mot de passe " -+"\"proxy_password\"" -+ -+#: libdnf/repo/Repo.cpp:629 -+#, c-format -+msgid "Cannot find a valid baseurl for repo: %s" -+msgstr "Impossible de trouver une adresse de base pour le dépôt : %s" -+ -+#: libdnf/repo/Repo.cpp:660 libdnf/repo/Repo.cpp:682 - #, c-format - msgid "%s: gpgme_data_new_from_fd(): %s" - msgstr "%s : gpgme_data_new_from_fd() : %s" - --#: libdnf/repo/Repo.cpp:641 libdnf/repo/Repo.cpp:663 -+#: libdnf/repo/Repo.cpp:668 libdnf/repo/Repo.cpp:690 - #, c-format - msgid "%s: gpgme_op_import(): %s" - msgstr "%s : gpgme_op_import() : %s" - --#: libdnf/repo/Repo.cpp:686 libdnf/repo/Repo.cpp:752 libdnf/repo/Repo.cpp:880 -+#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:779 libdnf/repo/Repo.cpp:907 - #, c-format - msgid "%s: gpgme_ctx_set_engine_info(): %s" - msgstr "%s : gpgme_ctx_set_engine_info() : %s" - --#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:777 -+#: libdnf/repo/Repo.cpp:740 libdnf/repo/Repo.cpp:804 - #, c-format - msgid "can not list keys: %s" - msgstr "n’a pas pu lister les clés : %s" - --#: libdnf/repo/Repo.cpp:806 -+#: libdnf/repo/Repo.cpp:833 - #, c-format - msgid "Failed to retrieve GPG key for repo '%s': %s" - msgstr "Impossible de récupérer la clé GPG pour le dépôt « %s » : %s" - --#: libdnf/repo/Repo.cpp:859 -+#: libdnf/repo/Repo.cpp:886 - #, c-format - msgid "repo %s: 0x%s already imported" - msgstr "dépôt %s : 0x%s déjà importé" - --#: libdnf/repo/Repo.cpp:887 -+#: libdnf/repo/Repo.cpp:914 - #, c-format - msgid "repo %s: imported key 0x%s." - msgstr "dépôt %s : clé importée 0x%s." - --#: libdnf/repo/Repo.cpp:1131 -+#: libdnf/repo/Repo.cpp:1162 - #, c-format - msgid "reviving: repo '%s' skipped, no metalink." - msgstr "relance : dépôt « %s » ignoré, pas de méta-lien." - --#: libdnf/repo/Repo.cpp:1150 -+#: libdnf/repo/Repo.cpp:1181 - #, c-format - msgid "reviving: repo '%s' skipped, no usable hash." - msgstr "relance : dépôt « %s » ignoré, pas de hachage utilisable." - --#: libdnf/repo/Repo.cpp:1173 -+#: libdnf/repo/Repo.cpp:1204 - #, c-format - msgid "reviving: failed for '%s', mismatched %s sum." - msgstr "relance : échec pour « %s », la somme de %s ne correspond pas." - --#: libdnf/repo/Repo.cpp:1179 -+#: libdnf/repo/Repo.cpp:1210 - #, c-format - msgid "reviving: '%s' can be revived - metalink checksums match." - msgstr "" - "relance : « %s » peut être relancé - la somme de contrôle du méta-lien " - "correspond." - --#: libdnf/repo/Repo.cpp:1204 -+#: libdnf/repo/Repo.cpp:1235 - #, c-format - msgid "reviving: '%s' can be revived - repomd matches." - msgstr "relance : « %s » peut être relancé - le repomd correspond." - --#: libdnf/repo/Repo.cpp:1206 -+#: libdnf/repo/Repo.cpp:1237 - #, c-format - msgid "reviving: failed for '%s', mismatched repomd." - msgstr "relance : échec pour « %s », le repomd ne correspond pas." - --#: libdnf/repo/Repo.cpp:1224 -+#: libdnf/repo/Repo.cpp:1255 - #, c-format - msgid "Cannot create repo destination directory \"%s\": %s" - msgstr "Impossible de créer le répertoire de destination du dépôt « %s » : %s" - --#: libdnf/repo/Repo.cpp:1230 -+#: libdnf/repo/Repo.cpp:1261 - #, c-format - msgid "Cannot create repo temporary directory \"%s\": %s" - msgstr "Impossible de créer le répertoire temporaire du dépôt « %s » : %s" - --#: libdnf/repo/Repo.cpp:1244 -+#: libdnf/repo/Repo.cpp:1275 - #, c-format - msgid "Cannot create directory \"%s\": %s" - msgstr "Impossible de créer le répertoire « %s » : %s" - --#: libdnf/repo/Repo.cpp:1267 -+#: libdnf/repo/Repo.cpp:1298 - #, c-format - msgid "Cannot rename directory \"%s\" to \"%s\": %s" - msgstr "Impossible de renommer le répertoire « %s » en « %s » : %s" - --#: libdnf/repo/Repo.cpp:1290 -+#: libdnf/repo/Repo.cpp:1321 - #, c-format - msgid "repo: using cache for: %s" - msgstr "dépôt : utilisation du cache pour : %s" - --#: libdnf/repo/Repo.cpp:1302 -+#: libdnf/repo/Repo.cpp:1333 - #, c-format - msgid "Cache-only enabled but no cache for '%s'" - msgstr "« cache uniquement » activé, mais pas de cache pour « %s »" - --#: libdnf/repo/Repo.cpp:1306 -+#: libdnf/repo/Repo.cpp:1337 - #, c-format - msgid "repo: downloading from remote: %s" - msgstr "dépôt : téléchargement à distance en provenance de : %s" - --#: libdnf/repo/Repo.cpp:1312 -+#: libdnf/repo/Repo.cpp:1344 - #, c-format - msgid "Failed to download metadata for repo '%s': %s" - msgstr "Échec du téléchargement des métadonnées pour le dépôt « %s » : %s" - --#: libdnf/repo/Repo.cpp:1338 -+#: libdnf/repo/Repo.cpp:1370 - msgid "getCachedir(): Computation of SHA256 failed" - msgstr "getCachedir() : échec du calcul de SHA256" - --#: libdnf/repo/Repo.cpp:1363 -+#: libdnf/repo/Repo.cpp:1398 - #, c-format - msgid "Cannot create persistdir \"%s\": %s" - msgstr "Impossible de créer le dossier persistant « %s » : %s" - --#: libdnf/repo/Repo.cpp:1763 -+#: libdnf/repo/Repo.cpp:1775 - msgid "resume cannot be used simultaneously with the byterangestart param" - msgstr "" - "« resume » (reprise) ne peut pas être utilisé avec le paramètre " - "byterangestart" - --#: libdnf/repo/Repo.cpp:1780 -+#: libdnf/repo/Repo.cpp:1792 - #, c-format - msgid "PackageTarget initialization failed: %s" - msgstr "L’initialisation de Package Target a échoué : %s" - --#: libdnf/repo/Repo.cpp:1886 -+#: libdnf/repo/Repo.cpp:1898 - #, c-format - msgid "Cannot open %s: %s" - msgstr "impossible d’ouvrir %s : %s" - --#: libdnf/repo/Repo.cpp:1930 -+#: libdnf/repo/Repo.cpp:1942 - #, c-format - msgid "Log handler with id %ld doesn't exist" - msgstr "Log handler ayant pour id %ld n’existe pas" -@@ -923,13 +1112,13 @@ msgstr "Log handler ayant pour id %ld n’existe pas" - msgid "In progress" - msgstr "En cours" - --#: libdnf/transaction/Swdb.cpp:188 libdnf/transaction/Swdb.cpp:216 --#: libdnf/transaction/Swdb.cpp:228 libdnf/transaction/Swdb.cpp:245 --#: libdnf/transaction/Swdb.cpp:384 libdnf/transaction/Swdb.cpp:394 -+#: libdnf/transaction/Swdb.cpp:187 libdnf/transaction/Swdb.cpp:215 -+#: libdnf/transaction/Swdb.cpp:227 libdnf/transaction/Swdb.cpp:244 -+#: libdnf/transaction/Swdb.cpp:383 libdnf/transaction/Swdb.cpp:393 - msgid "Not in progress" - msgstr "Pas en cours" - --#: libdnf/transaction/Swdb.cpp:255 -+#: libdnf/transaction/Swdb.cpp:254 - msgid "No transaction in progress" - msgstr "Aucune transaction n’est en cours" - -@@ -975,6 +1164,3 @@ msgstr "" - - #~ msgid "Bad id for repo: %s, byte = %s %d" - #~ msgstr "ID erroné pour le dépôt : %s, byte = %s %d" -- --#~ msgid "failed calculating RPMDB checksum" --#~ msgstr "n’a pu calculer la somme de contrôle RPMDB" -diff --git a/po/ja.po b/po/ja.po -index b9064ee..94454a2 100644 ---- a/po/ja.po -+++ b/po/ja.po -@@ -1,20 +1,22 @@ - # Casey Jones , 2018. #zanata --# Ludek Janda , 2018. #zanata -+# Ludek Janda , 2018. #zanata, 2021. - # Casey Jones , 2020. -+# Sundeep Anand , 2021. - msgid "" - msgstr "" - "Project-Id-Version: PACKAGE VERSION\n" - "Report-Msgid-Bugs-To: \n" --"POT-Creation-Date: 2020-10-05 09:18-0400\n" --"PO-Revision-Date: 2020-05-05 09:40+0000\n" --"Last-Translator: Casey Jones \n" --"Language-Team: Japanese \n" -+"POT-Creation-Date: 2022-02-28 11:03+0100\n" -+"PO-Revision-Date: 2021-09-06 17:27+0000\n" -+"Last-Translator: Ludek Janda \n" -+"Language-Team: Japanese \n" - "Language: ja\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" - "Plural-Forms: nplurals=1; plural=0;\n" --"X-Generator: Weblate 4.0.3\n" -+"X-Generator: Weblate 4.8\n" - - #: libdnf/conf/ConfigMain.cpp:62 libdnf/conf/OptionSeconds.cpp:40 - msgid "no value specified" -@@ -35,17 +37,30 @@ msgstr "'%s' を バイトへ変換できませんでした" - msgid "unknown unit '%s'" - msgstr "不明な単位 '%s'" - --#: libdnf/conf/ConfigMain.cpp:332 -+#: libdnf/conf/ConfigMain.cpp:204 libdnf/conf/OptionEnum.cpp:83 -+#: libdnf/conf/OptionNumber.cpp:88 -+msgid "invalid value" -+msgstr "無効な値" -+ -+#: libdnf/conf/ConfigMain.cpp:207 -+msgid "value 1 is not allowed" -+msgstr "値 1 は許可されません" -+ -+#: libdnf/conf/ConfigMain.cpp:209 -+msgid "negative value is not allowed" -+msgstr "負の値は許可されていません" -+ -+#: libdnf/conf/ConfigMain.cpp:341 - #, c-format - msgid "percentage '%s' is out of range" - msgstr "パーセンテージ '%s' が範囲外にあります" - --#: libdnf/conf/OptionBinds.cpp:76 -+#: libdnf/conf/OptionBinds.cpp:85 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" does not exist" - msgstr "設定: id \"%s\" を伴う OptionBinding は存在しません" - --#: libdnf/conf/OptionBinds.cpp:88 -+#: libdnf/conf/OptionBinds.cpp:97 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" already exists" - msgstr "設定: id \"%s\" を伴う OptionBinding はすでに存在します" -@@ -56,24 +71,20 @@ msgid "invalid boolean value '%s'" - msgstr "無効な boolean 値 '%s'" - - #: libdnf/conf/OptionEnum.cpp:72 libdnf/conf/OptionEnum.cpp:158 --#: libdnf/conf/OptionString.cpp:59 libdnf/conf/OptionStringList.cpp:59 -+#: libdnf/conf/OptionString.cpp:64 libdnf/conf/OptionStringList.cpp:59 - #, c-format - msgid "'%s' is not an allowed value" - msgstr "'%s' 値は許可されていない値です" - --#: libdnf/conf/OptionEnum.cpp:83 libdnf/conf/OptionNumber.cpp:88 --msgid "invalid value" --msgstr "無効な値" -- - #: libdnf/conf/OptionNumber.cpp:73 - #, c-format - msgid "given value [%d] should be less than allowed value [%d]." --msgstr "指定された値 [%d] は許可された値 [%d]より小さくしてください" -+msgstr "指定された値 [%d] は許可された値 [%d]より小さくしてください。" - - #: libdnf/conf/OptionNumber.cpp:76 - #, c-format - msgid "given value [%d] should be greater than allowed value [%d]." --msgstr "指定された値 [%d] は許可された値 [%d]より大きくしてください" -+msgstr "指定された値 [%d] は許可された値 [%d]より大きくしてください。" - - #: libdnf/conf/OptionPath.cpp:78 - #, c-format -@@ -90,26 +101,137 @@ msgstr "指定されたパス '%s' が存在しません。" - msgid "could not convert '%s' to seconds" - msgstr "'%s' を 秒に変換できません" - --#: libdnf/conf/OptionString.cpp:74 -+#: libdnf/conf/OptionString.cpp:79 - msgid "GetValue(): Value not set" - msgstr "GetValue(): 値は設定されていません" - --#: libdnf/dnf-goal.cpp:68 -+#: libdnf/dnf-context.cpp:3170 libdnf/dnf-context.cpp:3179 -+#, c-format -+msgid "Cannot enable more streams from module '%s' at the same time" -+msgstr "モジュール '%s' から、さらにストリームを同時に有効にできません" -+ -+#: libdnf/dnf-context.cpp:3188 libdnf/dnf-context.cpp:3206 -+#, c-format -+msgid "" -+"Cannot enable module '%1$s' stream '%2$s': State of module already modified" -+msgstr "" -+"モジュール '%1$s' ストリーム '%2$s' を有効にできません。モジュールの状態はす" -+"でに変更されています" -+ -+#: libdnf/dnf-context.cpp:3253 -+#, c-format -+msgid "Modular dependency problem with Defaults: %s" -+msgstr "デフォルトのモジュラー依存問題: %s" -+ -+#: libdnf/dnf-context.cpp:3256 -+#, c-format -+msgid "Modular dependency problem: %s" -+msgstr "モジュラーの依存に関する問題: %s" -+ -+#: libdnf/dnf-context.cpp:3290 libdnf/dnf-context.cpp:3314 -+#: libdnf/dnf-context.cpp:3325 libdnf/dnf-context.cpp:3364 -+#: libdnf/dnf-context.cpp:3380 libdnf/dnf-context.cpp:3412 -+#: libdnf/dnf-context.cpp:3456 libdnf/dnf-context.cpp:3466 -+#, c-format -+msgid "Unable to resolve argument '%s'" -+msgstr "引数 '%s' を解決できません" -+ -+#: libdnf/dnf-context.cpp:3297 -+#, c-format -+msgid "" -+"Only module name is required. Ignoring unneeded information in argument: '%s'" -+msgstr "モジュール名のみが必要です。引数の不必要な情報は無視します: '%s'" -+ -+#: libdnf/dnf-context.cpp:3311 -+#, c-format -+msgid "Cannot reset module '%s': State of module already modified" -+msgstr "" -+"モジュール '%s' をリセットできません。モジュールの状態はすでに変更されていま" -+"す" -+ -+#: libdnf/dnf-context.cpp:3322 -+#, c-format -+msgid "Cannot disable module '%s': State of module already modified" -+msgstr "" -+"モジュール '%s' を無効にできません。モジュールの状態はすでに変更されています" -+ -+#: libdnf/dnf-context.cpp:3353 libdnf/dnf-context.cpp:3445 -+#: libdnf/dnf-context.cpp:3558 -+msgid "No modular data available" -+msgstr "モジュールデータは利用できません" -+ -+#: libdnf/dnf-context.cpp:3370 -+#, c-format -+msgid "Ignoring unneeded information in argument: '%s'" -+msgstr "引数の不要な情報は無視します: '%s'" -+ -+#: libdnf/dnf-context.cpp:3408 -+#, c-format -+msgid "" -+"Problem during enablement of dependency tree for module '%1$s' stream " -+"'%2$s': %3$s" -+msgstr "" -+"モジュール '%1$s' ストリーム '%2$s' の依存関係ツリーの有効化中に問題: %3$s" -+ -+#: libdnf/dnf-context.cpp:3420 -+msgid "Problems appeared for module enable request" -+msgstr "モジュール有効リクエストに発生する問題" -+ -+#. this really should never happen; unless the modular repodata is corrupted -+#: libdnf/dnf-context.cpp:3495 -+#, c-format -+msgid "Failed to parse module artifact NEVRA '%s'" -+msgstr "モジュールアーティファクト NEVRA '%s' の解析に失敗しました" -+ -+#: libdnf/dnf-context.cpp:3529 -+msgid "Problems appeared for module install request" -+msgstr "モジュールインストールリクエストに発生する問題" -+ -+#: libdnf/dnf-context.cpp:3589 -+msgid "Problems appeared for module reset request" -+msgstr "モジュールリセットリクエストに発生する問題" -+ -+#: libdnf/dnf-context.cpp:3591 -+msgid "Problems appeared for module disable request" -+msgstr "モジュール無効化リクエストに発生する問題" -+ -+#: libdnf/dnf-context.cpp:3627 -+#, c-format -+msgid "" -+"The operation would result in switching of module '%s' stream '%s' to stream " -+"'%s'" -+msgstr "" -+"オペレーションは、モジュール '%s' ストリーム '%s' を ストリーム '%s' へと切り" -+"替える結果となります" -+ -+#: libdnf/dnf-context.cpp:3631 -+msgid "" -+"It is not possible to switch enabled streams of a module.\n" -+"It is recommended to remove all installed content from the module, and reset " -+"the module using 'microdnf module reset ' command. After you " -+"reset the module, you can install the other stream." -+msgstr "" -+"有効化されたモジュールのストリームの切り替えはできません。\n" -+"モジュールからすべてのインストールされたコンテンツを削除し、'microdnf module " -+"reset ' コマンドを使用してモジュールをリセットすることを推奨しま" -+"す。モジュールのリセット後に、別のストリームをインストールできます。" -+ -+#: libdnf/dnf-goal.cpp:85 - msgid "Could not depsolve transaction; " - msgstr "トランザクションを depsolve できませんでした; " - --#: libdnf/dnf-goal.cpp:70 -+#: libdnf/dnf-goal.cpp:87 - #, c-format - msgid "%i problem detected:\n" - msgid_plural "%i problems detected:\n" - msgstr[0] "%i 問題を検出:\n" - --#: libdnf/dnf-goal.cpp:78 -+#: libdnf/dnf-goal.cpp:95 - #, c-format - msgid " Problem %1$i: %2$s\n" - msgstr " 問題 %1$i: %2$s\n" - --#: libdnf/dnf-goal.cpp:80 -+#: libdnf/dnf-goal.cpp:97 - #, c-format - msgid " Problem: %s\n" - msgstr " 問題: %s\n" -@@ -119,7 +241,9 @@ msgstr " 問題: %s\n" - msgid "" - "No available modular metadata for modular package '%s'; cannot be installed " - "on the system" --msgstr "モジュラーパッケージ '%s' のモジュラーメタデータは利用不可です; システムにインストールはできません" -+msgstr "" -+"モジュラーパッケージ '%s' のモジュラーメタデータは利用不可です; システムにイ" -+"ンストールはできません" - - #: libdnf/dnf-rpmts.cpp:121 libdnf/dnf-rpmts.cpp:166 - #, c-format -@@ -158,7 +282,8 @@ msgstr "トランザクションの実行中にエラーが発生しました: % - - #: libdnf/dnf-rpmts.cpp:283 - msgid "Error running transaction and no problems were reported!" --msgstr "トランザクションの実行中にエラーが発生しましたが、問題は報告されませんでした!" -+msgstr "" -+"トランザクションの実行中にエラーが発生しましたが、問題は報告されませんでした!" - - #: libdnf/dnf-rpmts.cpp:346 - msgid "Fatal error, run database recovery" -@@ -174,87 +299,87 @@ msgstr "パッケージ %s を見つけることができませんでした" - msgid "could not add erase element %1$s(%2$i)" - msgstr "erase 要素 %1$s(%2$i) を追加することができません" - --#: libdnf/dnf-sack.cpp:381 -+#: libdnf/dnf-sack.cpp:395 -+msgid "failed to add solv" -+msgstr "solv の追加に失敗しました" -+ -+#: libdnf/dnf-sack.cpp:414 - #, c-format - msgid "no %1$s string for %2$s" - msgstr "%2$s の %1$s 文字列はありません" - --#: libdnf/dnf-sack.cpp:404 --msgid "failed to add solv" --msgstr "solv の追加に失敗しました" -- --#: libdnf/dnf-sack.cpp:422 -+#: libdnf/dnf-sack.cpp:424 - #, c-format - msgid "failed to open: %s" - msgstr "開くことに失敗しました: %s" - --#: libdnf/dnf-sack.cpp:501 -+#: libdnf/dnf-sack.cpp:503 - #, c-format - msgid "cannot create temporary file: %s" - msgstr "一時ファイルを作成できません: %s" - --#: libdnf/dnf-sack.cpp:511 -+#: libdnf/dnf-sack.cpp:513 - #, c-format - msgid "failed opening tmp file: %s" - msgstr "tmp ファイルを開くことに失敗しました: %s" - --#: libdnf/dnf-sack.cpp:523 -+#: libdnf/dnf-sack.cpp:525 - #, c-format - msgid "write_main() failed writing data: %i" - msgstr "write_main() はデータの書き込みに失敗しました: %i" - --#: libdnf/dnf-sack.cpp:540 -+#: libdnf/dnf-sack.cpp:542 - msgid "write_main() failed to re-load written solv file" - msgstr "write_main() は、書き込みされた solv ファイルの再ロードに失敗しました" - --#: libdnf/dnf-sack.cpp:605 -+#: libdnf/dnf-sack.cpp:607 - #, c-format - msgid "can not create temporary file %s" - msgstr "一時ファイル %s を作成できません" - --#: libdnf/dnf-sack.cpp:623 -+#: libdnf/dnf-sack.cpp:625 - #, c-format - msgid "write_ext(%1$d) has failed: %2$d" - msgstr "write_ext(%1$d) は失敗しました: %2$d" - --#: libdnf/dnf-sack.cpp:678 -+#: libdnf/dnf-sack.cpp:680 - msgid "null repo md file" - msgstr "null repo md ファイル" - --#: libdnf/dnf-sack.cpp:687 -+#: libdnf/dnf-sack.cpp:689 - #, c-format - msgid "can not read file %1$s: %2$s" - msgstr "ファイル %1$s を読み込みできません: %2$s" - --#: libdnf/dnf-sack.cpp:701 -+#: libdnf/dnf-sack.cpp:703 - msgid "repo_add_solv() has failed." - msgstr "repo_add_solv() は失敗しました。" - --#: libdnf/dnf-sack.cpp:714 -+#: libdnf/dnf-sack.cpp:716 - msgid "loading of MD_TYPE_PRIMARY has failed." - msgstr "MD_TYPE_PRIMARY のロードに失敗しました。" - --#: libdnf/dnf-sack.cpp:727 -+#: libdnf/dnf-sack.cpp:729 - msgid "repo_add_repomdxml/rpmmd() has failed." - msgstr "repo_add_repomdxml/rpmmd() は失敗しました。" - --#: libdnf/dnf-sack.cpp:794 -+#: libdnf/dnf-sack.cpp:796 - msgid "failed to auto-detect architecture" - msgstr "アーキテクチャーの自動検出に失敗しました" - --#: libdnf/dnf-sack.cpp:919 -+#: libdnf/dnf-sack.cpp:961 - #, c-format - msgid "failed creating cachedir %s" - msgstr "cachedir %s の作成に失敗しました" - --#: libdnf/dnf-sack.cpp:1696 -+#: libdnf/dnf-sack.cpp:1738 - msgid "failed loading RPMDB" - msgstr "RPMDB のロードに失敗しました" - --#: libdnf/dnf-sack.cpp:2403 -+#: libdnf/dnf-sack.cpp:2463 - #, c-format - msgid "No module defaults found: %s" --msgstr "" -+msgstr "モジュールのデフォルトは見つかりませんでした: %s" - - #: libdnf/dnf-state.cpp:1184 - #, c-format -@@ -288,7 +413,9 @@ msgstr "パッケージ %s を確実にしようとする場合、ソースは - #: libdnf/dnf-transaction.cpp:326 - #, c-format - msgid "Failed to ensure %1$s as repo %2$s not found(%3$i repos loaded)" --msgstr "repo %2$s が見つからないため、%1$s を確実にすることに失敗しました (%3$i repo はロード済み)" -+msgstr "" -+"repo %2$s が見つからないため、%1$s を確実にすることに失敗しました (%3$i repo " -+"はロード済み)" - - #: libdnf/dnf-transaction.cpp:367 - msgid "Failed to check untrusted: " -@@ -302,7 +429,8 @@ msgstr "%s にダウンロードしたファイルが見つかりませんでし - #: libdnf/dnf-transaction.cpp:397 - #, c-format - msgid "package %1$s cannot be verified and repo %2$s is GPG enabled: %3$s" --msgstr "パッケージ %1$s は確認できず、repo %2$s は GPG が有効になっています: %3$s" -+msgstr "" -+"パッケージ %1$s は確認できず、repo %2$s は GPG が有効になっています: %3$s" - - #: libdnf/dnf-transaction.cpp:831 libdnf/dnf-transaction.cpp:903 - msgid "Failed to get value for CacheDir" -@@ -321,28 +449,31 @@ msgstr "%s に filesystem をフリーサイズで取得することに失敗し - #: libdnf/dnf-transaction.cpp:935 - #, c-format - msgid "Not enough free space in %1$s: needed %2$s, available %3$s" --msgstr "%1$s に十分なスペースがありません: %2$s 必要で、利用可能なのは %3$s です" -+msgstr "" -+"%1$s に十分なスペースがありません: %2$s 必要で、利用可能なのは %3$s です" - --#: libdnf/dnf-transaction.cpp:1196 -+#: libdnf/dnf-transaction.cpp:1195 - msgid "failed to set root" - msgstr "root の設定に失敗しました" - --#: libdnf/dnf-transaction.cpp:1418 -+#: libdnf/dnf-transaction.cpp:1416 - #, c-format - msgid "Error %i running transaction test" - msgstr "トランザクションテストの実行中にエラー %i" - --#: libdnf/dnf-transaction.cpp:1458 -+#: libdnf/dnf-transaction.cpp:1456 - #, c-format - msgid "Error %i running transaction" - msgstr "トランザクションの実行中にエラー %i" - --#: libdnf/dnf-transaction.cpp:1473 -+#: libdnf/dnf-transaction.cpp:1472 - #, c-format - msgid "Transaction did not go to writing phase, but returned no error(%i)" --msgstr "トランザクションは書き込みフェーズまで行きませんでしたが、エラー(%i) は返しませんでした" -+msgstr "" -+"トランザクションは書き込みフェーズまで行きませんでしたが、エラー(%i) は返しま" -+"せんでした" - --#: libdnf/dnf-utils.cpp:111 libdnf/hy-iutil.cpp:399 -+#: libdnf/dnf-utils.cpp:111 libdnf/hy-iutil.cpp:403 - #, c-format - msgid "cannot open directory %1$s: %2$s" - msgstr "ディレクトリー %1$s を開くことができません: %2$s" -@@ -352,272 +483,289 @@ msgstr "ディレクトリー %1$s を開くことができません: %2$s" - msgid "failed to remove %s" - msgstr "%s の削除に失敗しました" - --#: libdnf/goal/Goal.cpp:55 -+#: libdnf/goal/Goal.cpp:74 - msgid "Ill-formed Selector, presence of multiple match objects in the filter" - msgstr "不適格な Selector、フィルター内に複数の一致するオブジェクトが存在" - --#: libdnf/goal/Goal.cpp:56 -+#: libdnf/goal/Goal.cpp:75 - msgid "Ill-formed Selector used for the operation, incorrect comparison type" - msgstr "操作に使用される不適格な Selector、間違った比較タイプ" - --#: libdnf/goal/Goal.cpp:67 libdnf/goal/Goal.cpp:94 -+#: libdnf/goal/Goal.cpp:86 libdnf/goal/Goal.cpp:113 - msgid " does not belong to a distupgrade repository" - msgstr " はdistupgradeレポジトリーに属していません" - --#: libdnf/goal/Goal.cpp:68 libdnf/goal/Goal.cpp:95 -+#: libdnf/goal/Goal.cpp:87 libdnf/goal/Goal.cpp:114 - msgid " has inferior architecture" - msgstr " は下位アーキテクチャがあります" - --#: libdnf/goal/Goal.cpp:69 -+#: libdnf/goal/Goal.cpp:88 - msgid "problem with installed package " - msgstr "インストール済パッケージの問題 " - --#: libdnf/goal/Goal.cpp:70 libdnf/goal/Goal.cpp:97 -+#: libdnf/goal/Goal.cpp:89 libdnf/goal/Goal.cpp:116 - msgid "conflicting requests" - msgstr "競合するリクエスト" - --#: libdnf/goal/Goal.cpp:71 libdnf/goal/Goal.cpp:98 -+#: libdnf/goal/Goal.cpp:90 libdnf/goal/Goal.cpp:117 - msgid "unsupported request" - msgstr "非サポートのリクエスト" - --#: libdnf/goal/Goal.cpp:72 libdnf/goal/Goal.cpp:99 -+#: libdnf/goal/Goal.cpp:91 libdnf/goal/Goal.cpp:118 - msgid "nothing provides requested " - msgstr "何もリクエストされていません " - --#: libdnf/goal/Goal.cpp:73 -+#: libdnf/goal/Goal.cpp:92 - #, c-format - msgid "package %s does not exist" - msgstr "パッケージ %s は存在しません" - --#: libdnf/goal/Goal.cpp:74 libdnf/goal/Goal.cpp:101 -+#: libdnf/goal/Goal.cpp:93 libdnf/goal/Goal.cpp:120 - msgid " is provided by the system" - msgstr " はシステムから提供されます" - --#: libdnf/goal/Goal.cpp:75 libdnf/goal/Goal.cpp:102 -+#: libdnf/goal/Goal.cpp:94 libdnf/goal/Goal.cpp:121 - msgid "some dependency problem" - msgstr "いくつかの依存問題" - --#: libdnf/goal/Goal.cpp:76 -+#: libdnf/goal/Goal.cpp:95 - msgid "cannot install the best update candidate for package " - msgstr "パッケージの最良アップデート候補をインストールできません " - --#: libdnf/goal/Goal.cpp:77 libdnf/goal/Goal.cpp:104 -+#: libdnf/goal/Goal.cpp:96 libdnf/goal/Goal.cpp:123 - msgid "cannot install the best candidate for the job" - msgstr "ジョブの最良アップデート候補をインストールできません" - --#: libdnf/goal/Goal.cpp:78 -+#: libdnf/goal/Goal.cpp:97 - #, c-format - msgid "package %s is filtered out by modular filtering" - msgstr "パッケージ %s はモジュラーフィルタリングに一致しません" - --#: libdnf/goal/Goal.cpp:79 -+#: libdnf/goal/Goal.cpp:98 - #, c-format - msgid "package %s does not have a compatible architecture" - msgstr "パッケージ %s は互換性のあるアーキテクチャーがありません" - --#: libdnf/goal/Goal.cpp:80 -+#: libdnf/goal/Goal.cpp:99 - #, c-format - msgid "package %s is not installable" - msgstr "パッケージ %s はインストール不可です" - --#: libdnf/goal/Goal.cpp:81 -+#: libdnf/goal/Goal.cpp:100 - #, c-format - msgid "package %s is filtered out by exclude filtering" - msgstr "パッケージ %s は除外フィルタリングに一致しません" - --#: libdnf/goal/Goal.cpp:82 -+#: libdnf/goal/Goal.cpp:101 - #, c-format - msgid "nothing provides %s needed by %s" - msgstr "%s が提供されません %s に必要です" - --#: libdnf/goal/Goal.cpp:83 -+#: libdnf/goal/Goal.cpp:102 - #, c-format - msgid "cannot install both %s and %s" - msgstr "%s と %s どちらもインストールできません" - --#: libdnf/goal/Goal.cpp:84 -+#: libdnf/goal/Goal.cpp:103 - #, c-format - msgid "package %s conflicts with %s provided by %s" - msgstr "パッケージ %s は %s と競合しています。これは %s により提供されます" - --#: libdnf/goal/Goal.cpp:85 -+#: libdnf/goal/Goal.cpp:104 - #, c-format - msgid "package %s obsoletes %s provided by %s" - msgstr "パッケージ %s は %s を廃止しました。これは %s により提供されます" - --#: libdnf/goal/Goal.cpp:86 -+#: libdnf/goal/Goal.cpp:105 - #, c-format - msgid "installed package %s obsoletes %s provided by %s" --msgstr "インストール済パッケージ %s は %s を廃止しました。これは %s により提供されます" -+msgstr "" -+"インストール済パッケージ %s は %s を廃止しました。これは %s により提供されま" -+"す" - --#: libdnf/goal/Goal.cpp:87 -+#: libdnf/goal/Goal.cpp:106 - #, c-format - msgid "package %s implicitly obsoletes %s provided by %s" - msgstr "パッケージ %s は %s を暗に廃止しました。これは %s により提供されます" - --#: libdnf/goal/Goal.cpp:88 -+#: libdnf/goal/Goal.cpp:107 - #, c-format - msgid "package %s requires %s, but none of the providers can be installed" --msgstr "パッケージ %s には %s が必要ですが、どのプロバイダーからもインストールできません" -+msgstr "" -+"パッケージ %s には %s が必要ですが、どのプロバイダーからもインストールできま" -+"せん" - --#: libdnf/goal/Goal.cpp:89 -+#: libdnf/goal/Goal.cpp:108 - #, c-format - msgid "package %s conflicts with %s provided by itself" - msgstr "パッケージ %s は自己提供される %s と競合しています" - --#: libdnf/goal/Goal.cpp:90 -+#: libdnf/goal/Goal.cpp:109 - #, c-format - msgid "both package %s and %s obsolete %s" - msgstr "パッケージ %s と %s 両方は %s を廃止しました" - --#: libdnf/goal/Goal.cpp:96 -+#: libdnf/goal/Goal.cpp:115 - msgid "problem with installed module " - msgstr "インストール済モジュールの問題 " - --#: libdnf/goal/Goal.cpp:100 -+#: libdnf/goal/Goal.cpp:119 - #, c-format - msgid "module %s does not exist" - msgstr "モジュール %s は存在しません" - --#: libdnf/goal/Goal.cpp:103 -+#: libdnf/goal/Goal.cpp:122 - msgid "cannot install the best update candidate for module " - msgstr "モジュールの最良アップデート候補をインストールできません " - --#: libdnf/goal/Goal.cpp:105 libdnf/goal/Goal.cpp:108 -+#: libdnf/goal/Goal.cpp:124 libdnf/goal/Goal.cpp:127 - #, c-format - msgid "module %s is disabled" - msgstr "モジュール %s は無効です" - --#: libdnf/goal/Goal.cpp:106 -+#: libdnf/goal/Goal.cpp:125 - #, c-format - msgid "module %s does not have a compatible architecture" - msgstr "モジュール %s は互換性のあるアーキテクチャーがありません" - --#: libdnf/goal/Goal.cpp:107 -+#: libdnf/goal/Goal.cpp:126 - #, c-format - msgid "module %s is not installable" - msgstr "モジュール %s はインストール不可です" - --#: libdnf/goal/Goal.cpp:109 -+#: libdnf/goal/Goal.cpp:128 - #, c-format - msgid "nothing provides %s needed by module %s" - msgstr "%s が提供されませんモジュール %s に必要です" - --#: libdnf/goal/Goal.cpp:110 -+#: libdnf/goal/Goal.cpp:129 - #, c-format - msgid "cannot install both modules %s and %s" - msgstr "モジュール %s と %s どちらもインストールできません" - --#: libdnf/goal/Goal.cpp:111 -+#: libdnf/goal/Goal.cpp:130 - #, c-format - msgid "module %s conflicts with %s provided by %s" - msgstr "モジュール %s は %s と競合しています。これは %s により提供されます" - --#: libdnf/goal/Goal.cpp:112 -+#: libdnf/goal/Goal.cpp:131 - #, c-format - msgid "module %s obsoletes %s provided by %s" - msgstr "モジュール %s は %s を廃止しました。これは %s により提供されます" - --#: libdnf/goal/Goal.cpp:113 -+#: libdnf/goal/Goal.cpp:132 - #, c-format - msgid "installed module %s obsoletes %s provided by %s" --msgstr "インストール済モジュール %s は %s を廃止しました。これは %s により提供されます" -+msgstr "" -+"インストール済モジュール %s は %s を廃止しました。これは %s により提供されま" -+"す" - --#: libdnf/goal/Goal.cpp:114 -+#: libdnf/goal/Goal.cpp:133 - #, c-format - msgid "module %s implicitly obsoletes %s provided by %s" - msgstr "モジュール %s は %s を暗に廃止しました。これは %s により提供されます" - --#: libdnf/goal/Goal.cpp:115 -+#: libdnf/goal/Goal.cpp:134 - #, c-format - msgid "module %s requires %s, but none of the providers can be installed" --msgstr "モジュール %s には %s が必要ですが、どのプロバイダーからもインストールできません" -+msgstr "" -+"モジュール %s には %s が必要ですが、どのプロバイダーからもインストールできま" -+"せん" - --#: libdnf/goal/Goal.cpp:116 -+#: libdnf/goal/Goal.cpp:135 - #, c-format - msgid "module %s conflicts with %s provided by itself" - msgstr "モジュール %s は自己提供される %s と競合しています" - --#: libdnf/goal/Goal.cpp:117 -+#: libdnf/goal/Goal.cpp:136 - #, c-format - msgid "both module %s and %s obsolete %s" - msgstr "モジュール %s と %s 両方は %s を廃止しました" - --#: libdnf/goal/Goal.cpp:1038 -+#: libdnf/goal/Goal.cpp:1051 - msgid "no solver set" - msgstr "設定されたソルバーはありません" - --#: libdnf/goal/Goal.cpp:1043 -+#: libdnf/goal/Goal.cpp:1056 - #, c-format - msgid "failed to make %s absolute" - msgstr "%s を絶対的にすることに失敗しました" - --#: libdnf/goal/Goal.cpp:1050 -+#: libdnf/goal/Goal.cpp:1063 - #, c-format - msgid "failed writing debugdata to %1$s: %2$s" - msgstr "debugdata を %1$s へ書き込むことに失敗しました: %2$s" - --#: libdnf/goal/Goal.cpp:1062 -+#: libdnf/goal/Goal.cpp:1075 - msgid "no solv in the goal" - msgstr "目標に solv がありません" - --#: libdnf/goal/Goal.cpp:1064 -+#: libdnf/goal/Goal.cpp:1077 - msgid "no solution, cannot remove protected package" - msgstr "ソリューションがなく、保護されたパッケージを削除できません" - --#: libdnf/goal/Goal.cpp:1067 -+#: libdnf/goal/Goal.cpp:1080 - msgid "no solution possible" - msgstr "可能なソリューションがありません" - --#: libdnf/goal/Goal.cpp:1479 -+#: libdnf/goal/Goal.cpp:1206 -+msgid "Problem: " -+msgstr "問題: " -+ -+#: libdnf/goal/Goal.cpp:1211 -+#, c-format -+msgid "Problem %d: " -+msgstr "問題 %d: " -+ -+#: libdnf/goal/Goal.cpp:1538 - msgid "" - "The operation would result in removing the following protected packages: " - msgstr "操作は結果的に以下の保護されたパッケージを削除します: " - --#: libdnf/hy-iutil.cpp:322 -+#: libdnf/hy-iutil.cpp:326 - #, c-format - msgid "Failed renaming %1$s to %2$s: %3$s" - msgstr "名前を %1$s から %2$s へ変更できませんでした: %3$s" - --#: libdnf/hy-iutil.cpp:330 -+#: libdnf/hy-iutil.cpp:334 - #, c-format - msgid "Failed setting perms on %1$s: %2$s" - msgstr "%1$s に権限を設定できませんでした: %2$s" - --#: libdnf/hy-iutil.cpp:376 -+#: libdnf/hy-iutil.cpp:380 - #, c-format - msgid "cannot create directory %1$s: %2$s" - msgstr "ディレクトリー %1$s を作成できません : %2$s" - --#: libdnf/hy-iutil.cpp:411 -+#: libdnf/hy-iutil.cpp:415 - #, c-format - msgid "cannot stat path %1$s: %2$s" - msgstr "パス %1$s のstatを調べられません : %2$s" - --#: libdnf/module/ModulePackage.cpp:499 -+#: libdnf/module/ModulePackage.cpp:560 - #, c-format - msgid "Invalid format of Platform module: %s" - msgstr "不正なプラットフォームモジュールのフォーマット: %s" - --#: libdnf/module/ModulePackage.cpp:514 -+#: libdnf/module/ModulePackage.cpp:575 - msgid "Multiple module platforms provided by available packages\n" - msgstr "利用可能パッケージに提供される複数のモジュールプラットフォーム\n" - --#: libdnf/module/ModulePackage.cpp:527 -+#: libdnf/module/ModulePackage.cpp:588 - msgid "Multiple module platforms provided by installed packages\n" - msgstr "インストール済パッケージに提供される複数のモジュールプラットフォーム\n" - --#: libdnf/module/ModulePackage.cpp:554 -+#: libdnf/module/ModulePackage.cpp:615 - #, c-format - msgid "Detection of Platform Module in %s failed: %s" - msgstr "%s のプラットフォームモジュールの検出に失敗しました: %s" - --#: libdnf/module/ModulePackage.cpp:563 -+#: libdnf/module/ModulePackage.cpp:624 - #, c-format - msgid "Missing PLATFORM_ID in %s" - msgstr "%s に PLATFORM_ID が見つかりません" - --#: libdnf/module/ModulePackage.cpp:568 -+#: libdnf/module/ModulePackage.cpp:629 - msgid "No valid Platform ID detected" - msgstr "有効な Platform ID が検出されませんでした" - -@@ -626,36 +774,71 @@ msgstr "有効な Platform ID が検出されませんでした" - msgid "Cannot enable multiple streams for module '%s'" - msgstr "モジュール '%s' の複数ストリームを有効化できません" - --#: libdnf/module/ModulePackageContainer.cpp:294 -+#: libdnf/module/ModulePackageContainer.cpp:295 - #, c-format - msgid "Conflicting defaults with repo '%s': %s" - msgstr "repo '%s' のデフォルトが競合: %s" - --#: libdnf/module/ModulePackageContainer.cpp:1569 -+#: libdnf/module/ModulePackageContainer.cpp:841 -+msgid "Installing module profiles:\n" -+msgstr "モジュールプロファイルのインストール中:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:856 -+msgid "Disabling module profiles:\n" -+msgstr "モジュールプロファイルの無効化中:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:871 -+msgid "Enabling module streams:\n" -+msgstr "モジュールストリームの有効化中:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:885 -+msgid "Switching module streams:\n" -+msgstr "モジュールストリームの切り替え中:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:903 -+msgid "Disabling modules:\n" -+msgstr "モジュールの無効化:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:914 -+msgid "Resetting modules:\n" -+msgstr "モジュールの再設定中:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:1638 - #, c-format - msgid "Unable to load modular Fail-Safe data at '%s'" - msgstr "'%s' のモジュラーフェイルセーフデータをロードできません" - --#: libdnf/module/ModulePackageContainer.cpp:1575 -+#: libdnf/module/ModulePackageContainer.cpp:1644 - #, c-format - msgid "Unable to load modular Fail-Safe data for module '%s:%s'" - msgstr "モジュール '%s:%s' のモジュラーフェイルセーフデータをロードできません" - --#: libdnf/module/ModulePackageContainer.cpp:1639 -+#: libdnf/module/ModulePackageContainer.cpp:1702 - #, c-format - msgid "Unable to create directory \"%s\" for modular Fail Safe data: %s" --msgstr "ディレクトリー \"%s\" を作成できません。対象モジュラーフェイルセーフデータ: %s" -+msgstr "" -+"ディレクトリー \"%s\" を作成できません。対象モジュラーフェイルセーフデータ: " -+"%s" - --#: libdnf/module/ModulePackageContainer.cpp:1661 -+#: libdnf/module/ModulePackageContainer.cpp:1718 - #, c-format - msgid "Unable to save a modular Fail Safe data to '%s'" - msgstr "'%s' のモジュラーフェイルセーフデータを保存できません" - --#: libdnf/module/ModulePackageContainer.cpp:1686 -+#: libdnf/module/ModulePackageContainer.cpp:1741 - #, c-format - msgid "Unable to remove a modular Fail Safe data in '%s'" - msgstr "'%s' のモジュラーフェイルセーフデータを削除できません" - -+#: libdnf/module/ModulePackageContainer.cpp:1773 -+#, c-format -+msgid "" -+"Unable to apply modular obsoletes to '%s:%s' because target module '%s' is " -+"disabled" -+msgstr "" -+"ターゲットモジュール '%s' が無効であるため、モジュラーの廃止を '%s:%s' に適用" -+"できません" -+ - #: libdnf/module/modulemd/ModuleMetadata.cpp:86 - #, c-format - msgid "Failed to update from string: %s" -@@ -669,7 +852,7 @@ msgstr "名前解決に失敗しました: %s" - #: libdnf/module/modulemd/ModuleMetadata.cpp:115 - #, c-format - msgid "There were errors while resolving modular defaults: %s" --msgstr "" -+msgstr "モジュラーデフォルトの解決中にエラーが発生しました: %s" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:120 - #, c-format -@@ -681,6 +864,12 @@ msgstr "デフォルトのアップグレードに失敗しました: %s" - msgid "Failed to upgrade streams: %s" - msgstr "ストリームのアップグレードに失敗しました: %s" - -+#: libdnf/module/modulemd/ModuleMetadata.cpp:212 -+#, c-format -+msgid "Cannot retrieve module obsoletes because no stream matching %s: %s" -+msgstr "" -+"%s に一致するストリームがないため、モジュールの廃止を取得できません: %s" -+ - #: libdnf/plugin/plugin.cpp:46 - #, c-format - msgid "Can't load shared library \"%s\": %s" -@@ -722,6 +911,9 @@ msgid "" - "deprecated and the support will be dropped in future versions. Use '=' " - "operator instead." - msgstr "" -+"reldeps で '==' 演算子を使用すると、未定義の動作が発生する可能性があります。" -+"これは非推奨で、将来のバージョンではサポートされなくなります。代わりに '=' 演" -+"算子を使用してください。" - - #: libdnf/repo/Repo.cpp:321 - #, c-format -@@ -731,148 +923,172 @@ msgstr "リポジトリー %s にはミラーまたは baseurl セットがあ - #: libdnf/repo/Repo.cpp:330 - #, c-format - msgid "Repository '%s' has unsupported type: 'type=%s', skipping." --msgstr "リポジトリー '%s' にはサポートされていないタイプがあります: 'type=%s'、スキッピング。" -+msgstr "" -+"リポジトリー '%s' にはサポートされていないタイプがあります: 'type=%s'、スキッ" -+"ピング。" -+ -+#: libdnf/repo/Repo.cpp:489 libdnf/repo/Repo.cpp:610 libdnf/repo/Repo.cpp:641 -+#: libdnf/repo/Repo.cpp:1382 -+#, c-format -+msgid "repo '%s': 'basecachedir' is not set" -+msgstr "repo '%s': 'basecachedir' が設定されていません" -+ -+#: libdnf/repo/Repo.cpp:512 -+msgid "" -+"Maximum download speed is lower than minimum. Please change configuration of " -+"minrate or throttle" -+msgstr "" -+"ダウンロードの最高速度は、最低速度よりも低いです。minrate またはスロットルの" -+"設定を変更してください" - - #: libdnf/repo/Repo.cpp:546 - #, c-format -+msgid "repo '%s': 'proxy_username' is set but not 'proxy_password'" -+msgstr "" -+"repo '%s': 'proxy_username' は設定済みですが、'proxy_password' は設定されてい" -+"ません" -+ -+#: libdnf/repo/Repo.cpp:548 -+msgid "'proxy_username' is set but not 'proxy_password'" -+msgstr "" -+"'proxy_username' は設定済みですが、'proxy_password' は設定されていません" -+ -+#: libdnf/repo/Repo.cpp:629 -+#, c-format - msgid "Cannot find a valid baseurl for repo: %s" - msgstr "repo に対して有効な baseurl を見つけられません: %s" - --#: libdnf/repo/Repo.cpp:583 libdnf/repo/Repo.cpp:1672 --msgid "" --"Maximum download speed is lower than minimum. Please change configuration of" --" minrate or throttle" --msgstr "ダウンロードの最高速度は、最低速度よりも低いです。minrate またはスロットルの設定を変更してください。" -- --#: libdnf/repo/Repo.cpp:633 libdnf/repo/Repo.cpp:655 -+#: libdnf/repo/Repo.cpp:660 libdnf/repo/Repo.cpp:682 - #, c-format - msgid "%s: gpgme_data_new_from_fd(): %s" - msgstr "%s: gpgme_data_new_from_fd(): %s" - --#: libdnf/repo/Repo.cpp:641 libdnf/repo/Repo.cpp:663 -+#: libdnf/repo/Repo.cpp:668 libdnf/repo/Repo.cpp:690 - #, c-format - msgid "%s: gpgme_op_import(): %s" - msgstr "%s: gpgme_op_import(): %s" - --#: libdnf/repo/Repo.cpp:686 libdnf/repo/Repo.cpp:752 libdnf/repo/Repo.cpp:880 -+#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:779 libdnf/repo/Repo.cpp:907 - #, c-format - msgid "%s: gpgme_ctx_set_engine_info(): %s" - msgstr "%s: gpgme_ctx_set_engine_info(): %s" - --#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:777 -+#: libdnf/repo/Repo.cpp:740 libdnf/repo/Repo.cpp:804 - #, c-format - msgid "can not list keys: %s" - msgstr "キーを一覧表示できません: %s" - --#: libdnf/repo/Repo.cpp:806 -+#: libdnf/repo/Repo.cpp:833 - #, c-format - msgid "Failed to retrieve GPG key for repo '%s': %s" - msgstr "repo '%s' のGPG鍵の回収に失敗しました : %s" - --#: libdnf/repo/Repo.cpp:859 -+#: libdnf/repo/Repo.cpp:886 - #, c-format - msgid "repo %s: 0x%s already imported" - msgstr "repo %s: 0x%s はインポート済みです" - --#: libdnf/repo/Repo.cpp:887 -+#: libdnf/repo/Repo.cpp:914 - #, c-format - msgid "repo %s: imported key 0x%s." - msgstr "repo %s: インポート済みのキー 0x%s。" - --#: libdnf/repo/Repo.cpp:1131 -+#: libdnf/repo/Repo.cpp:1162 - #, c-format - msgid "reviving: repo '%s' skipped, no metalink." - msgstr "復元中: repo '%s' はスキップされました、metalink はありません。" - --#: libdnf/repo/Repo.cpp:1150 -+#: libdnf/repo/Repo.cpp:1181 - #, c-format - msgid "reviving: repo '%s' skipped, no usable hash." --msgstr "復元中: repo '%s' はスキップされました、使用可能なハッシュはありません。" -+msgstr "" -+"復元中: repo '%s' はスキップされました、使用可能なハッシュはありません。" - --#: libdnf/repo/Repo.cpp:1173 -+#: libdnf/repo/Repo.cpp:1204 - #, c-format - msgid "reviving: failed for '%s', mismatched %s sum." - msgstr "復元中: '%s' は失敗しました、%s の合計は一致しません。" - --#: libdnf/repo/Repo.cpp:1179 -+#: libdnf/repo/Repo.cpp:1210 - #, c-format - msgid "reviving: '%s' can be revived - metalink checksums match." - msgstr "復元中: '%s' は復元できます - metalink チェックサムが一致します。" - --#: libdnf/repo/Repo.cpp:1204 -+#: libdnf/repo/Repo.cpp:1235 - #, c-format - msgid "reviving: '%s' can be revived - repomd matches." - msgstr "復元中: '%s' は復元できます - repomd が一致します。" - --#: libdnf/repo/Repo.cpp:1206 -+#: libdnf/repo/Repo.cpp:1237 - #, c-format - msgid "reviving: failed for '%s', mismatched repomd." --msgstr "復元中: '%s' に失敗しました、repomd が一致しません。" -+msgstr "復元中: '%s' に失敗しました、repomd が一致しません。" - --#: libdnf/repo/Repo.cpp:1224 -+#: libdnf/repo/Repo.cpp:1255 - #, c-format - msgid "Cannot create repo destination directory \"%s\": %s" - msgstr "repo 送信先ディレクトリ \"%s\" を作成できません : %s" - --#: libdnf/repo/Repo.cpp:1230 -+#: libdnf/repo/Repo.cpp:1261 - #, c-format - msgid "Cannot create repo temporary directory \"%s\": %s" - msgstr "repo 一時ディレクトリー \"%s\" を作成できません: %s" - --#: libdnf/repo/Repo.cpp:1244 -+#: libdnf/repo/Repo.cpp:1275 - #, c-format - msgid "Cannot create directory \"%s\": %s" - msgstr "ディレクトリー \"%s\" を作成できません: %s" - --#: libdnf/repo/Repo.cpp:1267 -+#: libdnf/repo/Repo.cpp:1298 - #, c-format - msgid "Cannot rename directory \"%s\" to \"%s\": %s" - msgstr "ディレクトリー名を \"%s\" から \"%s\" へと変更できません: %s" - --#: libdnf/repo/Repo.cpp:1290 -+#: libdnf/repo/Repo.cpp:1321 - #, c-format - msgid "repo: using cache for: %s" - msgstr "repo: キャッシュを使用: %s" - --#: libdnf/repo/Repo.cpp:1302 -+#: libdnf/repo/Repo.cpp:1333 - #, c-format - msgid "Cache-only enabled but no cache for '%s'" --msgstr "キャッシュオンリーが有効になっていますが、'%s' に対するキャッシュはありません" -+msgstr "" -+"キャッシュオンリーが有効になっていますが、'%s' に対するキャッシュはありません" - --#: libdnf/repo/Repo.cpp:1306 -+#: libdnf/repo/Repo.cpp:1337 - #, c-format - msgid "repo: downloading from remote: %s" - msgstr "repo: リモートからダウンロード中: %s" - --#: libdnf/repo/Repo.cpp:1312 -+#: libdnf/repo/Repo.cpp:1344 - #, c-format - msgid "Failed to download metadata for repo '%s': %s" - msgstr "repo '%s' のメタデータのダウンロードに失敗しました : %s" - --#: libdnf/repo/Repo.cpp:1338 -+#: libdnf/repo/Repo.cpp:1370 - msgid "getCachedir(): Computation of SHA256 failed" - msgstr "getCachedir(): SHA256 のコンピュテーションに失敗しました" - --#: libdnf/repo/Repo.cpp:1363 -+#: libdnf/repo/Repo.cpp:1398 - #, c-format - msgid "Cannot create persistdir \"%s\": %s" - msgstr "persistdir \"%s\" を作成できません : %s" - --#: libdnf/repo/Repo.cpp:1763 -+#: libdnf/repo/Repo.cpp:1775 - msgid "resume cannot be used simultaneously with the byterangestart param" - msgstr "resume は byterangestart param と同時に使用できません" - --#: libdnf/repo/Repo.cpp:1780 -+#: libdnf/repo/Repo.cpp:1792 - #, c-format - msgid "PackageTarget initialization failed: %s" - msgstr "PackageTarget の初期化に失敗しました: %s" - --#: libdnf/repo/Repo.cpp:1886 -+#: libdnf/repo/Repo.cpp:1898 - #, c-format - msgid "Cannot open %s: %s" - msgstr "%s を開くことができません: %s" - --#: libdnf/repo/Repo.cpp:1930 -+#: libdnf/repo/Repo.cpp:1942 - #, c-format - msgid "Log handler with id %ld doesn't exist" - msgstr "id %ld を伴うログハンドラーは存在しません" -@@ -881,13 +1097,13 @@ msgstr "id %ld を伴うログハンドラーは存在しません" - msgid "In progress" - msgstr "進行中" - --#: libdnf/transaction/Swdb.cpp:188 libdnf/transaction/Swdb.cpp:216 --#: libdnf/transaction/Swdb.cpp:228 libdnf/transaction/Swdb.cpp:245 --#: libdnf/transaction/Swdb.cpp:384 libdnf/transaction/Swdb.cpp:394 -+#: libdnf/transaction/Swdb.cpp:187 libdnf/transaction/Swdb.cpp:215 -+#: libdnf/transaction/Swdb.cpp:227 libdnf/transaction/Swdb.cpp:244 -+#: libdnf/transaction/Swdb.cpp:383 libdnf/transaction/Swdb.cpp:393 - msgid "Not in progress" - msgstr "進行中ではありません" - --#: libdnf/transaction/Swdb.cpp:255 -+#: libdnf/transaction/Swdb.cpp:254 - msgid "No transaction in progress" - msgstr "進行中のトランザクションはありません" - -@@ -902,6 +1118,7 @@ msgstr "完了したトランザクションにトランザクションアイテ - #: libdnf/transaction/Transformer.cpp:76 - msgid "Database Corrupted: no row 'version' in table 'config'" - msgstr "" -+"データベースが破損しています。テーブル 'config' の行 'version' がありません" - - #: libdnf/transaction/Transformer.cpp:681 - msgid "Transformer: can't open history persist dir" -@@ -926,6 +1143,3 @@ msgstr "未保存のトランザクションにコンソールの出力を追加 - - #~ msgid "Bad id for repo: %s, byte = %s %d" - #~ msgstr "repo に対する不正な id: %s, byte = %s %d" -- --#~ msgid "failed calculating RPMDB checksum" --#~ msgstr "RPMDB チェックサムの計算に失敗しました" -diff --git a/po/ko.po b/po/ko.po -index 4809483..b3d0310 100644 ---- a/po/ko.po -+++ b/po/ko.po -@@ -1,31 +1,32 @@ - # SOME DESCRIPTIVE TITLE. - # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER - # This file is distributed under the same license as the PACKAGE package. --# FIRST AUTHOR , YEAR. - # Ludek Janda , 2018. #zanata -+# simmon , 2021. - msgid "" - msgstr "" - "Project-Id-Version: PACKAGE VERSION\n" - "Report-Msgid-Bugs-To: \n" --"POT-Creation-Date: 2020-10-05 09:18-0400\n" --"PO-Revision-Date: 2018-11-02 05:26+0000\n" --"Last-Translator: Copied by Zanata \n" --"Language-Team: Korean\n" -+"POT-Creation-Date: 2022-02-28 11:03+0100\n" -+"PO-Revision-Date: 2021-11-04 08:05+0000\n" -+"Last-Translator: simmon \n" -+"Language-Team: Korean \n" - "Language: ko\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" --"Plural-Forms: nplurals=1; plural=0\n" --"X-Generator: Zanata 4.6.2\n" -+"Plural-Forms: nplurals=1; plural=0;\n" -+"X-Generator: Weblate 4.8\n" - - #: libdnf/conf/ConfigMain.cpp:62 libdnf/conf/OptionSeconds.cpp:40 - msgid "no value specified" --msgstr "값이 지정되지 않았습니다." -+msgstr "값이 지정되지 않았습니다" - - #: libdnf/conf/ConfigMain.cpp:67 libdnf/conf/OptionSeconds.cpp:48 - #, c-format - msgid "seconds value '%s' must not be negative" --msgstr "초 값 '%s음수가 아니어야합니다." -+msgstr "초 값 '%s 음수가 아니어야합니다" - - #: libdnf/conf/ConfigMain.cpp:71 - #, c-format -@@ -37,17 +38,30 @@ msgstr "변환 할 수 없습니다 '%s'~ 바이트" - msgid "unknown unit '%s'" - msgstr "알 수없는 단위 '%s'" - --#: libdnf/conf/ConfigMain.cpp:332 -+#: libdnf/conf/ConfigMain.cpp:204 libdnf/conf/OptionEnum.cpp:83 -+#: libdnf/conf/OptionNumber.cpp:88 -+msgid "invalid value" -+msgstr "잘못된 값" -+ -+#: libdnf/conf/ConfigMain.cpp:207 -+msgid "value 1 is not allowed" -+msgstr "값 1은 허용되지 않습니다" -+ -+#: libdnf/conf/ConfigMain.cpp:209 -+msgid "negative value is not allowed" -+msgstr "음수 값은 허용되지 않습니다" -+ -+#: libdnf/conf/ConfigMain.cpp:341 - #, c-format - msgid "percentage '%s' is out of range" --msgstr "백분율 '%s'범위를 벗어났습니다." -+msgstr "백분율 '%s' 범위를 벗어났습니다" - --#: libdnf/conf/OptionBinds.cpp:76 -+#: libdnf/conf/OptionBinds.cpp:85 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" does not exist" - msgstr "구성 : ID가 \"%s\" 존재하지 않는다" - --#: libdnf/conf/OptionBinds.cpp:88 -+#: libdnf/conf/OptionBinds.cpp:97 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" already exists" - msgstr "구성 : ID가 \"%s\" 이미 존재 함" -@@ -58,14 +72,10 @@ msgid "invalid boolean value '%s'" - msgstr "유효하지 않은 부울 값 '%s'" - - #: libdnf/conf/OptionEnum.cpp:72 libdnf/conf/OptionEnum.cpp:158 --#: libdnf/conf/OptionString.cpp:59 libdnf/conf/OptionStringList.cpp:59 -+#: libdnf/conf/OptionString.cpp:64 libdnf/conf/OptionStringList.cpp:59 - #, c-format - msgid "'%s' is not an allowed value" --msgstr "'%s'은 (는) 허용 된 값이 아닙니다." -- --#: libdnf/conf/OptionEnum.cpp:83 libdnf/conf/OptionNumber.cpp:88 --msgid "invalid value" --msgstr "잘못된 값" -+msgstr "'%s'는 허용 된 값이 아닙니다" - - #: libdnf/conf/OptionNumber.cpp:73 - #, c-format -@@ -92,29 +102,136 @@ msgstr "주어진 경로 '%s' 존재하지 않는다." - msgid "could not convert '%s' to seconds" - msgstr "변환 할 수 없습니다 '%s'초까지" - --#: libdnf/conf/OptionString.cpp:74 -+#: libdnf/conf/OptionString.cpp:79 - msgid "GetValue(): Value not set" --msgstr "GetValue () : 값이 설정되지 않았습니다." -+msgstr "GetValue () : 값이 설정되지 않았습니다" - --#: libdnf/dnf-goal.cpp:68 --msgid "Could not depsolve transaction; " -+#: libdnf/dnf-context.cpp:3170 libdnf/dnf-context.cpp:3179 -+#, c-format -+msgid "Cannot enable more streams from module '%s' at the same time" -+msgstr "동시에 모듈 '%s’에서 다른 스트림을 활성화 할 수 없습니다" -+ -+#: libdnf/dnf-context.cpp:3188 libdnf/dnf-context.cpp:3206 -+#, c-format -+msgid "" -+"Cannot enable module '%1$s' stream '%2$s': State of module already modified" -+msgstr "" -+"모듈 '%1$s' 스트림 '%2$s 을 활성화 할 수 없습니다: 모듈 상태가 이미 변경되었" -+"습니다" -+ -+#: libdnf/dnf-context.cpp:3253 -+#, c-format -+msgid "Modular dependency problem with Defaults: %s" -+msgstr "기본설정에 모듈 의존성 문제: %s" -+ -+#: libdnf/dnf-context.cpp:3256 -+#, c-format -+msgid "Modular dependency problem: %s" -+msgstr "모듈러 의존성 문제: %s" -+ -+#: libdnf/dnf-context.cpp:3290 libdnf/dnf-context.cpp:3314 -+#: libdnf/dnf-context.cpp:3325 libdnf/dnf-context.cpp:3364 -+#: libdnf/dnf-context.cpp:3380 libdnf/dnf-context.cpp:3412 -+#: libdnf/dnf-context.cpp:3456 libdnf/dnf-context.cpp:3466 -+#, c-format -+msgid "Unable to resolve argument '%s'" -+msgstr "인수 %s를 해결 할 수 없습니다" -+ -+#: libdnf/dnf-context.cpp:3297 -+#, c-format -+msgid "" -+"Only module name is required. Ignoring unneeded information in argument: '%s'" -+msgstr "모듈 이름만 필요합니다. 인수에서 불필요한 정보를 무시합니다: '%s'" -+ -+#: libdnf/dnf-context.cpp:3311 -+#, c-format -+msgid "Cannot reset module '%s': State of module already modified" -+msgstr "모듈 '%s 를 재설정 할 수 없습니다: 모듈 상태가 이미 변경되었습니다" -+ -+#: libdnf/dnf-context.cpp:3322 -+#, c-format -+msgid "Cannot disable module '%s': State of module already modified" -+msgstr "모듈 '%s'사용 할 수 없습니다: 모듈 상태는 이미 적재되었습니다" -+ -+#: libdnf/dnf-context.cpp:3353 libdnf/dnf-context.cpp:3445 -+#: libdnf/dnf-context.cpp:3558 -+msgid "No modular data available" -+msgstr "모듈러 자료를 이용 할 수 없습니다" -+ -+#: libdnf/dnf-context.cpp:3370 -+#, c-format -+msgid "Ignoring unneeded information in argument: '%s'" -+msgstr "인수: '%s'에 불필요한 정보를 무시하기" -+ -+#: libdnf/dnf-context.cpp:3408 -+#, c-format -+msgid "" -+"Problem during enablement of dependency tree for module '%1$s' stream " -+"'%2$s': %3$s" -+msgstr "" -+"모듈 '%1$s' 스트림 '%2$s': %3$s 위해 의존성 트리의 활성화하는 중에 발생하는 " -+"문제" -+ -+#: libdnf/dnf-context.cpp:3420 -+msgid "Problems appeared for module enable request" -+msgstr "모듈 활성화 요청에 나타난 문제" -+ -+#. this really should never happen; unless the modular repodata is corrupted -+#: libdnf/dnf-context.cpp:3495 -+#, c-format -+msgid "Failed to parse module artifact NEVRA '%s'" -+msgstr "모듈 artifact NERVE '%s' 구분 분석에 실패함" -+ -+#: libdnf/dnf-context.cpp:3529 -+msgid "Problems appeared for module install request" -+msgstr "모듈 설치 요청을 위해 나타난 문제" -+ -+#: libdnf/dnf-context.cpp:3589 -+msgid "Problems appeared for module reset request" -+msgstr "모듈 초기화 요청을 위해 나나탄 문제" -+ -+#: libdnf/dnf-context.cpp:3591 -+msgid "Problems appeared for module disable request" -+msgstr "모듈 비활성화 요청을 위해 나타난 문제" -+ -+#: libdnf/dnf-context.cpp:3627 -+#, c-format -+msgid "" -+"The operation would result in switching of module '%s' stream '%s' to stream " -+"'%s'" -+msgstr "이 동작은 모듈 '%s'' 스트림 ‘%s'에서 스트림 '%s'로의 전환 결과입니다" -+ -+#: libdnf/dnf-context.cpp:3631 -+msgid "" -+"It is not possible to switch enabled streams of a module.\n" -+"It is recommended to remove all installed content from the module, and reset " -+"the module using 'microdnf module reset ' command. After you " -+"reset the module, you can install the other stream." - msgstr "" -+"활성화된 모듈 스트림을 전환 할 수 없습니다.\n" -+"설치된 모든 내용을 모듈에서 제거하고 ‘' 명령을 사용하여 모듈을 " -+"재설정하는 것이 좋습니다. 모듈을 재설정한 후, 다른 스트림을 설치 할 수 있습니" -+"다." - --#: libdnf/dnf-goal.cpp:70 -+#: libdnf/dnf-goal.cpp:85 -+msgid "Could not depsolve transaction; " -+msgstr "연결을 해제 할 수 없습니다; " -+ -+#: libdnf/dnf-goal.cpp:87 - #, c-format - msgid "%i problem detected:\n" - msgid_plural "%i problems detected:\n" --msgstr[0] "" -+msgstr[0] "%i 발견 된 문제 :\n" - --#: libdnf/dnf-goal.cpp:78 -+#: libdnf/dnf-goal.cpp:95 - #, c-format - msgid " Problem %1$i: %2$s\n" --msgstr "" -+msgstr " 문제 %1$i: %2$s\n" - --#: libdnf/dnf-goal.cpp:80 -+#: libdnf/dnf-goal.cpp:97 - #, c-format - msgid " Problem: %s\n" --msgstr "" -+msgstr " 문제: %s\n" - - #: libdnf/dnf-rpmts.cpp:79 - #, c-format -@@ -122,6 +239,8 @@ msgid "" - "No available modular metadata for modular package '%s'; cannot be installed " - "on the system" - msgstr "" -+"모듈러 꾸러미 '%s'에 사용 가능한 모듈러 메타데이터가 없으며; 시스템에 설치 " -+"할 수 없습니다" - - #: libdnf/dnf-rpmts.cpp:121 libdnf/dnf-rpmts.cpp:166 - #, c-format -@@ -156,11 +275,12 @@ msgstr "설치 요소를 추가하지 못했습니다. %1$s [%2$i]" - #: libdnf/dnf-rpmts.cpp:274 - #, c-format - msgid "Error running transaction: %s" --msgstr "트랜잭션 실행 오류 : %s" -+msgstr "연결 실행 오류 : %s" - - #: libdnf/dnf-rpmts.cpp:283 - msgid "Error running transaction and no problems were reported!" --msgstr "트랜잭션을 실행하는 중 오류가 발생했으며 아무런 문제도보고되지 않았습니다!" -+msgstr "" -+"연결을 실행하는 중 오류가 발생했으며 아무런 문제도 보고되지 않았습니다!" - - #: libdnf/dnf-rpmts.cpp:346 - msgid "Fatal error, run database recovery" -@@ -176,87 +296,87 @@ msgstr "꾸러미를 찾지 못했습니다. %s" - msgid "could not add erase element %1$s(%2$i)" - msgstr "요소 지우기를 추가 할 수 없습니다. %1$s(%2$i)" - --#: libdnf/dnf-sack.cpp:381 -+#: libdnf/dnf-sack.cpp:395 -+msgid "failed to add solv" -+msgstr "solv를 추가하지 못했습니다" -+ -+#: libdnf/dnf-sack.cpp:414 - #, c-format - msgid "no %1$s string for %2$s" --msgstr "" -- --#: libdnf/dnf-sack.cpp:404 --msgid "failed to add solv" --msgstr "solv를 추가하지 못했습니다." -+msgstr "%2$s에 %1$s 문자열이 없습니다" - --#: libdnf/dnf-sack.cpp:422 -+#: libdnf/dnf-sack.cpp:424 - #, c-format - msgid "failed to open: %s" - msgstr "열지 못했습니다 : %s" - --#: libdnf/dnf-sack.cpp:501 -+#: libdnf/dnf-sack.cpp:503 - #, c-format - msgid "cannot create temporary file: %s" - msgstr "임시 파일을 만들 수 없습니다. %s" - --#: libdnf/dnf-sack.cpp:511 -+#: libdnf/dnf-sack.cpp:513 - #, c-format - msgid "failed opening tmp file: %s" - msgstr "여는 tmp 파일을 열지 못했습니다. %s" - --#: libdnf/dnf-sack.cpp:523 -+#: libdnf/dnf-sack.cpp:525 - #, c-format - msgid "write_main() failed writing data: %i" --msgstr "write_main() failed writing data: %i" -+msgstr "write_main() 실패한 쓰기 자료: %i" - --#: libdnf/dnf-sack.cpp:540 -+#: libdnf/dnf-sack.cpp:542 - msgid "write_main() failed to re-load written solv file" --msgstr "write_main ()이 작성된 solv 파일을 다시로드하지 못했습니다." -+msgstr "write_main ()이 작성된 solv 파일을 다시 적재하지 못했습니다" - --#: libdnf/dnf-sack.cpp:605 -+#: libdnf/dnf-sack.cpp:607 - #, c-format - msgid "can not create temporary file %s" - msgstr "임시 파일을 만들 수 없습니다. %s" - --#: libdnf/dnf-sack.cpp:623 -+#: libdnf/dnf-sack.cpp:625 - #, c-format - msgid "write_ext(%1$d) has failed: %2$d" --msgstr "write_ext(%1$d) has failed: %2$d" -+msgstr "write_ext(%1$d) 실패하였습니다: %2$d" - --#: libdnf/dnf-sack.cpp:678 -+#: libdnf/dnf-sack.cpp:680 - msgid "null repo md file" - msgstr "null repo md 파일" - --#: libdnf/dnf-sack.cpp:687 -+#: libdnf/dnf-sack.cpp:689 - #, c-format - msgid "can not read file %1$s: %2$s" - msgstr "파일을 읽을 수 없습니다. %1$s: %2$s" - --#: libdnf/dnf-sack.cpp:701 -+#: libdnf/dnf-sack.cpp:703 - msgid "repo_add_solv() has failed." --msgstr "repo_add_solv() has failed." -+msgstr "repo_add_solv() 실패하였습니다." - --#: libdnf/dnf-sack.cpp:714 -+#: libdnf/dnf-sack.cpp:716 - msgid "loading of MD_TYPE_PRIMARY has failed." --msgstr "" -+msgstr "MD_TYPE_PRIMARY를 적재하지 못했습니다." - --#: libdnf/dnf-sack.cpp:727 -+#: libdnf/dnf-sack.cpp:729 - msgid "repo_add_repomdxml/rpmmd() has failed." --msgstr "repo_add_repomdxml/rpmmd() has failed." -+msgstr "repo_add_repomdxml/rpmmd() 실패하였습니다." - --#: libdnf/dnf-sack.cpp:794 -+#: libdnf/dnf-sack.cpp:796 - msgid "failed to auto-detect architecture" --msgstr "아키텍처 자동 검색에 실패했습니다." -+msgstr "구조 자동 검색에 실패했습니다" - --#: libdnf/dnf-sack.cpp:919 -+#: libdnf/dnf-sack.cpp:961 - #, c-format - msgid "failed creating cachedir %s" - msgstr "캐시 된 생성 실패 %s" - --#: libdnf/dnf-sack.cpp:1696 -+#: libdnf/dnf-sack.cpp:1738 - msgid "failed loading RPMDB" - msgstr "RPMDB로드 실패" - --#: libdnf/dnf-sack.cpp:2403 -+#: libdnf/dnf-sack.cpp:2463 - #, c-format - msgid "No module defaults found: %s" --msgstr "" -+msgstr "모듈 기본 설정을 찾을 수 없습니다: %s" - - #: libdnf/dnf-state.cpp:1184 - #, c-format -@@ -285,7 +405,7 @@ msgstr "이미 100 %% 상태 [%s]" - #: libdnf/dnf-transaction.cpp:300 - #, c-format - msgid "Sources not set when trying to ensure package %s" --msgstr "패키지를 만들 때 소스가 설정되지 않았습니다. %s" -+msgstr "꾸러미를 만들 때 소스가 설정되지 않았습니다. %s" - - #: libdnf/dnf-transaction.cpp:326 - #, c-format -@@ -299,7 +419,7 @@ msgstr "신뢰할 수 없는지 확인하지 못했습니다. " - #: libdnf/dnf-transaction.cpp:377 - #, c-format - msgid "Downloaded file for %s not found" --msgstr "에 대한 다운로드 파일 %s 찾을 수 없음" -+msgstr "에 대한 내려받기 파일 %s 찾을 수 없음" - - #: libdnf/dnf-transaction.cpp:397 - #, c-format -@@ -308,7 +428,7 @@ msgstr "꾸러미 %1$s 확인 및 복구 할 수 없습니다. %2$s GPG 사용 - - #: libdnf/dnf-transaction.cpp:831 libdnf/dnf-transaction.cpp:903 - msgid "Failed to get value for CacheDir" --msgstr "CacheDir에 대한 값을 가져 오는 데 실패했습니다." -+msgstr "CacheDir에 대한 값을 가져 오는 데 실패했습니다" - - #: libdnf/dnf-transaction.cpp:911 - #, c-format -@@ -325,26 +445,26 @@ msgstr "에 대한 파일 시스템 크기를 가져 오는 데 실패했습니 - msgid "Not enough free space in %1$s: needed %2$s, available %3$s" - msgstr "여유 공간이 부족합니다. %1$s: 필요 %2$s, 이용 가능 %3$s" - --#: libdnf/dnf-transaction.cpp:1196 -+#: libdnf/dnf-transaction.cpp:1195 - msgid "failed to set root" --msgstr "루트를 설정하지 못했습니다." -+msgstr "루트를 설정하지 못했습니다" - --#: libdnf/dnf-transaction.cpp:1418 -+#: libdnf/dnf-transaction.cpp:1416 - #, c-format - msgid "Error %i running transaction test" --msgstr "오류 %i 실행중인 트랜잭션 테스트" -+msgstr "%i 연결 실행 중 오류" - --#: libdnf/dnf-transaction.cpp:1458 -+#: libdnf/dnf-transaction.cpp:1456 - #, c-format - msgid "Error %i running transaction" --msgstr "오류 %i 실행중인 거래" -+msgstr "오류 %i 실행중인 연결" - --#: libdnf/dnf-transaction.cpp:1473 -+#: libdnf/dnf-transaction.cpp:1472 - #, c-format - msgid "Transaction did not go to writing phase, but returned no error(%i)" --msgstr "트랜잭션이 쓰기 단계로 이동하지 않았지만 오류를 반환하지 않았습니다 (%i)" -+msgstr "연결이 쓰기 단계로 이동하지 않았지만 오류를 반환하지 않았습니다 (%i)" - --#: libdnf/dnf-utils.cpp:111 libdnf/hy-iutil.cpp:399 -+#: libdnf/dnf-utils.cpp:111 libdnf/hy-iutil.cpp:403 - #, c-format - msgid "cannot open directory %1$s: %2$s" - msgstr "디렉토리를 열 수 없습니다. %1$s: %2$s" -@@ -354,369 +474,416 @@ msgstr "디렉토리를 열 수 없습니다. %1$s: %2$s" - msgid "failed to remove %s" - msgstr "제거하지 못했습니다. %s" - --#: libdnf/goal/Goal.cpp:55 -+#: libdnf/goal/Goal.cpp:74 - msgid "Ill-formed Selector, presence of multiple match objects in the filter" --msgstr "" -+msgstr "잘못된 형식의 선택기, 필터에 일치하는 개체가 여러 개 있음" - --#: libdnf/goal/Goal.cpp:56 -+#: libdnf/goal/Goal.cpp:75 - msgid "Ill-formed Selector used for the operation, incorrect comparison type" --msgstr "" -+msgstr "조작에 잘못 형성된 선택자, 잘못된 비교 유형" - --#: libdnf/goal/Goal.cpp:67 libdnf/goal/Goal.cpp:94 -+#: libdnf/goal/Goal.cpp:86 libdnf/goal/Goal.cpp:113 - msgid " does not belong to a distupgrade repository" --msgstr "" -+msgstr " distupgrade 저장소에 속하지 않습니다" - --#: libdnf/goal/Goal.cpp:68 libdnf/goal/Goal.cpp:95 -+#: libdnf/goal/Goal.cpp:87 libdnf/goal/Goal.cpp:114 - msgid " has inferior architecture" --msgstr "" -+msgstr " 하위 구조" - --#: libdnf/goal/Goal.cpp:69 -+#: libdnf/goal/Goal.cpp:88 - msgid "problem with installed package " --msgstr "" -+msgstr "설치된 꾸러미 문제 " - --#: libdnf/goal/Goal.cpp:70 libdnf/goal/Goal.cpp:97 -+#: libdnf/goal/Goal.cpp:89 libdnf/goal/Goal.cpp:116 - msgid "conflicting requests" --msgstr "" -+msgstr "충돌하는 요청" - --#: libdnf/goal/Goal.cpp:71 libdnf/goal/Goal.cpp:98 -+#: libdnf/goal/Goal.cpp:90 libdnf/goal/Goal.cpp:117 - msgid "unsupported request" --msgstr "" -+msgstr "지원되지 않는 요청" - --#: libdnf/goal/Goal.cpp:72 libdnf/goal/Goal.cpp:99 -+#: libdnf/goal/Goal.cpp:91 libdnf/goal/Goal.cpp:118 - msgid "nothing provides requested " --msgstr "" -+msgstr "요청이 없습니다 " - --#: libdnf/goal/Goal.cpp:73 -+#: libdnf/goal/Goal.cpp:92 - #, c-format - msgid "package %s does not exist" --msgstr "" -+msgstr "꾸러미 %s가 존재하지 않습니다" - --#: libdnf/goal/Goal.cpp:74 libdnf/goal/Goal.cpp:101 -+#: libdnf/goal/Goal.cpp:93 libdnf/goal/Goal.cpp:120 - msgid " is provided by the system" --msgstr "" -+msgstr " 시스템에서 제공" - --#: libdnf/goal/Goal.cpp:75 libdnf/goal/Goal.cpp:102 -+#: libdnf/goal/Goal.cpp:94 libdnf/goal/Goal.cpp:121 - msgid "some dependency problem" --msgstr "" -+msgstr "종속성 문제" - --#: libdnf/goal/Goal.cpp:76 -+#: libdnf/goal/Goal.cpp:95 - msgid "cannot install the best update candidate for package " --msgstr "" -+msgstr "꾸러미에 가장 적합한 최신화 선택을 설치 할 수 없습니다 " - --#: libdnf/goal/Goal.cpp:77 libdnf/goal/Goal.cpp:104 -+#: libdnf/goal/Goal.cpp:96 libdnf/goal/Goal.cpp:123 - msgid "cannot install the best candidate for the job" --msgstr "" -+msgstr "작업에 가장 적합한 선택을 설치 할 수 없습니다" - --#: libdnf/goal/Goal.cpp:78 -+#: libdnf/goal/Goal.cpp:97 - #, c-format - msgid "package %s is filtered out by modular filtering" --msgstr "" -+msgstr "꾸러미 %s가 모듈식으로 걸러 제거됩니다" - --#: libdnf/goal/Goal.cpp:79 -+#: libdnf/goal/Goal.cpp:98 - #, c-format - msgid "package %s does not have a compatible architecture" --msgstr "" -+msgstr "꾸러미 %s에 호환 구조가 없습니다" - --#: libdnf/goal/Goal.cpp:80 -+#: libdnf/goal/Goal.cpp:99 - #, c-format - msgid "package %s is not installable" --msgstr "" -+msgstr "꾸러미 %s 가 설치 할 수 없습니다" - --#: libdnf/goal/Goal.cpp:81 -+#: libdnf/goal/Goal.cpp:100 - #, c-format - msgid "package %s is filtered out by exclude filtering" --msgstr "" -+msgstr "꾸러미 %s가 걸러지는 것에서 제외되었습니다" - --#: libdnf/goal/Goal.cpp:82 -+#: libdnf/goal/Goal.cpp:101 - #, c-format - msgid "nothing provides %s needed by %s" --msgstr "" -+msgstr "%s에 필요한 %s가 제공되지 않았습니다" - --#: libdnf/goal/Goal.cpp:83 -+#: libdnf/goal/Goal.cpp:102 - #, c-format - msgid "cannot install both %s and %s" --msgstr "" -+msgstr "%s 와 %s 모두 설치 할 수 없습니다" - --#: libdnf/goal/Goal.cpp:84 -+#: libdnf/goal/Goal.cpp:103 - #, c-format - msgid "package %s conflicts with %s provided by %s" --msgstr "" -+msgstr "꾸러미 %s은 %s에서 제공된 %s와 충돌합니다" - --#: libdnf/goal/Goal.cpp:85 -+#: libdnf/goal/Goal.cpp:104 - #, c-format - msgid "package %s obsoletes %s provided by %s" --msgstr "" -+msgstr "꾸러미 %s가 %s에의해 제공된 %s를 폐기합니다" - --#: libdnf/goal/Goal.cpp:86 -+#: libdnf/goal/Goal.cpp:105 - #, c-format - msgid "installed package %s obsoletes %s provided by %s" --msgstr "" -+msgstr "설치된 꾸러미 %s는 %s에 의해 %s 폐기되었습니다" - --#: libdnf/goal/Goal.cpp:87 -+#: libdnf/goal/Goal.cpp:106 - #, c-format - msgid "package %s implicitly obsoletes %s provided by %s" --msgstr "" -+msgstr "꾸러미 %s가 %s에 의해 %s가 암시적으로 폐기되었습니다" - --#: libdnf/goal/Goal.cpp:88 -+#: libdnf/goal/Goal.cpp:107 - #, c-format - msgid "package %s requires %s, but none of the providers can be installed" --msgstr "" -+msgstr "꾸러미 %s는 %s가 필요하지만, 공급자가 없어 설치 할 수 없습니다" - --#: libdnf/goal/Goal.cpp:89 -+#: libdnf/goal/Goal.cpp:108 - #, c-format - msgid "package %s conflicts with %s provided by itself" --msgstr "" -+msgstr "꾸러미 %s가 자체적으로 제공된 %s와 충돌합니다" - --#: libdnf/goal/Goal.cpp:90 -+#: libdnf/goal/Goal.cpp:109 - #, c-format - msgid "both package %s and %s obsolete %s" --msgstr "" -+msgstr "꾸러미 %s 와 %s 는 모두 %s에서 폐기되었습니다" - --#: libdnf/goal/Goal.cpp:96 -+#: libdnf/goal/Goal.cpp:115 - msgid "problem with installed module " --msgstr "" -+msgstr "설치된 모듈 문제 " - --#: libdnf/goal/Goal.cpp:100 -+#: libdnf/goal/Goal.cpp:119 - #, c-format - msgid "module %s does not exist" --msgstr "" -+msgstr "모듈 %s이 존재하지 않음" - --#: libdnf/goal/Goal.cpp:103 -+#: libdnf/goal/Goal.cpp:122 - msgid "cannot install the best update candidate for module " --msgstr "" -+msgstr "모듈에 가장 적합한 최신화 추천을 설치 할 수 없습니다 " - --#: libdnf/goal/Goal.cpp:105 libdnf/goal/Goal.cpp:108 -+#: libdnf/goal/Goal.cpp:124 libdnf/goal/Goal.cpp:127 - #, c-format - msgid "module %s is disabled" --msgstr "" -+msgstr "모듈 %s를 사용할 수 없습니다" - --#: libdnf/goal/Goal.cpp:106 -+#: libdnf/goal/Goal.cpp:125 - #, c-format - msgid "module %s does not have a compatible architecture" --msgstr "" -+msgstr "모듈 %s 에 호환되는 구조가 없습니다" - --#: libdnf/goal/Goal.cpp:107 -+#: libdnf/goal/Goal.cpp:126 - #, c-format - msgid "module %s is not installable" --msgstr "" -+msgstr "모듈 %s 를 설치 할 수 없습니다" - --#: libdnf/goal/Goal.cpp:109 -+#: libdnf/goal/Goal.cpp:128 - #, c-format - msgid "nothing provides %s needed by module %s" --msgstr "" -+msgstr "모듈 %s 에 필요한 %s 가 제공되지 않았습니다" - --#: libdnf/goal/Goal.cpp:110 -+#: libdnf/goal/Goal.cpp:129 - #, c-format - msgid "cannot install both modules %s and %s" --msgstr "" -+msgstr "모듈 %s 와 %s를 모두 설치 할 수 없습니다" - --#: libdnf/goal/Goal.cpp:111 -+#: libdnf/goal/Goal.cpp:130 - #, c-format - msgid "module %s conflicts with %s provided by %s" --msgstr "" -+msgstr "모듈 %s가 %s에 의해 제공된 %s와 충돌합니다" - --#: libdnf/goal/Goal.cpp:112 -+#: libdnf/goal/Goal.cpp:131 - #, c-format - msgid "module %s obsoletes %s provided by %s" --msgstr "" -+msgstr "모듈 %s가 %s에 의해 제공된 %s를 폐기하였습니다" - --#: libdnf/goal/Goal.cpp:113 -+#: libdnf/goal/Goal.cpp:132 - #, c-format - msgid "installed module %s obsoletes %s provided by %s" --msgstr "" -+msgstr "설치된 모듈 %s 가 %s의해 제공된 %s를 폐기합니다" - --#: libdnf/goal/Goal.cpp:114 -+#: libdnf/goal/Goal.cpp:133 - #, c-format - msgid "module %s implicitly obsoletes %s provided by %s" --msgstr "" -+msgstr "모듈 %s가 %s 에 의해 %s를 암시적으로 폐기되었습니다" - --#: libdnf/goal/Goal.cpp:115 -+#: libdnf/goal/Goal.cpp:134 - #, c-format - msgid "module %s requires %s, but none of the providers can be installed" --msgstr "" -+msgstr "모듈 %s 에 %s 가 필요하지만 공급 업체가 없어 설치 할 수 없습니다" - --#: libdnf/goal/Goal.cpp:116 -+#: libdnf/goal/Goal.cpp:135 - #, c-format - msgid "module %s conflicts with %s provided by itself" --msgstr "" -+msgstr "모듈 %s가 자체적으로 제공된 %s와 충돌합니다" - --#: libdnf/goal/Goal.cpp:117 -+#: libdnf/goal/Goal.cpp:136 - #, c-format - msgid "both module %s and %s obsolete %s" --msgstr "" -+msgstr "모듈 %s와 %s가 %s에서 폐기되었습니다" - --#: libdnf/goal/Goal.cpp:1038 -+#: libdnf/goal/Goal.cpp:1051 - msgid "no solver set" --msgstr "" -+msgstr "solver 설정 없음" - --#: libdnf/goal/Goal.cpp:1043 -+#: libdnf/goal/Goal.cpp:1056 - #, c-format - msgid "failed to make %s absolute" --msgstr "" -+msgstr "%s 절대값을 생성을 실패하였습니다" - --#: libdnf/goal/Goal.cpp:1050 -+#: libdnf/goal/Goal.cpp:1063 - #, c-format - msgid "failed writing debugdata to %1$s: %2$s" --msgstr "" -+msgstr "%1$s: %2$s에 디버그자료 쓰기를 실패했습니다" - --#: libdnf/goal/Goal.cpp:1062 -+#: libdnf/goal/Goal.cpp:1075 - msgid "no solv in the goal" --msgstr "" -+msgstr "목표에 solv가 없다" - --#: libdnf/goal/Goal.cpp:1064 -+#: libdnf/goal/Goal.cpp:1077 - msgid "no solution, cannot remove protected package" --msgstr "" -+msgstr "해결책 없음, 보호 된 꾸러미를 제거 할 수 없음" - --#: libdnf/goal/Goal.cpp:1067 -+#: libdnf/goal/Goal.cpp:1080 - msgid "no solution possible" --msgstr "" -+msgstr "해결책 없음" -+ -+#: libdnf/goal/Goal.cpp:1206 -+msgid "Problem: " -+msgstr "문제: " - --#: libdnf/goal/Goal.cpp:1479 -+#: libdnf/goal/Goal.cpp:1211 -+#, c-format -+msgid "Problem %d: " -+msgstr "문제 %d: " -+ -+#: libdnf/goal/Goal.cpp:1538 - msgid "" - "The operation would result in removing the following protected packages: " --msgstr "" -+msgstr "이 작업으로 인해 다음과 같은 보호 꾸러미가 제거됩니다. " - --#: libdnf/hy-iutil.cpp:322 -+#: libdnf/hy-iutil.cpp:326 - #, c-format - msgid "Failed renaming %1$s to %2$s: %3$s" --msgstr "" -+msgstr "%1$s 을 %2$s: %3$s에 이름 바꾸기 실패" - --#: libdnf/hy-iutil.cpp:330 -+#: libdnf/hy-iutil.cpp:334 - #, c-format - msgid "Failed setting perms on %1$s: %2$s" --msgstr "" -+msgstr "%1$s: %2$s에 perms 설정 실패하였습니다" - --#: libdnf/hy-iutil.cpp:376 -+#: libdnf/hy-iutil.cpp:380 - #, c-format - msgid "cannot create directory %1$s: %2$s" --msgstr "" -+msgstr "디렉토리를 생성 할 수 없습니다 %1$s: %2$s" - --#: libdnf/hy-iutil.cpp:411 -+#: libdnf/hy-iutil.cpp:415 - #, c-format - msgid "cannot stat path %1$s: %2$s" --msgstr "" -+msgstr "경로 %1$s: %2$s stat 할 수 없습니다" - --#: libdnf/module/ModulePackage.cpp:499 -+#: libdnf/module/ModulePackage.cpp:560 - #, c-format - msgid "Invalid format of Platform module: %s" --msgstr "" -+msgstr "잘못된 형식의 기반 모듈: %s" - --#: libdnf/module/ModulePackage.cpp:514 -+#: libdnf/module/ModulePackage.cpp:575 - msgid "Multiple module platforms provided by available packages\n" --msgstr "" -+msgstr "사용 가능한 꾸러미로 제공되는 다중 모듈 기반\n" - --#: libdnf/module/ModulePackage.cpp:527 -+#: libdnf/module/ModulePackage.cpp:588 - msgid "Multiple module platforms provided by installed packages\n" --msgstr "" -+msgstr "설치된 꾸러미로 제공되는 다중 모듈 기반\n" - --#: libdnf/module/ModulePackage.cpp:554 -+#: libdnf/module/ModulePackage.cpp:615 - #, c-format - msgid "Detection of Platform Module in %s failed: %s" --msgstr "" -+msgstr "%s 실패한: %s 에서 기반(Platform) 모듈 감지" - --#: libdnf/module/ModulePackage.cpp:563 -+#: libdnf/module/ModulePackage.cpp:624 - #, c-format - msgid "Missing PLATFORM_ID in %s" --msgstr "" -+msgstr "%s에서 PLATFORM_ID가 누락됨" - --#: libdnf/module/ModulePackage.cpp:568 -+#: libdnf/module/ModulePackage.cpp:629 - msgid "No valid Platform ID detected" --msgstr "" -+msgstr "유효한 기반(Platform) ID가 없습니다" - - #: libdnf/module/ModulePackageContainer.cpp:68 - #, c-format - msgid "Cannot enable multiple streams for module '%s'" --msgstr "" -+msgstr "모듈 '%s’를 위해 다중 스트림을 활성화 할 수 없습니다" - --#: libdnf/module/ModulePackageContainer.cpp:294 -+#: libdnf/module/ModulePackageContainer.cpp:295 - #, c-format - msgid "Conflicting defaults with repo '%s': %s" --msgstr "" -+msgstr "저장소 '%s: %s'와 기본 설정이 충돌합니다" -+ -+#: libdnf/module/ModulePackageContainer.cpp:841 -+msgid "Installing module profiles:\n" -+msgstr "모듈 프로파일 설치:\n" - --#: libdnf/module/ModulePackageContainer.cpp:1569 -+#: libdnf/module/ModulePackageContainer.cpp:856 -+msgid "Disabling module profiles:\n" -+msgstr "모듈 프로파일 비활성화:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:871 -+msgid "Enabling module streams:\n" -+msgstr "모듈 스트림 활성화:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:885 -+msgid "Switching module streams:\n" -+msgstr "모듈 스트림 전환:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:903 -+msgid "Disabling modules:\n" -+msgstr "모듈 비활성화:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:914 -+msgid "Resetting modules:\n" -+msgstr "모듈 재설정:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:1638 - #, c-format - msgid "Unable to load modular Fail-Safe data at '%s'" --msgstr "" -+msgstr "'%s'에서 모듈식 Fail-Safe 자료를 적재 할 수 없습니다" - --#: libdnf/module/ModulePackageContainer.cpp:1575 -+#: libdnf/module/ModulePackageContainer.cpp:1644 - #, c-format - msgid "Unable to load modular Fail-Safe data for module '%s:%s'" --msgstr "" -+msgstr "모듈 '%s:%s'에 대해 모듈식 Fail-Safe 자료를 적재 할 수 없습니다" - --#: libdnf/module/ModulePackageContainer.cpp:1639 -+#: libdnf/module/ModulePackageContainer.cpp:1702 - #, c-format - msgid "Unable to create directory \"%s\" for modular Fail Safe data: %s" --msgstr "" -+msgstr "모듈식 Fail-Safe 데이터에 대한 “%s\" 디렉토리를 만들 수 없습니다: %s" - --#: libdnf/module/ModulePackageContainer.cpp:1661 -+#: libdnf/module/ModulePackageContainer.cpp:1718 - #, c-format - msgid "Unable to save a modular Fail Safe data to '%s'" --msgstr "" -+msgstr "모듈식 Fail Safe 자료를 '%s'에 저장 할 수 없습니다" - --#: libdnf/module/ModulePackageContainer.cpp:1686 -+#: libdnf/module/ModulePackageContainer.cpp:1741 - #, c-format - msgid "Unable to remove a modular Fail Safe data in '%s'" -+msgstr "'%s'에서 모듈식 Fail Safe 자료를 제거 할 수 없습니다" -+ -+#: libdnf/module/ModulePackageContainer.cpp:1773 -+#, c-format -+msgid "" -+"Unable to apply modular obsoletes to '%s:%s' because target module '%s' is " -+"disabled" - msgstr "" -+"'%s:%s'에 사용되지 않는 모듈을 적용할 수 없습니다(대상 모듈 '%s'가 비활성화 " -+"되어 있기 때문에)" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:86 - #, c-format - msgid "Failed to update from string: %s" --msgstr "" -+msgstr "문자열에서 최신화하지 못했습니다: %s" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:110 - #, c-format - msgid "Failed to resolve: %s" --msgstr "" -+msgstr "해결하지 못했습니다: %s" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:115 - #, c-format - msgid "There were errors while resolving modular defaults: %s" --msgstr "" -+msgstr "모듈식 기본값을 해결하는 동안 오류가 발생했습니다: %s" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:120 - #, c-format - msgid "Failed to upgrade defaults: %s" --msgstr "" -+msgstr "기본값을 최신화에 실패하였습니다: %s" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:123 - #, c-format - msgid "Failed to upgrade streams: %s" --msgstr "" -+msgstr "스트림 최신화에 실패하였습니다: %s" -+ -+#: libdnf/module/modulemd/ModuleMetadata.cpp:212 -+#, c-format -+msgid "Cannot retrieve module obsoletes because no stream matching %s: %s" -+msgstr "%s: %s 일치하는 스트림이 없기 때문에 구식 모듈을 검색 할 수 없습니다" - - #: libdnf/plugin/plugin.cpp:46 - #, c-format - msgid "Can't load shared library \"%s\": %s" --msgstr "" -+msgstr "공유 라이브러리\"%s\": %s 를 적재 할 수 없습니다" - - #: libdnf/plugin/plugin.cpp:61 libdnf/plugin/plugin.cpp:67 - #: libdnf/plugin/plugin.cpp:73 libdnf/plugin/plugin.cpp:79 - #, c-format - msgid "Can't obtain address of symbol \"%s\": %s" --msgstr "" -+msgstr "기호 \"%s\": %s 의 주소를 가져 올 수 없습니다" - - #: libdnf/plugin/plugin.cpp:86 - #, c-format - msgid "Loading plugin file=\"%s\"" --msgstr "" -+msgstr "플러그인 파일 적재중=\"%s\"" - - #: libdnf/plugin/plugin.cpp:89 - #, c-format - msgid "Loaded plugin name=\"%s\", version=\"%s\"" --msgstr "" -+msgstr "적재된 플러그인 이름=\"%s\", 버전=\"%s\"" - - #: libdnf/plugin/plugin.cpp:96 - msgid "Plugins::loadPlugins() dirPath cannot be empty" --msgstr "" -+msgstr "Plugins::loadPlugins() dirPath는 비워 둘 수 없습니다" - - #: libdnf/plugin/plugin.cpp:105 - #, c-format - msgid "Can't read plugin directory \"%s\": %s" --msgstr "" -+msgstr "플러그인 디렉토리 \"%s\": %s 를 읽을 수 없습니다" - - #: libdnf/plugin/plugin.cpp:114 - #, c-format - msgid "Can't load plugin \"%s\": %s" --msgstr "" -+msgstr "플러그인\"%s\": %s를 적재 할 수 없습니다" - - #: libdnf/repo/DependencySplitter.cpp:50 - msgid "" -@@ -724,198 +891,220 @@ msgid "" - "deprecated and the support will be dropped in future versions. Use '=' " - "operator instead." - msgstr "" -+"reldeps에 '=='연산자를 사용하면 정의되지 않은 동작이 발생할 수 있습니다. 이 " -+"연산자는 더 이상 사용되지 않으며, 향후 버전에서는 지원이 중단됩니다. 대신 " -+"'=' 연산자를 사용하세요." - - #: libdnf/repo/Repo.cpp:321 - #, c-format - msgid "Repository %s has no mirror or baseurl set." --msgstr "" -+msgstr "저장소 %s 는 연결주소 또는 baseurl 구성을 갖고 있지 않습니다." - - #: libdnf/repo/Repo.cpp:330 - #, c-format - msgid "Repository '%s' has unsupported type: 'type=%s', skipping." -+msgstr "저장소 '%s'는 지원하지 않는 유형: 'type=%s'이며, 건너뜁니다." -+ -+#: libdnf/repo/Repo.cpp:489 libdnf/repo/Repo.cpp:610 libdnf/repo/Repo.cpp:641 -+#: libdnf/repo/Repo.cpp:1382 -+#, c-format -+msgid "repo '%s': 'basecachedir' is not set" -+msgstr "repo '%s': 'basecachedir가 구성되어 있지 않습니다" -+ -+#: libdnf/repo/Repo.cpp:512 -+msgid "" -+"Maximum download speed is lower than minimum. Please change configuration of " -+"minrate or throttle" - msgstr "" -+"최대 내려받기 속도는 최저보다 낮습니다. 최저속도나 변환 환경구성을 변경해 주" -+"세요" - - #: libdnf/repo/Repo.cpp:546 - #, c-format --msgid "Cannot find a valid baseurl for repo: %s" -+msgid "repo '%s': 'proxy_username' is set but not 'proxy_password'" - msgstr "" -+"repo '%s': 'proxy_username' 는 구성되어 있지만 'proxy_password'가 없습니다" - --#: libdnf/repo/Repo.cpp:583 libdnf/repo/Repo.cpp:1672 --msgid "" --"Maximum download speed is lower than minimum. Please change configuration of" --" minrate or throttle" --msgstr "" -+#: libdnf/repo/Repo.cpp:548 -+msgid "'proxy_username' is set but not 'proxy_password'" -+msgstr "'proxy_username' 이 구성되어 있지만 'proxy_password'가 없습니다" -+ -+#: libdnf/repo/Repo.cpp:629 -+#, c-format -+msgid "Cannot find a valid baseurl for repo: %s" -+msgstr "repo: %s 를 위해 유효한 baseurl을 찾을 수 없습니다" - --#: libdnf/repo/Repo.cpp:633 libdnf/repo/Repo.cpp:655 -+#: libdnf/repo/Repo.cpp:660 libdnf/repo/Repo.cpp:682 - #, c-format - msgid "%s: gpgme_data_new_from_fd(): %s" - msgstr "%s: gpgme_data_new_from_fd(): %s" - --#: libdnf/repo/Repo.cpp:641 libdnf/repo/Repo.cpp:663 -+#: libdnf/repo/Repo.cpp:668 libdnf/repo/Repo.cpp:690 - #, c-format - msgid "%s: gpgme_op_import(): %s" - msgstr "%s: gpgme_op_import(): %s" - --#: libdnf/repo/Repo.cpp:686 libdnf/repo/Repo.cpp:752 libdnf/repo/Repo.cpp:880 -+#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:779 libdnf/repo/Repo.cpp:907 - #, c-format - msgid "%s: gpgme_ctx_set_engine_info(): %s" - msgstr "%s: gpgme_ctx_set_engine_info(): %s" - --#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:777 -+#: libdnf/repo/Repo.cpp:740 libdnf/repo/Repo.cpp:804 - #, c-format - msgid "can not list keys: %s" - msgstr "열쇠를 나열 할 수 없습니다 : %s" - --#: libdnf/repo/Repo.cpp:806 -+#: libdnf/repo/Repo.cpp:833 - #, c-format - msgid "Failed to retrieve GPG key for repo '%s': %s" --msgstr "" -+msgstr "repo '%s': %sf 를 위해 GPG key 가져오기에 실패하였습니다" - --#: libdnf/repo/Repo.cpp:859 -+#: libdnf/repo/Repo.cpp:886 - #, c-format - msgid "repo %s: 0x%s already imported" --msgstr "레포 %s: 0x%s 이미 수입" -+msgstr "repo %s: 0x%s를 이미 가져왔습니다" - --#: libdnf/repo/Repo.cpp:887 -+#: libdnf/repo/Repo.cpp:914 - #, c-format - msgid "repo %s: imported key 0x%s." --msgstr "레포 %s: 가져온 키 0x%s." -+msgstr "repo %s: 0x%s 키를 가져왔습니다." - --#: libdnf/repo/Repo.cpp:1131 -+#: libdnf/repo/Repo.cpp:1162 - #, c-format - msgid "reviving: repo '%s' skipped, no metalink." --msgstr "부활 : repo '%s'건너 뛰었습니다." -+msgstr "부활: repo '%s' 건너 뛰었으며, 메타링크가 없습니다." - --#: libdnf/repo/Repo.cpp:1150 -+#: libdnf/repo/Repo.cpp:1181 - #, c-format - msgid "reviving: repo '%s' skipped, no usable hash." --msgstr "부활 : repo '%s'건너 뛰었습니다. 사용 가능한 해시가 없습니다." -+msgstr "부활: repo '%s'건너 뛰었으며, 사용 가능한 해쉬가 없습니다." - --#: libdnf/repo/Repo.cpp:1173 -+#: libdnf/repo/Repo.cpp:1204 - #, c-format - msgid "reviving: failed for '%s', mismatched %s sum." --msgstr "되살리기 : 실패한 '%s', 불일치 %s 합집합." -+msgstr "부활 : '%s'에 실패하고, %s 합과 일치하지 않음." - --#: libdnf/repo/Repo.cpp:1179 -+#: libdnf/repo/Repo.cpp:1210 - #, c-format - msgid "reviving: '%s' can be revived - metalink checksums match." --msgstr "되살아 난다 : '%s'부활 할 수 있습니다 - metalink 체크섬이 일치합니다." -+msgstr "부활: '%s'는 부활 할 수 있습니다 - 메타링크 체크섬이 일치합니다." - --#: libdnf/repo/Repo.cpp:1204 -+#: libdnf/repo/Repo.cpp:1235 - #, c-format - msgid "reviving: '%s' can be revived - repomd matches." --msgstr "되살아 난다 : '%s'부활 할 수 있습니다 - repomd가 일치합니다." -+msgstr "부활: '%s'는 부활 할 수 있습니다 - repomd가 일치합니다." - --#: libdnf/repo/Repo.cpp:1206 -+#: libdnf/repo/Repo.cpp:1237 - #, c-format - msgid "reviving: failed for '%s', mismatched repomd." --msgstr "되살리기 : 실패한 '%s', 일치하지 않는 repomd." -+msgstr "부활: '%s'에 실패하고, 일치하지 않은 repomd." - --#: libdnf/repo/Repo.cpp:1224 -+#: libdnf/repo/Repo.cpp:1255 - #, c-format - msgid "Cannot create repo destination directory \"%s\": %s" --msgstr "" -+msgstr "repo 목적지 디렉토리 \"%s\": %s 를 생성 할 수 없습니다" - --#: libdnf/repo/Repo.cpp:1230 -+#: libdnf/repo/Repo.cpp:1261 - #, c-format - msgid "Cannot create repo temporary directory \"%s\": %s" - msgstr "임시 저장소 디렉토리를 만들 수 없습니다 \"%s\": %s" - --#: libdnf/repo/Repo.cpp:1244 -+#: libdnf/repo/Repo.cpp:1275 - #, c-format - msgid "Cannot create directory \"%s\": %s" - msgstr "디렉토리를 만들 수 없습니다 \"%s\": %s" - --#: libdnf/repo/Repo.cpp:1267 -+#: libdnf/repo/Repo.cpp:1298 - #, c-format - msgid "Cannot rename directory \"%s\" to \"%s\": %s" - msgstr "디렉터리 이름을 바꿀 수 없습니다 \"%s\"~\"%s\": %s" - --#: libdnf/repo/Repo.cpp:1290 -+#: libdnf/repo/Repo.cpp:1321 - #, c-format - msgid "repo: using cache for: %s" --msgstr "repo : 캐시 사용 : %s" -+msgstr "repo: 캐쉬 사용: %s" - --#: libdnf/repo/Repo.cpp:1302 -+#: libdnf/repo/Repo.cpp:1333 - #, c-format - msgid "Cache-only enabled but no cache for '%s'" --msgstr "캐시 만 사용 가능하지만 '%s'" -+msgstr "캐쉬만 사용 가능하지만 '%s'를 위해 캐쉬가 없습니다" - --#: libdnf/repo/Repo.cpp:1306 -+#: libdnf/repo/Repo.cpp:1337 - #, c-format - msgid "repo: downloading from remote: %s" --msgstr "repo : 원격에서 다운로드 중 : %s" -+msgstr "repo: 원격에서 내려받기 중: %s" - --#: libdnf/repo/Repo.cpp:1312 -+#: libdnf/repo/Repo.cpp:1344 - #, c-format - msgid "Failed to download metadata for repo '%s': %s" --msgstr "" -+msgstr "repo를 위한 메타자료 내려받기에 실패하였습니다 '%s': %s" - --#: libdnf/repo/Repo.cpp:1338 -+#: libdnf/repo/Repo.cpp:1370 - msgid "getCachedir(): Computation of SHA256 failed" --msgstr "getCachedir () : SHA256 계산에 실패했습니다." -+msgstr "getCachedir(): SHA256 계산에 실패했습니다" - --#: libdnf/repo/Repo.cpp:1363 -+#: libdnf/repo/Repo.cpp:1398 - #, c-format - msgid "Cannot create persistdir \"%s\": %s" --msgstr "" -+msgstr "persistdir \"%s\": %s 를 생성 할 수 없습니다" - --#: libdnf/repo/Repo.cpp:1763 -+#: libdnf/repo/Repo.cpp:1775 - msgid "resume cannot be used simultaneously with the byterangestart param" --msgstr "이력서는 byterangestart 매개 변수와 동시에 사용할 수 없습니다." -+msgstr "이력서는 byterangestart 매개 변수와 동시에 사용 할 수 없습니다" - --#: libdnf/repo/Repo.cpp:1780 -+#: libdnf/repo/Repo.cpp:1792 - #, c-format - msgid "PackageTarget initialization failed: %s" --msgstr "PackageTarget 초기화에 실패했습니다 : %s" -+msgstr "PackageTarget 초기화에 실패했습니다: %s" - --#: libdnf/repo/Repo.cpp:1886 -+#: libdnf/repo/Repo.cpp:1898 - #, c-format - msgid "Cannot open %s: %s" --msgstr "열 수 없다 %s: %s" -+msgstr "열 수 없습니다 %s: %s" - --#: libdnf/repo/Repo.cpp:1930 -+#: libdnf/repo/Repo.cpp:1942 - #, c-format - msgid "Log handler with id %ld doesn't exist" --msgstr "ID가있는 로그 처리기 %ld 존재하지 않는다." -+msgstr "ID가 있는 로그 처리기 %ld가 존재하지 않습니다" - - #: libdnf/transaction/Swdb.cpp:173 - msgid "In progress" - msgstr "진행 중" - --#: libdnf/transaction/Swdb.cpp:188 libdnf/transaction/Swdb.cpp:216 --#: libdnf/transaction/Swdb.cpp:228 libdnf/transaction/Swdb.cpp:245 --#: libdnf/transaction/Swdb.cpp:384 libdnf/transaction/Swdb.cpp:394 -+#: libdnf/transaction/Swdb.cpp:187 libdnf/transaction/Swdb.cpp:215 -+#: libdnf/transaction/Swdb.cpp:227 libdnf/transaction/Swdb.cpp:244 -+#: libdnf/transaction/Swdb.cpp:383 libdnf/transaction/Swdb.cpp:393 - msgid "Not in progress" - msgstr "진행 중이 아님" - --#: libdnf/transaction/Swdb.cpp:255 -+#: libdnf/transaction/Swdb.cpp:254 - msgid "No transaction in progress" --msgstr "진행중인 트랜잭션 없음" -+msgstr "진행 중인 연결 없음" - - #: libdnf/transaction/TransactionItem.cpp:147 - msgid "Attempt to insert transaction item into completed transaction" --msgstr "트랜잭션 항목을 완료된 트랜잭션에 삽입하려고 시도했습니다." -+msgstr "연결 항목을 완료된 연결에 삽입하려고 시도했습니다" - - #: libdnf/transaction/TransactionItem.cpp:218 - msgid "Attempt to update transaction item in completed transaction" --msgstr "완료된 트랜잭션에서 트랜잭션 항목 업데이트를 시도합니다." -+msgstr "완료된 연결에서 연결 항목 최신화를 시도합니다" - - #: libdnf/transaction/Transformer.cpp:76 - msgid "Database Corrupted: no row 'version' in table 'config'" - msgstr "" -+"데이타베이스가 오염되었습니다: 테이블 'config'에 'version' 행이 없습니다" - - #: libdnf/transaction/Transformer.cpp:681 - msgid "Transformer: can't open history persist dir" --msgstr "변압기 : 역사를 열 수 없습니다." -+msgstr "변형: persist dir 기록을 열 수 없습니다" - - #: libdnf/transaction/Transformer.cpp:694 - msgid "Couldn't find a history database" --msgstr "기록 데이터베이스를 찾을 수 없습니다." -+msgstr "기록 데이타베이스를 찾을 수 없습니다" - - #: libdnf/transaction/private/Transaction.cpp:41 - msgid "Transaction has already began!" --msgstr "거래가 이미 시작되었습니다!" -+msgstr "연결이 이미 시작되었습니다!" - - #: libdnf/transaction/private/Transaction.cpp:58 - #, c-format -@@ -924,7 +1113,4 @@ msgstr "TransactionItem 상태가 설정되지 않았습니다. %s" - - #: libdnf/transaction/private/Transaction.cpp:243 - msgid "Can't add console output to unsaved transaction" --msgstr "저장되지 않은 트랜잭션에 콘솔 출력을 추가 할 수 없습니다." -- --#~ msgid "failed calculating RPMDB checksum" --#~ msgstr "RPMDB 체크섬 계산 실패" -+msgstr "저장되지 않은 연결에 콘솔 출력을 추가 할 수 없습니다" -diff --git a/po/libdnf.pot b/po/libdnf.pot -index e7c0edf..fdc8ceb 100644 ---- a/po/libdnf.pot -+++ b/po/libdnf.pot -@@ -8,7 +8,7 @@ msgid "" - msgstr "" - "Project-Id-Version: PACKAGE VERSION\n" - "Report-Msgid-Bugs-To: \n" --"POT-Creation-Date: 2020-10-05 09:18-0400\n" -+"POT-Creation-Date: 2022-02-28 11:03+0100\n" - "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" - "Last-Translator: FULL NAME \n" - "Language-Team: LANGUAGE \n" -@@ -37,17 +37,30 @@ msgstr "" - msgid "unknown unit '%s'" - msgstr "" - --#: libdnf/conf/ConfigMain.cpp:332 -+#: libdnf/conf/ConfigMain.cpp:204 libdnf/conf/OptionEnum.cpp:83 -+#: libdnf/conf/OptionNumber.cpp:88 -+msgid "invalid value" -+msgstr "" -+ -+#: libdnf/conf/ConfigMain.cpp:207 -+msgid "value 1 is not allowed" -+msgstr "" -+ -+#: libdnf/conf/ConfigMain.cpp:209 -+msgid "negative value is not allowed" -+msgstr "" -+ -+#: libdnf/conf/ConfigMain.cpp:341 - #, c-format - msgid "percentage '%s' is out of range" - msgstr "" - --#: libdnf/conf/OptionBinds.cpp:76 -+#: libdnf/conf/OptionBinds.cpp:85 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" does not exist" - msgstr "" - --#: libdnf/conf/OptionBinds.cpp:88 -+#: libdnf/conf/OptionBinds.cpp:97 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" already exists" - msgstr "" -@@ -58,15 +71,11 @@ msgid "invalid boolean value '%s'" - msgstr "" - - #: libdnf/conf/OptionEnum.cpp:72 libdnf/conf/OptionEnum.cpp:158 --#: libdnf/conf/OptionString.cpp:59 libdnf/conf/OptionStringList.cpp:59 -+#: libdnf/conf/OptionString.cpp:64 libdnf/conf/OptionStringList.cpp:59 - #, c-format - msgid "'%s' is not an allowed value" - msgstr "" - --#: libdnf/conf/OptionEnum.cpp:83 libdnf/conf/OptionNumber.cpp:88 --msgid "invalid value" --msgstr "" -- - #: libdnf/conf/OptionNumber.cpp:73 - #, c-format - msgid "given value [%d] should be less than allowed value [%d]." -@@ -92,27 +101,126 @@ msgstr "" - msgid "could not convert '%s' to seconds" - msgstr "" - --#: libdnf/conf/OptionString.cpp:74 -+#: libdnf/conf/OptionString.cpp:79 - msgid "GetValue(): Value not set" - msgstr "" - --#: libdnf/dnf-goal.cpp:68 -+#: libdnf/dnf-context.cpp:3170 libdnf/dnf-context.cpp:3179 -+#, c-format -+msgid "Cannot enable more streams from module '%s' at the same time" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3188 libdnf/dnf-context.cpp:3206 -+#, c-format -+msgid "" -+"Cannot enable module '%1$s' stream '%2$s': State of module already modified" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3253 -+#, c-format -+msgid "Modular dependency problem with Defaults: %s" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3256 -+#, c-format -+msgid "Modular dependency problem: %s" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3290 libdnf/dnf-context.cpp:3314 -+#: libdnf/dnf-context.cpp:3325 libdnf/dnf-context.cpp:3364 -+#: libdnf/dnf-context.cpp:3380 libdnf/dnf-context.cpp:3412 -+#: libdnf/dnf-context.cpp:3456 libdnf/dnf-context.cpp:3466 -+#, c-format -+msgid "Unable to resolve argument '%s'" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3297 -+#, c-format -+msgid "" -+"Only module name is required. Ignoring unneeded information in argument: '%s'" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3311 -+#, c-format -+msgid "Cannot reset module '%s': State of module already modified" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3322 -+#, c-format -+msgid "Cannot disable module '%s': State of module already modified" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3353 libdnf/dnf-context.cpp:3445 -+#: libdnf/dnf-context.cpp:3558 -+msgid "No modular data available" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3370 -+#, c-format -+msgid "Ignoring unneeded information in argument: '%s'" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3408 -+#, c-format -+msgid "" -+"Problem during enablement of dependency tree for module '%1$s' stream " -+"'%2$s': %3$s" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3420 -+msgid "Problems appeared for module enable request" -+msgstr "" -+ -+#. this really should never happen; unless the modular repodata is corrupted -+#: libdnf/dnf-context.cpp:3495 -+#, c-format -+msgid "Failed to parse module artifact NEVRA '%s'" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3529 -+msgid "Problems appeared for module install request" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3589 -+msgid "Problems appeared for module reset request" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3591 -+msgid "Problems appeared for module disable request" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3627 -+#, c-format -+msgid "" -+"The operation would result in switching of module '%s' stream '%s' to stream " -+"'%s'" -+msgstr "" -+ -+#: libdnf/dnf-context.cpp:3631 -+msgid "" -+"It is not possible to switch enabled streams of a module.\n" -+"It is recommended to remove all installed content from the module, and reset " -+"the module using 'microdnf module reset ' command. After you " -+"reset the module, you can install the other stream." -+msgstr "" -+ -+#: libdnf/dnf-goal.cpp:85 - msgid "Could not depsolve transaction; " - msgstr "" - --#: libdnf/dnf-goal.cpp:70 -+#: libdnf/dnf-goal.cpp:87 - #, c-format - msgid "%i problem detected:\n" - msgid_plural "%i problems detected:\n" - msgstr[0] "" - msgstr[1] "" - --#: libdnf/dnf-goal.cpp:78 -+#: libdnf/dnf-goal.cpp:95 - #, c-format - msgid " Problem %1$i: %2$s\n" - msgstr "" - --#: libdnf/dnf-goal.cpp:80 -+#: libdnf/dnf-goal.cpp:97 - #, c-format - msgid " Problem: %s\n" - msgstr "" -@@ -177,84 +285,84 @@ msgstr "" - msgid "could not add erase element %1$s(%2$i)" - msgstr "" - --#: libdnf/dnf-sack.cpp:381 --#, c-format --msgid "no %1$s string for %2$s" -+#: libdnf/dnf-sack.cpp:395 -+msgid "failed to add solv" - msgstr "" - --#: libdnf/dnf-sack.cpp:404 --msgid "failed to add solv" -+#: libdnf/dnf-sack.cpp:414 -+#, c-format -+msgid "no %1$s string for %2$s" - msgstr "" - --#: libdnf/dnf-sack.cpp:422 -+#: libdnf/dnf-sack.cpp:424 - #, c-format - msgid "failed to open: %s" - msgstr "" - --#: libdnf/dnf-sack.cpp:501 -+#: libdnf/dnf-sack.cpp:503 - #, c-format - msgid "cannot create temporary file: %s" - msgstr "" - --#: libdnf/dnf-sack.cpp:511 -+#: libdnf/dnf-sack.cpp:513 - #, c-format - msgid "failed opening tmp file: %s" - msgstr "" - --#: libdnf/dnf-sack.cpp:523 -+#: libdnf/dnf-sack.cpp:525 - #, c-format - msgid "write_main() failed writing data: %i" - msgstr "" - --#: libdnf/dnf-sack.cpp:540 -+#: libdnf/dnf-sack.cpp:542 - msgid "write_main() failed to re-load written solv file" - msgstr "" - --#: libdnf/dnf-sack.cpp:605 -+#: libdnf/dnf-sack.cpp:607 - #, c-format - msgid "can not create temporary file %s" - msgstr "" - --#: libdnf/dnf-sack.cpp:623 -+#: libdnf/dnf-sack.cpp:625 - #, c-format - msgid "write_ext(%1$d) has failed: %2$d" - msgstr "" - --#: libdnf/dnf-sack.cpp:678 -+#: libdnf/dnf-sack.cpp:680 - msgid "null repo md file" - msgstr "" - --#: libdnf/dnf-sack.cpp:687 -+#: libdnf/dnf-sack.cpp:689 - #, c-format - msgid "can not read file %1$s: %2$s" - msgstr "" - --#: libdnf/dnf-sack.cpp:701 -+#: libdnf/dnf-sack.cpp:703 - msgid "repo_add_solv() has failed." - msgstr "" - --#: libdnf/dnf-sack.cpp:714 -+#: libdnf/dnf-sack.cpp:716 - msgid "loading of MD_TYPE_PRIMARY has failed." - msgstr "" - --#: libdnf/dnf-sack.cpp:727 -+#: libdnf/dnf-sack.cpp:729 - msgid "repo_add_repomdxml/rpmmd() has failed." - msgstr "" - --#: libdnf/dnf-sack.cpp:794 -+#: libdnf/dnf-sack.cpp:796 - msgid "failed to auto-detect architecture" - msgstr "" - --#: libdnf/dnf-sack.cpp:919 -+#: libdnf/dnf-sack.cpp:961 - #, c-format - msgid "failed creating cachedir %s" - msgstr "" - --#: libdnf/dnf-sack.cpp:1696 -+#: libdnf/dnf-sack.cpp:1738 - msgid "failed loading RPMDB" - msgstr "" - --#: libdnf/dnf-sack.cpp:2403 -+#: libdnf/dnf-sack.cpp:2463 - #, c-format - msgid "No module defaults found: %s" - msgstr "" -@@ -326,26 +434,26 @@ msgstr "" - msgid "Not enough free space in %1$s: needed %2$s, available %3$s" - msgstr "" - --#: libdnf/dnf-transaction.cpp:1196 -+#: libdnf/dnf-transaction.cpp:1195 - msgid "failed to set root" - msgstr "" - --#: libdnf/dnf-transaction.cpp:1418 -+#: libdnf/dnf-transaction.cpp:1416 - #, c-format - msgid "Error %i running transaction test" - msgstr "" - --#: libdnf/dnf-transaction.cpp:1458 -+#: libdnf/dnf-transaction.cpp:1456 - #, c-format - msgid "Error %i running transaction" - msgstr "" - --#: libdnf/dnf-transaction.cpp:1473 -+#: libdnf/dnf-transaction.cpp:1472 - #, c-format - msgid "Transaction did not go to writing phase, but returned no error(%i)" - msgstr "" - --#: libdnf/dnf-utils.cpp:111 libdnf/hy-iutil.cpp:399 -+#: libdnf/dnf-utils.cpp:111 libdnf/hy-iutil.cpp:403 - #, c-format - msgid "cannot open directory %1$s: %2$s" - msgstr "" -@@ -355,272 +463,281 @@ msgstr "" - msgid "failed to remove %s" - msgstr "" - --#: libdnf/goal/Goal.cpp:55 -+#: libdnf/goal/Goal.cpp:74 - msgid "Ill-formed Selector, presence of multiple match objects in the filter" - msgstr "" - --#: libdnf/goal/Goal.cpp:56 -+#: libdnf/goal/Goal.cpp:75 - msgid "Ill-formed Selector used for the operation, incorrect comparison type" - msgstr "" - --#: libdnf/goal/Goal.cpp:67 libdnf/goal/Goal.cpp:94 -+#: libdnf/goal/Goal.cpp:86 libdnf/goal/Goal.cpp:113 - msgid " does not belong to a distupgrade repository" - msgstr "" - --#: libdnf/goal/Goal.cpp:68 libdnf/goal/Goal.cpp:95 -+#: libdnf/goal/Goal.cpp:87 libdnf/goal/Goal.cpp:114 - msgid " has inferior architecture" - msgstr "" - --#: libdnf/goal/Goal.cpp:69 -+#: libdnf/goal/Goal.cpp:88 - msgid "problem with installed package " - msgstr "" - --#: libdnf/goal/Goal.cpp:70 libdnf/goal/Goal.cpp:97 -+#: libdnf/goal/Goal.cpp:89 libdnf/goal/Goal.cpp:116 - msgid "conflicting requests" - msgstr "" - --#: libdnf/goal/Goal.cpp:71 libdnf/goal/Goal.cpp:98 -+#: libdnf/goal/Goal.cpp:90 libdnf/goal/Goal.cpp:117 - msgid "unsupported request" - msgstr "" - --#: libdnf/goal/Goal.cpp:72 libdnf/goal/Goal.cpp:99 -+#: libdnf/goal/Goal.cpp:91 libdnf/goal/Goal.cpp:118 - msgid "nothing provides requested " - msgstr "" - --#: libdnf/goal/Goal.cpp:73 -+#: libdnf/goal/Goal.cpp:92 - #, c-format - msgid "package %s does not exist" - msgstr "" - --#: libdnf/goal/Goal.cpp:74 libdnf/goal/Goal.cpp:101 -+#: libdnf/goal/Goal.cpp:93 libdnf/goal/Goal.cpp:120 - msgid " is provided by the system" - msgstr "" - --#: libdnf/goal/Goal.cpp:75 libdnf/goal/Goal.cpp:102 -+#: libdnf/goal/Goal.cpp:94 libdnf/goal/Goal.cpp:121 - msgid "some dependency problem" - msgstr "" - --#: libdnf/goal/Goal.cpp:76 -+#: libdnf/goal/Goal.cpp:95 - msgid "cannot install the best update candidate for package " - msgstr "" - --#: libdnf/goal/Goal.cpp:77 libdnf/goal/Goal.cpp:104 -+#: libdnf/goal/Goal.cpp:96 libdnf/goal/Goal.cpp:123 - msgid "cannot install the best candidate for the job" - msgstr "" - --#: libdnf/goal/Goal.cpp:78 -+#: libdnf/goal/Goal.cpp:97 - #, c-format - msgid "package %s is filtered out by modular filtering" - msgstr "" - --#: libdnf/goal/Goal.cpp:79 -+#: libdnf/goal/Goal.cpp:98 - #, c-format - msgid "package %s does not have a compatible architecture" - msgstr "" - --#: libdnf/goal/Goal.cpp:80 -+#: libdnf/goal/Goal.cpp:99 - #, c-format - msgid "package %s is not installable" - msgstr "" - --#: libdnf/goal/Goal.cpp:81 -+#: libdnf/goal/Goal.cpp:100 - #, c-format - msgid "package %s is filtered out by exclude filtering" - msgstr "" - --#: libdnf/goal/Goal.cpp:82 -+#: libdnf/goal/Goal.cpp:101 - #, c-format - msgid "nothing provides %s needed by %s" - msgstr "" - --#: libdnf/goal/Goal.cpp:83 -+#: libdnf/goal/Goal.cpp:102 - #, c-format - msgid "cannot install both %s and %s" - msgstr "" - --#: libdnf/goal/Goal.cpp:84 -+#: libdnf/goal/Goal.cpp:103 - #, c-format - msgid "package %s conflicts with %s provided by %s" - msgstr "" - --#: libdnf/goal/Goal.cpp:85 -+#: libdnf/goal/Goal.cpp:104 - #, c-format - msgid "package %s obsoletes %s provided by %s" - msgstr "" - --#: libdnf/goal/Goal.cpp:86 -+#: libdnf/goal/Goal.cpp:105 - #, c-format - msgid "installed package %s obsoletes %s provided by %s" - msgstr "" - --#: libdnf/goal/Goal.cpp:87 -+#: libdnf/goal/Goal.cpp:106 - #, c-format - msgid "package %s implicitly obsoletes %s provided by %s" - msgstr "" - --#: libdnf/goal/Goal.cpp:88 -+#: libdnf/goal/Goal.cpp:107 - #, c-format - msgid "package %s requires %s, but none of the providers can be installed" - msgstr "" - --#: libdnf/goal/Goal.cpp:89 -+#: libdnf/goal/Goal.cpp:108 - #, c-format - msgid "package %s conflicts with %s provided by itself" - msgstr "" - --#: libdnf/goal/Goal.cpp:90 -+#: libdnf/goal/Goal.cpp:109 - #, c-format - msgid "both package %s and %s obsolete %s" - msgstr "" - --#: libdnf/goal/Goal.cpp:96 -+#: libdnf/goal/Goal.cpp:115 - msgid "problem with installed module " - msgstr "" - --#: libdnf/goal/Goal.cpp:100 -+#: libdnf/goal/Goal.cpp:119 - #, c-format - msgid "module %s does not exist" - msgstr "" - --#: libdnf/goal/Goal.cpp:103 -+#: libdnf/goal/Goal.cpp:122 - msgid "cannot install the best update candidate for module " - msgstr "" - --#: libdnf/goal/Goal.cpp:105 libdnf/goal/Goal.cpp:108 -+#: libdnf/goal/Goal.cpp:124 libdnf/goal/Goal.cpp:127 - #, c-format - msgid "module %s is disabled" - msgstr "" - --#: libdnf/goal/Goal.cpp:106 -+#: libdnf/goal/Goal.cpp:125 - #, c-format - msgid "module %s does not have a compatible architecture" - msgstr "" - --#: libdnf/goal/Goal.cpp:107 -+#: libdnf/goal/Goal.cpp:126 - #, c-format - msgid "module %s is not installable" - msgstr "" - --#: libdnf/goal/Goal.cpp:109 -+#: libdnf/goal/Goal.cpp:128 - #, c-format - msgid "nothing provides %s needed by module %s" - msgstr "" - --#: libdnf/goal/Goal.cpp:110 -+#: libdnf/goal/Goal.cpp:129 - #, c-format - msgid "cannot install both modules %s and %s" - msgstr "" - --#: libdnf/goal/Goal.cpp:111 -+#: libdnf/goal/Goal.cpp:130 - #, c-format - msgid "module %s conflicts with %s provided by %s" - msgstr "" - --#: libdnf/goal/Goal.cpp:112 -+#: libdnf/goal/Goal.cpp:131 - #, c-format - msgid "module %s obsoletes %s provided by %s" - msgstr "" - --#: libdnf/goal/Goal.cpp:113 -+#: libdnf/goal/Goal.cpp:132 - #, c-format - msgid "installed module %s obsoletes %s provided by %s" - msgstr "" - --#: libdnf/goal/Goal.cpp:114 -+#: libdnf/goal/Goal.cpp:133 - #, c-format - msgid "module %s implicitly obsoletes %s provided by %s" - msgstr "" - --#: libdnf/goal/Goal.cpp:115 -+#: libdnf/goal/Goal.cpp:134 - #, c-format - msgid "module %s requires %s, but none of the providers can be installed" - msgstr "" - --#: libdnf/goal/Goal.cpp:116 -+#: libdnf/goal/Goal.cpp:135 - #, c-format - msgid "module %s conflicts with %s provided by itself" - msgstr "" - --#: libdnf/goal/Goal.cpp:117 -+#: libdnf/goal/Goal.cpp:136 - #, c-format - msgid "both module %s and %s obsolete %s" - msgstr "" - --#: libdnf/goal/Goal.cpp:1038 -+#: libdnf/goal/Goal.cpp:1051 - msgid "no solver set" - msgstr "" - --#: libdnf/goal/Goal.cpp:1043 -+#: libdnf/goal/Goal.cpp:1056 - #, c-format - msgid "failed to make %s absolute" - msgstr "" - --#: libdnf/goal/Goal.cpp:1050 -+#: libdnf/goal/Goal.cpp:1063 - #, c-format - msgid "failed writing debugdata to %1$s: %2$s" - msgstr "" - --#: libdnf/goal/Goal.cpp:1062 -+#: libdnf/goal/Goal.cpp:1075 - msgid "no solv in the goal" - msgstr "" - --#: libdnf/goal/Goal.cpp:1064 -+#: libdnf/goal/Goal.cpp:1077 - msgid "no solution, cannot remove protected package" - msgstr "" - --#: libdnf/goal/Goal.cpp:1067 -+#: libdnf/goal/Goal.cpp:1080 - msgid "no solution possible" - msgstr "" - --#: libdnf/goal/Goal.cpp:1479 -+#: libdnf/goal/Goal.cpp:1206 -+msgid "Problem: " -+msgstr "" -+ -+#: libdnf/goal/Goal.cpp:1211 -+#, c-format -+msgid "Problem %d: " -+msgstr "" -+ -+#: libdnf/goal/Goal.cpp:1538 - msgid "" - "The operation would result in removing the following protected packages: " - msgstr "" - --#: libdnf/hy-iutil.cpp:322 -+#: libdnf/hy-iutil.cpp:326 - #, c-format - msgid "Failed renaming %1$s to %2$s: %3$s" - msgstr "" - --#: libdnf/hy-iutil.cpp:330 -+#: libdnf/hy-iutil.cpp:334 - #, c-format - msgid "Failed setting perms on %1$s: %2$s" - msgstr "" - --#: libdnf/hy-iutil.cpp:376 -+#: libdnf/hy-iutil.cpp:380 - #, c-format - msgid "cannot create directory %1$s: %2$s" - msgstr "" - --#: libdnf/hy-iutil.cpp:411 -+#: libdnf/hy-iutil.cpp:415 - #, c-format - msgid "cannot stat path %1$s: %2$s" - msgstr "" - --#: libdnf/module/ModulePackage.cpp:499 -+#: libdnf/module/ModulePackage.cpp:560 - #, c-format - msgid "Invalid format of Platform module: %s" - msgstr "" - --#: libdnf/module/ModulePackage.cpp:514 -+#: libdnf/module/ModulePackage.cpp:575 - msgid "Multiple module platforms provided by available packages\n" - msgstr "" - --#: libdnf/module/ModulePackage.cpp:527 -+#: libdnf/module/ModulePackage.cpp:588 - msgid "Multiple module platforms provided by installed packages\n" - msgstr "" - --#: libdnf/module/ModulePackage.cpp:554 -+#: libdnf/module/ModulePackage.cpp:615 - #, c-format - msgid "Detection of Platform Module in %s failed: %s" - msgstr "" - --#: libdnf/module/ModulePackage.cpp:563 -+#: libdnf/module/ModulePackage.cpp:624 - #, c-format - msgid "Missing PLATFORM_ID in %s" - msgstr "" - --#: libdnf/module/ModulePackage.cpp:568 -+#: libdnf/module/ModulePackage.cpp:629 - msgid "No valid Platform ID detected" - msgstr "" - -@@ -629,36 +746,67 @@ msgstr "" - msgid "Cannot enable multiple streams for module '%s'" - msgstr "" - --#: libdnf/module/ModulePackageContainer.cpp:294 -+#: libdnf/module/ModulePackageContainer.cpp:295 - #, c-format - msgid "Conflicting defaults with repo '%s': %s" - msgstr "" - --#: libdnf/module/ModulePackageContainer.cpp:1569 -+#: libdnf/module/ModulePackageContainer.cpp:841 -+msgid "Installing module profiles:\n" -+msgstr "" -+ -+#: libdnf/module/ModulePackageContainer.cpp:856 -+msgid "Disabling module profiles:\n" -+msgstr "" -+ -+#: libdnf/module/ModulePackageContainer.cpp:871 -+msgid "Enabling module streams:\n" -+msgstr "" -+ -+#: libdnf/module/ModulePackageContainer.cpp:885 -+msgid "Switching module streams:\n" -+msgstr "" -+ -+#: libdnf/module/ModulePackageContainer.cpp:903 -+msgid "Disabling modules:\n" -+msgstr "" -+ -+#: libdnf/module/ModulePackageContainer.cpp:914 -+msgid "Resetting modules:\n" -+msgstr "" -+ -+#: libdnf/module/ModulePackageContainer.cpp:1638 - #, c-format - msgid "Unable to load modular Fail-Safe data at '%s'" - msgstr "" - --#: libdnf/module/ModulePackageContainer.cpp:1575 -+#: libdnf/module/ModulePackageContainer.cpp:1644 - #, c-format - msgid "Unable to load modular Fail-Safe data for module '%s:%s'" - msgstr "" - --#: libdnf/module/ModulePackageContainer.cpp:1639 -+#: libdnf/module/ModulePackageContainer.cpp:1702 - #, c-format - msgid "Unable to create directory \"%s\" for modular Fail Safe data: %s" - msgstr "" - --#: libdnf/module/ModulePackageContainer.cpp:1661 -+#: libdnf/module/ModulePackageContainer.cpp:1718 - #, c-format - msgid "Unable to save a modular Fail Safe data to '%s'" - msgstr "" - --#: libdnf/module/ModulePackageContainer.cpp:1686 -+#: libdnf/module/ModulePackageContainer.cpp:1741 - #, c-format - msgid "Unable to remove a modular Fail Safe data in '%s'" - msgstr "" - -+#: libdnf/module/ModulePackageContainer.cpp:1773 -+#, c-format -+msgid "" -+"Unable to apply modular obsoletes to '%s:%s' because target module '%s' is " -+"disabled" -+msgstr "" -+ - #: libdnf/module/modulemd/ModuleMetadata.cpp:86 - #, c-format - msgid "Failed to update from string: %s" -@@ -684,6 +832,11 @@ msgstr "" - msgid "Failed to upgrade streams: %s" - msgstr "" - -+#: libdnf/module/modulemd/ModuleMetadata.cpp:212 -+#, c-format -+msgid "Cannot retrieve module obsoletes because no stream matching %s: %s" -+msgstr "" -+ - #: libdnf/plugin/plugin.cpp:46 - #, c-format - msgid "Can't load shared library \"%s\": %s" -@@ -736,146 +889,161 @@ msgstr "" - msgid "Repository '%s' has unsupported type: 'type=%s', skipping." - msgstr "" - --#: libdnf/repo/Repo.cpp:546 -+#: libdnf/repo/Repo.cpp:489 libdnf/repo/Repo.cpp:610 libdnf/repo/Repo.cpp:641 -+#: libdnf/repo/Repo.cpp:1382 - #, c-format --msgid "Cannot find a valid baseurl for repo: %s" -+msgid "repo '%s': 'basecachedir' is not set" - msgstr "" - --#: libdnf/repo/Repo.cpp:583 libdnf/repo/Repo.cpp:1672 -+#: libdnf/repo/Repo.cpp:512 - msgid "" - "Maximum download speed is lower than minimum. Please change configuration of " - "minrate or throttle" - msgstr "" - --#: libdnf/repo/Repo.cpp:633 libdnf/repo/Repo.cpp:655 -+#: libdnf/repo/Repo.cpp:546 -+#, c-format -+msgid "repo '%s': 'proxy_username' is set but not 'proxy_password'" -+msgstr "" -+ -+#: libdnf/repo/Repo.cpp:548 -+msgid "'proxy_username' is set but not 'proxy_password'" -+msgstr "" -+ -+#: libdnf/repo/Repo.cpp:629 -+#, c-format -+msgid "Cannot find a valid baseurl for repo: %s" -+msgstr "" -+ -+#: libdnf/repo/Repo.cpp:660 libdnf/repo/Repo.cpp:682 - #, c-format - msgid "%s: gpgme_data_new_from_fd(): %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:641 libdnf/repo/Repo.cpp:663 -+#: libdnf/repo/Repo.cpp:668 libdnf/repo/Repo.cpp:690 - #, c-format - msgid "%s: gpgme_op_import(): %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:686 libdnf/repo/Repo.cpp:752 libdnf/repo/Repo.cpp:880 -+#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:779 libdnf/repo/Repo.cpp:907 - #, c-format - msgid "%s: gpgme_ctx_set_engine_info(): %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:777 -+#: libdnf/repo/Repo.cpp:740 libdnf/repo/Repo.cpp:804 - #, c-format - msgid "can not list keys: %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:806 -+#: libdnf/repo/Repo.cpp:833 - #, c-format - msgid "Failed to retrieve GPG key for repo '%s': %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:859 -+#: libdnf/repo/Repo.cpp:886 - #, c-format - msgid "repo %s: 0x%s already imported" - msgstr "" - --#: libdnf/repo/Repo.cpp:887 -+#: libdnf/repo/Repo.cpp:914 - #, c-format - msgid "repo %s: imported key 0x%s." - msgstr "" - --#: libdnf/repo/Repo.cpp:1131 -+#: libdnf/repo/Repo.cpp:1162 - #, c-format - msgid "reviving: repo '%s' skipped, no metalink." - msgstr "" - --#: libdnf/repo/Repo.cpp:1150 -+#: libdnf/repo/Repo.cpp:1181 - #, c-format - msgid "reviving: repo '%s' skipped, no usable hash." - msgstr "" - --#: libdnf/repo/Repo.cpp:1173 -+#: libdnf/repo/Repo.cpp:1204 - #, c-format - msgid "reviving: failed for '%s', mismatched %s sum." - msgstr "" - --#: libdnf/repo/Repo.cpp:1179 -+#: libdnf/repo/Repo.cpp:1210 - #, c-format - msgid "reviving: '%s' can be revived - metalink checksums match." - msgstr "" - --#: libdnf/repo/Repo.cpp:1204 -+#: libdnf/repo/Repo.cpp:1235 - #, c-format - msgid "reviving: '%s' can be revived - repomd matches." - msgstr "" - --#: libdnf/repo/Repo.cpp:1206 -+#: libdnf/repo/Repo.cpp:1237 - #, c-format - msgid "reviving: failed for '%s', mismatched repomd." - msgstr "" - --#: libdnf/repo/Repo.cpp:1224 -+#: libdnf/repo/Repo.cpp:1255 - #, c-format - msgid "Cannot create repo destination directory \"%s\": %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1230 -+#: libdnf/repo/Repo.cpp:1261 - #, c-format - msgid "Cannot create repo temporary directory \"%s\": %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1244 -+#: libdnf/repo/Repo.cpp:1275 - #, c-format - msgid "Cannot create directory \"%s\": %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1267 -+#: libdnf/repo/Repo.cpp:1298 - #, c-format - msgid "Cannot rename directory \"%s\" to \"%s\": %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1290 -+#: libdnf/repo/Repo.cpp:1321 - #, c-format - msgid "repo: using cache for: %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1302 -+#: libdnf/repo/Repo.cpp:1333 - #, c-format - msgid "Cache-only enabled but no cache for '%s'" - msgstr "" - --#: libdnf/repo/Repo.cpp:1306 -+#: libdnf/repo/Repo.cpp:1337 - #, c-format - msgid "repo: downloading from remote: %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1312 -+#: libdnf/repo/Repo.cpp:1344 - #, c-format - msgid "Failed to download metadata for repo '%s': %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1338 -+#: libdnf/repo/Repo.cpp:1370 - msgid "getCachedir(): Computation of SHA256 failed" - msgstr "" - --#: libdnf/repo/Repo.cpp:1363 -+#: libdnf/repo/Repo.cpp:1398 - #, c-format - msgid "Cannot create persistdir \"%s\": %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1763 -+#: libdnf/repo/Repo.cpp:1775 - msgid "resume cannot be used simultaneously with the byterangestart param" - msgstr "" - --#: libdnf/repo/Repo.cpp:1780 -+#: libdnf/repo/Repo.cpp:1792 - #, c-format - msgid "PackageTarget initialization failed: %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1886 -+#: libdnf/repo/Repo.cpp:1898 - #, c-format - msgid "Cannot open %s: %s" - msgstr "" - --#: libdnf/repo/Repo.cpp:1930 -+#: libdnf/repo/Repo.cpp:1942 - #, c-format - msgid "Log handler with id %ld doesn't exist" - msgstr "" -@@ -884,13 +1052,13 @@ msgstr "" - msgid "In progress" - msgstr "" - --#: libdnf/transaction/Swdb.cpp:188 libdnf/transaction/Swdb.cpp:216 --#: libdnf/transaction/Swdb.cpp:228 libdnf/transaction/Swdb.cpp:245 --#: libdnf/transaction/Swdb.cpp:384 libdnf/transaction/Swdb.cpp:394 -+#: libdnf/transaction/Swdb.cpp:187 libdnf/transaction/Swdb.cpp:215 -+#: libdnf/transaction/Swdb.cpp:227 libdnf/transaction/Swdb.cpp:244 -+#: libdnf/transaction/Swdb.cpp:383 libdnf/transaction/Swdb.cpp:393 - msgid "Not in progress" - msgstr "" - --#: libdnf/transaction/Swdb.cpp:255 -+#: libdnf/transaction/Swdb.cpp:254 - msgid "No transaction in progress" - msgstr "" - -diff --git a/po/zh_CN.po b/po/zh_CN.po -index 9583b07..bdd2694 100644 ---- a/po/zh_CN.po -+++ b/po/zh_CN.po -@@ -1,19 +1,21 @@ --# Charles Lee , 2017. #zanata, 2020. --# Ludek Janda , 2018. #zanata -+# Charles Lee , 2017. #zanata, 2020, 2021. -+# Ludek Janda , 2018. #zanata, 2021. -+# Sundeep Anand , 2021, 2022. - msgid "" - msgstr "" - "Project-Id-Version: PACKAGE VERSION\n" - "Report-Msgid-Bugs-To: \n" --"POT-Creation-Date: 2020-10-05 09:18-0400\n" --"PO-Revision-Date: 2020-07-09 13:27+0000\n" --"Last-Translator: Charles Lee \n" --"Language-Team: Chinese (Simplified) \n" -+"POT-Creation-Date: 2022-02-28 11:03+0100\n" -+"PO-Revision-Date: 2022-03-02 10:16+0000\n" -+"Last-Translator: Sundeep Anand \n" -+"Language-Team: Chinese (Simplified) \n" - "Language: zh_CN\n" - "MIME-Version: 1.0\n" - "Content-Type: text/plain; charset=UTF-8\n" - "Content-Transfer-Encoding: 8bit\n" - "Plural-Forms: nplurals=1; plural=0;\n" --"X-Generator: Weblate 4.1.1\n" -+"X-Generator: Weblate 4.11\n" - - #: libdnf/conf/ConfigMain.cpp:62 libdnf/conf/OptionSeconds.cpp:40 - msgid "no value specified" -@@ -32,37 +34,46 @@ msgstr "无法把 '%s' 转换为字节" - #: libdnf/conf/ConfigMain.cpp:83 libdnf/conf/OptionSeconds.cpp:66 - #, c-format - msgid "unknown unit '%s'" --msgstr "未知单元 “%s”" -+msgstr "未知单元 '%s'" - --#: libdnf/conf/ConfigMain.cpp:332 -+#: libdnf/conf/ConfigMain.cpp:204 libdnf/conf/OptionEnum.cpp:83 -+#: libdnf/conf/OptionNumber.cpp:88 -+msgid "invalid value" -+msgstr "无效值" -+ -+#: libdnf/conf/ConfigMain.cpp:207 -+msgid "value 1 is not allowed" -+msgstr "1 不是一个被允许的值" -+ -+#: libdnf/conf/ConfigMain.cpp:209 -+msgid "negative value is not allowed" -+msgstr "负数值不被允许" -+ -+#: libdnf/conf/ConfigMain.cpp:341 - #, c-format - msgid "percentage '%s' is out of range" - msgstr "百分数 '%s' 超出范围" - --#: libdnf/conf/OptionBinds.cpp:76 -+#: libdnf/conf/OptionBinds.cpp:85 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" does not exist" --msgstr "配置:ID 为 \"%s\" 的 OptionBinding 不存在" -+msgstr "配置:ID 为 \"%s\" 的 OptionBinding 不存在" - --#: libdnf/conf/OptionBinds.cpp:88 -+#: libdnf/conf/OptionBinds.cpp:97 - #, c-format - msgid "Configuration: OptionBinding with id \"%s\" already exists" --msgstr "配置:ID 为 \"%s\" 的 OptionBinding 已存在" -+msgstr "配置:ID 为 \"%s\" 的 OptionBinding 已存在" - - #: libdnf/conf/OptionBool.cpp:47 - #, c-format - msgid "invalid boolean value '%s'" --msgstr "无效的布尔值“%s”" -+msgstr "无效的布尔值 '%s'" - - #: libdnf/conf/OptionEnum.cpp:72 libdnf/conf/OptionEnum.cpp:158 --#: libdnf/conf/OptionString.cpp:59 libdnf/conf/OptionStringList.cpp:59 -+#: libdnf/conf/OptionString.cpp:64 libdnf/conf/OptionStringList.cpp:59 - #, c-format - msgid "'%s' is not an allowed value" --msgstr "'%s' 不是一个允许的值" -- --#: libdnf/conf/OptionEnum.cpp:83 libdnf/conf/OptionNumber.cpp:88 --msgid "invalid value" --msgstr "无效值" -+msgstr "'%s' 不是一个允许的值" - - #: libdnf/conf/OptionNumber.cpp:73 - #, c-format -@@ -89,26 +100,128 @@ msgstr "给定的路径 “%s” 不存在。" - msgid "could not convert '%s' to seconds" - msgstr "无法把 '%s' 转换为秒" - --#: libdnf/conf/OptionString.cpp:74 -+#: libdnf/conf/OptionString.cpp:79 - msgid "GetValue(): Value not set" - msgstr "GetValue(): 值没有设置" - --#: libdnf/dnf-goal.cpp:68 -+#: libdnf/dnf-context.cpp:3170 libdnf/dnf-context.cpp:3179 -+#, c-format -+msgid "Cannot enable more streams from module '%s' at the same time" -+msgstr "无法同时从模块 '%s' 中启用更多流" -+ -+#: libdnf/dnf-context.cpp:3188 libdnf/dnf-context.cpp:3206 -+#, c-format -+msgid "" -+"Cannot enable module '%1$s' stream '%2$s': State of module already modified" -+msgstr "无法启用模块 '%1$s' 流 '%2$s':已经修改的模块状态" -+ -+#: libdnf/dnf-context.cpp:3253 -+#, c-format -+msgid "Modular dependency problem with Defaults: %s" -+msgstr "默认设置的模块依赖性问题:%s" -+ -+#: libdnf/dnf-context.cpp:3256 -+#, c-format -+msgid "Modular dependency problem: %s" -+msgstr "模块依赖问题:%s" -+ -+#: libdnf/dnf-context.cpp:3290 libdnf/dnf-context.cpp:3314 -+#: libdnf/dnf-context.cpp:3325 libdnf/dnf-context.cpp:3364 -+#: libdnf/dnf-context.cpp:3380 libdnf/dnf-context.cpp:3412 -+#: libdnf/dnf-context.cpp:3456 libdnf/dnf-context.cpp:3466 -+#, c-format -+msgid "Unable to resolve argument '%s'" -+msgstr "无法解析参数 '%s'" -+ -+#: libdnf/dnf-context.cpp:3297 -+#, c-format -+msgid "" -+"Only module name is required. Ignoring unneeded information in argument: '%s'" -+msgstr "只需要模块名。忽略参数 '%s' 中的无用信息" -+ -+#: libdnf/dnf-context.cpp:3311 -+#, c-format -+msgid "Cannot reset module '%s': State of module already modified" -+msgstr "无法重置模块 '%s':已修改的模块状态" -+ -+#: libdnf/dnf-context.cpp:3322 -+#, c-format -+msgid "Cannot disable module '%s': State of module already modified" -+msgstr "无法禁用模块 '%s':已经修改的模块状态" -+ -+#: libdnf/dnf-context.cpp:3353 libdnf/dnf-context.cpp:3445 -+#: libdnf/dnf-context.cpp:3558 -+msgid "No modular data available" -+msgstr "没有可用的模块数据" -+ -+#: libdnf/dnf-context.cpp:3370 -+#, c-format -+msgid "Ignoring unneeded information in argument: '%s'" -+msgstr "忽略参数:\"%s\" 中不需要的信息" -+ -+#: libdnf/dnf-context.cpp:3408 -+#, c-format -+msgid "" -+"Problem during enablement of dependency tree for module '%1$s' stream " -+"'%2$s': %3$s" -+msgstr "为模块 '%1$s' 流 '%2$s' 启用依赖树时出现问题: %3$s" -+ -+#: libdnf/dnf-context.cpp:3420 -+msgid "Problems appeared for module enable request" -+msgstr "模块启用请求时出现问题" -+ -+#. this really should never happen; unless the modular repodata is corrupted -+#: libdnf/dnf-context.cpp:3495 -+#, c-format -+msgid "Failed to parse module artifact NEVRA '%s'" -+msgstr "无法解析模块工件 NEVRA '%s'" -+ -+#: libdnf/dnf-context.cpp:3529 -+msgid "Problems appeared for module install request" -+msgstr "模块安装请求出现问题" -+ -+#: libdnf/dnf-context.cpp:3589 -+msgid "Problems appeared for module reset request" -+msgstr "模块重置请求时出现问题" -+ -+#: libdnf/dnf-context.cpp:3591 -+msgid "Problems appeared for module disable request" -+msgstr "模块禁用请求时出现问题" -+ -+#: libdnf/dnf-context.cpp:3627 -+#, c-format -+msgid "" -+"The operation would result in switching of module '%s' stream '%s' to stream " -+"'%s'" -+msgstr "这个操作会把模块 '%s' 从流 '%s' 切换到流 '%s'" -+ -+#: libdnf/dnf-context.cpp:3631 -+msgid "" -+"It is not possible to switch enabled streams of a module.\n" -+"It is recommended to remove all installed content from the module, and reset " -+"the module using 'microdnf module reset ' command. After you " -+"reset the module, you can install the other stream." -+msgstr "" -+"无法切换一个模块已启用的流。 \n" -+"推荐从模块中删除所有已安装的内容,使用 'microdnf module reset ' " -+"命令重置模块。在重置模块后就可以安装其他流。" -+ -+#: libdnf/dnf-goal.cpp:85 - msgid "Could not depsolve transaction; " --msgstr "无法 depsolve 事务: " -+msgstr "无法 depsolve 事务; " - --#: libdnf/dnf-goal.cpp:70 -+#: libdnf/dnf-goal.cpp:87 - #, c-format - msgid "%i problem detected:\n" - msgid_plural "%i problems detected:\n" - msgstr[0] "发现 %i 问题:\n" - --#: libdnf/dnf-goal.cpp:78 -+#: libdnf/dnf-goal.cpp:95 - #, c-format - msgid " Problem %1$i: %2$s\n" - msgstr " 问题 %1$i: %2$s\n" - --#: libdnf/dnf-goal.cpp:80 -+#: libdnf/dnf-goal.cpp:97 - #, c-format - msgid " Problem: %s\n" - msgstr " 问题: %s\n" -@@ -118,7 +231,7 @@ msgstr " 问题: %s\n" - msgid "" - "No available modular metadata for modular package '%s'; cannot be installed " - "on the system" --msgstr "" -+msgstr "模块软件包 '%s' 没有可用的模块元数据,它将不能被安装至此系统上" - - #: libdnf/dnf-rpmts.cpp:121 libdnf/dnf-rpmts.cpp:166 - #, c-format -@@ -173,87 +286,87 @@ msgstr "无法找到软件包 %s" - msgid "could not add erase element %1$s(%2$i)" - msgstr "无法添加删除元素 %1$s(%2$i)" - --#: libdnf/dnf-sack.cpp:381 --#, c-format --msgid "no %1$s string for %2$s" --msgstr "" -- --#: libdnf/dnf-sack.cpp:404 -+#: libdnf/dnf-sack.cpp:395 - msgid "failed to add solv" - msgstr "添加 solv 失败" - --#: libdnf/dnf-sack.cpp:422 -+#: libdnf/dnf-sack.cpp:414 -+#, c-format -+msgid "no %1$s string for %2$s" -+msgstr "没有为 %2$s 的 %1$s 字符串" -+ -+#: libdnf/dnf-sack.cpp:424 - #, c-format - msgid "failed to open: %s" - msgstr "打开失败:%s" - --#: libdnf/dnf-sack.cpp:501 -+#: libdnf/dnf-sack.cpp:503 - #, c-format - msgid "cannot create temporary file: %s" - msgstr "不能创建临时文件: %s" - --#: libdnf/dnf-sack.cpp:511 -+#: libdnf/dnf-sack.cpp:513 - #, c-format - msgid "failed opening tmp file: %s" - msgstr "打开 tmp 文件失败: %s" - --#: libdnf/dnf-sack.cpp:523 -+#: libdnf/dnf-sack.cpp:525 - #, c-format - msgid "write_main() failed writing data: %i" - msgstr "write_main() 写数据失败: %i" - --#: libdnf/dnf-sack.cpp:540 -+#: libdnf/dnf-sack.cpp:542 - msgid "write_main() failed to re-load written solv file" - msgstr "write_main() 重新加载写的 solv 文件失败" - --#: libdnf/dnf-sack.cpp:605 -+#: libdnf/dnf-sack.cpp:607 - #, c-format - msgid "can not create temporary file %s" - msgstr "不能创建临时文件 %s" - --#: libdnf/dnf-sack.cpp:623 -+#: libdnf/dnf-sack.cpp:625 - #, c-format - msgid "write_ext(%1$d) has failed: %2$d" - msgstr "write_ext(%1$d) 已失败: %2$d" - --#: libdnf/dnf-sack.cpp:678 -+#: libdnf/dnf-sack.cpp:680 - msgid "null repo md file" - msgstr "null repo md 文件" - --#: libdnf/dnf-sack.cpp:687 -+#: libdnf/dnf-sack.cpp:689 - #, c-format - msgid "can not read file %1$s: %2$s" - msgstr "不能读文件 %1$s: %2$s" - --#: libdnf/dnf-sack.cpp:701 -+#: libdnf/dnf-sack.cpp:703 - msgid "repo_add_solv() has failed." - msgstr "repo_add_solv() 已失败。" - --#: libdnf/dnf-sack.cpp:714 -+#: libdnf/dnf-sack.cpp:716 - msgid "loading of MD_TYPE_PRIMARY has failed." --msgstr "" -+msgstr "加载 MD_TYPE_PRIMARY 失败。" - --#: libdnf/dnf-sack.cpp:727 -+#: libdnf/dnf-sack.cpp:729 - msgid "repo_add_repomdxml/rpmmd() has failed." - msgstr "repo_add_repomdxml/rpmmd() 已失败。" - --#: libdnf/dnf-sack.cpp:794 -+#: libdnf/dnf-sack.cpp:796 - msgid "failed to auto-detect architecture" - msgstr "自动检测架构失败" - --#: libdnf/dnf-sack.cpp:919 -+#: libdnf/dnf-sack.cpp:961 - #, c-format - msgid "failed creating cachedir %s" - msgstr "无法创建 cachedir %s" - --#: libdnf/dnf-sack.cpp:1696 -+#: libdnf/dnf-sack.cpp:1738 - msgid "failed loading RPMDB" - msgstr "无法加载 RPMDB" - --#: libdnf/dnf-sack.cpp:2403 -+#: libdnf/dnf-sack.cpp:2463 - #, c-format - msgid "No module defaults found: %s" --msgstr "" -+msgstr "没有找到模块默认设置:%s" - - #: libdnf/dnf-state.cpp:1184 - #, c-format -@@ -291,7 +404,7 @@ msgstr "无法确保 %1$s,因为 repo %2$s 没有找到 (%3$i repos 已加载) - - #: libdnf/dnf-transaction.cpp:367 - msgid "Failed to check untrusted: " --msgstr "检查不被信任失败: " -+msgstr "检查不被信任失败 : " - - #: libdnf/dnf-transaction.cpp:377 - #, c-format -@@ -310,7 +423,7 @@ msgstr "无法为 CacheDir 获得值" - #: libdnf/dnf-transaction.cpp:911 - #, c-format - msgid "Failed to get filesystem free size for %s: " --msgstr "无法为 %s 获得文件系统可用空间的大小: " -+msgstr "无法为 %s 获得文件系统可用空间的大小: " - - #: libdnf/dnf-transaction.cpp:919 - #, c-format -@@ -322,26 +435,26 @@ msgstr "无法为 %s 获得文件系统可用空间的大小" - msgid "Not enough free space in %1$s: needed %2$s, available %3$s" - msgstr "%1$s 没有足够的空闲空间: 需要 %2$s,可用 %3$s" - --#: libdnf/dnf-transaction.cpp:1196 -+#: libdnf/dnf-transaction.cpp:1195 - msgid "failed to set root" - msgstr "设置 root 失败" - --#: libdnf/dnf-transaction.cpp:1418 -+#: libdnf/dnf-transaction.cpp:1416 - #, c-format - msgid "Error %i running transaction test" --msgstr "错误 %i 运行事务测试" -+msgstr "运行事务测试时错误 %i" - --#: libdnf/dnf-transaction.cpp:1458 -+#: libdnf/dnf-transaction.cpp:1456 - #, c-format - msgid "Error %i running transaction" --msgstr "错误 %i 运行事务" -+msgstr "运行事务时错误 %i" - --#: libdnf/dnf-transaction.cpp:1473 -+#: libdnf/dnf-transaction.cpp:1472 - #, c-format - msgid "Transaction did not go to writing phase, but returned no error(%i)" - msgstr "事务没有进入写阶段,但没有返回错误(%i)" - --#: libdnf/dnf-utils.cpp:111 libdnf/hy-iutil.cpp:399 -+#: libdnf/dnf-utils.cpp:111 libdnf/hy-iutil.cpp:403 - #, c-format - msgid "cannot open directory %1$s: %2$s" - msgstr "无法打开目录 %1$s: %2$s" -@@ -351,369 +464,414 @@ msgstr "无法打开目录 %1$s: %2$s" - msgid "failed to remove %s" - msgstr "无法删除 %s" - --#: libdnf/goal/Goal.cpp:55 -+#: libdnf/goal/Goal.cpp:74 - msgid "Ill-formed Selector, presence of multiple match objects in the filter" - msgstr "Ill-formed Selector,在过滤器中有多个匹配的对象" - --#: libdnf/goal/Goal.cpp:56 -+#: libdnf/goal/Goal.cpp:75 - msgid "Ill-formed Selector used for the operation, incorrect comparison type" - msgstr "这个操作使用了 Ill-formed Selector,不正确的比较类型" - --#: libdnf/goal/Goal.cpp:67 libdnf/goal/Goal.cpp:94 -+#: libdnf/goal/Goal.cpp:86 libdnf/goal/Goal.cpp:113 - msgid " does not belong to a distupgrade repository" --msgstr "" -+msgstr " 不属于 distupgrade 仓库" - --#: libdnf/goal/Goal.cpp:68 libdnf/goal/Goal.cpp:95 -+#: libdnf/goal/Goal.cpp:87 libdnf/goal/Goal.cpp:114 - msgid " has inferior architecture" --msgstr "" -+msgstr " 有 inferior 架构" - --#: libdnf/goal/Goal.cpp:69 -+#: libdnf/goal/Goal.cpp:88 - msgid "problem with installed package " --msgstr "" -+msgstr "安装的软件包的问题 " - --#: libdnf/goal/Goal.cpp:70 libdnf/goal/Goal.cpp:97 -+#: libdnf/goal/Goal.cpp:89 libdnf/goal/Goal.cpp:116 - msgid "conflicting requests" --msgstr "" -+msgstr "冲突的请求" - --#: libdnf/goal/Goal.cpp:71 libdnf/goal/Goal.cpp:98 -+#: libdnf/goal/Goal.cpp:90 libdnf/goal/Goal.cpp:117 - msgid "unsupported request" --msgstr "" -+msgstr "不支持的请求" - --#: libdnf/goal/Goal.cpp:72 libdnf/goal/Goal.cpp:99 -+#: libdnf/goal/Goal.cpp:91 libdnf/goal/Goal.cpp:118 - msgid "nothing provides requested " --msgstr "" -+msgstr "没有东西可以提供所请求的 " - --#: libdnf/goal/Goal.cpp:73 -+#: libdnf/goal/Goal.cpp:92 - #, c-format - msgid "package %s does not exist" --msgstr "" -+msgstr "软件包 %s 不存在" - --#: libdnf/goal/Goal.cpp:74 libdnf/goal/Goal.cpp:101 -+#: libdnf/goal/Goal.cpp:93 libdnf/goal/Goal.cpp:120 - msgid " is provided by the system" --msgstr "" -+msgstr " 由系统提供" - --#: libdnf/goal/Goal.cpp:75 libdnf/goal/Goal.cpp:102 -+#: libdnf/goal/Goal.cpp:94 libdnf/goal/Goal.cpp:121 - msgid "some dependency problem" --msgstr "" -+msgstr "一些依赖问题" - --#: libdnf/goal/Goal.cpp:76 -+#: libdnf/goal/Goal.cpp:95 - msgid "cannot install the best update candidate for package " --msgstr "" -+msgstr "无法为软件包安装最佳更新候选 " - --#: libdnf/goal/Goal.cpp:77 libdnf/goal/Goal.cpp:104 -+#: libdnf/goal/Goal.cpp:96 libdnf/goal/Goal.cpp:123 - msgid "cannot install the best candidate for the job" --msgstr "" -+msgstr "无法为该任务安装最佳候选" - --#: libdnf/goal/Goal.cpp:78 -+#: libdnf/goal/Goal.cpp:97 - #, c-format - msgid "package %s is filtered out by modular filtering" --msgstr "" -+msgstr "软件包 %s 被模块过滤过滤掉" - --#: libdnf/goal/Goal.cpp:79 -+#: libdnf/goal/Goal.cpp:98 - #, c-format - msgid "package %s does not have a compatible architecture" --msgstr "" -+msgstr "软件包 %s 没有兼容的架构" - --#: libdnf/goal/Goal.cpp:80 -+#: libdnf/goal/Goal.cpp:99 - #, c-format - msgid "package %s is not installable" --msgstr "" -+msgstr "软件包 %s 不可安装" - --#: libdnf/goal/Goal.cpp:81 -+#: libdnf/goal/Goal.cpp:100 - #, c-format - msgid "package %s is filtered out by exclude filtering" --msgstr "" -+msgstr "软件包 %s 被排除过滤过滤掉" - --#: libdnf/goal/Goal.cpp:82 -+#: libdnf/goal/Goal.cpp:101 - #, c-format - msgid "nothing provides %s needed by %s" --msgstr "" -+msgstr "没有东西可提供 %s(%s 需要)" - --#: libdnf/goal/Goal.cpp:83 -+#: libdnf/goal/Goal.cpp:102 - #, c-format - msgid "cannot install both %s and %s" --msgstr "" -+msgstr "无法同时安装 %s 和 %s" - --#: libdnf/goal/Goal.cpp:84 -+#: libdnf/goal/Goal.cpp:103 - #, c-format - msgid "package %s conflicts with %s provided by %s" --msgstr "" -+msgstr "软件包 %s 与 %s(由 %s 提供)冲突" - --#: libdnf/goal/Goal.cpp:85 -+#: libdnf/goal/Goal.cpp:104 - #, c-format - msgid "package %s obsoletes %s provided by %s" --msgstr "" -+msgstr "软件包 %s 取代了 %s(由 %s 提供)" - --#: libdnf/goal/Goal.cpp:86 -+#: libdnf/goal/Goal.cpp:105 - #, c-format - msgid "installed package %s obsoletes %s provided by %s" --msgstr "" -+msgstr "已安装的软件包 %s 取代了 %s(由 %s 提供)" - --#: libdnf/goal/Goal.cpp:87 -+#: libdnf/goal/Goal.cpp:106 - #, c-format - msgid "package %s implicitly obsoletes %s provided by %s" --msgstr "" -+msgstr "软件包 %s 隐式地取代了 %s(由 %s 提供)" - --#: libdnf/goal/Goal.cpp:88 -+#: libdnf/goal/Goal.cpp:107 - #, c-format - msgid "package %s requires %s, but none of the providers can be installed" --msgstr "" -+msgstr "软件包 %s 需要 %s,但没有提供者可以被安装" - --#: libdnf/goal/Goal.cpp:89 -+#: libdnf/goal/Goal.cpp:108 - #, c-format - msgid "package %s conflicts with %s provided by itself" --msgstr "" -+msgstr "软件包 %s 与自己提供的 %s 冲突" - --#: libdnf/goal/Goal.cpp:90 -+#: libdnf/goal/Goal.cpp:109 - #, c-format - msgid "both package %s and %s obsolete %s" --msgstr "" -+msgstr "软件包 %s 和 %s 同时取代了 %s" - --#: libdnf/goal/Goal.cpp:96 -+#: libdnf/goal/Goal.cpp:115 - msgid "problem with installed module " --msgstr "" -+msgstr "已安装模块的问题 " - --#: libdnf/goal/Goal.cpp:100 -+#: libdnf/goal/Goal.cpp:119 - #, c-format - msgid "module %s does not exist" --msgstr "" -+msgstr "模块 %s 不存在" - --#: libdnf/goal/Goal.cpp:103 -+#: libdnf/goal/Goal.cpp:122 - msgid "cannot install the best update candidate for module " --msgstr "" -+msgstr "无法为模块安装最佳更新候选 " - --#: libdnf/goal/Goal.cpp:105 libdnf/goal/Goal.cpp:108 -+#: libdnf/goal/Goal.cpp:124 libdnf/goal/Goal.cpp:127 - #, c-format - msgid "module %s is disabled" --msgstr "" -+msgstr "模块 %s 被禁用" - --#: libdnf/goal/Goal.cpp:106 -+#: libdnf/goal/Goal.cpp:125 - #, c-format - msgid "module %s does not have a compatible architecture" --msgstr "" -+msgstr "模块 %s 没有兼容的架构" - --#: libdnf/goal/Goal.cpp:107 -+#: libdnf/goal/Goal.cpp:126 - #, c-format - msgid "module %s is not installable" --msgstr "" -+msgstr "模块 %s 不可安装" - --#: libdnf/goal/Goal.cpp:109 -+#: libdnf/goal/Goal.cpp:128 - #, c-format - msgid "nothing provides %s needed by module %s" --msgstr "" -+msgstr "没有东西提供 %s(模块 %s 需要它)" - --#: libdnf/goal/Goal.cpp:110 -+#: libdnf/goal/Goal.cpp:129 - #, c-format - msgid "cannot install both modules %s and %s" --msgstr "" -+msgstr "无法同时安装模块 %s 和 %s" - --#: libdnf/goal/Goal.cpp:111 -+#: libdnf/goal/Goal.cpp:130 - #, c-format - msgid "module %s conflicts with %s provided by %s" --msgstr "" -+msgstr "模块 %s 与 %s (由 %s 提供)冲突" - --#: libdnf/goal/Goal.cpp:112 -+#: libdnf/goal/Goal.cpp:131 - #, c-format - msgid "module %s obsoletes %s provided by %s" --msgstr "" -+msgstr "模块 %s 取代了 %s(由 %s 提供)" - --#: libdnf/goal/Goal.cpp:113 -+#: libdnf/goal/Goal.cpp:132 - #, c-format - msgid "installed module %s obsoletes %s provided by %s" --msgstr "" -+msgstr "已安装的模块 %s 取代了 %s(由 %s 提供)" - --#: libdnf/goal/Goal.cpp:114 -+#: libdnf/goal/Goal.cpp:133 - #, c-format - msgid "module %s implicitly obsoletes %s provided by %s" --msgstr "" -+msgstr "模块 %s 隐式地取代了 %s(由 %s 提供)" - --#: libdnf/goal/Goal.cpp:115 -+#: libdnf/goal/Goal.cpp:134 - #, c-format - msgid "module %s requires %s, but none of the providers can be installed" --msgstr "" -+msgstr "模块 %s 需要 %s,但没有提供者可以被安装" - --#: libdnf/goal/Goal.cpp:116 -+#: libdnf/goal/Goal.cpp:135 - #, c-format - msgid "module %s conflicts with %s provided by itself" --msgstr "" -+msgstr "模块 %s 与自己提供的 %s 冲突" - --#: libdnf/goal/Goal.cpp:117 -+#: libdnf/goal/Goal.cpp:136 - #, c-format - msgid "both module %s and %s obsolete %s" --msgstr "" -+msgstr "模块 %s 和 %s 同时取代了 %s" - --#: libdnf/goal/Goal.cpp:1038 -+#: libdnf/goal/Goal.cpp:1051 - msgid "no solver set" - msgstr "无 solver 设置" - --#: libdnf/goal/Goal.cpp:1043 -+#: libdnf/goal/Goal.cpp:1056 - #, c-format - msgid "failed to make %s absolute" - msgstr "无法使 %s 绝对" - --#: libdnf/goal/Goal.cpp:1050 -+#: libdnf/goal/Goal.cpp:1063 - #, c-format - msgid "failed writing debugdata to %1$s: %2$s" - msgstr "把 debugdata 写入到 %1$s 失败: %2$s" - --#: libdnf/goal/Goal.cpp:1062 -+#: libdnf/goal/Goal.cpp:1075 - msgid "no solv in the goal" - msgstr "在目标中没有 solv" - --#: libdnf/goal/Goal.cpp:1064 -+#: libdnf/goal/Goal.cpp:1077 - msgid "no solution, cannot remove protected package" - msgstr "没有解决方案,不能删除保护的软件包" - --#: libdnf/goal/Goal.cpp:1067 -+#: libdnf/goal/Goal.cpp:1080 - msgid "no solution possible" - msgstr "没有可能的解决方案" - --#: libdnf/goal/Goal.cpp:1479 -+#: libdnf/goal/Goal.cpp:1206 -+msgid "Problem: " -+msgstr "问题: " -+ -+#: libdnf/goal/Goal.cpp:1211 -+#, c-format -+msgid "Problem %d: " -+msgstr "问题 %d: " -+ -+#: libdnf/goal/Goal.cpp:1538 - msgid "" - "The operation would result in removing the following protected packages: " --msgstr "这个操作可能会导致删除以下受保护的软件包: " -+msgstr "这个操作将会导致删除以下受保护的软件包: " - --#: libdnf/hy-iutil.cpp:322 -+#: libdnf/hy-iutil.cpp:326 - #, c-format - msgid "Failed renaming %1$s to %2$s: %3$s" - msgstr "将 %1$s 重命名为 %2$s 失败: %3$s" - --#: libdnf/hy-iutil.cpp:330 -+#: libdnf/hy-iutil.cpp:334 - #, c-format - msgid "Failed setting perms on %1$s: %2$s" - msgstr "在 %1$s 中设置 perms 失败: %2$s" - --#: libdnf/hy-iutil.cpp:376 -+#: libdnf/hy-iutil.cpp:380 - #, c-format - msgid "cannot create directory %1$s: %2$s" --msgstr "" -+msgstr "无法创建目录 %1$s: %2$s" - --#: libdnf/hy-iutil.cpp:411 -+#: libdnf/hy-iutil.cpp:415 - #, c-format - msgid "cannot stat path %1$s: %2$s" --msgstr "" -+msgstr "无法 stat 路径 %1$s: %2$s" - --#: libdnf/module/ModulePackage.cpp:499 -+#: libdnf/module/ModulePackage.cpp:560 - #, c-format - msgid "Invalid format of Platform module: %s" --msgstr "" -+msgstr "Platform 模块格式无效 : %s" - --#: libdnf/module/ModulePackage.cpp:514 -+#: libdnf/module/ModulePackage.cpp:575 - msgid "Multiple module platforms provided by available packages\n" --msgstr "" -+msgstr "可用软件包提供了多个模块平台\n" - --#: libdnf/module/ModulePackage.cpp:527 -+#: libdnf/module/ModulePackage.cpp:588 - msgid "Multiple module platforms provided by installed packages\n" --msgstr "" -+msgstr "已安装的软件包提供了多个模块平台\n" - --#: libdnf/module/ModulePackage.cpp:554 -+#: libdnf/module/ModulePackage.cpp:615 - #, c-format - msgid "Detection of Platform Module in %s failed: %s" --msgstr "" -+msgstr "检测 %s 中的 Platform 模块失败: %s" - --#: libdnf/module/ModulePackage.cpp:563 -+#: libdnf/module/ModulePackage.cpp:624 - #, c-format - msgid "Missing PLATFORM_ID in %s" --msgstr "" -+msgstr "在 %s 中缺少 PLATFORM_ID" - --#: libdnf/module/ModulePackage.cpp:568 -+#: libdnf/module/ModulePackage.cpp:629 - msgid "No valid Platform ID detected" --msgstr "" -+msgstr "没有检测到有效的 Platform ID" - - #: libdnf/module/ModulePackageContainer.cpp:68 - #, c-format - msgid "Cannot enable multiple streams for module '%s'" --msgstr "" -+msgstr "无法为模块 '%s' 启用多个流" - --#: libdnf/module/ModulePackageContainer.cpp:294 -+#: libdnf/module/ModulePackageContainer.cpp:295 - #, c-format - msgid "Conflicting defaults with repo '%s': %s" --msgstr "" -+msgstr "默认设置与 repo '%s' 冲突 : %s" -+ -+#: libdnf/module/ModulePackageContainer.cpp:841 -+msgid "Installing module profiles:\n" -+msgstr "安装模块配置档案:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:856 -+msgid "Disabling module profiles:\n" -+msgstr "禁用模块配置档案:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:871 -+msgid "Enabling module streams:\n" -+msgstr "启用模块流:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:885 -+msgid "Switching module streams:\n" -+msgstr "切换模块流:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:903 -+msgid "Disabling modules:\n" -+msgstr "禁用模块:\n" -+ -+#: libdnf/module/ModulePackageContainer.cpp:914 -+msgid "Resetting modules:\n" -+msgstr "重置模块:\n" - --#: libdnf/module/ModulePackageContainer.cpp:1569 -+#: libdnf/module/ModulePackageContainer.cpp:1638 - #, c-format - msgid "Unable to load modular Fail-Safe data at '%s'" --msgstr "" -+msgstr "无法加载位于 '%s' 的模块 Fail-Safe 数据" - --#: libdnf/module/ModulePackageContainer.cpp:1575 -+#: libdnf/module/ModulePackageContainer.cpp:1644 - #, c-format - msgid "Unable to load modular Fail-Safe data for module '%s:%s'" --msgstr "" -+msgstr "无法为模块 '%s:%s' 加载模块 Fail-Safe 数据" - --#: libdnf/module/ModulePackageContainer.cpp:1639 -+#: libdnf/module/ModulePackageContainer.cpp:1702 - #, c-format - msgid "Unable to create directory \"%s\" for modular Fail Safe data: %s" --msgstr "" -+msgstr "无法为模块 Fail Safe 数据创建目录 \"%s\" : %s" - --#: libdnf/module/ModulePackageContainer.cpp:1661 -+#: libdnf/module/ModulePackageContainer.cpp:1718 - #, c-format - msgid "Unable to save a modular Fail Safe data to '%s'" --msgstr "" -+msgstr "无法把模块 Fail Safe 数据保存到 '%s'" - --#: libdnf/module/ModulePackageContainer.cpp:1686 -+#: libdnf/module/ModulePackageContainer.cpp:1741 - #, c-format - msgid "Unable to remove a modular Fail Safe data in '%s'" --msgstr "" -+msgstr "无法删除 '%s' 处的模块 Fail Safe 数据" -+ -+#: libdnf/module/ModulePackageContainer.cpp:1773 -+#, c-format -+msgid "" -+"Unable to apply modular obsoletes to '%s:%s' because target module '%s' is " -+"disabled" -+msgstr "无法将模块化过时应用到 '%s:%s',因为目标模块 '%s' 被禁用" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:86 - #, c-format - msgid "Failed to update from string: %s" --msgstr "" -+msgstr "无法从字符串更新: %s" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:110 - #, c-format - msgid "Failed to resolve: %s" --msgstr "" -+msgstr "无法解析: %s" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:115 - #, c-format - msgid "There were errors while resolving modular defaults: %s" --msgstr "" -+msgstr "在解析模块默认值时出现了错误:%s" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:120 - #, c-format - msgid "Failed to upgrade defaults: %s" --msgstr "" -+msgstr "无法升级默认值: %s" - - #: libdnf/module/modulemd/ModuleMetadata.cpp:123 - #, c-format - msgid "Failed to upgrade streams: %s" --msgstr "" -+msgstr "升级流失败: %s" -+ -+#: libdnf/module/modulemd/ModuleMetadata.cpp:212 -+#, c-format -+msgid "Cannot retrieve module obsoletes because no stream matching %s: %s" -+msgstr "无法获取模块过时,因为没有流匹配 %s:%s" - - #: libdnf/plugin/plugin.cpp:46 - #, c-format - msgid "Can't load shared library \"%s\": %s" --msgstr "" -+msgstr "无法加载共享库 \"%s\": %s" - - #: libdnf/plugin/plugin.cpp:61 libdnf/plugin/plugin.cpp:67 - #: libdnf/plugin/plugin.cpp:73 libdnf/plugin/plugin.cpp:79 - #, c-format - msgid "Can't obtain address of symbol \"%s\": %s" --msgstr "" -+msgstr "无法获取符号 \"%s\" 的地址: %s" - - #: libdnf/plugin/plugin.cpp:86 - #, c-format - msgid "Loading plugin file=\"%s\"" --msgstr "" -+msgstr "正在加载插件文件=\"%s\"" - - #: libdnf/plugin/plugin.cpp:89 - #, c-format - msgid "Loaded plugin name=\"%s\", version=\"%s\"" --msgstr "" -+msgstr "已加载插件名=\"%s\", 版本=\"%s\"" - - #: libdnf/plugin/plugin.cpp:96 - msgid "Plugins::loadPlugins() dirPath cannot be empty" --msgstr "" -+msgstr "Plugins::loadPlugins() dirPath 不能为空" - - #: libdnf/plugin/plugin.cpp:105 - #, c-format - msgid "Can't read plugin directory \"%s\": %s" --msgstr "" -+msgstr "无法读取插件目录 \"%s\": %s" - - #: libdnf/plugin/plugin.cpp:114 - #, c-format - msgid "Can't load plugin \"%s\": %s" --msgstr "" -+msgstr "无法加载插件 \"%s\": %s" - - #: libdnf/repo/DependencySplitter.cpp:50 - msgid "" -@@ -721,6 +879,8 @@ msgid "" - "deprecated and the support will be dropped in future versions. Use '=' " - "operator instead." - msgstr "" -+"在 reldeps 中使用 '==' 操作符可能导致一个未定义的行为。这个操作符已被废弃,并" -+"且在未来的版本中会取消对它的支持。请使用 '=' 操作符代替。" - - #: libdnf/repo/Repo.cpp:321 - #, c-format -@@ -732,146 +892,161 @@ msgstr "软件仓库 %s 没有设置镜像或者 baseurl。" - msgid "Repository '%s' has unsupported type: 'type=%s', skipping." - msgstr "仓库 '%s' 有不被支持的类型: 'type=%s', 忽略。" - --#: libdnf/repo/Repo.cpp:546 -+#: libdnf/repo/Repo.cpp:489 libdnf/repo/Repo.cpp:610 libdnf/repo/Repo.cpp:641 -+#: libdnf/repo/Repo.cpp:1382 - #, c-format --msgid "Cannot find a valid baseurl for repo: %s" --msgstr "无法为仓库 %s 找到一个有效的 baseurl" -+msgid "repo '%s': 'basecachedir' is not set" -+msgstr "Repo '%s': 'basecachedir' 没有设置" - --#: libdnf/repo/Repo.cpp:583 libdnf/repo/Repo.cpp:1672 -+#: libdnf/repo/Repo.cpp:512 - msgid "" --"Maximum download speed is lower than minimum. Please change configuration of" --" minrate or throttle" -+"Maximum download speed is lower than minimum. Please change configuration of " -+"minrate or throttle" - msgstr "最大下载速度低于最小值。请修改 minrate 或 throttle 的配置" - --#: libdnf/repo/Repo.cpp:633 libdnf/repo/Repo.cpp:655 -+#: libdnf/repo/Repo.cpp:546 -+#, c-format -+msgid "repo '%s': 'proxy_username' is set but not 'proxy_password'" -+msgstr "Repo '%s': 'proxy_username' 已被设置,但没有设置 'proxy_password'" -+ -+#: libdnf/repo/Repo.cpp:548 -+msgid "'proxy_username' is set but not 'proxy_password'" -+msgstr "'proxy_username' 已被设置,但没有设置 'proxy_password'" -+ -+#: libdnf/repo/Repo.cpp:629 -+#, c-format -+msgid "Cannot find a valid baseurl for repo: %s" -+msgstr "无法为仓库 %s 找到一个有效的 baseurl" -+ -+#: libdnf/repo/Repo.cpp:660 libdnf/repo/Repo.cpp:682 - #, c-format - msgid "%s: gpgme_data_new_from_fd(): %s" - msgstr "%s: gpgme_data_new_from_fd(): %s" - --#: libdnf/repo/Repo.cpp:641 libdnf/repo/Repo.cpp:663 -+#: libdnf/repo/Repo.cpp:668 libdnf/repo/Repo.cpp:690 - #, c-format - msgid "%s: gpgme_op_import(): %s" - msgstr "%s: gpgme_op_import(): %s" - --#: libdnf/repo/Repo.cpp:686 libdnf/repo/Repo.cpp:752 libdnf/repo/Repo.cpp:880 -+#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:779 libdnf/repo/Repo.cpp:907 - #, c-format - msgid "%s: gpgme_ctx_set_engine_info(): %s" - msgstr "%s: gpgme_ctx_set_engine_info(): %s" - --#: libdnf/repo/Repo.cpp:713 libdnf/repo/Repo.cpp:777 -+#: libdnf/repo/Repo.cpp:740 libdnf/repo/Repo.cpp:804 - #, c-format - msgid "can not list keys: %s" - msgstr "不能列出 key: %s" - --#: libdnf/repo/Repo.cpp:806 -+#: libdnf/repo/Repo.cpp:833 - #, c-format - msgid "Failed to retrieve GPG key for repo '%s': %s" --msgstr "" -+msgstr "为仓库 '%s' 获取 GPG 密钥失败 : %s" - --#: libdnf/repo/Repo.cpp:859 -+#: libdnf/repo/Repo.cpp:886 - #, c-format - msgid "repo %s: 0x%s already imported" - msgstr "repo %s: 0x%s 已被导入" - --#: libdnf/repo/Repo.cpp:887 -+#: libdnf/repo/Repo.cpp:914 - #, c-format - msgid "repo %s: imported key 0x%s." - msgstr "repo %s: 已导入密钥 0x%s。" - --#: libdnf/repo/Repo.cpp:1131 -+#: libdnf/repo/Repo.cpp:1162 - #, c-format - msgid "reviving: repo '%s' skipped, no metalink." - msgstr "恢复中: 仓库 '%s' 已被跳过,无 metalink。" - --#: libdnf/repo/Repo.cpp:1150 -+#: libdnf/repo/Repo.cpp:1181 - #, c-format - msgid "reviving: repo '%s' skipped, no usable hash." - msgstr "恢复中: 仓库 '%s' 已被跳过,无可用 hash。" - --#: libdnf/repo/Repo.cpp:1173 -+#: libdnf/repo/Repo.cpp:1204 - #, c-format - msgid "reviving: failed for '%s', mismatched %s sum." - msgstr "恢复: '%s' 失败,不匹配的 %s sum。" - --#: libdnf/repo/Repo.cpp:1179 -+#: libdnf/repo/Repo.cpp:1210 - #, c-format - msgid "reviving: '%s' can be revived - metalink checksums match." - msgstr "恢复中: '%s' 可以被恢复 - metalink 校验和匹配。" - --#: libdnf/repo/Repo.cpp:1204 -+#: libdnf/repo/Repo.cpp:1235 - #, c-format - msgid "reviving: '%s' can be revived - repomd matches." - msgstr "恢复: '%s' 可用被恢复 - repomd 匹配。" - --#: libdnf/repo/Repo.cpp:1206 -+#: libdnf/repo/Repo.cpp:1237 - #, c-format - msgid "reviving: failed for '%s', mismatched repomd." - msgstr "恢复: '%s' 失败,不匹配的 repomd。" - --#: libdnf/repo/Repo.cpp:1224 -+#: libdnf/repo/Repo.cpp:1255 - #, c-format - msgid "Cannot create repo destination directory \"%s\": %s" --msgstr "" -+msgstr "无法创建仓库目标目录 \"%s\": %s" - --#: libdnf/repo/Repo.cpp:1230 -+#: libdnf/repo/Repo.cpp:1261 - #, c-format - msgid "Cannot create repo temporary directory \"%s\": %s" - msgstr "无法创建 repo 临时目录 \"%s\": %s" - --#: libdnf/repo/Repo.cpp:1244 -+#: libdnf/repo/Repo.cpp:1275 - #, c-format - msgid "Cannot create directory \"%s\": %s" - msgstr "无法创建目录 \"%s\": %s" - --#: libdnf/repo/Repo.cpp:1267 -+#: libdnf/repo/Repo.cpp:1298 - #, c-format - msgid "Cannot rename directory \"%s\" to \"%s\": %s" - msgstr "无法把目录 \"%s\" 重命名为 \"%s\": %s" - --#: libdnf/repo/Repo.cpp:1290 -+#: libdnf/repo/Repo.cpp:1321 - #, c-format - msgid "repo: using cache for: %s" - msgstr "仓库: 正在为 %s 使用缓存" - --#: libdnf/repo/Repo.cpp:1302 -+#: libdnf/repo/Repo.cpp:1333 - #, c-format - msgid "Cache-only enabled but no cache for '%s'" - msgstr "仅使用缓存已开启但没有 '%s' 的缓存" - --#: libdnf/repo/Repo.cpp:1306 -+#: libdnf/repo/Repo.cpp:1337 - #, c-format - msgid "repo: downloading from remote: %s" - msgstr "repo: 从远程下载: %s" - --#: libdnf/repo/Repo.cpp:1312 -+#: libdnf/repo/Repo.cpp:1344 - #, c-format - msgid "Failed to download metadata for repo '%s': %s" --msgstr "" -+msgstr "为仓库 '%s' 下载元数据失败 : %s" - --#: libdnf/repo/Repo.cpp:1338 -+#: libdnf/repo/Repo.cpp:1370 - msgid "getCachedir(): Computation of SHA256 failed" - msgstr "getCachedir(): 计算 SHA256 失败" - --#: libdnf/repo/Repo.cpp:1363 -+#: libdnf/repo/Repo.cpp:1398 - #, c-format - msgid "Cannot create persistdir \"%s\": %s" --msgstr "" -+msgstr "无法创建 persistdir \"%s\": %s" - --#: libdnf/repo/Repo.cpp:1763 -+#: libdnf/repo/Repo.cpp:1775 - msgid "resume cannot be used simultaneously with the byterangestart param" - msgstr "resume 不能和 the byterangestart 参数同时使用" - --#: libdnf/repo/Repo.cpp:1780 -+#: libdnf/repo/Repo.cpp:1792 - #, c-format - msgid "PackageTarget initialization failed: %s" - msgstr "PackageTarget 初始失败: %s" - --#: libdnf/repo/Repo.cpp:1886 -+#: libdnf/repo/Repo.cpp:1898 - #, c-format - msgid "Cannot open %s: %s" - msgstr "无法打开 %s: %s" - --#: libdnf/repo/Repo.cpp:1930 -+#: libdnf/repo/Repo.cpp:1942 - #, c-format - msgid "Log handler with id %ld doesn't exist" - msgstr "id 为 %ld 的日志处理器不存在" -@@ -880,13 +1055,13 @@ msgstr "id 为 %ld 的日志处理器不存在" - msgid "In progress" - msgstr "进行中" - --#: libdnf/transaction/Swdb.cpp:188 libdnf/transaction/Swdb.cpp:216 --#: libdnf/transaction/Swdb.cpp:228 libdnf/transaction/Swdb.cpp:245 --#: libdnf/transaction/Swdb.cpp:384 libdnf/transaction/Swdb.cpp:394 -+#: libdnf/transaction/Swdb.cpp:187 libdnf/transaction/Swdb.cpp:215 -+#: libdnf/transaction/Swdb.cpp:227 libdnf/transaction/Swdb.cpp:244 -+#: libdnf/transaction/Swdb.cpp:383 libdnf/transaction/Swdb.cpp:393 - msgid "Not in progress" - msgstr "没有在进行中" - --#: libdnf/transaction/Swdb.cpp:255 -+#: libdnf/transaction/Swdb.cpp:254 - msgid "No transaction in progress" - msgstr "没有事务在进行中" - -@@ -900,7 +1075,7 @@ msgstr "试图在已完成的事务中更新事务" - - #: libdnf/transaction/Transformer.cpp:76 - msgid "Database Corrupted: no row 'version' in table 'config'" --msgstr "" -+msgstr "数据库损坏:表 'config' 中没有 'version' 行" - - #: libdnf/transaction/Transformer.cpp:681 - msgid "Transformer: can't open history persist dir" -@@ -925,6 +1100,3 @@ msgstr "无法向未保存的事务中添加控制台输出" - - #~ msgid "Bad id for repo: %s, byte = %s %d" - #~ msgstr "repo 的 id 无效: %s, byte = %s %d" -- --#~ msgid "failed calculating RPMDB checksum" --#~ msgstr "无法计算 RPMDB checksum" --- -2.35.1 - diff --git a/SOURCES/0026-context-Substitute-all-repository-config-options-RhB.patch b/SOURCES/0026-context-Substitute-all-repository-config-options-RhB.patch new file mode 100644 index 0000000..340d2c5 --- /dev/null +++ b/SOURCES/0026-context-Substitute-all-repository-config-options-RhB.patch @@ -0,0 +1,107 @@ +From 7d8f9cfcdf7725fef2c99ecb2dedcdff1e9506d7 Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel +Date: Wed, 13 Apr 2022 12:26:10 +0200 +Subject: [PATCH 26/34] context: Substitute all repository config options + (RhBug:2076853) + +It also solves the problem: Substitution of variables in `baseurl` +does not work in microdnf and PackageKit unless `metalink` or `mirrorlist` +is set at the same time. +--- + libdnf/dnf-repo.cpp | 34 +++++++++++++++++++++++++--------- + 1 file changed, 25 insertions(+), 9 deletions(-) + +diff --git a/libdnf/dnf-repo.cpp b/libdnf/dnf-repo.cpp +index 710045fb..9d42e3e3 100644 +--- a/libdnf/dnf-repo.cpp ++++ b/libdnf/dnf-repo.cpp +@@ -83,6 +83,7 @@ typedef struct + LrHandle *repo_handle; + LrResult *repo_result; + LrUrlVars *urlvars; ++ bool unit_test_mode; /* ugly hack for unit tests */ + } DnfRepoPrivate; + + G_DEFINE_TYPE_WITH_PRIVATE(DnfRepo, dnf_repo, G_TYPE_OBJECT) +@@ -847,8 +848,11 @@ dnf_repo_conf_reset(libdnf::ConfigRepo &config) + + /* Loads repository configuration from GKeyFile */ + static void +-dnf_repo_conf_from_gkeyfile(libdnf::ConfigRepo &config, const char *repoId, GKeyFile *gkeyFile) ++dnf_repo_conf_from_gkeyfile(DnfRepo *repo, const char *repoId, GKeyFile *gkeyFile) + { ++ DnfRepoPrivate *priv = GET_PRIVATE(repo); ++ auto & config = *priv->repo->getConfig(); ++ + // Reset to the initial state before reloading the configuration. + dnf_repo_conf_reset(config); + +@@ -883,20 +887,31 @@ dnf_repo_conf_from_gkeyfile(libdnf::ConfigRepo &config, const char *repoId, GKey + // list can be ['value1', 'value2, value3'] therefore we first join + // to have 'value1, value2, value3' + g_autofree gchar * tmp_strval = g_strjoinv(",", list); ++ ++ // Substitute vars. ++ g_autofree gchar *subst_value = dnf_repo_substitute(repo, tmp_strval); ++ ++ if (strcmp(key, "baseurl") == 0 && strstr(tmp_strval, "file://$testdatadir") != NULL) { ++ priv->unit_test_mode = true; ++ } ++ + try { +- optionItem.newString(libdnf::Option::Priority::REPOCONFIG, tmp_strval); ++ optionItem.newString(libdnf::Option::Priority::REPOCONFIG, subst_value); + } catch (const std::exception & ex) { +- g_debug("Invalid configuration value: %s = %s in %s; %s", key, value.c_str(), repoId, ex.what()); ++ g_debug("Invalid configuration value: %s = %s in %s; %s", key, subst_value, repoId, ex.what()); + } + } + + } else { +- + // process other (non list) options ++ ++ // Substitute vars. ++ g_autofree gchar *subst_value = dnf_repo_substitute(repo, value.c_str()); ++ + try { +- optionItem.newString(libdnf::Option::Priority::REPOCONFIG, value); ++ optionItem.newString(libdnf::Option::Priority::REPOCONFIG, subst_value); + } catch (const std::exception & ex) { +- g_debug("Invalid configuration value: %s = %s in %s; %s", key, value.c_str(), repoId, ex.what()); ++ g_debug("Invalid configuration value: %s = %s in %s; %s", key, subst_value, repoId, ex.what()); + } + + } +@@ -950,7 +965,7 @@ dnf_repo_set_keyfile_data(DnfRepo *repo, gboolean reloadFromGKeyFile, GError **e + + // Reload repository configuration from keyfile. + if (reloadFromGKeyFile) { +- dnf_repo_conf_from_gkeyfile(*conf, repoId, priv->keyfile); ++ dnf_repo_conf_from_gkeyfile(repo, repoId, priv->keyfile); + dnf_repo_apply_setopts(*conf, repoId); + } + +@@ -996,8 +1011,9 @@ dnf_repo_set_keyfile_data(DnfRepo *repo, gboolean reloadFromGKeyFile, GError **e + g_autofree gchar *url = NULL; + url = lr_prepend_url_protocol(baseurls[0]); + if (url != NULL && strncasecmp(url, "file://", 7) == 0) { +- if (g_strstr_len(url, -1, "$testdatadir") == NULL) ++ if (!priv->unit_test_mode) { + priv->kind = DNF_REPO_KIND_LOCAL; ++ } + g_free(priv->location); + g_free(priv->keyring); + priv->location = dnf_repo_substitute(repo, url + 7); +@@ -1224,7 +1240,7 @@ dnf_repo_setup(DnfRepo *repo, GError **error) try + auto repoId = priv->repo->getId().c_str(); + + auto conf = priv->repo->getConfig(); +- dnf_repo_conf_from_gkeyfile(*conf, repoId, priv->keyfile); ++ dnf_repo_conf_from_gkeyfile(repo, repoId, priv->keyfile); + dnf_repo_apply_setopts(*conf, repoId); + + auto sslverify = conf->sslverify().getValue(); +-- +2.31.1 + diff --git a/SOURCES/0027-Use-environment-variable-in-unittest-instead-of-ugly.patch b/SOURCES/0027-Use-environment-variable-in-unittest-instead-of-ugly.patch new file mode 100644 index 0000000..31fb712 --- /dev/null +++ b/SOURCES/0027-Use-environment-variable-in-unittest-instead-of-ugly.patch @@ -0,0 +1,50 @@ +From 074ca4cf643c79b8ec3db89a7fd5580ba387eb4d Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel +Date: Wed, 20 Apr 2022 08:22:30 +0200 +Subject: [PATCH 27/34] Use environment variable in unittest instead of ugly + hack in libdnf + +Libdnf contains hacks for unit tests. This removes one hack. +--- + libdnf/dnf-repo.cpp | 3 --- + tests/libdnf/dnf-self-test.c | 3 +++ + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/libdnf/dnf-repo.cpp b/libdnf/dnf-repo.cpp +index 9d42e3e3..c015d7fd 100644 +--- a/libdnf/dnf-repo.cpp ++++ b/libdnf/dnf-repo.cpp +@@ -1191,7 +1191,6 @@ dnf_repo_setup(DnfRepo *repo, GError **error) try + DnfRepoEnabled enabled = DNF_REPO_ENABLED_NONE; + g_autofree gchar *basearch = NULL; + g_autofree gchar *release = NULL; +- g_autofree gchar *testdatadir = NULL; + + basearch = g_key_file_get_string(priv->keyfile, "general", "arch", NULL); + if (basearch == NULL) +@@ -1230,8 +1229,6 @@ dnf_repo_setup(DnfRepo *repo, GError **error) try + for (const auto & item : libdnf::dnf_context_get_vars(priv->context)) + priv->urlvars = lr_urlvars_set(priv->urlvars, item.first.c_str(), item.second.c_str()); + +- testdatadir = dnf_realpath(TESTDATADIR); +- priv->urlvars = lr_urlvars_set(priv->urlvars, "testdatadir", testdatadir); + if (!lr_handle_setopt(priv->repo_handle, error, LRO_VARSUB, priv->urlvars)) + return FALSE; + if (!lr_handle_setopt(priv->repo_handle, error, LRO_GNUPGHOMEDIR, priv->keyring)) +diff --git a/tests/libdnf/dnf-self-test.c b/tests/libdnf/dnf-self-test.c +index 52958371..906f0e21 100644 +--- a/tests/libdnf/dnf-self-test.c ++++ b/tests/libdnf/dnf-self-test.c +@@ -1225,6 +1225,9 @@ main(int argc, char **argv) + g_log_set_fatal_mask(NULL, G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL); + g_log_set_always_fatal (G_LOG_FATAL_MASK); + ++ /* Sets a variable to replace in repository configurations. */ ++ g_setenv("DNF_VAR_testdatadir", TESTDATADIR, TRUE); ++ + /* tests go here */ + g_test_add_func("/libdnf/repo_loader{gpg-asc}", dnf_repo_loader_gpg_asc_func); + g_test_add_func("/libdnf/repo_loader{gpg-wrong-asc}", dnf_repo_loader_gpg_wrong_asc_func); +-- +2.31.1 + diff --git a/SOURCES/0028-Add-private-API-for-filling-reading-and-verifying-ne.patch b/SOURCES/0028-Add-private-API-for-filling-reading-and-verifying-ne.patch new file mode 100644 index 0000000..dfbfcbd --- /dev/null +++ b/SOURCES/0028-Add-private-API-for-filling-reading-and-verifying-ne.patch @@ -0,0 +1,169 @@ +From 983aeea57d75494fd4ea2ff2903f966136278c15 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Wed, 9 Feb 2022 13:17:00 +0100 +Subject: [PATCH 28/34] Add private API for filling, reading and verifying new + dnf solv userdata + +--- + libdnf/hy-iutil-private.hpp | 24 +++++++++ + libdnf/hy-iutil.cpp | 102 ++++++++++++++++++++++++++++++++++++ + 2 files changed, 126 insertions(+) + +diff --git a/libdnf/hy-iutil-private.hpp b/libdnf/hy-iutil-private.hpp +index e07b1b51..d498c032 100644 +--- a/libdnf/hy-iutil-private.hpp ++++ b/libdnf/hy-iutil-private.hpp +@@ -24,6 +24,30 @@ + #include "hy-iutil.h" + #include "hy-types.h" + #include "sack/packageset.hpp" ++#include ++#include ++ ++// Use 8 bytes for libsolv version (API: solv_toolversion) ++// to be future proof even though it currently is "1.2" ++static constexpr const size_t solv_userdata_solv_toolversion_size{8}; ++static constexpr const std::array solv_userdata_magic{'\0', 'd', 'n', 'f'}; ++static constexpr const std::array solv_userdata_dnf_version{'\0', '1', '.', '0'}; ++ ++static constexpr const int solv_userdata_size = solv_userdata_solv_toolversion_size + \ ++ solv_userdata_magic.size() + \ ++ solv_userdata_dnf_version.size() + \ ++ CHKSUM_BYTES; ++ ++struct SolvUserdata { ++ char dnf_magic[solv_userdata_magic.size()]; ++ char dnf_version[solv_userdata_dnf_version.size()]; ++ char libsolv_version[solv_userdata_solv_toolversion_size]; ++ unsigned char checksum[CHKSUM_BYTES]; ++}__attribute__((packed)); ; ++ ++int solv_userdata_fill(SolvUserdata *solv_userdata, const unsigned char *checksum, GError** error); ++std::unique_ptr solv_userdata_read(FILE *fp); ++int solv_userdata_verify(const SolvUserdata *solv_userdata, const unsigned char *checksum); + + /* crypto utils */ + int checksum_cmp(const unsigned char *cs1, const unsigned char *cs2); +diff --git a/libdnf/hy-iutil.cpp b/libdnf/hy-iutil.cpp +index 2af13197..f81ca52f 100644 +--- a/libdnf/hy-iutil.cpp ++++ b/libdnf/hy-iutil.cpp +@@ -43,6 +43,7 @@ extern "C" { + #include + #include + #include ++#include + #include + #include + } +@@ -182,6 +183,107 @@ int checksum_write(const unsigned char *cs, FILE *fp) + return 0; + } + ++static std::array ++get_padded_solv_toolversion() ++{ ++ std::array padded_solv_toolversion{}; ++ std::string solv_ver_str{solv_toolversion}; ++ std::copy(solv_ver_str.rbegin(), solv_ver_str.rend(), padded_solv_toolversion.rbegin()); ++ ++ return padded_solv_toolversion; ++} ++ ++int ++solv_userdata_fill(SolvUserdata *solv_userdata, const unsigned char *checksum, GError** error) ++{ ++ if (strlen(solv_toolversion) > solv_userdata_solv_toolversion_size) { ++ g_set_error(error, DNF_ERROR, DNF_ERROR_INTERNAL_ERROR, ++ _("Libsolv's solv_toolversion is: %zu long but we expect max of: %zu"), ++ strlen(solv_toolversion), solv_userdata_solv_toolversion_size); ++ return 1; ++ } ++ ++ // copy dnf solv file magic ++ memcpy(solv_userdata->dnf_magic, solv_userdata_magic.data(), solv_userdata_magic.size()); ++ ++ // copy dnf solv file version ++ memcpy(solv_userdata->dnf_version, solv_userdata_dnf_version.data(), solv_userdata_dnf_version.size()); ++ ++ // copy libsolv solv file version ++ memcpy(solv_userdata->libsolv_version, get_padded_solv_toolversion().data(), solv_userdata_solv_toolversion_size); ++ ++ // copy checksum ++ memcpy(solv_userdata->checksum, checksum, CHKSUM_BYTES); ++ ++ return 0; ++} ++ ++ ++std::unique_ptr ++solv_userdata_read(FILE *fp) ++{ ++ unsigned char *dnf_solvfile_userdata_read = NULL; ++ int dnf_solvfile_userdata_len_read; ++ if (!fp) { ++ return nullptr; ++ } ++ ++ int ret_code = solv_read_userdata(fp, &dnf_solvfile_userdata_read, &dnf_solvfile_userdata_len_read); ++ // The userdata layout has to match our struct exactly so we can just cast the memory ++ // allocated by libsolv ++ std::unique_ptr uniq_userdata(reinterpret_cast(dnf_solvfile_userdata_read)); ++ if(ret_code) { ++ g_warning("Failed to read solv userdata: solv_read_userdata returned: %i", ret_code); ++ return nullptr; ++ } ++ ++ if (dnf_solvfile_userdata_len_read != solv_userdata_size) { ++ g_warning("Solv userdata length mismatch, read: %i vs expected: %i", ++ dnf_solvfile_userdata_len_read, solv_userdata_size); ++ return nullptr; ++ } ++ ++ return uniq_userdata; ++} ++ ++gboolean ++solv_userdata_verify(const SolvUserdata *solv_userdata, const unsigned char *checksum) ++{ ++ // check dnf solvfile magic bytes ++ if (memcmp(solv_userdata->dnf_magic, solv_userdata_magic.data(), solv_userdata_magic.size()) != 0) { ++ // This is not dnf header do not read after it ++ g_warning("magic bytes don't match, read: %s vs. dnf solvfile magic: %s", ++ solv_userdata->dnf_magic, solv_userdata_magic.data()); ++ return FALSE; ++ } ++ ++ // check dnf solvfile version ++ if (memcmp(solv_userdata->dnf_version, solv_userdata_dnf_version.data(), solv_userdata_dnf_version.size()) != 0) { ++ // Mismatching dnf solvfile version -> we need to regenerate ++ g_warning("dnf solvfile version doesn't match, read: %s vs. dnf solvfile version: %s", ++ solv_userdata->dnf_version, solv_userdata_dnf_version.data()); ++ return FALSE; ++ } ++ ++ // check libsolv solvfile version ++ if (memcmp(solv_userdata->libsolv_version, get_padded_solv_toolversion().data(), solv_userdata_solv_toolversion_size) != 0) { ++ // Mismatching libsolv solvfile version -> we need to regenerate ++ g_warning("libsolv solvfile version doesn't match, read: %s vs. libsolv version: %s", ++ solv_userdata->libsolv_version, solv_toolversion); ++ return FALSE; ++ } ++ ++ // check solvfile checksum ++ if (checksum_cmp(solv_userdata->checksum, checksum)) { ++ // Mismatching solvfile checksum -> we need to regenerate ++ g_debug("solvfile checksum doesn't match, read: %s vs. repomd checksum: %s", ++ solv_userdata->checksum, checksum); ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ + int + checksum_type2length(int type) + { +-- +2.31.1 + diff --git a/SOURCES/0029-Use-dnf-solv-userdata-to-check-versions-and-checksum.patch b/SOURCES/0029-Use-dnf-solv-userdata-to-check-versions-and-checksum.patch new file mode 100644 index 0000000..fd7feff --- /dev/null +++ b/SOURCES/0029-Use-dnf-solv-userdata-to-check-versions-and-checksum.patch @@ -0,0 +1,417 @@ +From 465a6a59279bd7fa2680c626ca0f10c059276668 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Wed, 9 Feb 2022 13:18:41 +0100 +Subject: [PATCH 29/34] Use dnf solv userdata to check versions and checksum + (RhBug:2027445) + +Remove unused functions for checksums + += changelog = +msg: Write and check versions and checksums for solvfile cache by using new dnf solvfile userdata (RhBug:2027445) + It is not possible to use old cache files, therefore cache regeneration is triggered automatically. +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2027445 +--- + libdnf/dnf-sack.cpp | 254 ++++++++++++++++++++++-------------- + libdnf/hy-iutil-private.hpp | 2 - + libdnf/hy-iutil.cpp | 20 --- + 3 files changed, 156 insertions(+), 120 deletions(-) + +diff --git a/libdnf/dnf-sack.cpp b/libdnf/dnf-sack.cpp +index b9baeaef..61f4807c 100644 +--- a/libdnf/dnf-sack.cpp ++++ b/libdnf/dnf-sack.cpp +@@ -225,17 +225,39 @@ dnf_sack_new(void) + return DNF_SACK(g_object_new(DNF_TYPE_SACK, NULL)); + } + +-static int +-can_use_repomd_cache(FILE *fp_solv, unsigned char cs_repomd[CHKSUM_BYTES]) +-{ +- unsigned char cs_cache[CHKSUM_BYTES]; +- +- if (fp_solv && +- !checksum_read(cs_cache, fp_solv) && +- !checksum_cmp(cs_cache, cs_repomd)) +- return 1; ++// Try to load cached solv file into repo otherwise return FALSE ++static gboolean ++try_to_use_cached_solvfile(const char *path, Repo *repo, int flags, const unsigned char *checksum, GError **err){ ++ FILE *fp_cache = fopen(path, "r"); ++ if (!fp_cache) { ++ // Missing cache files (ENOENT) are not an error and can even be expected in some cases ++ // (such as when repo doesn't have updateinfo/prestodelta metadata). ++ // Use g_debug in order not to pollute the log by default with such entries. ++ if (errno == ENOENT) { ++ g_debug("Failed to open solvfile cache: %s: %s", path, strerror(errno)); ++ } else { ++ g_warning("Failed to open solvfile cache: %s: %s", path, strerror(errno)); ++ } ++ return FALSE; ++ } ++ std::unique_ptr solv_userdata = solv_userdata_read(fp_cache); ++ gboolean ret = TRUE; ++ if (solv_userdata && solv_userdata_verify(solv_userdata.get(), checksum)) { ++ // after reading the header rewind to the begining ++ fseek(fp_cache, 0, SEEK_SET); ++ if (repo_add_solv(repo, fp_cache, flags)) { ++ g_set_error (err, ++ DNF_ERROR, ++ DNF_ERROR_INTERNAL_ERROR, ++ _("repo_add_solv() has failed.")); ++ ret = FALSE; ++ } ++ } else { ++ ret = FALSE; ++ } + +- return 0; ++ fclose(fp_cache); ++ return ret; + } + + void +@@ -375,33 +397,27 @@ load_ext(DnfSack *sack, HyRepo hrepo, _hy_repo_repodata which_repodata, + gboolean done = FALSE; + + char *fn_cache = dnf_sack_give_cache_fn(sack, name, suffix); +- fp = fopen(fn_cache, "r"); + assert(libdnf::repoGetImpl(hrepo)->checksum); +- if (can_use_repomd_cache(fp, libdnf::repoGetImpl(hrepo)->checksum)) { +- int flags = 0; +- /* the updateinfo is not a real extension */ +- if (which_repodata != _HY_REPODATA_UPDATEINFO) +- flags |= REPO_EXTEND_SOLVABLES; +- /* do not pollute the main pool with directory component ids */ +- if (which_repodata == _HY_REPODATA_FILENAMES || which_repodata == _HY_REPODATA_OTHER) +- flags |= REPO_LOCALPOOL; +- done = TRUE; ++ ++ int flags = 0; ++ /* the updateinfo is not a real extension */ ++ if (which_repodata != _HY_REPODATA_UPDATEINFO) ++ flags |= REPO_EXTEND_SOLVABLES; ++ /* do not pollute the main pool with directory component ids */ ++ if (which_repodata == _HY_REPODATA_FILENAMES || which_repodata == _HY_REPODATA_OTHER) ++ flags |= REPO_LOCALPOOL; ++ if (try_to_use_cached_solvfile(fn_cache, repo, flags, libdnf::repoGetImpl(hrepo)->checksum, error)) { + g_debug("%s: using cache file: %s", __func__, fn_cache); +- ret = repo_add_solv(repo, fp, flags); +- if (ret) { +- g_set_error_literal (error, +- DNF_ERROR, +- DNF_ERROR_INTERNAL_ERROR, +- _("failed to add solv")); +- return FALSE; +- } else { +- repo_update_state(hrepo, which_repodata, _HY_LOADED_CACHE); +- repo_set_repodata(hrepo, which_repodata, repo->nrepodata - 1); +- } ++ done = TRUE; ++ repo_update_state(hrepo, which_repodata, _HY_LOADED_CACHE); ++ repo_set_repodata(hrepo, which_repodata, repo->nrepodata - 1); + } ++ if (error && *error) { ++ g_prefix_error(error, _("Loading extension cache %s (%d) failed: "), fn_cache, which_repodata); ++ return FALSE; ++ } ++ + g_free(fn_cache); +- if (fp) +- fclose(fp); + if (done) + return TRUE; + +@@ -514,35 +530,53 @@ write_main(DnfSack *sack, HyRepo hrepo, int switchtosolv, GError **error) + strerror(errno)); + goto done; + } +- rc = repo_write(repo, fp); +- rc |= checksum_write(repoImpl->checksum, fp); +- rc |= fclose(fp); ++ ++ SolvUserdata solv_userdata; ++ if (solv_userdata_fill(&solv_userdata, repoImpl->checksum, error)) { ++ ret = FALSE; ++ fclose(fp); ++ goto done; ++ } ++ ++ Repowriter *writer = repowriter_create(repo); ++ repowriter_set_userdata(writer, &solv_userdata, solv_userdata_size); ++ rc = repowriter_write(writer, fp); ++ repowriter_free(writer); + if (rc) { ++ ret = FALSE; ++ fclose(fp); ++ g_set_error(error, ++ DNF_ERROR, ++ DNF_ERROR_INTERNAL_ERROR, ++ _("While writing primary cache %s repowriter write failed: %i, error: %s"), ++ tmp_fn_templ, rc, pool_errstr(repo->pool)); ++ goto done; ++ } ++ ++ if (fclose(fp)) { + ret = FALSE; + g_set_error (error, + DNF_ERROR, + DNF_ERROR_FILE_INVALID, +- _("write_main() failed writing data: %i"), rc); ++ _("Failed closing tmp file %s: %s"), ++ tmp_fn_templ, strerror(errno)); + goto done; + } + } + if (switchtosolv && repo_is_one_piece(repo)) { ++ repo_empty(repo, 1); + /* switch over to written solv file activate paging */ +- FILE *fp = fopen(tmp_fn_templ, "r"); +- if (fp) { +- repo_empty(repo, 1); +- rc = repo_add_solv(repo, fp, 0); +- fclose(fp); +- if (rc) { +- /* this is pretty fatal */ +- ret = FALSE; +- g_set_error_literal (error, +- DNF_ERROR, +- DNF_ERROR_FILE_INVALID, +- _("write_main() failed to re-load " +- "written solv file")); +- goto done; +- } ++ gboolean loaded = try_to_use_cached_solvfile(tmp_fn_templ, repo, 0, repoImpl->checksum, error); ++ if (error && *error) { ++ g_prefix_error(error, _("Failed to use newly written primary cache: %s: "), tmp_fn_templ); ++ ret = FALSE; ++ goto done; ++ } ++ if (!loaded) { ++ g_set_error(error, DNF_ERROR, DNF_ERROR_INTERNAL_ERROR, ++ _("Failed to use newly written primary cache: %s"), tmp_fn_templ); ++ ret = FALSE; ++ goto done; + } + } + +@@ -569,20 +603,6 @@ write_ext_updateinfo_filter(Repo *repo, Repokey *key, void *kfdata) + return repo_write_stdkeyfilter(repo, key, 0); + } + +-static int +-write_ext_updateinfo(HyRepo hrepo, Repodata *data, FILE *fp) +-{ +- auto repoImpl = libdnf::repoGetImpl(hrepo); +- Repo *repo = repoImpl->libsolvRepo; +- int oldstart = repo->start; +- repo->start = repoImpl->main_end; +- repo->nsolvables -= repoImpl->main_nsolvables; +- int res = repo_write_filtered(repo, fp, write_ext_updateinfo_filter, data, 0); +- repo->start = oldstart; +- repo->nsolvables += repoImpl->main_nsolvables; +- return res; +-} +- + static gboolean + write_ext(DnfSack *sack, HyRepo hrepo, _hy_repo_repodata which_repodata, + const char *suffix, GError **error) +@@ -611,37 +631,78 @@ write_ext(DnfSack *sack, HyRepo hrepo, _hy_repo_repodata which_repodata, + FILE *fp = fdopen(tmp_fd, "w+"); + + g_debug("%s: storing %s to: %s", __func__, repo->name, tmp_fn_templ); +- if (which_repodata != _HY_REPODATA_UPDATEINFO) +- ret |= repodata_write(data, fp); +- else +- ret |= write_ext_updateinfo(hrepo, data, fp); +- ret |= checksum_write(repoImpl->checksum, fp); +- ret |= fclose(fp); ++ ++ SolvUserdata solv_userdata; ++ if (solv_userdata_fill(&solv_userdata, repoImpl->checksum, error)) { ++ fclose(fp); ++ success = FALSE; ++ goto done; ++ } ++ ++ Repowriter *writer = repowriter_create(repo); ++ repowriter_set_userdata(writer, &solv_userdata, solv_userdata_size); ++ if (which_repodata != _HY_REPODATA_UPDATEINFO) { ++ repowriter_set_repodatarange(writer, data->repodataid, data->repodataid + 1); ++ repowriter_set_flags(writer, REPOWRITER_NO_STORAGE_SOLVABLE); ++ ret = repowriter_write(writer, fp); ++ } else { ++ // write only updateinfo repodata ++ int oldstart = repo->start; ++ repo->start = repoImpl->main_end; ++ repo->nsolvables -= repoImpl->main_nsolvables; ++ repowriter_set_flags(writer, REPOWRITER_LEGACY); ++ repowriter_set_keyfilter(writer, write_ext_updateinfo_filter, data); ++ repowriter_set_keyqueue(writer, 0); ++ ret = repowriter_write(writer, fp); ++ repo->start = oldstart; ++ repo->nsolvables += repoImpl->main_nsolvables; ++ } ++ repowriter_free(writer); + if (ret) { ++ success = FALSE; ++ fclose(fp); ++ g_set_error (error, ++ DNF_ERROR, ++ DNF_ERROR_INTERNAL_ERROR, ++ _("While writing extension cache %s (%d): repowriter write failed: %i, error: %s"), ++ tmp_fn_templ, which_repodata, ret, pool_errstr(repo->pool)); ++ goto done; ++ } ++ ++ if (fclose(fp)) { + success = FALSE; + g_set_error (error, + DNF_ERROR, +- DNF_ERROR_FAILED, +- _("write_ext(%1$d) has failed: %2$d"), +- which_repodata, ret); ++ DNF_ERROR_FILE_INVALID, ++ _("While writing extension cache (%d): cannot close temporary file: %s"), ++ which_repodata, tmp_fn_templ); + goto done; + } + } + + if (repo_is_one_piece(repo) && which_repodata != _HY_REPODATA_UPDATEINFO) { + /* switch over to written solv file activate paging */ +- FILE *fp = fopen(tmp_fn_templ, "r"); +- if (fp) { +- int flags = REPO_USE_LOADING | REPO_EXTEND_SOLVABLES; +- /* do not pollute the main pool with directory component ids */ +- if (which_repodata == _HY_REPODATA_FILENAMES || which_repodata == _HY_REPODATA_OTHER) +- flags |= REPO_LOCALPOOL; +- repodata_extend_block(data, repo->start, repo->end - repo->start); +- data->state = REPODATA_LOADING; +- repo_add_solv(repo, fp, flags); +- data->state = REPODATA_AVAILABLE; +- fclose(fp); ++ int flags = REPO_USE_LOADING | REPO_EXTEND_SOLVABLES; ++ /* do not pollute the main pool with directory component ids */ ++ if (which_repodata == _HY_REPODATA_FILENAMES || which_repodata == _HY_REPODATA_OTHER) ++ flags |= REPO_LOCALPOOL; ++ repodata_extend_block(data, repo->start, repo->end - repo->start); ++ data->state = REPODATA_LOADING; ++ int loaded = try_to_use_cached_solvfile(tmp_fn_templ, repo, flags, repoImpl->checksum, error); ++ if (error && *error) { ++ g_prefix_error(error, _("Failed to use newly written extension cache: %s (%d): "), ++ tmp_fn_templ, which_repodata); ++ success = FALSE; ++ goto done; ++ } ++ if (!loaded) { ++ g_set_error(error, DNF_ERROR, DNF_ERROR_INTERNAL_ERROR, ++ _("Failed to use newly written extension cache: %s (%d)"), tmp_fn_templ, which_repodata); ++ success = FALSE; ++ goto done; + } ++ ++ data->state = REPODATA_AVAILABLE; + } + + if (!mv(tmp_fn_templ, fn, error)) { +@@ -672,7 +733,7 @@ load_yum_repo(DnfSack *sack, HyRepo hrepo, GError **error) + + FILE *fp_primary = NULL; + FILE *fp_repomd = NULL; +- FILE *fp_cache = fopen(fn_cache, "r"); ++ + if (!fn_repomd) { + g_set_error (error, + DNF_ERROR, +@@ -693,18 +754,17 @@ load_yum_repo(DnfSack *sack, HyRepo hrepo, GError **error) + } + checksum_fp(repoImpl->checksum, fp_repomd); + +- if (can_use_repomd_cache(fp_cache, repoImpl->checksum)) { ++ if (try_to_use_cached_solvfile(fn_cache, repo, 0, repoImpl->checksum, error)) { + const char *chksum = pool_checksum_str(pool, repoImpl->checksum); + g_debug("using cached %s (0x%s)", name, chksum); +- if (repo_add_solv(repo, fp_cache, 0)) { +- g_set_error (error, +- DNF_ERROR, +- DNF_ERROR_INTERNAL_ERROR, +- _("repo_add_solv() has failed.")); +- retval = FALSE; +- goto out; +- } + repoImpl->state_main = _HY_LOADED_CACHE; ++ goto out; ++ } ++ ++ if (error && *error) { ++ g_prefix_error(error, _("While loading repository failed to use %s: "), fn_cache); ++ retval = FALSE; ++ goto out; + } else { + auto primary = hrepo->getMetadataPath(MD_TYPE_PRIMARY); + if (primary.empty()) { +@@ -733,8 +793,6 @@ load_yum_repo(DnfSack *sack, HyRepo hrepo, GError **error) + repoImpl->state_main = _HY_LOADED_FETCH; + } + out: +- if (fp_cache) +- fclose(fp_cache); + if (fp_repomd) + fclose(fp_repomd); + if (fp_primary) +diff --git a/libdnf/hy-iutil-private.hpp b/libdnf/hy-iutil-private.hpp +index d498c032..efc91c63 100644 +--- a/libdnf/hy-iutil-private.hpp ++++ b/libdnf/hy-iutil-private.hpp +@@ -52,9 +52,7 @@ int solv_userdata_verify(const SolvUserdata *solv_userdata, const unsigned char + /* crypto utils */ + int checksum_cmp(const unsigned char *cs1, const unsigned char *cs2); + int checksum_fp(unsigned char *out, FILE *fp); +-int checksum_read(unsigned char *csout, FILE *fp); + int checksum_stat(unsigned char *out, FILE *fp); +-int checksum_write(const unsigned char *cs, FILE *fp); + int checksumt_l2h(int type); + const char *pool_checksum_str(Pool *pool, const unsigned char *chksum); + +diff --git a/libdnf/hy-iutil.cpp b/libdnf/hy-iutil.cpp +index f81ca52f..c409a10a 100644 +--- a/libdnf/hy-iutil.cpp ++++ b/libdnf/hy-iutil.cpp +@@ -142,17 +142,6 @@ checksum_fp(unsigned char *out, FILE *fp) + return 0; + } + +-/* calls rewind(fp) before returning */ +-int +-checksum_read(unsigned char *csout, FILE *fp) +-{ +- if (fseek(fp, -32, SEEK_END) || +- fread(csout, CHKSUM_BYTES, 1, fp) != 1) +- return 1; +- rewind(fp); +- return 0; +-} +- + /* does not move the fp position */ + int + checksum_stat(unsigned char *out, FILE *fp) +@@ -174,15 +163,6 @@ checksum_stat(unsigned char *out, FILE *fp) + return 0; + } + +-/* moves fp to the end of file */ +-int checksum_write(const unsigned char *cs, FILE *fp) +-{ +- if (fseek(fp, 0, SEEK_END) || +- fwrite(cs, CHKSUM_BYTES, 1, fp) != 1) +- return 1; +- return 0; +-} +- + static std::array + get_padded_solv_toolversion() + { +-- +2.31.1 + diff --git a/SOURCES/0030-Update-unittest-to-test-the-new-private-dnf-solvfile.patch b/SOURCES/0030-Update-unittest-to-test-the-new-private-dnf-solvfile.patch new file mode 100644 index 0000000..56c96c5 --- /dev/null +++ b/SOURCES/0030-Update-unittest-to-test-the-new-private-dnf-solvfile.patch @@ -0,0 +1,83 @@ +From 1e0f8f66f6ff30e177c41be7d72330d5eccf2ff8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Wed, 9 Feb 2022 13:24:06 +0100 +Subject: [PATCH 30/34] Update unittest to test the new private dnf solvfile + API + +--- + tests/hawkey/test_iutil.cpp | 34 ++++++++++++++++++++++------------ + 1 file changed, 22 insertions(+), 12 deletions(-) + +diff --git a/tests/hawkey/test_iutil.cpp b/tests/hawkey/test_iutil.cpp +index 8d00cc94..f3c04782 100644 +--- a/tests/hawkey/test_iutil.cpp ++++ b/tests/hawkey/test_iutil.cpp +@@ -24,6 +24,8 @@ + + + #include ++#include ++#include + + + #include "libdnf/hy-util.h" +@@ -97,28 +99,36 @@ START_TEST(test_checksum) + } + END_TEST + +-START_TEST(test_checksum_write_read) ++START_TEST(test_dnf_solvfile_userdata) + { + char *new_file = solv_dupjoin(test_globals.tmpdir, +- "/test_checksum_write_read", NULL); ++ "/test_dnf_solvfile_userdata", NULL); + build_test_file(new_file); + + unsigned char cs_computed[CHKSUM_BYTES]; +- unsigned char cs_read[CHKSUM_BYTES]; +- FILE *fp = fopen(new_file, "r"); ++ FILE *fp = fopen(new_file, "r+"); + checksum_fp(cs_computed, fp); +- // fails, file opened read-only: +- fail_unless(checksum_write(cs_computed, fp) == 1); +- fclose(fp); +- fp = fopen(new_file, "r+"); +- fail_if(checksum_write(cs_computed, fp)); ++ ++ SolvUserdata solv_userdata; ++ fail_if(solv_userdata_fill(&solv_userdata, cs_computed, NULL)); ++ ++ Pool *pool = pool_create(); ++ Repo *repo = repo_create(pool, "test_repo"); ++ Repowriter *writer = repowriter_create(repo); ++ repowriter_set_userdata(writer, &solv_userdata, solv_userdata_size); ++ fail_if(repowriter_write(writer, fp)); ++ repowriter_free(writer); + fclose(fp); ++ + fp = fopen(new_file, "r"); +- fail_if(checksum_read(cs_read, fp)); +- fail_if(checksum_cmp(cs_computed, cs_read)); ++ std::unique_ptr dnf_solvfile = solv_userdata_read(fp); ++ fail_unless(dnf_solvfile); ++ fail_unless(solv_userdata_verify(dnf_solvfile.get(), cs_computed)); + fclose(fp); + + g_free(new_file); ++ repo_free(repo, 0); ++ pool_free(pool); + } + END_TEST + +@@ -181,7 +191,7 @@ iutil_suite(void) + TCase *tc = tcase_create("Main"); + tcase_add_test(tc, test_abspath); + tcase_add_test(tc, test_checksum); +- tcase_add_test(tc, test_checksum_write_read); ++ tcase_add_test(tc, test_dnf_solvfile_userdata); + tcase_add_test(tc, test_mkcachedir); + tcase_add_test(tc, test_version_split); + suite_add_tcase(s, tc); +-- +2.31.1 + diff --git a/SOURCES/0031-Increase-required-libsolv-version-for-cache-versioni.patch b/SOURCES/0031-Increase-required-libsolv-version-for-cache-versioni.patch new file mode 100644 index 0000000..37b9497 --- /dev/null +++ b/SOURCES/0031-Increase-required-libsolv-version-for-cache-versioni.patch @@ -0,0 +1,38 @@ +From 893eb087e56588d62e81e91e5d283003bd80552a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Tue, 8 Mar 2022 11:43:38 +0100 +Subject: [PATCH 31/34] Increase required libsolv version for cache versioning + +--- + CMakeLists.txt | 2 +- + libdnf.spec | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 60cf1b8c..d895b2bf 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -51,7 +51,7 @@ endif() + + # build dependencies + find_package(Gpgme REQUIRED) +-find_package(LibSolv 0.6.30 REQUIRED COMPONENTS ext) ++find_package(LibSolv 0.7.20 REQUIRED COMPONENTS ext) + find_package(OpenSSL REQUIRED) + + +diff --git a/libdnf.spec b/libdnf.spec +index a849cdea..aa51dd28 100644 +--- a/libdnf.spec ++++ b/libdnf.spec +@@ -1,5 +1,5 @@ +-%global libsolv_version 0.7.17 +-%global libmodulemd_version 2.11.2-2 ++%global libsolv_version 0.7.21 ++%global libmodulemd_version 2.13.0 + %global librepo_version 1.13.1 + %global dnf_conflict 4.3.0 + %global swig_version 3.0.12 +-- +2.31.1 + diff --git a/SOURCES/0032-Add-more-specific-error-handling-for-loading-repomd-.patch b/SOURCES/0032-Add-more-specific-error-handling-for-loading-repomd-.patch new file mode 100644 index 0000000..1f0303c --- /dev/null +++ b/SOURCES/0032-Add-more-specific-error-handling-for-loading-repomd-.patch @@ -0,0 +1,46 @@ +From b636af779fcdab326eef7bbb74912254c2fa2b0c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Thu, 17 Mar 2022 10:34:24 +0100 +Subject: [PATCH 32/34] Add more specific error handling for loading repomd and + primary + +--- + libdnf/dnf-sack.cpp | 19 +++++++++++++++---- + 1 file changed, 15 insertions(+), 4 deletions(-) + +diff --git a/libdnf/dnf-sack.cpp b/libdnf/dnf-sack.cpp +index 61f4807c..8e11b8f8 100644 +--- a/libdnf/dnf-sack.cpp ++++ b/libdnf/dnf-sack.cpp +@@ -780,13 +780,24 @@ load_yum_repo(DnfSack *sack, HyRepo hrepo, GError **error) + fp_primary = solv_xfopen(primary.c_str(), "r"); + assert(fp_primary); + +- g_debug("fetching %s", name); +- if (repo_add_repomdxml(repo, fp_repomd, 0) || \ +- repo_add_rpmmd(repo, fp_primary, 0, 0)) { ++ g_debug("Loading repomd: %s", fn_repomd); ++ if (repo_add_repomdxml(repo, fp_repomd, 0)) { + g_set_error (error, + DNF_ERROR, + DNF_ERROR_INTERNAL_ERROR, +- _("repo_add_repomdxml/rpmmd() has failed.")); ++ _("Loading repomd has failed: %s"), ++ pool_errstr(repo->pool)); ++ retval = FALSE; ++ goto out; ++ } ++ ++ g_debug("Loading primary: %s", primary.c_str()); ++ if (repo_add_rpmmd(repo, fp_primary, 0, 0)) { ++ g_set_error (error, ++ DNF_ERROR, ++ DNF_ERROR_INTERNAL_ERROR, ++ _("Loading primary has failed: %s"), ++ pool_errstr(repo->pool)); + retval = FALSE; + goto out; + } +-- +2.31.1 + diff --git a/SOURCES/0033-libdnf-transaction-RPMItem-Fix-handling-transaction-.patch b/SOURCES/0033-libdnf-transaction-RPMItem-Fix-handling-transaction-.patch new file mode 100644 index 0000000..7398fc8 --- /dev/null +++ b/SOURCES/0033-libdnf-transaction-RPMItem-Fix-handling-transaction-.patch @@ -0,0 +1,74 @@ +From c5919efe898294420ec8e91e4eed5b9081e681c5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hr=C3=A1zk=C3=BD?= +Date: Thu, 17 Feb 2022 18:18:16 +0100 +Subject: [PATCH 33/34] libdnf/transaction/RPMItem: Fix handling transaction id + in resolveTransactionItemReason + +The maxTransactionId argument was ignored, the method was always returning the +reason from the last transaction. This is the correct result for +maxTransactionId = -1. In a couple of places the method is called with +maxTransactionId = -2. Fixing this would mean nontrivial changes to the +logic which could potentially break something else, so I'm leaving this +behavior unchanged. + +For non-negative values of maxTransactionId (with which it's not being called +anywhere in dnf codebase), the commit adds a condition to SELECT only +transaction ids less than or equal to maxTransactionId. + += changelog = +msg: Fix handling transaction id in resolveTransactionItemReason +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2053014 +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2010259 +--- + libdnf/transaction/RPMItem.cpp | 21 ++++++++++++++++++--- + 1 file changed, 18 insertions(+), 3 deletions(-) + +diff --git a/libdnf/transaction/RPMItem.cpp b/libdnf/transaction/RPMItem.cpp +index 5f667ab9..ecce789d 100644 +--- a/libdnf/transaction/RPMItem.cpp ++++ b/libdnf/transaction/RPMItem.cpp +@@ -255,7 +255,11 @@ RPMItem::resolveTransactionItemReason(SQLite3Ptr conn, + const std::string &arch, + int64_t maxTransactionId) + { +- const char *sql = R"**( ++ // NOTE: All negative maxTransactionId values are treated the same. The ++ // method is called with maxTransactionId = -2 in a couple of places, the ++ // semantics here have been the same as with -1 for a long time. If it ++ // ain't broke... ++ std::string sql = R"**( + SELECT + ti.action as action, + ti.reason as reason +@@ -271,14 +275,25 @@ RPMItem::resolveTransactionItemReason(SQLite3Ptr conn, + AND ti.action not in (3, 5, 7, 10) + AND i.name = ? + AND i.arch = ? ++ )**"; ++ ++ if (maxTransactionId >= 0) { ++ sql.append(" AND ti.trans_id <= ?"); ++ } ++ ++ sql.append(R"**( + ORDER BY + ti.trans_id DESC + LIMIT 1 +- )**"; ++ )**"); + + if (arch != "") { + SQLite3::Query query(*conn, sql); +- query.bindv(name, arch); ++ if (maxTransactionId >= 0) { ++ query.bindv(name, arch, maxTransactionId); ++ } else { ++ query.bindv(name, arch); ++ } + + if (query.step() == SQLite3::Statement::StepResult::ROW) { + auto action = static_cast< TransactionItemAction >(query.get< int64_t >("action")); +-- +2.31.1 + diff --git a/SOURCES/0034-libdnf-transaction-TransactionItem-Set-short-action-.patch b/SOURCES/0034-libdnf-transaction-TransactionItem-Set-short-action-.patch new file mode 100644 index 0000000..c7290c1 --- /dev/null +++ b/SOURCES/0034-libdnf-transaction-TransactionItem-Set-short-action-.patch @@ -0,0 +1,33 @@ +From c303b7c3723f3e9fbc43963a62237ea17516fc6b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hr=C3=A1zk=C3=BD?= +Date: Thu, 17 Feb 2022 18:30:14 +0100 +Subject: [PATCH 34/34] libdnf/transaction/TransactionItem: Set short action + for Reason Change + +Sets the "short" (one letter) representation of the Reason Change action +to "C". + +This was likely not ever used before as the only way to create a +transaction with a reason change and something else is rolling back +multiple transactions, which was broken. +--- + libdnf/transaction/TransactionItem.cpp | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/libdnf/transaction/TransactionItem.cpp b/libdnf/transaction/TransactionItem.cpp +index 3b43d1f1..4358038e 100644 +--- a/libdnf/transaction/TransactionItem.cpp ++++ b/libdnf/transaction/TransactionItem.cpp +@@ -51,8 +51,7 @@ static const std::map< TransactionItemAction, std::string > transactionItemActio + {TransactionItemAction::REMOVE, "E"}, + {TransactionItemAction::REINSTALL, "R"}, + {TransactionItemAction::REINSTALLED, "R"}, +- // TODO: replace "?" with something better +- {TransactionItemAction::REASON_CHANGE, "?"}, ++ {TransactionItemAction::REASON_CHANGE, "C"}, + }; + + /* +-- +2.31.1 + diff --git a/SPECS/libdnf.spec b/SPECS/libdnf.spec index 40652e9..9c52359 100644 --- a/SPECS/libdnf.spec +++ b/SPECS/libdnf.spec @@ -1,4 +1,4 @@ -%global libsolv_version 0.7.17 +%global libsolv_version 0.7.20-3 %global libmodulemd_version 2.11.2-2 %global librepo_version 1.13.1 %global dnf_conflict 4.3.0 @@ -56,7 +56,7 @@ Name: libdnf Version: %{libdnf_major_version}.%{libdnf_minor_version}.%{libdnf_micro_version} -Release: 8%{?dist} +Release: 9%{?dist} Summary: Library providing simplified C and Python API to libsolv License: LGPLv2+ URL: https://github.com/rpm-software-management/libdnf @@ -86,7 +86,15 @@ Patch22: 0022-hawkey-surrogateescape-error-handler-to-decode-UTF-8-string Patch23: 0023-Turn-off-strict-validation-of-modulemd-documents-RhBug200485320071662007167.patch Patch24: 0024-Add-unittest-for-setting-up-repo-with-empty-keyfile-RhBug1994614.patch Patch25: 0025-Add-getLatestModules.patch -Patch26: 0026-Update-translations-RhBug-2017272.patch +Patch26: 0026-context-Substitute-all-repository-config-options-RhB.patch +Patch27: 0027-Use-environment-variable-in-unittest-instead-of-ugly.patch +Patch28: 0028-Add-private-API-for-filling-reading-and-verifying-ne.patch +Patch29: 0029-Use-dnf-solv-userdata-to-check-versions-and-checksum.patch +Patch30: 0030-Update-unittest-to-test-the-new-private-dnf-solvfile.patch +Patch31: 0031-Increase-required-libsolv-version-for-cache-versioni.patch +Patch32: 0032-Add-more-specific-error-handling-for-loading-repomd-.patch +Patch33: 0033-libdnf-transaction-RPMItem-Fix-handling-transaction-.patch +Patch34: 0034-libdnf-transaction-TransactionItem-Set-short-action-.patch BuildRequires: cmake BuildRequires: gcc @@ -331,8 +339,11 @@ popd %endif %changelog -* Fri Mar 18 2022 Marek Blaha - 0.63.0-8 -- Update translations +* Wed May 04 2022 Lukas Hrazky - 0.63.0-8 +- Substitute all repository config options (fixes substitution of baseurl) +- Use solvfile userdata to store and check checksums and solv versions +- Fix handling transaction id in resolveTransactionItemReason +- Set short action for Reason Change * Fri Jan 14 2022 Pavla Kratochvilova - 0.63.0-7 - Rebuild with new release number