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 <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 <jaaf64@zoraldia.com>, 2016. #zanata
- # José Fournier <jaaf64@zoraldia.com>, 2017. #zanata
- # Jérôme Fenal <jfenal@gmail.com>, 2017. #zanata
--# Ludek Janda <ljanda@redhat.com>, 2018. #zanata
-+# Ludek Janda <ljanda@redhat.com>, 2018. #zanata, 2021.
- # Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>, 2019. #zanata
- # Julien Humbert <julroy67@gmail.com>, 2020.
-+# Sundeep Anand <suanand@redhat.com>, 2021.
-+# Titouan Bénard <itotutona@evta.fr>, 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 <julroy67@gmail.com>\n"
--"Language-Team: French <https://translate.fedoraproject.org/projects/dnf/libdnf-dnf-4-master/fr/>\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 <itotutona@evta.fr>\n"
-+"Language-Team: French <https://translate.fedoraproject.org/projects/dnf/"
-+"libdnf-rhel-8/fr/>\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 <module_name>' 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 "
-+"<module_name>’. 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 <nahareport@live.com>, 2018. #zanata
--# Ludek Janda <ljanda@redhat.com>, 2018. #zanata
-+# Ludek Janda <ljanda@redhat.com>, 2018. #zanata, 2021.
- # Casey Jones <nahareport@yahoo.com>, 2020.
-+# Sundeep Anand <suanand@redhat.com>, 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 <nahareport@yahoo.com>\n"
--"Language-Team: Japanese <https://translate.fedoraproject.org/projects/dnf/libdnf-dnf-4-master/ja/>\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 <ljanda@redhat.com>\n"
-+"Language-Team: Japanese <https://translate.fedoraproject.org/projects/dnf/"
-+"libdnf-rhel-8/ja/>\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 <module_name>' command. After you "
-+"reset the module, you can install the other stream."
-+msgstr ""
-+"有効化されたモジュールのストリームの切り替えはできません。\n"
-+"モジュールからすべてのインストールされたコンテンツを削除し、'microdnf module "
-+"reset <module_name>' コマンドを使用してモジュールをリセットすることを推奨しま"
-+"す。モジュールのリセット後に、別のストリームをインストールできます。"
-+
-+#: 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 <EMAIL@ADDRESS>, YEAR.
- # Ludek Janda <ljanda@redhat.com>, 2018. #zanata
-+# simmon <simmon@nplob.com>, 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 <copied-by-zanata@zanata.org>\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 <simmon@nplob.com>\n"
-+"Language-Team: Korean <https://translate.fedoraproject.org/projects/dnf/"
-+"libdnf-rhel-8/ko/>\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 <module_name>' command. After you "
-+"reset the module, you can install the other stream."
- msgstr ""
-+"활성화된 모듈 스트림을 전환 할 수 없습니다.\n"
-+"설치된 모든 내용을 모듈에서 제거하고 ‘<module_name>' 명령을 사용하여 모듈을 "
-+"재설정하는 것이 좋습니다. 모듈을 재설정한 후, 다른 스트림을 설치 할 수 있습니"
-+"다."
- 
--#: 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 <EMAIL@ADDRESS>\n"
- "Language-Team: LANGUAGE <LL@li.org>\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 <module_name>' 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 <lchopn@gmail.com>, 2017. #zanata, 2020.
--# Ludek Janda <ljanda@redhat.com>, 2018. #zanata
-+# Charles Lee <lchopn@gmail.com>, 2017. #zanata, 2020, 2021.
-+# Ludek Janda <ljanda@redhat.com>, 2018. #zanata, 2021.
-+# Sundeep Anand <suanand@redhat.com>, 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 <lchopn@gmail.com>\n"
--"Language-Team: Chinese (Simplified) <https://translate.fedoraproject.org/projects/dnf/libdnf-dnf-4-master/zh_CN/>\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 <suanand@redhat.com>\n"
-+"Language-Team: Chinese (Simplified) <https://translate.fedoraproject.org/"
-+"projects/dnf/libdnf-rhel-8/zh_CN/>\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 <module_name>' command. After you "
-+"reset the module, you can install the other stream."
-+msgstr ""
-+"无法切换一个模块已启用的流。 \n"
-+"推荐从模块中删除所有已安装的内容,使用 'microdnf module reset <module_name>' "
-+"命令重置模块。在重置模块后就可以安装其他流。"
-+
-+#: 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 <jrohel@redhat.com>
+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 <jrohel@redhat.com>
+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/0027-advisory-upgrade-filter-out-advPkgs-with-different-a.patch b/SOURCES/0027-advisory-upgrade-filter-out-advPkgs-with-different-a.patch
deleted file mode 100644
index 9376f7d..0000000
--- a/SOURCES/0027-advisory-upgrade-filter-out-advPkgs-with-different-a.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-From dd4862b4ff957ad2e535ace32a2f38706da64793 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
-Date: Mon, 30 May 2022 08:59:41 +0200
-Subject: [PATCH] advisory upgrade: filter out advPkgs with different arch
-
-This prevents a situation in security upgrades where libsolv cannot
-upgrade dependent pkgs because we ask for an upgrade of different arch:
-
-We can get the following testcase if libdnf has filtered out
-json-c-2-2.el8.x86_64@rhel-8-for-x86_64-baseos-rpms
-(because there is an advisory for already installed json-c-1-1.el8.x86_64) but
-json-c-2-2.el8.i686@rhel-8-for-x86_64-baseos-rpms is not filtered out because
-it has different architecture. The resulting transaction doesn't work.
-
-```
-repo @System -99.-1000 testtags <inline>
-#>=Pkg: bind-libs-lite 1 1.el8 x86_64
-#>=Pkg: json-c 1 1.el8 x86_64
-
-repo rhel-8-for-x86_64-baseos-rpms -99.-1000 testtags <inline>
-#>=Pkg: json-c 2 2.el8 x86_64
-#>=Prv: libjson-c.so.4()(64bit)
-#>
-#>=Pkg: json-c 2 2.el8 i686
-#>=Prv: libjson-c.so.4()
-#>
-#>=Pkg: bind-libs-lite 2 2.el8 x86_64
-#>=Req: libjson-c.so.4()(64bit)
-system x86_64 rpm @System
-job update oneof json-c-1-1.el8.x86_64@@System json-c-2-2.el8.i686@rhel-8-for-x86_64-baseos-rpms bind-libs-lite-2-2.el8.x86_64@rhel-8-for-x86_64-baseos-rpms [forcebest,targeted,setevr,setarch]
-result transaction,problems <inline>
-#>problem f06d81a4 info package bind-libs-lite-2-2.el8.x86_64 requires libjson-c.so.4()(64bit), but none of the providers can be installed
-#>problem f06d81a4 solution 96f9031b allow bind-libs-lite-1-1.el8.x86_64@@System
-#>problem f06d81a4 solution c8daf94f allow json-c-2-2.el8.x86_64@rhel-8-for-x86_64-baseos-rpms
-#>upgrade bind-libs-lite-1-1.el8.x86_64@@System bind-libs-lite-2-2.el8.x86_64@rhel-8-for-x86_64-baseos-rpms
-#>upgrade json-c-1-1.el8.x86_64@@System json-c-2-2.el8.x86_64@rhel-8-for-x86_64-baseos-rpms```
-```
-
-= changelog =
-msg: Filter out advisory pkgs with different arch during advisory upgrade, fixes possible problems in dependency resulution.
-type: bugfix
-resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2088149
----
- libdnf/sack/query.cpp | 25 +++++++++++++++++++------
- 1 file changed, 19 insertions(+), 6 deletions(-)
-
-diff --git a/libdnf/sack/query.cpp b/libdnf/sack/query.cpp
-index ac2736b5..03d39659 100644
---- a/libdnf/sack/query.cpp
-+++ b/libdnf/sack/query.cpp
-@@ -1877,12 +1877,6 @@ Query::Impl::filterAdvisory(const Filter & f, Map *m, int keyname)
-         std::vector<Solvable *> candidates;
-         std::vector<Solvable *> installed_solvables;
- 
--        Id id = -1;
--        while ((id = resultPset->next(id)) != -1) {
--            candidates.push_back(pool_id2solvable(pool, id));
--        }
--        NameArchEVRComparator cmp_key(pool);
--
-         if (cmp_type & HY_UPGRADE) {
-             Query installed(sack, ExcludeFlags::IGNORE_EXCLUDES);
-             installed.installed();
-@@ -1893,6 +1887,18 @@ Query::Impl::filterAdvisory(const Filter & f, Map *m, int keyname)
-                 installed_solvables.push_back(pool_id2solvable(pool, installed_id));
-             }
-             std::sort(installed_solvables.begin(), installed_solvables.end(), NameArchSolvableComparator);
-+            Id id = -1;
-+            while ((id = resultPset->next(id)) != -1) {
-+                Solvable * s = pool_id2solvable(pool, id);
-+                // When doing HY_UPGRADE consider only candidate pkgs that have matching Name and Arch
-+                // with some already installed pkg (in other words: some other version of the pkg is already installed).
-+                // Otherwise a pkg with different Arch than installed can end up in upgrade set which is wrong.
-+                // It can result in dependency issues, reported as: RhBug:2088149.
-+                auto low = std::lower_bound(installed_solvables.begin(), installed_solvables.end(), s, NameArchSolvableComparator);
-+                if (low != installed_solvables.end() && s->name == (*low)->name && s->arch == (*low)->arch) {
-+                    candidates.push_back(s);
-+                }
-+            }
- 
-             // Apply security filters only to packages with lower priority - to unify behaviour upgrade
-             // and upgrade-minimal
-@@ -1915,7 +1921,14 @@ Query::Impl::filterAdvisory(const Filter & f, Map *m, int keyname)
-                 }
-             }
-             std::swap(candidates, priority_candidates);
-+        } else {
-+            Id id = -1;
-+            while ((id = resultPset->next(id)) != -1) {
-+                candidates.push_back(pool_id2solvable(pool, id));
-+            }
-         }
-+
-+        NameArchEVRComparator cmp_key(pool);
-         std::sort(candidates.begin(), candidates.end(), cmp_key);
-         for (auto & advisoryPkg : pkgs) {
-             if (cmp_type & HY_UPGRADE) {
--- 
-2.36.1
-
diff --git a/SOURCES/0028-Add-obsoletes-to-filtering-for-advisory-candidates.patch b/SOURCES/0028-Add-obsoletes-to-filtering-for-advisory-candidates.patch
deleted file mode 100644
index 85a93de..0000000
--- a/SOURCES/0028-Add-obsoletes-to-filtering-for-advisory-candidates.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From fa6da3b29705b99de69a653e869af258ac302ab6 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
-Date: Tue, 5 Jul 2022 09:02:22 +0200
-Subject: [PATCH] Add obsoletes to filtering for advisory candidates
-
-Patch https://github.com/rpm-software-management/libdnf/pull/1526
-introduced a regression where we no longer do a security upgrade if a
-package A is installed and package B obsoletes A and B is available in two
-versions while there is an advisory for the second version.
-
-Test: https://github.com/rpm-software-management/ci-dnf-stack/pull/1130
----
- libdnf/sack/query.cpp | 32 ++++++++++++++++++++++++++++----
- 1 file changed, 28 insertions(+), 4 deletions(-)
-
-diff --git a/libdnf/sack/query.cpp b/libdnf/sack/query.cpp
-index 03d39659..5355f9f7 100644
---- a/libdnf/sack/query.cpp
-+++ b/libdnf/sack/query.cpp
-@@ -1878,6 +1878,13 @@ Query::Impl::filterAdvisory(const Filter & f, Map *m, int keyname)
-         std::vector<Solvable *> installed_solvables;
- 
-         if (cmp_type & HY_UPGRADE) {
-+            // When doing HY_UPGRADE consider only candidate pkgs that have matching Name and Arch with:
-+            // * some already installed pkg (in other words: some other version of the pkg is already installed)
-+            // or
-+            // * with pkg that obsoletes some already installed (or to be installed in this transaction) pkg
-+            // Otherwise a pkg with different Arch than installed can end up in upgrade set which is wrong.
-+            // It can result in dependency issues, reported as: RhBug:2088149.
-+
-             Query installed(sack, ExcludeFlags::IGNORE_EXCLUDES);
-             installed.installed();
-             installed.addFilter(HY_PKG_LATEST_PER_ARCH, HY_EQ, 1);
-@@ -1887,13 +1894,30 @@ Query::Impl::filterAdvisory(const Filter & f, Map *m, int keyname)
-                 installed_solvables.push_back(pool_id2solvable(pool, installed_id));
-             }
-             std::sort(installed_solvables.begin(), installed_solvables.end(), NameArchSolvableComparator);
-+
-+            Query obsoletes(sack, ExcludeFlags::IGNORE_EXCLUDES);
-+            obsoletes.addFilter(HY_PKG, HY_EQ, resultPset);
-+            obsoletes.available();
-+
-+            Query possibly_obsoleted(sack, ExcludeFlags::IGNORE_EXCLUDES);
-+            possibly_obsoleted.addFilter(HY_PKG, HY_EQ, resultPset);
-+            possibly_obsoleted.addFilter(HY_PKG_UPGRADES, HY_EQ, 1);
-+            possibly_obsoleted.queryUnion(installed);
-+            possibly_obsoleted.apply();
-+
-+            obsoletes.addFilter(HY_PKG_OBSOLETES, HY_EQ, possibly_obsoleted.runSet());
-+            obsoletes.apply();
-+            Id obsoleted_id = -1;
-+            // Add to candidates resultPset pkgs that obsolete some installed (or to be installed in this transaction) pkg
-+            while ((obsoleted_id = obsoletes.pImpl->result->next(obsoleted_id)) != -1) {
-+                Solvable * s = pool_id2solvable(pool, obsoleted_id);
-+                candidates.push_back(s);
-+            }
-+
-             Id id = -1;
-+            // Add to candidates resultPset pkgs that match name and arch with some already installed pkg
-             while ((id = resultPset->next(id)) != -1) {
-                 Solvable * s = pool_id2solvable(pool, id);
--                // When doing HY_UPGRADE consider only candidate pkgs that have matching Name and Arch
--                // with some already installed pkg (in other words: some other version of the pkg is already installed).
--                // Otherwise a pkg with different Arch than installed can end up in upgrade set which is wrong.
--                // It can result in dependency issues, reported as: RhBug:2088149.
-                 auto low = std::lower_bound(installed_solvables.begin(), installed_solvables.end(), s, NameArchSolvableComparator);
-                 if (low != installed_solvables.end() && s->name == (*low)->name && s->arch == (*low)->arch) {
-                     candidates.push_back(s);
--- 
-2.37.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?= <amatej@redhat.com>
+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 <array>
++#include <utility>
++
++// 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<char, 4> solv_userdata_magic{'\0', 'd', 'n', 'f'};
++static constexpr const std::array<char, 4> 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<SolvUserdata> 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 <solv/evr.h>
+ #include <solv/solver.h>
+ #include <solv/solverdebug.h>
++#include <solv/repo_solv.h>
+ #include <solv/util.h>
+ #include <solv/pool_parserpmrichdep.h>
+ }
+@@ -182,6 +183,107 @@ int checksum_write(const unsigned char *cs, FILE *fp)
+     return 0;
+ }
+ 
++static std::array<char, solv_userdata_solv_toolversion_size>
++get_padded_solv_toolversion()
++{
++    std::array<char, solv_userdata_solv_toolversion_size> 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<SolvUserdata>
++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<SolvUserdata> uniq_userdata(reinterpret_cast<SolvUserdata *>(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?= <amatej@redhat.com>
+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<SolvUserdata> 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<char, solv_userdata_solv_toolversion_size>
+ 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?= <amatej@redhat.com>
+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 <solv/pool.h>
++#include <solv/repo.h>
++#include <solv/repo_write.h>
+ 
+ 
+ #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<SolvUserdata> 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?= <amatej@redhat.com>
+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?= <amatej@redhat.com>
+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?= <lhrazky@redhat.com>
+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?= <lhrazky@redhat.com>
+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/SOURCES/0035-Do-not-print-errors-on-failovermethod-repo-option-Rh.patch b/SOURCES/0035-Do-not-print-errors-on-failovermethod-repo-option-Rh.patch
new file mode 100644
index 0000000..b9ff0c3
--- /dev/null
+++ b/SOURCES/0035-Do-not-print-errors-on-failovermethod-repo-option-Rh.patch
@@ -0,0 +1,45 @@
+From c4ee580c73375060b6eb5b3414636688e3d601c3 Mon Sep 17 00:00:00 2001
+From: Marek Blaha <mblaha@redhat.com>
+Date: Fri, 10 Jun 2022 15:29:56 +0200
+Subject: [PATCH] Do not print errors on failovermethod repo option
+ (RhBug:2039906)
+
+= changelog =
+msg:           Do not print errors if repository config contains failovermethod option
+type:          bugfix
+resolves:      https://bugzilla.redhat.com/show_bug.cgi?id=2039906
+---
+ libdnf/conf/ConfigRepo.cpp | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/libdnf/conf/ConfigRepo.cpp b/libdnf/conf/ConfigRepo.cpp
+index e98ac0af..0cb52f58 100644
+--- a/libdnf/conf/ConfigRepo.cpp
++++ b/libdnf/conf/ConfigRepo.cpp
+@@ -22,6 +22,8 @@
+ #include "Const.hpp"
+ #include "Config-private.hpp"
+ 
++#include "bgettext/bgettext-lib.h"
++
+ namespace libdnf {
+ 
+ class ConfigRepo::Impl {
+@@ -174,6 +176,14 @@ ConfigRepo::Impl::Impl(Config & owner, ConfigMain & mainConfig)
+     owner.optBinds().add("enabled_metadata", enabled_metadata);
+     owner.optBinds().add("user_agent", user_agent);
+     owner.optBinds().add("countme", countme);
++    owner.optBinds().add("failovermethod", failovermethod,
++        [&](Option::Priority priority, const std::string & value){
++            if (value != "priority") {
++                throw Option::InvalidValue(_("only the value 'priority' is supported."));
++            }
++            failovermethod.set(priority, value);
++        }, nullptr, false
++    );
+     owner.optBinds().add("sslverifystatus", sslverifystatus);
+ }
+ 
+-- 
+2.36.1
+
diff --git a/SOURCES/0036-sack-query.hpp-Add-a-missing-include.patch b/SOURCES/0036-sack-query.hpp-Add-a-missing-include.patch
new file mode 100644
index 0000000..1e3c5c0
--- /dev/null
+++ b/SOURCES/0036-sack-query.hpp-Add-a-missing-include.patch
@@ -0,0 +1,24 @@
+From 9dbd5f8f0ac3d6d3fab9147a3208623cba698682 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hr=C3=A1zk=C3=BD?= <lhrazky@redhat.com>
+Date: Tue, 14 Jun 2022 17:26:44 +0200
+Subject: [PATCH] sack/query.hpp: Add a missing include
+
+---
+ libdnf/sack/query.hpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/libdnf/sack/query.hpp b/libdnf/sack/query.hpp
+index 9e49761c..306b24e3 100644
+--- a/libdnf/sack/query.hpp
++++ b/libdnf/sack/query.hpp
+@@ -26,6 +26,7 @@
+ #include "../hy-types.h"
+ #include "../hy-query.h"
+ #include "../hy-subject.h"
++#include "../nevra.hpp"
+ #include "../repo/solvable/Dependency.hpp"
+ #include "../repo/solvable/DependencyContainer.hpp"
+ #include "../transaction/Swdb.hpp"
+-- 
+2.36.1
+
diff --git a/SOURCES/0037-context-dnf_context_remove-accepts-package-spec-as-d.patch b/SOURCES/0037-context-dnf_context_remove-accepts-package-spec-as-d.patch
new file mode 100644
index 0000000..5c67e98
--- /dev/null
+++ b/SOURCES/0037-context-dnf_context_remove-accepts-package-spec-as-d.patch
@@ -0,0 +1,128 @@
+From 876393d5d0cd5f806415dcdc90168e58e66da916 Mon Sep 17 00:00:00 2001
+From: Jaroslav Rohel <jrohel@redhat.com>
+Date: Mon, 28 Mar 2022 07:29:48 +0200
+Subject: [PATCH] context: dnf_context_remove accepts `<package-spec>` as dnf,
+ unify code
+
+Prior to change, the `dnf_context_remove` function only accepted
+the package name (without globs). It was not possible to enter more detailed
+specifications and thus, for example, select a specific version of the package
+to uninstall - for example, which kernel we want to uninstall.
+This patch adds full `<package-spec>` support as in dnf, including support
+for globs (wildcards) and searching against 'provides' and 'file provides'.
+
+Better error handling for `hy_goal_upgrade_selector` in` dnf_context_update`.
+
+Unification of the function code `dnf_context_install`, `dnf_context_remove`,
+`dnf_context_update`.
+
+= changelog =
+msg: context: Support <package-spec> (NEVRA forms, provides, file provides) including globs in the dnf_context_remove func
+type: enhancement
+resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2084602
+---
+ libdnf/dnf-context.cpp | 46 ++++++++++++++++++++++++------------------
+ 1 file changed, 26 insertions(+), 20 deletions(-)
+
+diff --git a/libdnf/dnf-context.cpp b/libdnf/dnf-context.cpp
+index 6cb0011b..4b055f03 100644
+--- a/libdnf/dnf-context.cpp
++++ b/libdnf/dnf-context.cpp
+@@ -2391,10 +2391,9 @@ dnf_context_run(DnfContext *context, GCancellable *cancellable, GError **error)
+  * Since: 0.1.0
+  **/
+ gboolean
+-dnf_context_install (DnfContext *context, const gchar *name, GError **error) try
++dnf_context_install(DnfContext *context, const gchar *name, GError **error) try
+ {
+     DnfContextPrivate *priv = GET_PRIVATE (context);
+-    g_autoptr(GPtrArray) selector_matches = NULL;
+ 
+     /* create sack and add sources */
+     if (priv->sack == NULL) {
+@@ -2405,7 +2404,7 @@ dnf_context_install (DnfContext *context, const gchar *name, GError **error) try
+ 
+     g_auto(HySubject) subject = hy_subject_create(name);
+     g_auto(HySelector) selector = hy_subject_get_best_selector(subject, priv->sack, NULL, FALSE, NULL);
+-    selector_matches = hy_selector_matches(selector);
++    g_autoptr(GPtrArray) selector_matches = hy_selector_matches(selector);
+     if (selector_matches->len == 0) {
+         g_set_error(error,
+                     DNF_ERROR,
+@@ -2438,31 +2437,33 @@ gboolean
+ dnf_context_remove(DnfContext *context, const gchar *name, GError **error) try
+ {
+     DnfContextPrivate *priv = GET_PRIVATE(context);
+-    GPtrArray *pkglist;
+-    hy_autoquery HyQuery query = NULL;
+-    gboolean ret = TRUE;
+-    guint i;
+ 
+     /* create sack and add repos */
+     if (priv->sack == NULL) {
+         dnf_state_reset(priv->state);
+-        ret = dnf_context_setup_sack(context, priv->state, error);
+-        if (!ret)
++        if (!dnf_context_setup_sack(context, priv->state, error))
+             return FALSE;
+     }
+ 
+-    /* find installed packages to remove */
+-    query = hy_query_create(priv->sack);
+-    query->installed();
+-    hy_query_filter(query, HY_PKG_NAME, HY_EQ, name);
+-    pkglist = hy_query_run(query);
++    libdnf::Query query(priv->sack, libdnf::Query::ExcludeFlags::APPLY_EXCLUDES);
++    query.installed();
++    auto ret = query.filterSubject(name, nullptr, false, true, true, true);
++    if (!ret.first) {
++        g_set_error(error,
++                    DNF_ERROR,
++                    DNF_ERROR_PACKAGE_NOT_FOUND,
++                    "No installed package matches '%s'", name);
++        return FALSE;
++    }
++
++    g_autoptr(GPtrArray) packages = query.run();
+ 
+     /* add each package */
+-    for (i = 0; i < pkglist->len; i++) {
+-        auto pkg = static_cast<DnfPackage *>(g_ptr_array_index(pkglist, i));
++    for (guint i = 0; i < packages->len; i++) {
++        auto pkg = static_cast<DnfPackage *>(g_ptr_array_index(packages, i));
+         hy_goal_erase(priv->goal, pkg);
+     }
+-    g_ptr_array_unref(pkglist);
++
+     return TRUE;
+ } CATCH_TO_GERROR(FALSE)
+ 
+@@ -2493,8 +2494,7 @@ dnf_context_update(DnfContext *context, const gchar *name, GError **error) try
+     }
+ 
+     g_auto(HySubject) subject = hy_subject_create(name);
+-    g_auto(HySelector) selector = hy_subject_get_best_selector(subject, priv->sack, NULL, FALSE,
+-                                                               NULL);
++    g_auto(HySelector) selector = hy_subject_get_best_selector(subject, priv->sack, NULL, FALSE, NULL);
+     g_autoptr(GPtrArray) selector_matches = hy_selector_matches(selector);
+     if (selector_matches->len == 0) {
+         g_set_error(error,
+@@ -2504,8 +2504,14 @@ dnf_context_update(DnfContext *context, const gchar *name, GError **error) try
+         return FALSE;
+     }
+ 
+-    if (hy_goal_upgrade_selector(priv->goal, selector))
++    int ret = hy_goal_upgrade_selector(priv->goal, selector);
++    if (ret != 0) {
++        g_set_error(error,
++                    DNF_ERROR,
++                    ret,
++                    "Ill-formed Selector '%s'", name);
+         return FALSE;
++    }
+ 
+     return TRUE;
+ } CATCH_TO_GERROR(FALSE)
+-- 
+2.36.1
+
diff --git a/SOURCES/0038-context-Fix-doc-dnf_context_install-remove-update-di.patch b/SOURCES/0038-context-Fix-doc-dnf_context_install-remove-update-di.patch
new file mode 100644
index 0000000..379a770
--- /dev/null
+++ b/SOURCES/0038-context-Fix-doc-dnf_context_install-remove-update-di.patch
@@ -0,0 +1,62 @@
+From 44d75a36d7c8a933119e5b63f180a8c23715ec51 Mon Sep 17 00:00:00 2001
+From: Jaroslav Rohel <jrohel@redhat.com>
+Date: Mon, 28 Mar 2022 07:51:45 +0200
+Subject: [PATCH] context: Fix doc dnf_context_install/remove/update/distrosync
+
+Functions do not support groups - only packages are supported.
+
+The `dnf_context_remove` function marks all matching packages for removal
+- not just the oldest one.
+---
+ libdnf/dnf-context.cpp | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/libdnf/dnf-context.cpp b/libdnf/dnf-context.cpp
+index 4b055f03..fe005430 100644
+--- a/libdnf/dnf-context.cpp
++++ b/libdnf/dnf-context.cpp
+@@ -2379,7 +2379,7 @@ dnf_context_run(DnfContext *context, GCancellable *cancellable, GError **error)
+ /**
+  * dnf_context_install:
+  * @context: a #DnfContext instance.
+- * @name: A package or group name, e.g. "firefox" or "@gnome-desktop"
++ * @name: A package specification (NEVRA forms, provide, file provide, globs supported) e.g. "firefox"
+  * @error: A #GError or %NULL
+  *
+  * Finds a remote package and marks it to be installed.
+@@ -2422,12 +2422,12 @@ dnf_context_install(DnfContext *context, const gchar *name, GError **error) try
+ /**
+  * dnf_context_remove:
+  * @context: a #DnfContext instance.
+- * @name: A package or group name, e.g. "firefox" or "@gnome-desktop"
++ * @name: A package specification (NEVRA forms, provide, file provide, globs supported) e.g. "firefox"
+  * @error: A #GError or %NULL
+  *
+  * Finds an installed package and marks it to be removed.
+  *
+- * If multiple packages are available then only the oldest package is removed.
++ * If multiple packages are available, all of them will be removed.
+  *
+  * Returns: %TRUE for success, %FALSE otherwise
+  *
+@@ -2470,7 +2470,7 @@ dnf_context_remove(DnfContext *context, const gchar *name, GError **error) try
+ /**
+  * dnf_context_update:
+  * @context: a #DnfContext instance.
+- * @name: A package or group name, e.g. "firefox" or "@gnome-desktop"
++ * @name: A package specification (NEVRA forms, provide, file provide, globs supported) e.g. "firefox"
+  * @error: A #GError or %NULL
+  *
+  * Finds an installed and remote package and marks it to be updated.
+@@ -2548,7 +2548,7 @@ dnf_context_update_all (DnfContext  *context,
+ /**
+  * dnf_context_distrosync:
+  * @context: a #DnfContext instance.
+- * @name: A package or group name, e.g. "firefox" or "@gnome-desktop"
++ * @name: A package specification (NEVRA forms, provide, file provide, globs supported) e.g. "firefox"
+  * @error: A #GError or %NULL
+  *
+  * Finds an installed and remote package and marks it to be synchronized with remote version.
+-- 
+2.36.1
+
diff --git a/SOURCES/0039-advisory-upgrade-filter-out-advPkgs-with-different-a.patch b/SOURCES/0039-advisory-upgrade-filter-out-advPkgs-with-different-a.patch
new file mode 100644
index 0000000..ad93526
--- /dev/null
+++ b/SOURCES/0039-advisory-upgrade-filter-out-advPkgs-with-different-a.patch
@@ -0,0 +1,100 @@
+From cf4893a0128c567ed1fdd1b02c9cf2b43bfb02f7 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
+Date: Mon, 30 May 2022 08:59:41 +0200
+Subject: [PATCH] advisory upgrade: filter out advPkgs with different arch
+
+This prevents a situation in security upgrades where libsolv cannot
+upgrade dependent pkgs because we ask for an upgrade of different arch:
+
+We can get the following testcase if libdnf has filtered out
+json-c-2-2.el8.x86_64@rhel-8-for-x86_64-baseos-rpms
+(because there is an advisory for already installed json-c-1-1.el8.x86_64) but
+json-c-2-2.el8.i686@rhel-8-for-x86_64-baseos-rpms is not filtered out because
+it has different architecture. The resulting transaction doesn't work.
+
+```
+repo @System -99.-1000 testtags <inline>
+#>=Pkg: bind-libs-lite 1 1.el8 x86_64
+#>=Pkg: json-c 1 1.el8 x86_64
+
+repo rhel-8-for-x86_64-baseos-rpms -99.-1000 testtags <inline>
+#>=Pkg: json-c 2 2.el8 x86_64
+#>=Prv: libjson-c.so.4()(64bit)
+#>
+#>=Pkg: json-c 2 2.el8 i686
+#>=Prv: libjson-c.so.4()
+#>
+#>=Pkg: bind-libs-lite 2 2.el8 x86_64
+#>=Req: libjson-c.so.4()(64bit)
+system x86_64 rpm @System
+job update oneof json-c-1-1.el8.x86_64@@System json-c-2-2.el8.i686@rhel-8-for-x86_64-baseos-rpms bind-libs-lite-2-2.el8.x86_64@rhel-8-for-x86_64-baseos-rpms [forcebest,targeted,setevr,setarch]
+result transaction,problems <inline>
+#>problem f06d81a4 info package bind-libs-lite-2-2.el8.x86_64 requires libjson-c.so.4()(64bit), but none of the providers can be installed
+#>problem f06d81a4 solution 96f9031b allow bind-libs-lite-1-1.el8.x86_64@@System
+#>problem f06d81a4 solution c8daf94f allow json-c-2-2.el8.x86_64@rhel-8-for-x86_64-baseos-rpms
+#>upgrade bind-libs-lite-1-1.el8.x86_64@@System bind-libs-lite-2-2.el8.x86_64@rhel-8-for-x86_64-baseos-rpms
+#>upgrade json-c-1-1.el8.x86_64@@System json-c-2-2.el8.x86_64@rhel-8-for-x86_64-baseos-rpms```
+```
+
+= changelog =
+msg: Filter out advisory pkgs with different arch during advisory upgrade, fixes possible problems in dependency resulution.
+type: bugfix
+resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2088149
+---
+ libdnf/sack/query.cpp | 25 +++++++++++++++++++------
+ 1 file changed, 19 insertions(+), 6 deletions(-)
+
+diff --git a/libdnf/sack/query.cpp b/libdnf/sack/query.cpp
+index ac2736b5..03d39659 100644
+--- a/libdnf/sack/query.cpp
++++ b/libdnf/sack/query.cpp
+@@ -1877,12 +1877,6 @@ Query::Impl::filterAdvisory(const Filter & f, Map *m, int keyname)
+         std::vector<Solvable *> candidates;
+         std::vector<Solvable *> installed_solvables;
+ 
+-        Id id = -1;
+-        while ((id = resultPset->next(id)) != -1) {
+-            candidates.push_back(pool_id2solvable(pool, id));
+-        }
+-        NameArchEVRComparator cmp_key(pool);
+-
+         if (cmp_type & HY_UPGRADE) {
+             Query installed(sack, ExcludeFlags::IGNORE_EXCLUDES);
+             installed.installed();
+@@ -1893,6 +1887,18 @@ Query::Impl::filterAdvisory(const Filter & f, Map *m, int keyname)
+                 installed_solvables.push_back(pool_id2solvable(pool, installed_id));
+             }
+             std::sort(installed_solvables.begin(), installed_solvables.end(), NameArchSolvableComparator);
++            Id id = -1;
++            while ((id = resultPset->next(id)) != -1) {
++                Solvable * s = pool_id2solvable(pool, id);
++                // When doing HY_UPGRADE consider only candidate pkgs that have matching Name and Arch
++                // with some already installed pkg (in other words: some other version of the pkg is already installed).
++                // Otherwise a pkg with different Arch than installed can end up in upgrade set which is wrong.
++                // It can result in dependency issues, reported as: RhBug:2088149.
++                auto low = std::lower_bound(installed_solvables.begin(), installed_solvables.end(), s, NameArchSolvableComparator);
++                if (low != installed_solvables.end() && s->name == (*low)->name && s->arch == (*low)->arch) {
++                    candidates.push_back(s);
++                }
++            }
+ 
+             // Apply security filters only to packages with lower priority - to unify behaviour upgrade
+             // and upgrade-minimal
+@@ -1915,7 +1921,14 @@ Query::Impl::filterAdvisory(const Filter & f, Map *m, int keyname)
+                 }
+             }
+             std::swap(candidates, priority_candidates);
++        } else {
++            Id id = -1;
++            while ((id = resultPset->next(id)) != -1) {
++                candidates.push_back(pool_id2solvable(pool, id));
++            }
+         }
++
++        NameArchEVRComparator cmp_key(pool);
+         std::sort(candidates.begin(), candidates.end(), cmp_key);
+         for (auto & advisoryPkg : pkgs) {
+             if (cmp_type & HY_UPGRADE) {
+-- 
+2.36.1
+
diff --git a/SOURCES/0040-Add-obsoletes-to-filtering-for-advisory-candidates.patch b/SOURCES/0040-Add-obsoletes-to-filtering-for-advisory-candidates.patch
new file mode 100644
index 0000000..e3f7167
--- /dev/null
+++ b/SOURCES/0040-Add-obsoletes-to-filtering-for-advisory-candidates.patch
@@ -0,0 +1,71 @@
+From 652977360c4253faff9e95d35c603b2f585671fe Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
+Date: Tue, 5 Jul 2022 09:02:22 +0200
+Subject: [PATCH] Add obsoletes to filtering for advisory candidates
+
+Patch https://github.com/rpm-software-management/libdnf/pull/1526
+introduced a regression where we no longer do a security upgrade if a
+package A is installed and package B obsoletes A and B is available in two
+versions while there is an advisory for the second version.
+
+Test: https://github.com/rpm-software-management/ci-dnf-stack/pull/1130
+---
+ libdnf/sack/query.cpp | 32 ++++++++++++++++++++++++++++----
+ 1 file changed, 28 insertions(+), 4 deletions(-)
+
+diff --git a/libdnf/sack/query.cpp b/libdnf/sack/query.cpp
+index 03d39659..5355f9f7 100644
+--- a/libdnf/sack/query.cpp
++++ b/libdnf/sack/query.cpp
+@@ -1878,6 +1878,13 @@ Query::Impl::filterAdvisory(const Filter & f, Map *m, int keyname)
+         std::vector<Solvable *> installed_solvables;
+ 
+         if (cmp_type & HY_UPGRADE) {
++            // When doing HY_UPGRADE consider only candidate pkgs that have matching Name and Arch with:
++            // * some already installed pkg (in other words: some other version of the pkg is already installed)
++            // or
++            // * with pkg that obsoletes some already installed (or to be installed in this transaction) pkg
++            // Otherwise a pkg with different Arch than installed can end up in upgrade set which is wrong.
++            // It can result in dependency issues, reported as: RhBug:2088149.
++
+             Query installed(sack, ExcludeFlags::IGNORE_EXCLUDES);
+             installed.installed();
+             installed.addFilter(HY_PKG_LATEST_PER_ARCH, HY_EQ, 1);
+@@ -1887,13 +1894,30 @@ Query::Impl::filterAdvisory(const Filter & f, Map *m, int keyname)
+                 installed_solvables.push_back(pool_id2solvable(pool, installed_id));
+             }
+             std::sort(installed_solvables.begin(), installed_solvables.end(), NameArchSolvableComparator);
++
++            Query obsoletes(sack, ExcludeFlags::IGNORE_EXCLUDES);
++            obsoletes.addFilter(HY_PKG, HY_EQ, resultPset);
++            obsoletes.available();
++
++            Query possibly_obsoleted(sack, ExcludeFlags::IGNORE_EXCLUDES);
++            possibly_obsoleted.addFilter(HY_PKG, HY_EQ, resultPset);
++            possibly_obsoleted.addFilter(HY_PKG_UPGRADES, HY_EQ, 1);
++            possibly_obsoleted.queryUnion(installed);
++            possibly_obsoleted.apply();
++
++            obsoletes.addFilter(HY_PKG_OBSOLETES, HY_EQ, possibly_obsoleted.runSet());
++            obsoletes.apply();
++            Id obsoleted_id = -1;
++            // Add to candidates resultPset pkgs that obsolete some installed (or to be installed in this transaction) pkg
++            while ((obsoleted_id = obsoletes.pImpl->result->next(obsoleted_id)) != -1) {
++                Solvable * s = pool_id2solvable(pool, obsoleted_id);
++                candidates.push_back(s);
++            }
++
+             Id id = -1;
++            // Add to candidates resultPset pkgs that match name and arch with some already installed pkg
+             while ((id = resultPset->next(id)) != -1) {
+                 Solvable * s = pool_id2solvable(pool, id);
+-                // When doing HY_UPGRADE consider only candidate pkgs that have matching Name and Arch
+-                // with some already installed pkg (in other words: some other version of the pkg is already installed).
+-                // Otherwise a pkg with different Arch than installed can end up in upgrade set which is wrong.
+-                // It can result in dependency issues, reported as: RhBug:2088149.
+                 auto low = std::lower_bound(installed_solvables.begin(), installed_solvables.end(), s, NameArchSolvableComparator);
+                 if (low != installed_solvables.end() && s->name == (*low)->name && s->arch == (*low)->arch) {
+                     candidates.push_back(s);
+-- 
+2.36.1
+
diff --git a/SOURCES/0041-Update-translations-RHEL-8.7.patch b/SOURCES/0041-Update-translations-RHEL-8.7.patch
new file mode 100644
index 0000000..5fc5b2a
--- /dev/null
+++ b/SOURCES/0041-Update-translations-RHEL-8.7.patch
@@ -0,0 +1,6107 @@
+From 201d67559f2968ef9da503f751c72ded17e6f730 Mon Sep 17 00:00:00 2001
+From: Marek Blaha <mblaha@redhat.com>
+Date: Wed, 14 Sep 2022 09:47:13 +0200
+Subject: [PATCH] Update translations RHEL 8.7
+
+---
+ po/fr.po      | 590 ++++++++++++++++++++++++-----------
+ po/ja.po      | 643 ++++++++++++++++++++++++++++-----------
+ po/ko.po      | 828 ++++++++++++++++++++++++++++++++------------------
+ po/libdnf.pot | 504 +++++++++++++++++++++---------
+ po/zh_CN.po   | 752 +++++++++++++++++++++++++++++----------------
+ 5 files changed, 2276 insertions(+), 1041 deletions(-)
+
+diff --git a/po/fr.po b/po/fr.po
+index 055cdaff..ba1ee96b 100644
+--- a/po/fr.po
++++ b/po/fr.po
+@@ -2,23 +2,26 @@
+ # José Fournier <jaaf64@zoraldia.com>, 2016. #zanata
+ # José Fournier <jaaf64@zoraldia.com>, 2017. #zanata
+ # Jérôme Fenal <jfenal@gmail.com>, 2017. #zanata
+-# Ludek Janda <ljanda@redhat.com>, 2018. #zanata
++# Ludek Janda <ljanda@redhat.com>, 2018. #zanata, 2021.
+ # Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>, 2019. #zanata
+ # Julien Humbert <julroy67@gmail.com>, 2020.
++# Sundeep Anand <suanand@redhat.com>, 2021.
++# Titouan Bénard <itotutona@evta.fr>, 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 <julroy67@gmail.com>\n"
+-"Language-Team: French <https://translate.fedoraproject.org/projects/dnf/libdnf-dnf-4-master/fr/>\n"
++"POT-Creation-Date: 2022-08-30 14:26+0200\n"
++"PO-Revision-Date: 2021-10-10 00:45+0000\n"
++"Last-Translator: Titouan Bénard <itotutona@evta.fr>\n"
++"Language-Team: French <https://translate.fedoraproject.org/projects/dnf/"
++"libdnf-rhel-8/fr/>\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,34 @@ 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/ConfigRepo.cpp:182
++msgid "only the value 'priority' is supported."
++msgstr ""
++
++#: 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 +80,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 +110,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:3176 libdnf/dnf-context.cpp:3185
++#, 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:3194 libdnf/dnf-context.cpp:3212
++#, 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:3259
++#, 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:3262
++#, c-format
++msgid "Modular dependency problem: %s"
++msgstr "Problème de dépendance modulaire : %s"
++
++#: libdnf/dnf-context.cpp:3296 libdnf/dnf-context.cpp:3320
++#: libdnf/dnf-context.cpp:3331 libdnf/dnf-context.cpp:3370
++#: libdnf/dnf-context.cpp:3386 libdnf/dnf-context.cpp:3418
++#: libdnf/dnf-context.cpp:3462 libdnf/dnf-context.cpp:3472
++#, c-format
++msgid "Unable to resolve argument '%s'"
++msgstr "Impossible de résoudre le paramètre ’%s’"
++
++#: libdnf/dnf-context.cpp:3303
++#, 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:3317
++#, 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:3328
++#, 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:3359 libdnf/dnf-context.cpp:3451
++#: libdnf/dnf-context.cpp:3564
++msgid "No modular data available"
++msgstr "Aucune donnée modulaire disponible"
++
++#: libdnf/dnf-context.cpp:3376
++#, c-format
++msgid "Ignoring unneeded information in argument: '%s'"
++msgstr "Ignorer les informations inutiles dans l'argumentation : '%s'"
++
++#: libdnf/dnf-context.cpp:3414
++#, 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:3426
++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:3501
++#, 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:3535
++msgid "Problems appeared for module install request"
++msgstr "Des problèmes sont apparus pour la demande d'installation du module"
++
++#: libdnf/dnf-context.cpp:3595
++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:3597
++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:3633
++#, 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:3637
++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 <module_name>' 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 "
++"<module_name>’. 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 +311,126 @@ 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:252
++msgid "repo_add_solv() has failed."
++msgstr "repo_add_solv() a échoué."
++
++#: libdnf/dnf-sack.cpp:416
++#, c-format
++msgid "Loading extension cache %s (%d) failed: "
++msgstr ""
++
++#: libdnf/dnf-sack.cpp:430
+ #, 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:440
+ #, c-format
+ msgid "failed to open: %s"
+ msgstr "n’a pas pu ouvrir : %s"
+ 
+-#: libdnf/dnf-sack.cpp:501
++#: libdnf/dnf-sack.cpp:519
+ #, 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:529
+ #, 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:551
+ #, c-format
+-msgid "write_main() failed writing data: %i"
+-msgstr "write_main() n’a pu écrire les données : %i"
++msgid "While writing primary cache %s repowriter write failed: %i, error: %s"
++msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:540
+-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:561
++#, fuzzy, c-format
++#| msgid "failed opening tmp file: %s"
++msgid "Failed closing tmp file %s: %s"
++msgstr "n’a pas pu ouvrir le fichier tmp : %s"
+ 
+-#: libdnf/dnf-sack.cpp:605
++#: libdnf/dnf-sack.cpp:571
++#, c-format
++msgid "Failed to use newly written primary cache: %s: "
++msgstr ""
++
++#: libdnf/dnf-sack.cpp:577
++#, c-format
++msgid "Failed to use newly written primary cache: %s"
++msgstr ""
++
++#: libdnf/dnf-sack.cpp:627
+ #, 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:667
+ #, c-format
+-msgid "write_ext(%1$d) has failed: %2$d"
+-msgstr "write_ext(%1$d) a échoué : %2$d"
++msgid ""
++"While writing extension cache %s (%d): repowriter write failed: %i, error: %s"
++msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:678
++#: libdnf/dnf-sack.cpp:677
++#, c-format
++msgid "While writing extension cache (%d): cannot close temporary file: %s"
++msgstr ""
++
++#: libdnf/dnf-sack.cpp:693
++#, c-format
++msgid "Failed to use newly written extension cache: %s (%d): "
++msgstr ""
++
++#: libdnf/dnf-sack.cpp:700
++#, c-format
++msgid "Failed to use newly written extension cache: %s (%d)"
++msgstr ""
++
++#: libdnf/dnf-sack.cpp:741
+ 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:750
+ #, 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
+-msgid "repo_add_solv() has failed."
+-msgstr "repo_add_solv() a échoué."
++#: libdnf/dnf-sack.cpp:765
++#, c-format
++msgid "While loading repository failed to use %s: "
++msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:714
++#: libdnf/dnf-sack.cpp:776
+ msgid "loading of MD_TYPE_PRIMARY has failed."
+ msgstr "échec du chargement du MD_TYPE_PRIMARY."
+ 
+-#: libdnf/dnf-sack.cpp:727
+-msgid "repo_add_repomdxml/rpmmd() has failed."
+-msgstr "repo_add_repomdxml/rpmmd() a échoué."
++#: libdnf/dnf-sack.cpp:788
++#, fuzzy, c-format
++#| msgid "Loading plugin file=\"%s\""
++msgid "Loading repomd has failed: %s"
++msgstr "Chargement du fichier d’extension fichier=« %s »"
++
++#: libdnf/dnf-sack.cpp:799
++#, fuzzy, c-format
++#| msgid "Loading plugin file=\"%s\""
++msgid "Loading primary has failed: %s"
++msgstr "Chargement du fichier d’extension fichier=« %s »"
+ 
+-#: libdnf/dnf-sack.cpp:794
++#: libdnf/dnf-sack.cpp:865
+ msgid "failed to auto-detect architecture"
+ msgstr "n’a pu auto-détecter l’architecture"
+ 
+-#: libdnf/dnf-sack.cpp:919
++#: libdnf/dnf-sack.cpp:1030
+ #, 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:1807
+ msgid "failed loading RPMDB"
+ msgstr "n’a pu télécharger RPMDB"
+ 
+-#: libdnf/dnf-sack.cpp:2403
++#: libdnf/dnf-sack.cpp:2532
+ #, c-format
+ msgid "No module defaults found: %s"
+ msgstr "Aucun module par défaut n’a été trouvé : %s"
+@@ -331,31 +503,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:485
+ #, c-format
+ msgid "cannot open directory %1$s: %2$s"
+ msgstr "impossible d’ouvrir le dossier %1$s : %2$s"
+@@ -365,283 +536,296 @@ 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:181
++#, c-format
++msgid "Libsolv's solv_toolversion is: %zu long but we expect max of: %zu"
++msgstr ""
++
++#: libdnf/hy-iutil.cpp:408
+ #, 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:416
+ #, 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:462
+ #, 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:497
+ #, 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 +834,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 +928,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 +978,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 +992,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,22 +1163,22 @@ 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"
+ 
+-#: libdnf/transaction/TransactionItem.cpp:147
++#: libdnf/transaction/TransactionItem.cpp:146
+ msgid "Attempt to insert transaction item into completed transaction"
+ msgstr ""
+ "Tentative d’insérer un élément de transaction dans une transaction achevée"
+ 
+-#: libdnf/transaction/TransactionItem.cpp:218
++#: libdnf/transaction/TransactionItem.cpp:217
+ msgid "Attempt to update transaction item in completed transaction"
+ msgstr ""
+ "Tentative de mettre à jour un élément de transaction dans une transaction "
+@@ -973,8 +1213,20 @@ msgid "Can't add console output to unsaved transaction"
+ msgstr ""
+ "Ne peut pas ajouter une sortie de console à une transaction non enregistrée"
+ 
++#~ msgid "failed to add solv"
++#~ msgstr "n’a pu ajouter solv"
++
++#~ msgid "write_main() failed writing data: %i"
++#~ msgstr "write_main() n’a pu écrire les données : %i"
++
++#~ msgid "write_main() failed to re-load written solv file"
++#~ msgstr "write_main() n’a pas pu charger à nouveau le fichier solv"
++
++#~ msgid "write_ext(%1$d) has failed: %2$d"
++#~ msgstr "write_ext(%1$d) a échoué : %2$d"
++
++#~ msgid "repo_add_repomdxml/rpmmd() has failed."
++#~ msgstr "repo_add_repomdxml/rpmmd() a échoué."
++
+ #~ 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 b9064ee6..94d4ce5e 100644
+--- a/po/ja.po
++++ b/po/ja.po
+@@ -1,20 +1,23 @@
+ # Casey Jones <nahareport@live.com>, 2018. #zanata
+-# Ludek Janda <ljanda@redhat.com>, 2018. #zanata
++# Ludek Janda <ljanda@redhat.com>, 2018. #zanata, 2021.
+ # Casey Jones <nahareport@yahoo.com>, 2020.
++# Sundeep Anand <suanand@redhat.com>, 2021.
++# Transtats <suanand@redhat.com>, 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-05-05 09:40+0000\n"
+-"Last-Translator: Casey Jones <nahareport@yahoo.com>\n"
+-"Language-Team: Japanese <https://translate.fedoraproject.org/projects/dnf/libdnf-dnf-4-master/ja/>\n"
++"POT-Creation-Date: 2022-08-30 14:26+0200\n"
++"PO-Revision-Date: 2022-09-06 07:19+0000\n"
++"Last-Translator: Transtats <suanand@redhat.com>\n"
++"Language-Team: Japanese <https://translate.fedoraproject.org/projects/dnf/"
++"libdnf-rhel-8/ja/>\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.14\n"
+ 
+ #: libdnf/conf/ConfigMain.cpp:62 libdnf/conf/OptionSeconds.cpp:40
+ msgid "no value specified"
+@@ -23,7 +26,7 @@ msgstr "値が指定されていません"
+ #: libdnf/conf/ConfigMain.cpp:67 libdnf/conf/OptionSeconds.cpp:48
+ #, c-format
+ msgid "seconds value '%s' must not be negative"
+-msgstr "2個目の値 '%s' は負の数にしないでください"
++msgstr "2 個目の値 '%s' は負の数にしないでください"
+ 
+ #: libdnf/conf/ConfigMain.cpp:71
+ #, c-format
+@@ -35,17 +38,34 @@ 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/ConfigRepo.cpp:182
++msgid "only the value 'priority' is supported."
++msgstr "「priority」の値のみがサポートされます。"
++
++#: 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 +76,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 +106,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:3176 libdnf/dnf-context.cpp:3185
++#, c-format
++msgid "Cannot enable more streams from module '%s' at the same time"
++msgstr "モジュール '%s' から、さらにストリームを同時に有効にできません"
++
++#: libdnf/dnf-context.cpp:3194 libdnf/dnf-context.cpp:3212
++#, 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:3259
++#, c-format
++msgid "Modular dependency problem with Defaults: %s"
++msgstr "デフォルトのモジュラー依存問題: %s"
++
++#: libdnf/dnf-context.cpp:3262
++#, c-format
++msgid "Modular dependency problem: %s"
++msgstr "モジュラーの依存に関する問題: %s"
++
++#: libdnf/dnf-context.cpp:3296 libdnf/dnf-context.cpp:3320
++#: libdnf/dnf-context.cpp:3331 libdnf/dnf-context.cpp:3370
++#: libdnf/dnf-context.cpp:3386 libdnf/dnf-context.cpp:3418
++#: libdnf/dnf-context.cpp:3462 libdnf/dnf-context.cpp:3472
++#, c-format
++msgid "Unable to resolve argument '%s'"
++msgstr "引数 '%s' を解決できません"
++
++#: libdnf/dnf-context.cpp:3303
++#, c-format
++msgid ""
++"Only module name is required. Ignoring unneeded information in argument: '%s'"
++msgstr "モジュール名のみが必要です。引数の不必要な情報は無視します: '%s'"
++
++#: libdnf/dnf-context.cpp:3317
++#, c-format
++msgid "Cannot reset module '%s': State of module already modified"
++msgstr ""
++"モジュール '%s' をリセットできません。モジュールの状態はすでに変更されていま"
++"す"
++
++#: libdnf/dnf-context.cpp:3328
++#, c-format
++msgid "Cannot disable module '%s': State of module already modified"
++msgstr ""
++"モジュール '%s' を無効にできません。モジュールの状態はすでに変更されています"
++
++#: libdnf/dnf-context.cpp:3359 libdnf/dnf-context.cpp:3451
++#: libdnf/dnf-context.cpp:3564
++msgid "No modular data available"
++msgstr "モジュールデータは利用できません"
++
++#: libdnf/dnf-context.cpp:3376
++#, c-format
++msgid "Ignoring unneeded information in argument: '%s'"
++msgstr "引数の不要な情報は無視します: '%s'"
++
++#: libdnf/dnf-context.cpp:3414
++#, 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:3426
++msgid "Problems appeared for module enable request"
++msgstr "モジュール有効リクエストに発生する問題"
++
++#. this really should never happen; unless the modular repodata is corrupted
++#: libdnf/dnf-context.cpp:3501
++#, c-format
++msgid "Failed to parse module artifact NEVRA '%s'"
++msgstr "モジュールアーティファクト NEVRA '%s' の解析に失敗しました"
++
++#: libdnf/dnf-context.cpp:3535
++msgid "Problems appeared for module install request"
++msgstr "モジュールインストールリクエストに発生する問題"
++
++#: libdnf/dnf-context.cpp:3595
++msgid "Problems appeared for module reset request"
++msgstr "モジュールリセットリクエストに発生する問題"
++
++#: libdnf/dnf-context.cpp:3597
++msgid "Problems appeared for module disable request"
++msgstr "モジュール無効化リクエストに発生する問題"
++
++#: libdnf/dnf-context.cpp:3633
++#, 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:3637
++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 <module_name>' command. After you "
++"reset the module, you can install the other stream."
++msgstr ""
++"有効化されたモジュールのストリームの切り替えはできません。\n"
++"モジュールからすべてのインストールされたコンテンツを削除し、'microdnf module "
++"reset <module_name>' コマンドを使用してモジュールをリセットすることを推奨しま"
++"す。モジュールのリセット後に、別のストリームをインストールできます。"
++
++#: 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 +246,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 +287,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 +304,128 @@ 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:252
++msgid "repo_add_solv() has failed."
++msgstr "repo_add_solv() は失敗しました。"
++
++#: libdnf/dnf-sack.cpp:416
++#, c-format
++msgid "Loading extension cache %s (%d) failed: "
++msgstr "拡張キャッシュの %s (%d) の読み込みに失敗しました: "
++
++#: libdnf/dnf-sack.cpp:430
+ #, 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:440
+ #, c-format
+ msgid "failed to open: %s"
+ msgstr "開くことに失敗しました: %s"
+ 
+-#: libdnf/dnf-sack.cpp:501
++#: libdnf/dnf-sack.cpp:519
+ #, c-format
+ msgid "cannot create temporary file: %s"
+ msgstr "一時ファイルを作成できません: %s"
+ 
+-#: libdnf/dnf-sack.cpp:511
++#: libdnf/dnf-sack.cpp:529
+ #, c-format
+ msgid "failed opening tmp file: %s"
+ msgstr "tmp ファイルを開くことに失敗しました: %s"
+ 
+-#: libdnf/dnf-sack.cpp:523
++#: libdnf/dnf-sack.cpp:551
+ #, c-format
+-msgid "write_main() failed writing data: %i"
+-msgstr "write_main() はデータの書き込みに失敗しました: %i"
++msgid "While writing primary cache %s repowriter write failed: %i, error: %s"
++msgstr "プライマリーキャッシュの %s repowriter 書き込み中に %i "
++"エラーが発生しました。エラー: %s"
+ 
+-#: libdnf/dnf-sack.cpp:540
+-msgid "write_main() failed to re-load written solv file"
+-msgstr "write_main() は、書き込みされた solv ファイルの再ロードに失敗しました"
++#: libdnf/dnf-sack.cpp:561
++#, c-format
++msgid "Failed closing tmp file %s: %s"
++msgstr "tmp ファイル %s の終了に失敗しました: %s"
++
++#: libdnf/dnf-sack.cpp:571
++#, c-format
++msgid "Failed to use newly written primary cache: %s: "
++msgstr "新たに書き込まれたプライマリーキャッシュを使用できません: %s: "
++
++#: libdnf/dnf-sack.cpp:577
++#, c-format
++msgid "Failed to use newly written primary cache: %s"
++msgstr "新たに書き込まれたプライマリーキャッシュを使用できません: %s"
+ 
+-#: libdnf/dnf-sack.cpp:605
++#: libdnf/dnf-sack.cpp:627
+ #, c-format
+ msgid "can not create temporary file %s"
+ msgstr "一時ファイル %s を作成できません"
+ 
+-#: libdnf/dnf-sack.cpp:623
++#: libdnf/dnf-sack.cpp:667
+ #, c-format
+-msgid "write_ext(%1$d) has failed: %2$d"
+-msgstr "write_ext(%1$d) は失敗しました: %2$d"
++msgid ""
++"While writing extension cache %s (%d): repowriter write failed: %i, error: %s"
++msgstr "拡張キャッシュ %s (%d) の書き込み中: repowriter の書き込みに失敗: %i、エラー:"
++" %s"
++
++#: libdnf/dnf-sack.cpp:677
++#, c-format
++msgid "While writing extension cache (%d): cannot close temporary file: %s"
++msgstr "拡張キャッシュの書き込み中 (%d): 一時ファイルを終了できません: %s"
++
++#: libdnf/dnf-sack.cpp:693
++#, c-format
++msgid "Failed to use newly written extension cache: %s (%d): "
++msgstr "新たに書き込まれた拡張キャッシュを使用できませんでした: %s (%d): "
++
++#: libdnf/dnf-sack.cpp:700
++#, c-format
++msgid "Failed to use newly written extension cache: %s (%d)"
++msgstr "新たに書き込まれた拡張キャッシュを使用できませんでした: %s (%d)"
+ 
+-#: libdnf/dnf-sack.cpp:678
++#: libdnf/dnf-sack.cpp:741
+ msgid "null repo md file"
+ msgstr "null repo md ファイル"
+ 
+-#: libdnf/dnf-sack.cpp:687
++#: libdnf/dnf-sack.cpp:750
+ #, c-format
+ msgid "can not read file %1$s: %2$s"
+ msgstr "ファイル %1$s を読み込みできません: %2$s"
+ 
+-#: libdnf/dnf-sack.cpp:701
+-msgid "repo_add_solv() has failed."
+-msgstr "repo_add_solv() は失敗しました。"
++#: libdnf/dnf-sack.cpp:765
++#, c-format
++msgid "While loading repository failed to use %s: "
++msgstr "リポジトリーのロード中に %s が使用できませんでした: "
+ 
+-#: libdnf/dnf-sack.cpp:714
++#: libdnf/dnf-sack.cpp:776
+ msgid "loading of MD_TYPE_PRIMARY has failed."
+ msgstr "MD_TYPE_PRIMARY のロードに失敗しました。"
+ 
+-#: libdnf/dnf-sack.cpp:727
+-msgid "repo_add_repomdxml/rpmmd() has failed."
+-msgstr "repo_add_repomdxml/rpmmd() は失敗しました。"
++#: libdnf/dnf-sack.cpp:788
++#, c-format
++msgid "Loading repomd has failed: %s"
++msgstr "repomd の読み込みに失敗しました: %s"
++
++#: libdnf/dnf-sack.cpp:799
++#, c-format
++msgid "Loading primary has failed: %s"
++msgstr "プライマリーの読み込みに失敗しました: %s"
+ 
+-#: libdnf/dnf-sack.cpp:794
++#: libdnf/dnf-sack.cpp:865
+ msgid "failed to auto-detect architecture"
+ msgstr "アーキテクチャーの自動検出に失敗しました"
+ 
+-#: libdnf/dnf-sack.cpp:919
++#: libdnf/dnf-sack.cpp:1030
+ #, c-format
+ msgid "failed creating cachedir %s"
+ msgstr "cachedir %s の作成に失敗しました"
+ 
+-#: libdnf/dnf-sack.cpp:1696
++#: libdnf/dnf-sack.cpp:1807
+ msgid "failed loading RPMDB"
+ msgstr "RPMDB のロードに失敗しました"
+ 
+-#: libdnf/dnf-sack.cpp:2403
++#: libdnf/dnf-sack.cpp:2532
+ #, c-format
+ msgid "No module defaults found: %s"
+-msgstr ""
++msgstr "モジュールのデフォルトは見つかりませんでした: %s"
+ 
+ #: libdnf/dnf-state.cpp:1184
+ #, c-format
+@@ -288,7 +459,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 +475,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 +495,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:485
+ #, c-format
+ msgid "cannot open directory %1$s: %2$s"
+ msgstr "ディレクトリー %1$s を開くことができません: %2$s"
+@@ -352,272 +529,294 @@ 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:181
++#, c-format
++msgid "Libsolv's solv_toolversion is: %zu long but we expect max of: %zu"
++msgstr "Libsolv の solv_toolversion の長さ: %zu ですが、最大の想定値: %zu です"
++
++#: libdnf/hy-iutil.cpp:408
+ #, 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:416
+ #, 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:462
+ #, c-format
+ msgid "cannot create directory %1$s: %2$s"
+ msgstr "ディレクトリー %1$s を作成できません : %2$s"
+ 
+-#: libdnf/hy-iutil.cpp:411
++#: libdnf/hy-iutil.cpp:497
+ #, 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 +825,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 +903,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 +915,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 +962,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 +974,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,27 +1148,28 @@ 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 "進行中のトランザクションはありません"
+ 
+-#: libdnf/transaction/TransactionItem.cpp:147
++#: libdnf/transaction/TransactionItem.cpp:146
+ msgid "Attempt to insert transaction item into completed transaction"
+ msgstr "完了したトランザクションにトランザクションアイテムの挿入を試みます"
+ 
+-#: libdnf/transaction/TransactionItem.cpp:218
++#: libdnf/transaction/TransactionItem.cpp:217
+ msgid "Attempt to update transaction item in completed transaction"
+ 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"
+@@ -924,8 +1192,21 @@ msgstr "TransactionItem の状態は設定されていません: %s"
+ msgid "Can't add console output to unsaved transaction"
+ msgstr "未保存のトランザクションにコンソールの出力を追加できません"
+ 
++#~ msgid "failed to add solv"
++#~ msgstr "solv の追加に失敗しました"
++
++#~ msgid "write_main() failed writing data: %i"
++#~ msgstr "write_main() はデータの書き込みに失敗しました: %i"
++
++#~ msgid "write_main() failed to re-load written solv file"
++#~ msgstr ""
++#~ "write_main() は、書き込みされた solv ファイルの再ロードに失敗しました"
++
++#~ msgid "write_ext(%1$d) has failed: %2$d"
++#~ msgstr "write_ext(%1$d) は失敗しました: %2$d"
++
++#~ msgid "repo_add_repomdxml/rpmmd() has failed."
++#~ msgstr "repo_add_repomdxml/rpmmd() は失敗しました。"
++
+ #~ 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 48094831..b5df8814 100644
+--- a/po/ko.po
++++ b/po/ko.po
+@@ -1,31 +1,33 @@
+ # 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 <EMAIL@ADDRESS>, YEAR.
+ # Ludek Janda <ljanda@redhat.com>, 2018. #zanata
++# simmon <simmon@nplob.com>, 2021.
++# 김인수 <simmon@nplob.com>, 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: 2018-11-02 05:26+0000\n"
+-"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
+-"Language-Team: Korean\n"
++"POT-Creation-Date: 2022-08-30 14:26+0200\n"
++"PO-Revision-Date: 2022-09-02 02:19+0000\n"
++"Last-Translator: 김인수 <simmon@nplob.com>\n"
++"Language-Team: Korean <https://translate.fedoraproject.org/projects/dnf/"
++"libdnf-rhel-8/ko/>\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.14\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 +39,34 @@ 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/ConfigRepo.cpp:182
++msgid "only the value 'priority' is supported."
++msgstr "'우선순위' 값만 지원됩니다."
+ 
+-#: 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 +77,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 +107,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:3176 libdnf/dnf-context.cpp:3185
++#, c-format
++msgid "Cannot enable more streams from module '%s' at the same time"
++msgstr "동시에 모듈 '%s’에서 다른 스트림을 활성화 할 수 없습니다"
++
++#: libdnf/dnf-context.cpp:3194 libdnf/dnf-context.cpp:3212
++#, 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:3259
++#, c-format
++msgid "Modular dependency problem with Defaults: %s"
++msgstr "기본설정에 모듈 의존성 문제: %s"
++
++#: libdnf/dnf-context.cpp:3262
++#, c-format
++msgid "Modular dependency problem: %s"
++msgstr "모듈러 의존성 문제: %s"
++
++#: libdnf/dnf-context.cpp:3296 libdnf/dnf-context.cpp:3320
++#: libdnf/dnf-context.cpp:3331 libdnf/dnf-context.cpp:3370
++#: libdnf/dnf-context.cpp:3386 libdnf/dnf-context.cpp:3418
++#: libdnf/dnf-context.cpp:3462 libdnf/dnf-context.cpp:3472
++#, c-format
++msgid "Unable to resolve argument '%s'"
++msgstr "인수 %s를 해결 할 수 없습니다"
+ 
+-#: libdnf/dnf-goal.cpp:70
++#: libdnf/dnf-context.cpp:3303
++#, c-format
++msgid ""
++"Only module name is required. Ignoring unneeded information in argument: '%s'"
++msgstr "모듈 이름만 필요합니다. 인수에서 불필요한 정보를 무시합니다: '%s'"
++
++#: libdnf/dnf-context.cpp:3317
++#, c-format
++msgid "Cannot reset module '%s': State of module already modified"
++msgstr "모듈 '%s 를 재설정 할 수 없습니다: 모듈 상태가 이미 변경되었습니다"
++
++#: libdnf/dnf-context.cpp:3328
++#, c-format
++msgid "Cannot disable module '%s': State of module already modified"
++msgstr "모듈 '%s'사용 할 수 없습니다: 모듈 상태는 이미 적재되었습니다"
++
++#: libdnf/dnf-context.cpp:3359 libdnf/dnf-context.cpp:3451
++#: libdnf/dnf-context.cpp:3564
++msgid "No modular data available"
++msgstr "모듈러 자료를 이용 할 수 없습니다"
++
++#: libdnf/dnf-context.cpp:3376
++#, c-format
++msgid "Ignoring unneeded information in argument: '%s'"
++msgstr "인수: '%s'에 불필요한 정보를 무시하기"
++
++#: libdnf/dnf-context.cpp:3414
++#, 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:3426
++msgid "Problems appeared for module enable request"
++msgstr "모듈 활성화 요청에 나타난 문제"
++
++#. this really should never happen; unless the modular repodata is corrupted
++#: libdnf/dnf-context.cpp:3501
++#, c-format
++msgid "Failed to parse module artifact NEVRA '%s'"
++msgstr "모듈 artifact NERVE '%s' 구분 분석에 실패함"
++
++#: libdnf/dnf-context.cpp:3535
++msgid "Problems appeared for module install request"
++msgstr "모듈 설치 요청을 위해 나타난 문제"
++
++#: libdnf/dnf-context.cpp:3595
++msgid "Problems appeared for module reset request"
++msgstr "모듈 초기화 요청을 위해 나나탄 문제"
++
++#: libdnf/dnf-context.cpp:3597
++msgid "Problems appeared for module disable request"
++msgstr "모듈 비활성화 요청을 위해 나타난 문제"
++
++#: libdnf/dnf-context.cpp:3633
++#, 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:3637
++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 <module_name>' command. After you "
++"reset the module, you can install the other stream."
++msgstr ""
++"활성화된 모듈 스트림을 전환 할 수 없습니다.\n"
++"설치된 모든 내용을 모듈에서 제거하고 ‘<module_name>' 명령을 사용하여 모듈을 "
++"재설정하는 것이 좋습니다. 모듈을 재설정한 후, 다른 스트림을 설치 할 수 있습니"
++"다."
++
++#: 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 +244,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 +280,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 +301,126 @@ 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:252
++msgid "repo_add_solv() has failed."
++msgstr "repo_add_solv() 실패하였습니다."
++
++#: libdnf/dnf-sack.cpp:416
+ #, c-format
+-msgid "no %1$s string for %2$s"
+-msgstr ""
++msgid "Loading extension cache %s (%d) failed: "
++msgstr "확장 캐쉬 %s (%d) 적재 중 실패함: "
+ 
+-#: libdnf/dnf-sack.cpp:404
+-msgid "failed to add solv"
+-msgstr "solv를 추가하지 못했습니다."
++#: libdnf/dnf-sack.cpp:430
++#, c-format
++msgid "no %1$s string for %2$s"
++msgstr "%2$s에 %1$s 문자열이 없습니다"
+ 
+-#: libdnf/dnf-sack.cpp:422
++#: libdnf/dnf-sack.cpp:440
+ #, c-format
+ msgid "failed to open: %s"
+ msgstr "열지 못했습니다 : %s"
+ 
+-#: libdnf/dnf-sack.cpp:501
++#: libdnf/dnf-sack.cpp:519
+ #, c-format
+ msgid "cannot create temporary file: %s"
+ msgstr "임시 파일을 만들 수 없습니다. %s"
+ 
+-#: libdnf/dnf-sack.cpp:511
++#: libdnf/dnf-sack.cpp:529
+ #, c-format
+ msgid "failed opening tmp file: %s"
+ msgstr "여는 tmp 파일을 열지 못했습니다. %s"
+ 
+-#: libdnf/dnf-sack.cpp:523
++#: libdnf/dnf-sack.cpp:551
+ #, c-format
+-msgid "write_main() failed writing data: %i"
+-msgstr "write_main() failed writing data: %i"
++msgid "While writing primary cache %s repowriter write failed: %i, error: %s"
++msgstr "기본 캐쉬 %s를 쓰는 동안에 repowriter 쓰기가 실패함: %i, 오류: %s"
+ 
+-#: libdnf/dnf-sack.cpp:540
+-msgid "write_main() failed to re-load written solv file"
+-msgstr "write_main ()이 작성된 solv 파일을 다시로드하지 못했습니다."
++#: libdnf/dnf-sack.cpp:561
++#, c-format
++msgid "Failed closing tmp file %s: %s"
++msgstr "tmp 파일을 닫는데 실패함 %s: %s"
+ 
+-#: libdnf/dnf-sack.cpp:605
++#: libdnf/dnf-sack.cpp:571
++#, c-format
++msgid "Failed to use newly written primary cache: %s: "
++msgstr "새롭게 작성된 기본 캐쉬를 사용하는데 실패함: %s: "
++
++#: libdnf/dnf-sack.cpp:577
++#, c-format
++msgid "Failed to use newly written primary cache: %s"
++msgstr "새롭게 작성된 기본 캐쉬를 사용하는데 실패함: %s"
++
++#: libdnf/dnf-sack.cpp:627
+ #, c-format
+ msgid "can not create temporary file %s"
+ msgstr "임시 파일을 만들 수 없습니다. %s"
+ 
+-#: libdnf/dnf-sack.cpp:623
++#: libdnf/dnf-sack.cpp:667
++#, c-format
++msgid ""
++"While writing extension cache %s (%d): repowriter write failed: %i, error: %s"
++msgstr "확장 캐쉬 %s (%d)를 쓰는 동안: repowriter 쓰기가 실패함: %i, 오류: %s"
++
++#: libdnf/dnf-sack.cpp:677
++#, c-format
++msgid "While writing extension cache (%d): cannot close temporary file: %s"
++msgstr "확장 캐쉬 (%d)를 쓰는 동안: 임시 파일을 닫을 수 없습니다: %s"
++
++#: libdnf/dnf-sack.cpp:693
+ #, c-format
+-msgid "write_ext(%1$d) has failed: %2$d"
+-msgstr "write_ext(%1$d) has failed: %2$d"
++msgid "Failed to use newly written extension cache: %s (%d): "
++msgstr "새롭게 작성된 확장 캐쉬를 사용하는데 실패함: %s (%d): "
+ 
+-#: libdnf/dnf-sack.cpp:678
++#: libdnf/dnf-sack.cpp:700
++#, c-format
++msgid "Failed to use newly written extension cache: %s (%d)"
++msgstr "새롭게 작성된 확장 캐쉬를 사용하는데 실패함: %s (%d)"
++
++#: libdnf/dnf-sack.cpp:741
+ msgid "null repo md file"
+ msgstr "null repo md 파일"
+ 
+-#: libdnf/dnf-sack.cpp:687
++#: libdnf/dnf-sack.cpp:750
+ #, c-format
+ msgid "can not read file %1$s: %2$s"
+ msgstr "파일을 읽을 수 없습니다. %1$s: %2$s"
+ 
+-#: libdnf/dnf-sack.cpp:701
+-msgid "repo_add_solv() has failed."
+-msgstr "repo_add_solv() has failed."
++#: libdnf/dnf-sack.cpp:765
++#, c-format
++msgid "While loading repository failed to use %s: "
++msgstr "저장소를 적재하는 동안에 %s를 사용하는데 실패함: "
+ 
+-#: libdnf/dnf-sack.cpp:714
++#: libdnf/dnf-sack.cpp:776
+ msgid "loading of MD_TYPE_PRIMARY has failed."
+-msgstr ""
++msgstr "MD_TYPE_PRIMARY를 적재하지 못했습니다."
++
++#: libdnf/dnf-sack.cpp:788
++#, c-format
++msgid "Loading repomd has failed: %s"
++msgstr "repomd 적재하는데 실패함: %s"
+ 
+-#: libdnf/dnf-sack.cpp:727
+-msgid "repo_add_repomdxml/rpmmd() has failed."
+-msgstr "repo_add_repomdxml/rpmmd() has failed."
++#: libdnf/dnf-sack.cpp:799
++#, c-format
++msgid "Loading primary has failed: %s"
++msgstr "기본 적재하는데 실패함: %s"
+ 
+-#: libdnf/dnf-sack.cpp:794
++#: libdnf/dnf-sack.cpp:865
+ msgid "failed to auto-detect architecture"
+-msgstr "아키텍처 자동 검색에 실패했습니다."
++msgstr "구조 자동 검색에 실패했습니다"
+ 
+-#: libdnf/dnf-sack.cpp:919
++#: libdnf/dnf-sack.cpp:1030
+ #, c-format
+ msgid "failed creating cachedir %s"
+-msgstr "캐시 된 생성 실패 %s"
++msgstr "캐쉬 된 생성 실패 %s"
+ 
+-#: libdnf/dnf-sack.cpp:1696
++#: libdnf/dnf-sack.cpp:1807
+ msgid "failed loading RPMDB"
+ msgstr "RPMDB로드 실패"
+ 
+-#: libdnf/dnf-sack.cpp:2403
++#: libdnf/dnf-sack.cpp:2532
+ #, c-format
+ msgid "No module defaults found: %s"
+-msgstr ""
++msgstr "모듈 기본 설정을 찾을 수 없습니다: %s"
+ 
+ #: libdnf/dnf-state.cpp:1184
+ #, c-format
+@@ -285,7 +449,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 +463,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 +472,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 +489,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:485
+ #, c-format
+ msgid "cannot open directory %1$s: %2$s"
+ msgstr "디렉토리를 열 수 없습니다. %1$s: %2$s"
+@@ -354,369 +518,421 @@ 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:181
++#, c-format
++msgid "Libsolv's solv_toolversion is: %zu long but we expect max of: %zu"
++msgstr "Libsolv의 solv_toolversion은 %zu 길이지만 최대값은 %zu로 예상됩니다"
++
++#: libdnf/hy-iutil.cpp:408
+ #, 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:416
+ #, 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:462
+ #, 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:497
+ #, 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: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:1569
++#: 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 +940,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:633 libdnf/repo/Repo.cpp:655
++#: libdnf/repo/Repo.cpp:629
++#, c-format
++msgid "Cannot find a valid baseurl for repo: %s"
++msgstr "repo: %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 "열쇠를 나열 할 수 없습니다 : %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"
++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
++#: libdnf/transaction/TransactionItem.cpp:146
+ msgid "Attempt to insert transaction item into completed transaction"
+-msgstr "트랜잭션 항목을 완료된 트랜잭션에 삽입하려고 시도했습니다."
++msgstr "연결 항목을 완료된 연결에 삽입하려고 시도했습니다"
+ 
+-#: libdnf/transaction/TransactionItem.cpp:218
++#: libdnf/transaction/TransactionItem.cpp:217
+ 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 +1162,19 @@ msgstr "TransactionItem 상태가 설정되지 않았습니다. %s"
+ 
+ #: libdnf/transaction/private/Transaction.cpp:243
+ msgid "Can't add console output to unsaved transaction"
+-msgstr "저장되지 않은 트랜잭션에 콘솔 출력을 추가 할 수 없습니다."
++msgstr "저장되지 않은 연결에 콘솔 출력을 추가 할 수 없습니다"
++
++#~ msgid "failed to add solv"
++#~ msgstr "solv를 추가하지 못했습니다"
++
++#~ msgid "write_main() failed writing data: %i"
++#~ msgstr "write_main() 실패한 쓰기 자료: %i"
++
++#~ msgid "write_main() failed to re-load written solv file"
++#~ msgstr "write_main ()이 작성된 solv 파일을 다시 적재하지 못했습니다"
++
++#~ msgid "write_ext(%1$d) has failed: %2$d"
++#~ msgstr "write_ext(%1$d) 실패하였습니다: %2$d"
+ 
+-#~ msgid "failed calculating RPMDB checksum"
+-#~ msgstr "RPMDB 체크섬 계산 실패"
++#~ msgid "repo_add_repomdxml/rpmmd() has failed."
++#~ msgstr "repo_add_repomdxml/rpmmd() 실패하였습니다."
+diff --git a/po/libdnf.pot b/po/libdnf.pot
+index e7c0edfc..f4810576 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-08-30 14:26+0200\n"
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+ "Language-Team: LANGUAGE <LL@li.org>\n"
+@@ -37,17 +37,34 @@ 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/ConfigRepo.cpp:182
++msgid "only the value 'priority' is supported."
++msgstr ""
++
++#: 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 +75,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 +105,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:3176 libdnf/dnf-context.cpp:3185
++#, c-format
++msgid "Cannot enable more streams from module '%s' at the same time"
++msgstr ""
++
++#: libdnf/dnf-context.cpp:3194 libdnf/dnf-context.cpp:3212
++#, c-format
++msgid ""
++"Cannot enable module '%1$s' stream '%2$s': State of module already modified"
++msgstr ""
++
++#: libdnf/dnf-context.cpp:3259
++#, c-format
++msgid "Modular dependency problem with Defaults: %s"
++msgstr ""
++
++#: libdnf/dnf-context.cpp:3262
++#, c-format
++msgid "Modular dependency problem: %s"
++msgstr ""
++
++#: libdnf/dnf-context.cpp:3296 libdnf/dnf-context.cpp:3320
++#: libdnf/dnf-context.cpp:3331 libdnf/dnf-context.cpp:3370
++#: libdnf/dnf-context.cpp:3386 libdnf/dnf-context.cpp:3418
++#: libdnf/dnf-context.cpp:3462 libdnf/dnf-context.cpp:3472
++#, c-format
++msgid "Unable to resolve argument '%s'"
++msgstr ""
++
++#: libdnf/dnf-context.cpp:3303
++#, c-format
++msgid ""
++"Only module name is required. Ignoring unneeded information in argument: '%s'"
++msgstr ""
++
++#: libdnf/dnf-context.cpp:3317
++#, c-format
++msgid "Cannot reset module '%s': State of module already modified"
++msgstr ""
++
++#: libdnf/dnf-context.cpp:3328
++#, c-format
++msgid "Cannot disable module '%s': State of module already modified"
++msgstr ""
++
++#: libdnf/dnf-context.cpp:3359 libdnf/dnf-context.cpp:3451
++#: libdnf/dnf-context.cpp:3564
++msgid "No modular data available"
++msgstr ""
++
++#: libdnf/dnf-context.cpp:3376
++#, c-format
++msgid "Ignoring unneeded information in argument: '%s'"
++msgstr ""
++
++#: libdnf/dnf-context.cpp:3414
++#, c-format
++msgid ""
++"Problem during enablement of dependency tree for module '%1$s' stream "
++"'%2$s': %3$s"
++msgstr ""
++
++#: libdnf/dnf-context.cpp:3426
++msgid "Problems appeared for module enable request"
++msgstr ""
++
++#. this really should never happen; unless the modular repodata is corrupted
++#: libdnf/dnf-context.cpp:3501
++#, c-format
++msgid "Failed to parse module artifact NEVRA '%s'"
++msgstr ""
++
++#: libdnf/dnf-context.cpp:3535
++msgid "Problems appeared for module install request"
++msgstr ""
++
++#: libdnf/dnf-context.cpp:3595
++msgid "Problems appeared for module reset request"
++msgstr ""
++
++#: libdnf/dnf-context.cpp:3597
++msgid "Problems appeared for module disable request"
++msgstr ""
++
++#: libdnf/dnf-context.cpp:3633
++#, c-format
++msgid ""
++"The operation would result in switching of module '%s' stream '%s' to stream "
++"'%s'"
++msgstr ""
++
++#: libdnf/dnf-context.cpp:3637
++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 <module_name>' 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 +289,123 @@ msgstr ""
+ msgid "could not add erase element %1$s(%2$i)"
+ msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:381
++#: libdnf/dnf-sack.cpp:252
++msgid "repo_add_solv() has failed."
++msgstr ""
++
++#: libdnf/dnf-sack.cpp:416
+ #, c-format
+-msgid "no %1$s string for %2$s"
++msgid "Loading extension cache %s (%d) failed: "
+ msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:404
+-msgid "failed to add solv"
++#: libdnf/dnf-sack.cpp:430
++#, c-format
++msgid "no %1$s string for %2$s"
+ msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:422
++#: libdnf/dnf-sack.cpp:440
+ #, c-format
+ msgid "failed to open: %s"
+ msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:501
++#: libdnf/dnf-sack.cpp:519
+ #, c-format
+ msgid "cannot create temporary file: %s"
+ msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:511
++#: libdnf/dnf-sack.cpp:529
+ #, c-format
+ msgid "failed opening tmp file: %s"
+ msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:523
++#: libdnf/dnf-sack.cpp:551
+ #, c-format
+-msgid "write_main() failed writing data: %i"
++msgid "While writing primary cache %s repowriter write failed: %i, error: %s"
+ msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:540
+-msgid "write_main() failed to re-load written solv file"
++#: libdnf/dnf-sack.cpp:561
++#, c-format
++msgid "Failed closing tmp file %s: %s"
++msgstr ""
++
++#: libdnf/dnf-sack.cpp:571
++#, c-format
++msgid "Failed to use newly written primary cache: %s: "
+ msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:605
++#: libdnf/dnf-sack.cpp:577
++#, c-format
++msgid "Failed to use newly written primary cache: %s"
++msgstr ""
++
++#: libdnf/dnf-sack.cpp:627
+ #, c-format
+ msgid "can not create temporary file %s"
+ msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:623
++#: libdnf/dnf-sack.cpp:667
++#, c-format
++msgid ""
++"While writing extension cache %s (%d): repowriter write failed: %i, error: %s"
++msgstr ""
++
++#: libdnf/dnf-sack.cpp:677
++#, c-format
++msgid "While writing extension cache (%d): cannot close temporary file: %s"
++msgstr ""
++
++#: libdnf/dnf-sack.cpp:693
+ #, c-format
+-msgid "write_ext(%1$d) has failed: %2$d"
++msgid "Failed to use newly written extension cache: %s (%d): "
+ msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:678
++#: libdnf/dnf-sack.cpp:700
++#, c-format
++msgid "Failed to use newly written extension cache: %s (%d)"
++msgstr ""
++
++#: libdnf/dnf-sack.cpp:741
+ msgid "null repo md file"
+ msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:687
++#: libdnf/dnf-sack.cpp:750
+ #, c-format
+ msgid "can not read file %1$s: %2$s"
+ msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:701
+-msgid "repo_add_solv() has failed."
++#: libdnf/dnf-sack.cpp:765
++#, c-format
++msgid "While loading repository failed to use %s: "
+ msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:714
++#: libdnf/dnf-sack.cpp:776
+ msgid "loading of MD_TYPE_PRIMARY has failed."
+ msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:727
+-msgid "repo_add_repomdxml/rpmmd() has failed."
++#: libdnf/dnf-sack.cpp:788
++#, c-format
++msgid "Loading repomd has failed: %s"
++msgstr ""
++
++#: libdnf/dnf-sack.cpp:799
++#, c-format
++msgid "Loading primary has failed: %s"
+ msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:794
++#: libdnf/dnf-sack.cpp:865
+ msgid "failed to auto-detect architecture"
+ msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:919
++#: libdnf/dnf-sack.cpp:1030
+ #, c-format
+ msgid "failed creating cachedir %s"
+ msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:1696
++#: libdnf/dnf-sack.cpp:1807
+ msgid "failed loading RPMDB"
+ msgstr ""
+ 
+-#: libdnf/dnf-sack.cpp:2403
++#: libdnf/dnf-sack.cpp:2532
+ #, c-format
+ msgid "No module defaults found: %s"
+ msgstr ""
+@@ -326,26 +477,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:485
+ #, c-format
+ msgid "cannot open directory %1$s: %2$s"
+ msgstr ""
+@@ -355,272 +506,286 @@ 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:181
++#, c-format
++msgid "Libsolv's solv_toolversion is: %zu long but we expect max of: %zu"
++msgstr ""
++
++#: libdnf/hy-iutil.cpp:408
+ #, c-format
+ msgid "Failed renaming %1$s to %2$s: %3$s"
+ msgstr ""
+ 
+-#: libdnf/hy-iutil.cpp:330
++#: libdnf/hy-iutil.cpp:416
+ #, c-format
+ msgid "Failed setting perms on %1$s: %2$s"
+ msgstr ""
+ 
+-#: libdnf/hy-iutil.cpp:376
++#: libdnf/hy-iutil.cpp:462
+ #, c-format
+ msgid "cannot create directory %1$s: %2$s"
+ msgstr ""
+ 
+-#: libdnf/hy-iutil.cpp:411
++#: libdnf/hy-iutil.cpp:497
+ #, 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 +794,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 +880,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 +937,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,21 +1100,21 @@ 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 ""
+ 
+-#: libdnf/transaction/TransactionItem.cpp:147
++#: libdnf/transaction/TransactionItem.cpp:146
+ msgid "Attempt to insert transaction item into completed transaction"
+ msgstr ""
+ 
+-#: libdnf/transaction/TransactionItem.cpp:218
++#: libdnf/transaction/TransactionItem.cpp:217
+ msgid "Attempt to update transaction item in completed transaction"
+ msgstr ""
+ 
+diff --git a/po/zh_CN.po b/po/zh_CN.po
+index 9583b075..17fb2105 100644
+--- a/po/zh_CN.po
++++ b/po/zh_CN.po
+@@ -1,19 +1,22 @@
+-# Charles Lee <lchopn@gmail.com>, 2017. #zanata, 2020.
+-# Ludek Janda <ljanda@redhat.com>, 2018. #zanata
++# Charles Lee <lchopn@gmail.com>, 2017. #zanata, 2020, 2021.
++# Ludek Janda <ljanda@redhat.com>, 2018. #zanata, 2021.
++# Sundeep Anand <suanand@redhat.com>, 2021, 2022.
++# Transtats <suanand@redhat.com>, 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 <lchopn@gmail.com>\n"
+-"Language-Team: Chinese (Simplified) <https://translate.fedoraproject.org/projects/dnf/libdnf-dnf-4-master/zh_CN/>\n"
++"POT-Creation-Date: 2022-08-30 14:26+0200\n"
++"PO-Revision-Date: 2022-09-06 07:19+0000\n"
++"Last-Translator: Transtats <suanand@redhat.com>\n"
++"Language-Team: Chinese (Simplified) <https://translate.fedoraproject.org/"
++"projects/dnf/libdnf-rhel-8/zh_CN/>\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.14\n"
+ 
+ #: libdnf/conf/ConfigMain.cpp:62 libdnf/conf/OptionSeconds.cpp:40
+ msgid "no value specified"
+@@ -32,37 +35,50 @@ 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/ConfigRepo.cpp:182
++msgid "only the value 'priority' is supported."
++msgstr "只支持值 'priority'。"
++
++#: 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 +105,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:3176 libdnf/dnf-context.cpp:3185
++#, c-format
++msgid "Cannot enable more streams from module '%s' at the same time"
++msgstr "无法同时从模块 '%s' 中启用更多流"
++
++#: libdnf/dnf-context.cpp:3194 libdnf/dnf-context.cpp:3212
++#, 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:3259
++#, c-format
++msgid "Modular dependency problem with Defaults: %s"
++msgstr "默认设置的模块依赖性问题:%s"
++
++#: libdnf/dnf-context.cpp:3262
++#, c-format
++msgid "Modular dependency problem: %s"
++msgstr "模块依赖问题:%s"
++
++#: libdnf/dnf-context.cpp:3296 libdnf/dnf-context.cpp:3320
++#: libdnf/dnf-context.cpp:3331 libdnf/dnf-context.cpp:3370
++#: libdnf/dnf-context.cpp:3386 libdnf/dnf-context.cpp:3418
++#: libdnf/dnf-context.cpp:3462 libdnf/dnf-context.cpp:3472
++#, c-format
++msgid "Unable to resolve argument '%s'"
++msgstr "无法解析参数 '%s'"
++
++#: libdnf/dnf-context.cpp:3303
++#, c-format
++msgid ""
++"Only module name is required. Ignoring unneeded information in argument: '%s'"
++msgstr "只需要模块名。忽略参数 '%s' 中的无用信息"
++
++#: libdnf/dnf-context.cpp:3317
++#, c-format
++msgid "Cannot reset module '%s': State of module already modified"
++msgstr "无法重置模块 '%s':已修改的模块状态"
++
++#: libdnf/dnf-context.cpp:3328
++#, c-format
++msgid "Cannot disable module '%s': State of module already modified"
++msgstr "无法禁用模块 '%s':已经修改的模块状态"
++
++#: libdnf/dnf-context.cpp:3359 libdnf/dnf-context.cpp:3451
++#: libdnf/dnf-context.cpp:3564
++msgid "No modular data available"
++msgstr "没有可用的模块数据"
++
++#: libdnf/dnf-context.cpp:3376
++#, c-format
++msgid "Ignoring unneeded information in argument: '%s'"
++msgstr "忽略参数中不需要的信息:'%s'"
++
++#: libdnf/dnf-context.cpp:3414
++#, 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:3426
++msgid "Problems appeared for module enable request"
++msgstr "模块启用请求时出现问题"
++
++#. this really should never happen; unless the modular repodata is corrupted
++#: libdnf/dnf-context.cpp:3501
++#, c-format
++msgid "Failed to parse module artifact NEVRA '%s'"
++msgstr "无法解析模块工件 NEVRA '%s'"
++
++#: libdnf/dnf-context.cpp:3535
++msgid "Problems appeared for module install request"
++msgstr "模块安装请求出现问题"
++
++#: libdnf/dnf-context.cpp:3595
++msgid "Problems appeared for module reset request"
++msgstr "模块重置请求时出现问题"
++
++#: libdnf/dnf-context.cpp:3597
++msgid "Problems appeared for module disable request"
++msgstr "模块禁用请求时出现问题"
++
++#: libdnf/dnf-context.cpp:3633
++#, 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:3637
++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 <module_name>' command. After you "
++"reset the module, you can install the other stream."
++msgstr ""
++"无法切换一个模块已启用的流。 \n"
++"推荐从模块中删除所有已安装的内容,使用 'microdnf module reset <module_name>' "
++"命令重置模块。在重置模块后就可以安装其他流。"
++
++#: 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 +236,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 +291,126 @@ 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:252
++msgid "repo_add_solv() has failed."
++msgstr "repo_add_solv() 已失败。"
++
++#: libdnf/dnf-sack.cpp:416
+ #, c-format
+-msgid "no %1$s string for %2$s"
+-msgstr ""
++msgid "Loading extension cache %s (%d) failed: "
++msgstr "加载扩展缓存 %s (%d) 失败: "
+ 
+-#: libdnf/dnf-sack.cpp:404
+-msgid "failed to add solv"
+-msgstr "添加 solv 失败"
++#: libdnf/dnf-sack.cpp:430
++#, c-format
++msgid "no %1$s string for %2$s"
++msgstr "没有 %2$s 的 %1$s 字符串"
+ 
+-#: libdnf/dnf-sack.cpp:422
++#: libdnf/dnf-sack.cpp:440
+ #, c-format
+ msgid "failed to open: %s"
+ msgstr "打开失败:%s"
+ 
+-#: libdnf/dnf-sack.cpp:501
++#: libdnf/dnf-sack.cpp:519
+ #, c-format
+ msgid "cannot create temporary file: %s"
+ msgstr "不能创建临时文件: %s"
+ 
+-#: libdnf/dnf-sack.cpp:511
++#: libdnf/dnf-sack.cpp:529
+ #, c-format
+ msgid "failed opening tmp file: %s"
+ msgstr "打开 tmp 文件失败: %s"
+ 
+-#: libdnf/dnf-sack.cpp:523
++#: libdnf/dnf-sack.cpp:551
++#, c-format
++msgid "While writing primary cache %s repowriter write failed: %i, error: %s"
++msgstr "写主缓存 %s 时 repowriter 写失败:%i 错误:%s"
++
++#: libdnf/dnf-sack.cpp:561
++#, c-format
++msgid "Failed closing tmp file %s: %s"
++msgstr "关闭临时文件 %s 失败:%s"
++
++#: libdnf/dnf-sack.cpp:571
+ #, c-format
+-msgid "write_main() failed writing data: %i"
+-msgstr "write_main() 写数据失败: %i"
++msgid "Failed to use newly written primary cache: %s: "
++msgstr "使用新写的主缓存失败:%s: "
+ 
+-#: libdnf/dnf-sack.cpp:540
+-msgid "write_main() failed to re-load written solv file"
+-msgstr "write_main() 重新加载写的 solv 文件失败"
++#: libdnf/dnf-sack.cpp:577
++#, c-format
++msgid "Failed to use newly written primary cache: %s"
++msgstr "使用新写的主缓存失败:%s"
+ 
+-#: libdnf/dnf-sack.cpp:605
++#: libdnf/dnf-sack.cpp:627
+ #, c-format
+ msgid "can not create temporary file %s"
+ msgstr "不能创建临时文件 %s"
+ 
+-#: libdnf/dnf-sack.cpp:623
++#: libdnf/dnf-sack.cpp:667
++#, c-format
++msgid ""
++"While writing extension cache %s (%d): repowriter write failed: %i, error: %s"
++msgstr "编写扩展缓存 %s (%d) 时: repowriter 写失败: %i,错误: %s"
++
++#: libdnf/dnf-sack.cpp:677
++#, c-format
++msgid "While writing extension cache (%d): cannot close temporary file: %s"
++msgstr "编写扩展缓存 (%d) 时:无法关闭临时文件:%s"
++
++#: libdnf/dnf-sack.cpp:693
+ #, c-format
+-msgid "write_ext(%1$d) has failed: %2$d"
+-msgstr "write_ext(%1$d) 已失败: %2$d"
++msgid "Failed to use newly written extension cache: %s (%d): "
++msgstr "使用新写的扩展缓存失败:%s (%d): "
+ 
+-#: libdnf/dnf-sack.cpp:678
++#: libdnf/dnf-sack.cpp:700
++#, c-format
++msgid "Failed to use newly written extension cache: %s (%d)"
++msgstr "使用新写的扩展缓存失败:%s (%d)"
++
++#: libdnf/dnf-sack.cpp:741
+ msgid "null repo md file"
+-msgstr "null repo md 文件"
++msgstr "null 存储库 md 文件"
+ 
+-#: libdnf/dnf-sack.cpp:687
++#: libdnf/dnf-sack.cpp:750
+ #, c-format
+ msgid "can not read file %1$s: %2$s"
+ msgstr "不能读文件 %1$s: %2$s"
+ 
+-#: libdnf/dnf-sack.cpp:701
+-msgid "repo_add_solv() has failed."
+-msgstr "repo_add_solv() 已失败。"
++#: libdnf/dnf-sack.cpp:765
++#, c-format
++msgid "While loading repository failed to use %s: "
++msgstr "加载软件仓库时使用 %s 失败: "
+ 
+-#: libdnf/dnf-sack.cpp:714
++#: libdnf/dnf-sack.cpp:776
+ msgid "loading of MD_TYPE_PRIMARY has failed."
+-msgstr ""
++msgstr "加载 MD_TYPE_PRIMARY 失败。"
+ 
+-#: libdnf/dnf-sack.cpp:727
+-msgid "repo_add_repomdxml/rpmmd() has failed."
+-msgstr "repo_add_repomdxml/rpmmd() 已失败。"
++#: libdnf/dnf-sack.cpp:788
++#, c-format
++msgid "Loading repomd has failed: %s"
++msgstr "加载 repomd 失败:%s"
++
++#: libdnf/dnf-sack.cpp:799
++#, c-format
++msgid "Loading primary has failed: %s"
++msgstr "加载主设备失败:%s"
+ 
+-#: libdnf/dnf-sack.cpp:794
++#: libdnf/dnf-sack.cpp:865
+ msgid "failed to auto-detect architecture"
+ msgstr "自动检测架构失败"
+ 
+-#: libdnf/dnf-sack.cpp:919
++#: libdnf/dnf-sack.cpp:1030
+ #, c-format
+ msgid "failed creating cachedir %s"
+ msgstr "无法创建 cachedir %s"
+ 
+-#: libdnf/dnf-sack.cpp:1696
++#: libdnf/dnf-sack.cpp:1807
+ msgid "failed loading RPMDB"
+ msgstr "无法加载 RPMDB"
+ 
+-#: libdnf/dnf-sack.cpp:2403
++#: libdnf/dnf-sack.cpp:2532
+ #, c-format
+ msgid "No module defaults found: %s"
+-msgstr ""
++msgstr "没有找到模块默认设置:%s"
+ 
+ #: libdnf/dnf-state.cpp:1184
+ #, c-format
+@@ -287,11 +444,11 @@ 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 "无法确保 %1$s,因为 repo %2$s 没有找到 (%3$i repos 已加载)"
++msgstr "无法确保 %1$s,因为存储库 %2$s 没有找到 (%3$i 存储库已加载)"
+ 
+ #: libdnf/dnf-transaction.cpp:367
+ msgid "Failed to check untrusted: "
+-msgstr "检查不被信任失败: "
++msgstr "检查不被信任失败 : "
+ 
+ #: libdnf/dnf-transaction.cpp:377
+ #, c-format
+@@ -301,7 +458,7 @@ 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 不能被验证,存储库 %2$s 启用了 GPG: %3$s"
+ 
+ #: libdnf/dnf-transaction.cpp:831 libdnf/dnf-transaction.cpp:903
+ msgid "Failed to get value for CacheDir"
+@@ -310,7 +467,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 +479,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:485
+ #, c-format
+ msgid "cannot open directory %1$s: %2$s"
+ msgstr "无法打开目录 %1$s: %2$s"
+@@ -351,369 +508,419 @@ 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:181
++#, c-format
++msgid "Libsolv's solv_toolversion is: %zu long but we expect max of: %zu"
++msgstr "Libsolv 的 solv_toolversion 为: %zu,但我们预计最大为:%zu"
++
++#: libdnf/hy-iutil.cpp:408
+ #, 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:416
+ #, 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:462
+ #, 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:497
+ #, 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 "默认设置与存储库 '%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:1569
++#: 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 ""
++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 +928,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 +941,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 "存储库 '%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 "存储库 '%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 "无法为存储库找到一个有效的 baseurl:%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 "不能列出 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 已被导入"
++msgstr "存储库 %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。"
++msgstr "存储库 %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"
++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 "仓库: 正在为 %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' 的缓存"
++msgstr "仅启用缓存,但没有 '%s' 的缓存"
+ 
+-#: libdnf/repo/Repo.cpp:1306
++#: libdnf/repo/Repo.cpp:1337
+ #, c-format
+ msgid "repo: downloading from remote: %s"
+-msgstr "repo: 从远程下载: %s"
++msgstr "存储库: 从远程下载: %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,31 +1104,31 @@ 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 "没有事务在进行中"
+ 
+-#: libdnf/transaction/TransactionItem.cpp:147
++#: libdnf/transaction/TransactionItem.cpp:146
+ msgid "Attempt to insert transaction item into completed transaction"
+ msgstr "试图向已完成的事务中插入事务项"
+ 
+-#: libdnf/transaction/TransactionItem.cpp:218
++#: libdnf/transaction/TransactionItem.cpp:217
+ msgid "Attempt to update transaction item in completed transaction"
+ 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"
+-msgstr "Transformer: 无法打开 history persist dir"
++msgstr "转换程序: 无法打开历史持久目录"
+ 
+ #: libdnf/transaction/Transformer.cpp:694
+ msgid "Couldn't find a history database"
+@@ -923,8 +1147,20 @@ msgstr "TransactionItem 状态没有设置:%s"
+ msgid "Can't add console output to unsaved transaction"
+ msgstr "无法向未保存的事务中添加控制台输出"
+ 
++#~ msgid "failed to add solv"
++#~ msgstr "添加 solv 失败"
++
++#~ msgid "write_main() failed writing data: %i"
++#~ msgstr "write_main() 写数据失败: %i"
++
++#~ msgid "write_main() failed to re-load written solv file"
++#~ msgstr "write_main() 重新加载写的 solv 文件失败"
++
++#~ msgid "write_ext(%1$d) has failed: %2$d"
++#~ msgstr "write_ext(%1$d) 已失败: %2$d"
++
++#~ msgid "repo_add_repomdxml/rpmmd() has failed."
++#~ msgstr "repo_add_repomdxml/rpmmd() 已失败。"
++
+ #~ 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.37.3
+
diff --git a/SPECS/libdnf.spec b/SPECS/libdnf.spec
index 795e8f2..96b9ebe 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.2%{?dist}
+Release:        11.1%{?dist}
 Summary:        Library providing simplified C and Python API to libsolv
 License:        LGPLv2+
 URL:            https://github.com/rpm-software-management/libdnf
@@ -86,9 +86,23 @@ 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
-Patch27:        0027-advisory-upgrade-filter-out-advPkgs-with-different-a.patch
-Patch28:        0028-Add-obsoletes-to-filtering-for-advisory-candidates.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
+Patch35:        0035-Do-not-print-errors-on-failovermethod-repo-option-Rh.patch
+Patch36:        0036-sack-query.hpp-Add-a-missing-include.patch
+Patch37:        0037-context-dnf_context_remove-accepts-package-spec-as-d.patch
+Patch38:        0038-context-Fix-doc-dnf_context_install-remove-update-di.patch
+Patch39:        0039-advisory-upgrade-filter-out-advPkgs-with-different-a.patch
+Patch40:        0040-Add-obsoletes-to-filtering-for-advisory-candidates.patch
+Patch41:        0041-Update-translations-RHEL-8.7.patch
+
 
 BuildRequires:  cmake
 BuildRequires:  gcc
@@ -333,14 +347,22 @@ popd
 %endif
 
 %changelog
-* Wed Aug 17 2022 Lukas Hrazky <lhrazky@redhat.com> - 0.63.0-8.2
+* Wed Sep 14 2022 Marek Blaha <mblaha@redhat.com> - 0.63.0-11.1
+- Update translations
+
+* Thu Jul 21 2022 Lukas Hrazky <lhrazky@redhat.com> - 0.63.0-11
 - Add obsoletes to filtering for advisory candidates
 
-* Wed Jun 15 2022 Lukas Hrazky <lhrazky@redhat.com> - 0.63.0-8.1
+* Tue Jun 14 2022 Lukas Hrazky <lhrazky@redhat.com> - 0.63.0-10
+- Do not print errors on failovermethod repo option
+- the dnf_context_remove() function accepts `<package-spec>`, doc updates
 - advisory upgrade: filter out advPkgs with different arch
 
-* Fri Mar 18 2022 Marek Blaha <mblaha@redhat.com> - 0.63.0-8
-- Update translations
+* Wed May 04 2022 Lukas Hrazky <lhrazky@redhat.com> - 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 <pkratoch@redhat.com> - 0.63.0-7
 - Rebuild with new release number