diff --git a/.dnf.metadata b/.dnf.metadata
index 9125cc8..8fa9d1a 100644
--- a/.dnf.metadata
+++ b/.dnf.metadata
@@ -1 +1 @@
-5941a49cfd466aeed4ec882a33647912c2a89245 SOURCES/dnf-4.4.2.tar.gz
+f9c31cf46094c4bbf021e1872a9eb72d8a3f2136 SOURCES/dnf-4.7.0.tar.gz
diff --git a/.gitignore b/.gitignore
index 378380e..912e1fc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/dnf-4.4.2.tar.gz
+SOURCES/dnf-4.7.0.tar.gz
diff --git a/SOURCES/0001-Set-top-level-directory-for-unittest.patch b/SOURCES/0001-Set-top-level-directory-for-unittest.patch
new file mode 100644
index 0000000..7bb4f80
--- /dev/null
+++ b/SOURCES/0001-Set-top-level-directory-for-unittest.patch
@@ -0,0 +1,26 @@
+From 6eff0fe7850624791f049a17a41d779915f30f94 Mon Sep 17 00:00:00 2001
+From: Pavla Kratochvilova <pkratoch@redhat.com>
+Date: Wed, 19 May 2021 12:58:30 +0200
+Subject: [PATCH] Set top-level directory for unittest
+
+In some build environments, the top-level directory is not added to
+the sys.path and the tests fail. This fixes the issue.
+---
+ tests/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
+index 77a4894..b7f4031 100644
+--- a/tests/CMakeLists.txt
++++ b/tests/CMakeLists.txt
+@@ -1,6 +1,6 @@
+ ADD_TEST(
+     NAME test
+-    COMMAND ${PYTHON_EXECUTABLE} -m unittest discover -s tests
++    COMMAND ${PYTHON_EXECUTABLE} -m unittest discover -s tests -t ${PROJECT_SOURCE_DIR}
+     WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
+ 
+ # For libdnf built with sanitizers, has no effect otherwise.
+--
+libgit2 1.0.1
+
diff --git a/SOURCES/0001-tests-SQL-write-a-readonly-folder.patch b/SOURCES/0001-tests-SQL-write-a-readonly-folder.patch
deleted file mode 100644
index 39780f4..0000000
--- a/SOURCES/0001-tests-SQL-write-a-readonly-folder.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 66e08009b8254462cb2c454ff2320355633c20d6 Mon Sep 17 00:00:00 2001
-From: Nicola Sella <nsella@redhat.com>
-Date: Tue, 10 Nov 2020 12:11:17 +0100
-Subject: [PATCH 1/1] [tests] SQL write a readonly folder
-
-fixes on rhel8.4 for test_dnf_base and test_dnf_db_group
-libdnf._error.Error: SQLite error on "/var/lib/dnf/history.sqlite":
-Executing an SQL statement failed: attempt to write a readonly
-database
-
-=changelog=
-msg: fixes SQL write a readonly folder
-type: bugfix
----
- tests/api/test_dnf_base.py     | 1 +
- tests/api/test_dnf_db_group.py | 1 +
- 2 files changed, 2 insertions(+)
-
-diff --git a/tests/api/test_dnf_base.py b/tests/api/test_dnf_base.py
-index b1cf49fb..ca71b75c 100644
---- a/tests/api/test_dnf_base.py
-+++ b/tests/api/test_dnf_base.py
-@@ -14,6 +14,7 @@ from .common import TOUR_4_4
- class DnfBaseApiTest(TestCase):
-     def setUp(self):
-         self.base = dnf.Base(dnf.conf.Conf())
-+        self.base.conf.persistdir = "/tmp/tests"
- 
-     def tearDown(self):
-         self.base.close()
-diff --git a/tests/api/test_dnf_db_group.py b/tests/api/test_dnf_db_group.py
-index 447fd121..e1828cb4 100644
---- a/tests/api/test_dnf_db_group.py
-+++ b/tests/api/test_dnf_db_group.py
-@@ -12,6 +12,7 @@ from .common import TestCase
- class DnfRPMTransactionApiTest(TestCase):
-     def setUp(self):
-         self.base = dnf.Base(dnf.conf.Conf())
-+        self.base.conf.persistdir = "/tmp/tests"
-         self.base.fill_sack(False, False)
-         self.base.resolve()
-         self.rpmTrans = self.base.transaction
--- 
-2.26.2
-
diff --git a/SOURCES/0002-Revert-Fix-setopt-cachedir-writing-outside-of-installroot.patch b/SOURCES/0002-Revert-Fix-setopt-cachedir-writing-outside-of-installroot.patch
deleted file mode 100644
index a844311..0000000
--- a/SOURCES/0002-Revert-Fix-setopt-cachedir-writing-outside-of-installroot.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From c2e4901cec947e5be2e5ff5afa22691841d00bdc 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, 10 Nov 2020 13:46:57 +0100
-Subject: [PATCH] Revert "Fix --setopt=cachedir writing outside of installroot"
-
-This reverts commit 70fffff61f7a006d406b46adc592d21a685c12a8.
-
-The commit breaks resetting excludes with an empty --exclude= CLI switch
-if the excludes were set in the config file.
----
- dnf/cli/cli.py | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/dnf/cli/cli.py b/dnf/cli/cli.py
-index b5f7bca07b..5878c2aa15 100644
---- a/dnf/cli/cli.py
-+++ b/dnf/cli/cli.py
-@@ -974,6 +974,8 @@ def configure(self, args, option_parser=None):
- 
-         self.base.configure_plugins()
- 
-+        self.base.conf._configure_from_options(opts)
-+
-         self.command.configure()
- 
-         if self.base.conf.destdir:
diff --git a/SOURCES/0002-dnfrpmmiscutilspy-fix-usage-of-_.patch b/SOURCES/0002-dnfrpmmiscutilspy-fix-usage-of-_.patch
new file mode 100644
index 0000000..0089bc6
--- /dev/null
+++ b/SOURCES/0002-dnfrpmmiscutilspy-fix-usage-of-_.patch
@@ -0,0 +1,36 @@
+From 8823feb5f42f8c579fdab80d9e22112b88d0ad2b Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Tue, 4 May 2021 22:03:30 +0200
+Subject: [PATCH] dnf/rpm/miscutils.py: fix usage of _()
+
+Specifically:
+- an import of _ was missing
+- _ was reused for a different purpose
+---
+ dnf/rpm/miscutils.py | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/dnf/rpm/miscutils.py b/dnf/rpm/miscutils.py
+index 235aaf2..7e33d4c 100644
+--- a/dnf/rpm/miscutils.py
++++ b/dnf/rpm/miscutils.py
+@@ -22,6 +22,7 @@ import subprocess
+ import logging
+ 
+ from dnf.i18n import ucd
++from dnf.i18n import _
+ from shutil import which
+ 
+ 
+@@ -46,7 +47,7 @@ def _verifyPkgUsingRpmkeys(package, installroot):
+             env={'LC_ALL': 'C'},
+             stdout=subprocess.PIPE,
+             cwd='/') as p:
+-        data, _ = p.communicate()
++        data, err = p.communicate()
+     if p.returncode != 0 or data != (package.encode('ascii', 'strict') + b': digests signatures OK\n'):
+         return 0
+     else:
+--
+libgit2 1.0.1
+
diff --git a/SOURCES/0003-Pass-the-package-to-rpmkeys-stdin.patch b/SOURCES/0003-Pass-the-package-to-rpmkeys-stdin.patch
new file mode 100644
index 0000000..f8de68f
--- /dev/null
+++ b/SOURCES/0003-Pass-the-package-to-rpmkeys-stdin.patch
@@ -0,0 +1,56 @@
+From 134b095b0833956cadfc02a9a1e7ca1344cd5aaa Mon Sep 17 00:00:00 2001
+From: Demi Marie Obenour <demi@invisiblethingslab.com>
+Date: Tue, 27 Apr 2021 21:07:19 -0400
+Subject: [PATCH] Pass the package to rpmkeys stdin
+
+This avoids having to compute the expected stdout value, which will
+always be the constant "-: digests signatures OK\n".
+---
+ dnf/rpm/miscutils.py | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/dnf/rpm/miscutils.py b/dnf/rpm/miscutils.py
+index 7e33d4c..5f2621c 100644
+--- a/dnf/rpm/miscutils.py
++++ b/dnf/rpm/miscutils.py
+@@ -29,7 +29,8 @@ from shutil import which
+ logger = logging.getLogger('dnf')
+ 
+ 
+-def _verifyPkgUsingRpmkeys(package, installroot):
++def _verifyPkgUsingRpmkeys(package, installroot, fdno):
++    os.lseek(fdno, 0, os.SEEK_SET)
+     rpmkeys_binary = '/usr/bin/rpmkeys'
+     if not os.path.isfile(rpmkeys_binary):
+         rpmkeys_binary = which("rpmkeys")
+@@ -40,15 +41,16 @@ def _verifyPkgUsingRpmkeys(package, installroot):
+         logger.critical(_('Cannot find rpmkeys executable to verify signatures.'))
+         return 0
+ 
+-    args = ('rpmkeys', '--checksig', '--root', installroot, '--define', '_pkgverify_level all', '--', package)
++    args = ('rpmkeys', '--checksig', '--root', installroot, '--define', '_pkgverify_level all', '-')
+     with subprocess.Popen(
+             args=args,
+             executable=rpmkeys_binary,
+             env={'LC_ALL': 'C'},
++            stdin=fdno,
+             stdout=subprocess.PIPE,
+             cwd='/') as p:
+         data, err = p.communicate()
+-    if p.returncode != 0 or data != (package.encode('ascii', 'strict') + b': digests signatures OK\n'):
++    if p.returncode != 0 or data != b'-: digests signatures OK\n':
+         return 0
+     else:
+         return 1
+@@ -85,7 +87,7 @@ def checkSig(ts, package):
+ 
+             if siginfo == '(none)':
+                 value = 4
+-            elif "Key ID" in siginfo and _verifyPkgUsingRpmkeys(package, ts.ts.rootDir):
++            elif "Key ID" in siginfo and _verifyPkgUsingRpmkeys(package, ts.ts.rootDir, fdno):
+                 value = 0
+             else:
+                 raise ValueError('Unexpected return value %r from hdr.sprintf when checking signature.' % siginfo)
+--
+libgit2 1.0.1
+
diff --git a/SOURCES/0003-Post-transaction-summary-is-logged-for-API-users-RhBug-1855158.patch b/SOURCES/0003-Post-transaction-summary-is-logged-for-API-users-RhBug-1855158.patch
deleted file mode 100644
index d34928f..0000000
--- a/SOURCES/0003-Post-transaction-summary-is-logged-for-API-users-RhBug-1855158.patch
+++ /dev/null
@@ -1,567 +0,0 @@
-From 9ed390d08a9f2b66f4e352532fa526fc64e329d4 Mon Sep 17 00:00:00 2001
-From: Marek Blaha <mblaha@redhat.com>
-Date: Tue, 28 Jul 2020 09:50:10 +0200
-Subject: [PATCH 1/3] Remove unused loops attribute from
- DepSolveProgressCallBack
-
----
- dnf/cli/output.py | 5 -----
- 1 file changed, 5 deletions(-)
-
-diff --git a/dnf/cli/output.py b/dnf/cli/output.py
-index de188ffbd1..44d5f8b89f 100644
---- a/dnf/cli/output.py
-+++ b/dnf/cli/output.py
-@@ -1987,10 +1987,6 @@ def historyInfoCmdPkgsAltered(self, old, pats=[]):
- class DepSolveProgressCallBack(dnf.callback.Depsolve):
-     """Provides text output callback functions for Dependency Solver callback."""
- 
--    def __init__(self):
--        """requires yum-cli log and errorlog functions as arguments"""
--        self.loops = 0
--
-     def pkg_added(self, pkg, mode):
-         """Print information about a package being added to the
-         transaction set.
-@@ -2037,7 +2033,6 @@ def start(self):
-         process.
-         """
-         logger.debug(_('--> Starting dependency resolution'))
--        self.loops += 1
- 
-     def end(self):
-         """Output a message stating that dependency resolution has finished."""
-
-From 0ee646f4965c597f2832ed3df9d9f0e6546dcc54 Mon Sep 17 00:00:00 2001
-From: Marek Blaha <mblaha@redhat.com>
-Date: Wed, 21 Oct 2020 11:47:43 +0200
-Subject: [PATCH 2/3] Remove unused parameter of _make_lists()
-
----
- dnf/cli/output.py | 7 ++++---
- 1 file changed, 4 insertions(+), 3 deletions(-)
-
-diff --git a/dnf/cli/output.py b/dnf/cli/output.py
-index 44d5f8b89f..af8a968770 100644
---- a/dnf/cli/output.py
-+++ b/dnf/cli/output.py
-@@ -52,7 +52,8 @@
- 
- logger = logging.getLogger('dnf')
- 
--def _make_lists(transaction, goal):
-+
-+def _make_lists(transaction):
-     b = dnf.util.Bunch({
-         'downgraded': [],
-         'erased': [],
-@@ -1101,7 +1102,7 @@ def list_transaction(self, transaction, total_width=None):
-             # in order to display module changes when RPM transaction is empty
-             transaction = []
- 
--        list_bunch = _make_lists(transaction, self.base._goal)
-+        list_bunch = _make_lists(transaction)
-         pkglist_lines = []
-         data = {'n' : {}, 'v' : {}, 'r' : {}}
-         a_wid = 0 # Arch can't get "that big" ... so always use the max.
-@@ -1488,7 +1489,7 @@ def _tsi_or_pkg_nevra_cmp(item1, item2):
-             return (item1.arch > item2.arch) - (item1.arch < item2.arch)
- 
-         out = ''
--        list_bunch = _make_lists(transaction, self.base._goal)
-+        list_bunch = _make_lists(transaction)
- 
-         skipped_conflicts, skipped_broken = self._skipped_packages(
-             report_problems=False, transaction=transaction)
-
-From 865b7183453684de6a25e77fddf5a2d11fbffba8 Mon Sep 17 00:00:00 2001
-From: Marek Blaha <mblaha@redhat.com>
-Date: Wed, 21 Oct 2020 17:59:46 +0200
-Subject: [PATCH 3/3] Post transaction summary is logged for API users
- (RhBug:1855158)
-
-Post transaction summary is always logged into /var/log/dnf.log.
-When transaction is called from cli, the summary is also printed to
-stdout in columns (as previously).
-
-= changelog =
-msg:           Packages installed/removed via DNF API are logged into dnf.log
-type:          enhancement
-resolves:      https://bugzilla.redhat.com/show_bug.cgi?id=1855158
----
- dnf/base.py       |  46 ++++++++++++-
- dnf/cli/cli.py    |   8 ++-
- dnf/cli/output.py | 167 ++++++++--------------------------------------
- dnf/util.py       | 102 +++++++++++++++++++++++++++-
- 4 files changed, 177 insertions(+), 146 deletions(-)
-
-diff --git a/dnf/base.py b/dnf/base.py
-index 075e74265a..c0d7712605 100644
---- a/dnf/base.py
-+++ b/dnf/base.py
-@@ -28,12 +28,12 @@
- import dnf
- import libdnf.transaction
- 
-+from copy import deepcopy
- from dnf.comps import CompsQuery
- from dnf.i18n import _, P_, ucd
- from dnf.util import _parse_specs
- from dnf.db.history import SwdbInterface
- from dnf.yum import misc
--from functools import reduce
- try:
-     from collections.abc import Sequence
- except ImportError:
-@@ -549,7 +549,7 @@ def _ts(self):
-         if self.conf.ignorearch:
-             self._rpm_probfilter.add(rpm.RPMPROB_FILTER_IGNOREARCH)
- 
--        probfilter = reduce(operator.or_, self._rpm_probfilter, 0)
-+        probfilter = functools.reduce(operator.or_, self._rpm_probfilter, 0)
-         self._priv_ts.setProbFilter(probfilter)
-         return self._priv_ts
- 
-@@ -890,6 +890,15 @@ def do_transaction(self, display=()):
-         self._plugins.unload_removed_plugins(self.transaction)
-         self._plugins.run_transaction()
- 
-+        # log post transaction summary
-+        def _pto_callback(action, tsis):
-+            msgs = []
-+            for tsi in tsis:
-+                msgs.append('{}: {}'.format(action, str(tsi)))
-+            return msgs
-+        for msg in dnf.util._post_transaction_output(self, self.transaction, _pto_callback):
-+            logger.debug(msg)
-+
-         return tid
- 
-     def _trans_error_summary(self, errstring):
-@@ -1311,7 +1320,7 @@ def _do_package_lists(self, pkgnarrow='all', patterns=None, showdups=None,
-         if patterns is None or len(patterns) == 0:
-             return list_fn(None)
-         yghs = map(list_fn, patterns)
--        return reduce(lambda a, b: a.merge_lists(b), yghs)
-+        return functools.reduce(lambda a, b: a.merge_lists(b), yghs)
- 
-     def _list_pattern(self, pkgnarrow, pattern, showdups, ignore_case,
-                       reponame=None):
-@@ -2579,6 +2588,37 @@ def setup_loggers(self):
-         """
-         self._logging._setup_from_dnf_conf(self.conf, file_loggers_only=True)
- 
-+    def _skipped_packages(self, report_problems, transaction):
-+        """returns set of conflicting packages and set of packages with broken dependency that would
-+        be additionally installed when --best and --allowerasing"""
-+        if self._goal.actions & (hawkey.INSTALL | hawkey.UPGRADE | hawkey.UPGRADE_ALL):
-+            best = True
-+        else:
-+            best = False
-+        ng = deepcopy(self._goal)
-+        params = {"allow_uninstall": self._allow_erasing,
-+                  "force_best": best,
-+                  "ignore_weak": True}
-+        ret = ng.run(**params)
-+        if not ret and report_problems:
-+            msg = dnf.util._format_resolve_problems(ng.problem_rules())
-+            logger.warning(msg)
-+        problem_conflicts = set(ng.problem_conflicts(available=True))
-+        problem_dependency = set(ng.problem_broken_dependency(available=True)) - problem_conflicts
-+
-+        def _nevra(item):
-+            return hawkey.NEVRA(name=item.name, epoch=item.epoch, version=item.version,
-+                                release=item.release, arch=item.arch)
-+
-+        # Sometimes, pkg is not in transaction item, therefore, comparing by nevra
-+        transaction_nevras = [_nevra(tsi) for tsi in transaction]
-+        skipped_conflicts = set(
-+            [pkg for pkg in problem_conflicts if _nevra(pkg) not in transaction_nevras])
-+        skipped_dependency = set(
-+            [pkg for pkg in problem_dependency if _nevra(pkg) not in transaction_nevras])
-+
-+        return skipped_conflicts, skipped_dependency
-+
- 
- def _msg_installed(pkg):
-     name = ucd(pkg)
-diff --git a/dnf/cli/cli.py b/dnf/cli/cli.py
-index 0bc2c119d0..334000362c 100644
---- a/dnf/cli/cli.py
-+++ b/dnf/cli/cli.py
-@@ -252,8 +252,12 @@ def do_transaction(self, display=()):
-             trans = None
- 
-         if trans:
--            msg = self.output.post_transaction_output(trans)
--            logger.info(msg)
-+            # the post transaction summary is already written to log during
-+            # Base.do_transaction() so here only print the messages to the
-+            # user arranged in columns
-+            print()
-+            print('\n'.join(self.output.post_transaction_output(trans)))
-+            print()
-             for tsi in trans:
-                 if tsi.state == libdnf.transaction.TransactionItemState_ERROR:
-                     raise dnf.exceptions.Error(_('Transaction failed'))
-diff --git a/dnf/cli/output.py b/dnf/cli/output.py
-index af8a968770..6d729b63ba 100644
---- a/dnf/cli/output.py
-+++ b/dnf/cli/output.py
-@@ -21,9 +21,7 @@
- from __future__ import print_function
- from __future__ import unicode_literals
- 
--from copy import deepcopy
- import fnmatch
--import functools
- import hawkey
- import itertools
- import libdnf.transaction
-@@ -53,51 +51,6 @@
- logger = logging.getLogger('dnf')
- 
- 
--def _make_lists(transaction):
--    b = dnf.util.Bunch({
--        'downgraded': [],
--        'erased': [],
--        'erased_clean': [],
--        'erased_dep': [],
--        'installed': [],
--        'installed_group': [],
--        'installed_dep': [],
--        'installed_weak': [],
--        'reinstalled': [],
--        'upgraded': [],
--        'failed': [],
--    })
--
--    for tsi in transaction:
--        if tsi.state == libdnf.transaction.TransactionItemState_ERROR:
--            b.failed.append(tsi)
--        elif tsi.action == libdnf.transaction.TransactionItemAction_DOWNGRADE:
--            b.downgraded.append(tsi)
--        elif tsi.action == libdnf.transaction.TransactionItemAction_INSTALL:
--            if tsi.reason == libdnf.transaction.TransactionItemReason_GROUP:
--                b.installed_group.append(tsi)
--            elif tsi.reason == libdnf.transaction.TransactionItemReason_DEPENDENCY:
--                b.installed_dep.append(tsi)
--            elif tsi.reason == libdnf.transaction.TransactionItemReason_WEAK_DEPENDENCY:
--                b.installed_weak.append(tsi)
--            else:
--                # TransactionItemReason_USER
--                b.installed.append(tsi)
--        elif tsi.action == libdnf.transaction.TransactionItemAction_REINSTALL:
--            b.reinstalled.append(tsi)
--        elif tsi.action == libdnf.transaction.TransactionItemAction_REMOVE:
--            if tsi.reason == libdnf.transaction.TransactionItemReason_CLEAN:
--                b.erased_clean.append(tsi)
--            elif tsi.reason == libdnf.transaction.TransactionItemReason_DEPENDENCY:
--                b.erased_dep.append(tsi)
--            else:
--                b.erased.append(tsi)
--        elif tsi.action == libdnf.transaction.TransactionItemAction_UPGRADE:
--            b.upgraded.append(tsi)
--
--    return b
--
--
- def _spread_in_columns(cols_count, label, lst):
-     left = itertools.chain((label,), itertools.repeat(''))
-     lst_length = len(lst)
-@@ -1057,37 +1010,6 @@ def list_group_transaction(self, comps, history, diff):
-             out[0:0] = self._banner(col_data, (_('Group'), _('Packages'), '', ''))
-         return '\n'.join(out)
- 
--    def _skipped_packages(self, report_problems, transaction):
--        """returns set of conflicting packages and set of packages with broken dependency that would
--        be additionally installed when --best and --allowerasing"""
--        if self.base._goal.actions & (hawkey.INSTALL | hawkey.UPGRADE | hawkey.UPGRADE_ALL):
--            best = True
--        else:
--            best = False
--        ng = deepcopy(self.base._goal)
--        params = {"allow_uninstall": self.base._allow_erasing,
--                  "force_best": best,
--                  "ignore_weak": True}
--        ret = ng.run(**params)
--        if not ret and report_problems:
--            msg = dnf.util._format_resolve_problems(ng.problem_rules())
--            logger.warning(msg)
--        problem_conflicts = set(ng.problem_conflicts(available=True))
--        problem_dependency = set(ng.problem_broken_dependency(available=True)) - problem_conflicts
--
--        def _nevra(item):
--            return hawkey.NEVRA(name=item.name, epoch=item.epoch, version=item.version,
--                                release=item.release, arch=item.arch)
--
--        # Sometimes, pkg is not in transaction item, therefore, comparing by nevra
--        transaction_nevras = [_nevra(tsi) for tsi in transaction]
--        skipped_conflicts = set(
--            [pkg for pkg in problem_conflicts if _nevra(pkg) not in transaction_nevras])
--        skipped_dependency = set(
--            [pkg for pkg in problem_dependency if _nevra(pkg) not in transaction_nevras])
--
--        return skipped_conflicts, skipped_dependency
--
-     def list_transaction(self, transaction, total_width=None):
-         """Return a string representation of the transaction in an
-         easy-to-read format.
-@@ -1102,7 +1024,7 @@ def list_transaction(self, transaction, total_width=None):
-             # in order to display module changes when RPM transaction is empty
-             transaction = []
- 
--        list_bunch = _make_lists(transaction)
-+        list_bunch = dnf.util._make_lists(transaction)
-         pkglist_lines = []
-         data = {'n' : {}, 'v' : {}, 'r' : {}}
-         a_wid = 0 # Arch can't get "that big" ... so always use the max.
-@@ -1271,7 +1193,7 @@ def format_line(group):
-         # show skipped conflicting packages
-         if not self.conf.best and self.base._goal.actions & forward_actions:
-             lines = []
--            skipped_conflicts, skipped_broken = self._skipped_packages(
-+            skipped_conflicts, skipped_broken = self.base._skipped_packages(
-                 report_problems=True, transaction=transaction)
-             skipped_broken = dict((str(pkg), pkg) for pkg in skipped_broken)
-             for pkg in sorted(skipped_conflicts):
-@@ -1436,13 +1358,8 @@ def format_line(group):
-                                   max_msg_count, count, msg_pkgs))
-         return ''.join(out)
- 
--    def post_transaction_output(self, transaction):
--        """Returns a human-readable summary of the results of the
--        transaction.
- 
--        :return: a string containing a human-readable summary of the
--           results of the transaction
--        """
-+    def _pto_callback(self, action, tsis):
-         #  Works a bit like calcColumns, but we never overflow a column we just
-         # have a dynamic number of columns.
-         def _fits_in_cols(msgs, num):
-@@ -1472,61 +1389,33 @@ def _fits_in_cols(msgs, num):
-                 col_lens[col] *= -1
-             return col_lens
- 
--        def _tsi_or_pkg_nevra_cmp(item1, item2):
--            """Compares two transaction items or packages by nevra.
--               Used as a fallback when tsi does not contain package object.
--            """
--            ret = (item1.name > item2.name) - (item1.name < item2.name)
--            if ret != 0:
--                return ret
--            nevra1 = hawkey.NEVRA(name=item1.name, epoch=item1.epoch, version=item1.version,
--                                  release=item1.release, arch=item1.arch)
--            nevra2 = hawkey.NEVRA(name=item2.name, epoch=item2.epoch, version=item2.version,
--                                  release=item2.release, arch=item2.arch)
--            ret = nevra1.evr_cmp(nevra2, self.sack)
--            if ret != 0:
--                return ret
--            return (item1.arch > item2.arch) - (item1.arch < item2.arch)
--
--        out = ''
--        list_bunch = _make_lists(transaction)
--
--        skipped_conflicts, skipped_broken = self._skipped_packages(
--            report_problems=False, transaction=transaction)
--        skipped = skipped_conflicts.union(skipped_broken)
--
--        for (action, tsis) in [(_('Upgraded'), list_bunch.upgraded),
--                               (_('Downgraded'), list_bunch.downgraded),
--                               (_('Installed'), list_bunch.installed +
--                                list_bunch.installed_group +
--                                list_bunch.installed_weak +
--                                list_bunch.installed_dep),
--                               (_('Reinstalled'), list_bunch.reinstalled),
--                               (_('Skipped'), skipped),
--                               (_('Removed'), list_bunch.erased +
--                                   list_bunch.erased_dep +
--                                   list_bunch.erased_clean),
--                               (_('Failed'), list_bunch.failed)]:
--            if not tsis:
--                continue
--            msgs = []
--            out += '\n%s:\n' % action
--            for tsi in sorted(tsis, key=functools.cmp_to_key(_tsi_or_pkg_nevra_cmp)):
--                msgs.append(str(tsi))
--            for num in (8, 7, 6, 5, 4, 3, 2):
--                cols = _fits_in_cols(msgs, num)
--                if cols:
--                    break
--            if not cols:
--                cols = [-(self.term.columns - 2)]
--            while msgs:
--                current_msgs = msgs[:len(cols)]
--                out += '  '
--                out += self.fmtColumns(zip(current_msgs, cols), end=u'\n')
--                msgs = msgs[len(cols):]
--
-+        if not tsis:
-+            return ''
-+        out = []
-+        msgs = []
-+        out.append('{}:'.format(action))
-+        for tsi in tsis:
-+            msgs.append(str(tsi))
-+        for num in (8, 7, 6, 5, 4, 3, 2):
-+            cols = _fits_in_cols(msgs, num)
-+            if cols:
-+                break
-+        if not cols:
-+            cols = [-(self.term.columns - 2)]
-+        while msgs:
-+            current_msgs = msgs[:len(cols)]
-+            out.append('  {}'.format(self.fmtColumns(zip(current_msgs, cols))))
-+            msgs = msgs[len(cols):]
-         return out
- 
-+
-+    def post_transaction_output(self, transaction):
-+        """
-+        Return a human-readable summary of the transaction. Packages in sections
-+        are arranged to columns.
-+        """
-+        return dnf.util._post_transaction_output(self.base, transaction, self._pto_callback)
-+
-     def setup_progress_callbacks(self):
-         """Set up the progress callbacks and various
-            output bars based on debug level.
-diff --git a/dnf/util.py b/dnf/util.py
-index 8cf362706d..0beb04424d 100644
---- a/dnf/util.py
-+++ b/dnf/util.py
-@@ -24,13 +24,14 @@
- 
- from .pycomp import PY3, basestring
- from dnf.i18n import _, ucd
--from functools import reduce
- import argparse
- import dnf
- import dnf.callback
- import dnf.const
- import dnf.pycomp
- import errno
-+import functools
-+import hawkey
- import itertools
- import locale
- import logging
-@@ -41,6 +42,7 @@
- import tempfile
- import time
- import libdnf.repo
-+import libdnf.transaction
- 
- logger = logging.getLogger('dnf')
- 
-@@ -195,7 +197,7 @@ def group_by_filter(fn, iterable):
-     def splitter(acc, item):
-         acc[not bool(fn(item))].append(item)
-         return acc
--    return reduce(splitter, iterable, ([], []))
-+    return functools.reduce(splitter, iterable, ([], []))
- 
- def insert_if(item, iterable, condition):
-     """Insert an item into an iterable by a condition."""
-@@ -504,3 +506,99 @@ def __setattr__(self, what, val):
-         def setter(item):
-             setattr(item, what, val)
-         return list(map(setter, self))
-+
-+
-+def _make_lists(transaction):
-+    b = Bunch({
-+        'downgraded': [],
-+        'erased': [],
-+        'erased_clean': [],
-+        'erased_dep': [],
-+        'installed': [],
-+        'installed_group': [],
-+        'installed_dep': [],
-+        'installed_weak': [],
-+        'reinstalled': [],
-+        'upgraded': [],
-+        'failed': [],
-+    })
-+
-+    for tsi in transaction:
-+        if tsi.state == libdnf.transaction.TransactionItemState_ERROR:
-+            b.failed.append(tsi)
-+        elif tsi.action == libdnf.transaction.TransactionItemAction_DOWNGRADE:
-+            b.downgraded.append(tsi)
-+        elif tsi.action == libdnf.transaction.TransactionItemAction_INSTALL:
-+            if tsi.reason == libdnf.transaction.TransactionItemReason_GROUP:
-+                b.installed_group.append(tsi)
-+            elif tsi.reason == libdnf.transaction.TransactionItemReason_DEPENDENCY:
-+                b.installed_dep.append(tsi)
-+            elif tsi.reason == libdnf.transaction.TransactionItemReason_WEAK_DEPENDENCY:
-+                b.installed_weak.append(tsi)
-+            else:
-+                # TransactionItemReason_USER
-+                b.installed.append(tsi)
-+        elif tsi.action == libdnf.transaction.TransactionItemAction_REINSTALL:
-+            b.reinstalled.append(tsi)
-+        elif tsi.action == libdnf.transaction.TransactionItemAction_REMOVE:
-+            if tsi.reason == libdnf.transaction.TransactionItemReason_CLEAN:
-+                b.erased_clean.append(tsi)
-+            elif tsi.reason == libdnf.transaction.TransactionItemReason_DEPENDENCY:
-+                b.erased_dep.append(tsi)
-+            else:
-+                b.erased.append(tsi)
-+        elif tsi.action == libdnf.transaction.TransactionItemAction_UPGRADE:
-+            b.upgraded.append(tsi)
-+
-+    return b
-+
-+
-+def _post_transaction_output(base, transaction, action_callback):
-+    """Returns a human-readable summary of the results of the
-+    transaction.
-+
-+    :param action_callback: function generating output for specific action. It
-+       takes two parameters - action as a string and list of affected packages for
-+       this action
-+    :return: a list of lines containing a human-readable summary of the
-+       results of the transaction
-+    """
-+    def _tsi_or_pkg_nevra_cmp(item1, item2):
-+        """Compares two transaction items or packages by nevra.
-+           Used as a fallback when tsi does not contain package object.
-+        """
-+        ret = (item1.name > item2.name) - (item1.name < item2.name)
-+        if ret != 0:
-+            return ret
-+        nevra1 = hawkey.NEVRA(name=item1.name, epoch=item1.epoch, version=item1.version,
-+                              release=item1.release, arch=item1.arch)
-+        nevra2 = hawkey.NEVRA(name=item2.name, epoch=item2.epoch, version=item2.version,
-+                              release=item2.release, arch=item2.arch)
-+        ret = nevra1.evr_cmp(nevra2, base.sack)
-+        if ret != 0:
-+            return ret
-+        return (item1.arch > item2.arch) - (item1.arch < item2.arch)
-+
-+    list_bunch = dnf.util._make_lists(transaction)
-+
-+    skipped_conflicts, skipped_broken = base._skipped_packages(
-+        report_problems=False, transaction=transaction)
-+    skipped = skipped_conflicts.union(skipped_broken)
-+
-+    out = []
-+    for (action, tsis) in [(_('Upgraded'), list_bunch.upgraded),
-+                           (_('Downgraded'), list_bunch.downgraded),
-+                           (_('Installed'), list_bunch.installed +
-+                            list_bunch.installed_group +
-+                            list_bunch.installed_weak +
-+                            list_bunch.installed_dep),
-+                           (_('Reinstalled'), list_bunch.reinstalled),
-+                           (_('Skipped'), skipped),
-+                           (_('Removed'), list_bunch.erased +
-+                               list_bunch.erased_dep +
-+                               list_bunch.erased_clean),
-+                           (_('Failed'), list_bunch.failed)]:
-+        out.extend(action_callback(
-+            action, sorted(tsis, key=functools.cmp_to_key(_tsi_or_pkg_nevra_cmp))))
-+
-+    return out
diff --git a/SOURCES/0004-Log-scriptlets-output-also-for-API-users-RhBug-1847340.patch b/SOURCES/0004-Log-scriptlets-output-also-for-API-users-RhBug-1847340.patch
deleted file mode 100644
index 8447353..0000000
--- a/SOURCES/0004-Log-scriptlets-output-also-for-API-users-RhBug-1847340.patch
+++ /dev/null
@@ -1,130 +0,0 @@
-From df64fd36d7fefe39a96fea3f41e35785bebd37ec Mon Sep 17 00:00:00 2001
-From: Marek Blaha <mblaha@redhat.com>
-Date: Wed, 2 Dec 2020 16:33:26 +0100
-Subject: [PATCH 1/2] Log scriptlets output also for API users (RhBug:1847340)
-
-Messages logged into /var/log/dnf.rpm.log are now the same for both
-command line and API usage.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1847340
----
- dnf/cli/output.py   | 7 +------
- dnf/yum/rpmtrans.py | 9 ++++++++-
- 2 files changed, 9 insertions(+), 7 deletions(-)
-
-diff --git a/dnf/cli/output.py b/dnf/cli/output.py
-index 51d6829ca6..86260661fc 100644
---- a/dnf/cli/output.py
-+++ b/dnf/cli/output.py
-@@ -2151,12 +2151,7 @@ def error(self, message):
-         pass
- 
-     def scriptout(self, msgs):
--        """Print messages originating from a package script.
--
--        :param msgs: the messages coming from the script
--        """
--        if msgs:
--            self.rpm_logger.info(ucd(msgs))
-+        pass
- 
-     def _makefmt(self, percent, ts_done, ts_total, progress=True,
-                  pkgname=None, wid1=15):
-diff --git a/dnf/yum/rpmtrans.py b/dnf/yum/rpmtrans.py
-index 447639a476..d6c549d2ed 100644
---- a/dnf/yum/rpmtrans.py
-+++ b/dnf/yum/rpmtrans.py
-@@ -113,7 +113,10 @@ def progress(self, package, action, ti_done, ti_total, ts_done, ts_total):
-         pass
- 
-     def scriptout(self, msgs):
--        """msgs is the messages that were output (if any)."""
-+        """Hook for reporting an rpm scriptlet output.
-+
-+        :param msgs: the scriptlet output
-+        """
-         pass
- 
-     def error(self, message):
-@@ -156,6 +159,10 @@ def filelog(self, package, action):
-         msg = '%s: %s' % (action_str, package)
-         self.rpm_logger.log(dnf.logging.SUBDEBUG, msg)
- 
-+    def scriptout(self, msgs):
-+        if msgs:
-+            self.rpm_logger.info(ucd(msgs))
-+
- 
- class RPMTransaction(object):
-     def __init__(self, base, test=False, displays=()):
-
-From ee6ffcf640180b2b08d2db50b4b81d2bdefb1f2f Mon Sep 17 00:00:00 2001
-From: Marek Blaha <mblaha@redhat.com>
-Date: Thu, 3 Dec 2020 10:08:09 +0100
-Subject: [PATCH 2/2] Straighten inheritance of *Display classes
-
----
- dnf/cli/output.py   | 15 +++------------
- dnf/yum/rpmtrans.py |  2 +-
- 2 files changed, 4 insertions(+), 13 deletions(-)
-
-diff --git a/dnf/cli/output.py b/dnf/cli/output.py
-index 86260661fc..de188ffbd1 100644
---- a/dnf/cli/output.py
-+++ b/dnf/cli/output.py
-@@ -37,7 +37,7 @@
- from dnf.cli.format import format_number, format_time
- from dnf.i18n import _, C_, P_, ucd, fill_exact_width, textwrap_fill, exact_width, select_short_long
- from dnf.pycomp import xrange, basestring, long, unicode, sys_maxsize
--from dnf.yum.rpmtrans import LoggingTransactionDisplay
-+from dnf.yum.rpmtrans import TransactionDisplay
- from dnf.db.history import MergedTransactionWrapper
- import dnf.base
- import dnf.callback
-@@ -2071,7 +2071,7 @@ def short_id(id):
-         return self.output.userconfirm()
- 
- 
--class CliTransactionDisplay(LoggingTransactionDisplay):
-+class CliTransactionDisplay(TransactionDisplay):
-     """A YUM specific callback class for RPM operations."""
- 
-     width = property(lambda self: dnf.cli.term._term_width())
-@@ -2093,7 +2093,7 @@ def progress(self, package, action, ti_done, ti_total, ts_done, ts_total):
-         :param package: the package involved in the event
-         :param action: the type of action that is taking place.  Valid
-            values are given by
--           :func:`rpmtrans.LoggingTransactionDisplay.action.keys()`
-+           :func:`rpmtrans.TransactionDisplay.action.keys()`
-         :param ti_done: a number representing the amount of work
-            already done in the current transaction
-         :param ti_total: a number representing the total amount of work
-@@ -2144,15 +2144,6 @@ def _out_progress(self, ti_done, ti_total, ts_done, ts_total,
-                 if ti_done == ti_total:
-                     print(" ")
- 
--    def filelog(self, package, action):
--        pass
--
--    def error(self, message):
--        pass
--
--    def scriptout(self, msgs):
--        pass
--
-     def _makefmt(self, percent, ts_done, ts_total, progress=True,
-                  pkgname=None, wid1=15):
-         l = len(str(ts_total))
-diff --git a/dnf/yum/rpmtrans.py b/dnf/yum/rpmtrans.py
-index d6c549d2ed..51fa921d3e 100644
---- a/dnf/yum/rpmtrans.py
-+++ b/dnf/yum/rpmtrans.py
-@@ -143,7 +143,7 @@ def error(self, message):
-         dnf.util._terminal_messenger('print', message, sys.stderr)
- 
- 
--class LoggingTransactionDisplay(ErrorTransactionDisplay):
-+class LoggingTransactionDisplay(TransactionDisplay):
-     '''
-     Base class for a RPMTransaction display callback class
-     '''
diff --git a/SOURCES/0004-Use-rpmkeys-alone-to-verify-signature.patch b/SOURCES/0004-Use-rpmkeys-alone-to-verify-signature.patch
new file mode 100644
index 0000000..73daa7e
--- /dev/null
+++ b/SOURCES/0004-Use-rpmkeys-alone-to-verify-signature.patch
@@ -0,0 +1,176 @@
+From a21880fbac479968546304beeeae3ed3bb899373 Mon Sep 17 00:00:00 2001
+From: Demi Marie Obenour <demi@invisiblethingslab.com>
+Date: Fri, 9 Apr 2021 13:03:03 -0400
+Subject: [PATCH] Use rpmkeys alone to verify signature
+
+This avoids having to actually parse the package to check its signature,
+which reduces attack surface.  If the output of rpmkeys cannot be
+parsed, we assume the package is corrupt (the most likely cause).
+---
+ dnf/rpm/miscutils.py | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------
+ 1 file changed, 66 insertions(+), 60 deletions(-)
+
+diff --git a/dnf/rpm/miscutils.py b/dnf/rpm/miscutils.py
+index 5f2621c..9d5b286 100644
+--- a/dnf/rpm/miscutils.py
++++ b/dnf/rpm/miscutils.py
+@@ -13,90 +13,96 @@
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ # Copyright 2003 Duke University
+ 
+-from __future__ import print_function, absolute_import
+-from __future__ import unicode_literals
++from __future__ import print_function, absolute_import, unicode_literals
+ 
+-import rpm
+ import os
+ import subprocess
+ import logging
+-
+-from dnf.i18n import ucd
+-from dnf.i18n import _
+ from shutil import which
+ 
++from dnf.i18n import _
+ 
+-logger = logging.getLogger('dnf')
++_logger = logging.getLogger('dnf')
++_rpmkeys_binary = None
+ 
++def _find_rpmkeys_binary():
++    global _rpmkeys_binary
++    if _rpmkeys_binary is None:
++        _rpmkeys_binary = which("rpmkeys")
++        _logger.debug(_('Using rpmkeys executable at %s to verify signatures'),
++                      _rpmkeys_binary)
++    return _rpmkeys_binary
+ 
+-def _verifyPkgUsingRpmkeys(package, installroot, fdno):
+-    os.lseek(fdno, 0, os.SEEK_SET)
+-    rpmkeys_binary = '/usr/bin/rpmkeys'
+-    if not os.path.isfile(rpmkeys_binary):
+-        rpmkeys_binary = which("rpmkeys")
+-        logger.info(_('Using rpmkeys executable from {path} to verify signature for package: {package}.').format(
+-            path=rpmkeys_binary, package=package))
++def _process_rpm_output(data):
++    # No signatures or digests = corrupt package.
++    # There is at least one line for -: and another (empty) entry after the
++    # last newline.
++    if len(data) < 3 or data[0] != b'-:' or data[-1]:
++        return 2
++    seen_sig, missing_key, not_trusted, not_signed = False, False, False, False
++    for i in data[1:-1]:
++        if b': BAD' in i:
++            return 2
++        elif i.endswith(b': NOKEY'):
++            missing_key = True
++        elif i.endswith(b': NOTTRUSTED'):
++            not_trusted = True
++        elif i.endswith(b': NOTFOUND'):
++            not_signed = True
++        elif not i.endswith(b': OK'):
++            return 2
++    if not_trusted:
++        return 3
++    elif missing_key:
++        return 1
++    elif not_signed:
++        return 4
++    # we still check return code, so this is safe
++    return 0
+ 
+-    if not os.path.isfile(rpmkeys_binary):
+-        logger.critical(_('Cannot find rpmkeys executable to verify signatures.'))
+-        return 0
++def _verifyPackageUsingRpmkeys(package, installroot):
++    rpmkeys_binary = _find_rpmkeys_binary()
++    if rpmkeys_binary is None or not os.path.isfile(rpmkeys_binary):
++        _logger.critical(_('Cannot find rpmkeys executable to verify signatures.'))
++        return 2
+ 
+-    args = ('rpmkeys', '--checksig', '--root', installroot, '--define', '_pkgverify_level all', '-')
++    # "--define=_pkgverify_level all" enforces signature checking;
++    # "--define=_pkgverify_flags 0x0" ensures that all signatures and digests
++    # are checked.
++    args = ('rpmkeys', '--checksig', '--root', installroot, '--verbose',
++            '--define=_pkgverify_level all', '--define=_pkgverify_flags 0x0',
++            '-')
+     with subprocess.Popen(
+             args=args,
+             executable=rpmkeys_binary,
+             env={'LC_ALL': 'C'},
+-            stdin=fdno,
+             stdout=subprocess.PIPE,
+-            cwd='/') as p:
+-        data, err = p.communicate()
+-    if p.returncode != 0 or data != b'-: digests signatures OK\n':
+-        return 0
+-    else:
+-        return 1
++            cwd='/',
++            stdin=package) as p:
++        data = p.communicate()[0]
++    returncode = p.returncode
++    if type(returncode) is not int:
++        raise AssertionError('Popen set return code to non-int')
++    # rpmkeys can return something other than 0 or 1 in the case of a
++    # fatal error (OOM, abort() called, SIGSEGV, etc)
++    if returncode >= 2 or returncode < 0:
++        return 2
++    ret = _process_rpm_output(data.split(b'\n'))
++    if ret:
++        return ret
++    return 2 if returncode else 0
+ 
+ def checkSig(ts, package):
+     """Takes a transaction set and a package, check it's sigs,
+     return 0 if they are all fine
+     return 1 if the gpg key can't be found
+     return 2 if the header is in someway damaged
+     return 3 if the key is not trusted
+     return 4 if the pkg is not gpg or pgp signed"""
+ 
+-    value = 4
+-    currentflags = ts.setVSFlags(0)
+-    fdno = os.open(package, os.O_RDONLY)
++    fdno = os.open(package, os.O_RDONLY|os.O_NOCTTY|os.O_CLOEXEC)
+     try:
+-        hdr = ts.hdrFromFdno(fdno)
+-    except rpm.error as e:
+-        if str(e) == "public key not available":
+-            value = 1
+-        elif str(e) == "public key not trusted":
+-            value = 3
+-        elif str(e) == "error reading package header":
+-            value = 2
+-        else:
+-            raise ValueError('Unexpected error value %r from ts.hdrFromFdno when checking signature.' % str(e))
+-    else:
+-        # checks signature from an hdr
+-        string = '%|DSAHEADER?{%{DSAHEADER:pgpsig}}:{%|RSAHEADER?{%{RSAHEADER:pgpsig}}:' \
+-                 '{%|SIGGPG?{%{SIGGPG:pgpsig}}:{%|SIGPGP?{%{SIGPGP:pgpsig}}:{(none)}|}|}|}|'
+-        try:
+-            siginfo = hdr.sprintf(string)
+-            siginfo = ucd(siginfo)
+-
+-            if siginfo == '(none)':
+-                value = 4
+-            elif "Key ID" in siginfo and _verifyPkgUsingRpmkeys(package, ts.ts.rootDir, fdno):
+-                value = 0
+-            else:
+-                raise ValueError('Unexpected return value %r from hdr.sprintf when checking signature.' % siginfo)
+-        except UnicodeDecodeError:
+-            pass
+-
+-        del hdr
+-
+-    os.close(fdno)
+-
+-    ts.setVSFlags(currentflags)  # put things back like they were before
++        value = _verifyPackageUsingRpmkeys(fdno, ts.ts.rootDir)
++    finally:
++        os.close(fdno)
+     return value
+--
+libgit2 1.0.1
+
diff --git a/SOURCES/0005-Lower-_pkgverify_level-to-signature-for-signature-checking-with-rpmkeys.patch b/SOURCES/0005-Lower-_pkgverify_level-to-signature-for-signature-checking-with-rpmkeys.patch
new file mode 100644
index 0000000..f30ae63
--- /dev/null
+++ b/SOURCES/0005-Lower-_pkgverify_level-to-signature-for-signature-checking-with-rpmkeys.patch
@@ -0,0 +1,36 @@
+From b05f4589e4afb69240ae2001246a5ffb5d6b1b90 Mon Sep 17 00:00:00 2001
+From: Aleš Matěj <amatej@redhat.com>
+Date: Thu, 3 Jun 2021 11:23:31 +0200
+Subject: [PATCH] Lower _pkgverify_level to signature for signature checking with rpmkeys
+
+We don't want to be veryfing digests as well when checking signatures.
+It would break legacy package installation in FIPS mode due to MD5
+digest being unverifiable (see https://access.redhat.com/solutions/5221661)
+
+Follow up for https://github.com/rpm-software-management/dnf/pull/1753
+---
+ dnf/rpm/miscutils.py | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/dnf/rpm/miscutils.py b/dnf/rpm/miscutils.py
+index 9d5b286..46ef475 100644
+--- a/dnf/rpm/miscutils.py
++++ b/dnf/rpm/miscutils.py
+@@ -66,11 +66,10 @@ def _verifyPackageUsingRpmkeys(package, installroot):
+         _logger.critical(_('Cannot find rpmkeys executable to verify signatures.'))
+         return 2
+ 
+-    # "--define=_pkgverify_level all" enforces signature checking;
+-    # "--define=_pkgverify_flags 0x0" ensures that all signatures and digests
+-    # are checked.
++    # "--define=_pkgverify_level signature" enforces signature checking;
++    # "--define=_pkgverify_flags 0x0" ensures that all signatures are checked.
+     args = ('rpmkeys', '--checksig', '--root', installroot, '--verbose',
+-            '--define=_pkgverify_level all', '--define=_pkgverify_flags 0x0',
++            '--define=_pkgverify_level signature', '--define=_pkgverify_flags 0x0',
+             '-')
+     with subprocess.Popen(
+             args=args,
+--
+libgit2 1.0.1
+
diff --git a/SOURCES/0005-dnf-history-operations-that-work-with-comps-correctly.patch b/SOURCES/0005-dnf-history-operations-that-work-with-comps-correctly.patch
deleted file mode 100644
index 233a2fc..0000000
--- a/SOURCES/0005-dnf-history-operations-that-work-with-comps-correctly.patch
+++ /dev/null
@@ -1,1411 +0,0 @@
-From b9a8226185f3ab58e3551b315af2b11a8b2f2ebe 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, 8 Sep 2020 17:02:59 +0200
-Subject: [PATCH 01/17] Add a get_current() method to SwdbInterface
-
-The method returns the transaction that is currently being created in
-Swdb, before it is stored to sqlite.
----
- VERSION.cmake     | 2 +-
- dnf.spec          | 2 +-
- dnf/db/history.py | 3 +++
- 3 files changed, 5 insertions(+), 2 deletions(-)
-
-diff --git a/dnf/db/history.py b/dnf/db/history.py
-index 4d355f95..994cdb01 100644
---- a/dnf/db/history.py
-+++ b/dnf/db/history.py
-@@ -381,6 +381,9 @@ class SwdbInterface(object):
-                 prev_trans.altered_gt_rpmdb = True
-         return result[::-1]
- 
-+    def get_current(self):
-+        return TransactionWrapper(self.swdb.getCurrent())
-+
-     def set_reason(self, pkg, reason):
-         """Set reason for package"""
-         rpm_item = self.rpm._pkg_to_swdb_rpm_item(pkg)
--- 
-2.26.2
-
-
-From 3bcf90aadfea98da1397b570fcb3ecc20a89c15d 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: Fri, 2 Oct 2020 15:52:19 +0200
-Subject: [PATCH 02/17] transaction-sr: Prefer installing from the original
- transaction repository
-
-In case a package exists in the same repo_id as from which it was
-originally installed, prefer the package from that repo when replaying
-the transaction.
-
-Makes a difference in e.g. the system-upgrade plugin, where it ensures
-the package is installed from the same repo from which it was downloaded
-during the download step.
----
- dnf/transaction_sr.py | 13 +++++++++++++
- 1 file changed, 13 insertions(+)
-
-diff --git a/dnf/transaction_sr.py b/dnf/transaction_sr.py
-index 9b9b0749..45ca2ef7 100644
---- a/dnf/transaction_sr.py
-+++ b/dnf/transaction_sr.py
-@@ -257,6 +257,7 @@ class TransactionReplay(object):
-         try:
-             action = pkg_data["action"]
-             nevra = pkg_data["nevra"]
-+            repo_id = pkg_data["repo_id"]
-             reason = libdnf.transaction.StringToTransactionItemReason(pkg_data["reason"])
-         except KeyError as e:
-             raise TransactionError(
-@@ -282,6 +283,18 @@ class TransactionReplay(object):
-         epoch = parsed_nevra.epoch if parsed_nevra.epoch is not None else 0
-         query = query_na.filter(epoch=epoch, version=parsed_nevra.version, release=parsed_nevra.release)
- 
-+        # In case the package is found in the same repo as in the original
-+        # transaction, limit the query to that plus installed packages. IOW
-+        # remove packages with the same NEVRA in case they are found in
-+        # multiple repos and the repo the package came from originally is one
-+        # of them.
-+        # This can e.g. make a difference in the system-upgrade plugin, in case
-+        # the same NEVRA is in two repos, this makes sure the same repo is used
-+        # for both download and upgrade steps of the plugin.
-+        query_repo = query.filter(reponame=repo_id)
-+        if query_repo:
-+            query = query_repo.union(query.installed())
-+
-         if not query:
-             self._raise_or_warn(self._skip_unavailable, _('Cannot find rpm nevra "{nevra}".').format(nevra=nevra))
-             return
--- 
-2.26.2
-
-
-From acfd6310131769f33165c8de1d064889a80fc259 Mon Sep 17 00:00:00 2001
-From: Daniel Mach <dmach@redhat.com>
-Date: Tue, 24 Nov 2020 10:57:21 +0100
-Subject: [PATCH 03/17] transaction_sr: Enable loading transactions from dict
-
----
- dnf/cli/commands/history.py |  2 +-
- dnf/transaction_sr.py       | 42 +++++++++++++++++++++++++------------
- 2 files changed, 30 insertions(+), 14 deletions(-)
-
-diff --git a/dnf/cli/commands/history.py b/dnf/cli/commands/history.py
-index e381f902..0a6dad9b 100644
---- a/dnf/cli/commands/history.py
-+++ b/dnf/cli/commands/history.py
-@@ -270,7 +270,7 @@ class HistoryCommand(commands.Command):
- 
-             self.replay = TransactionReplay(
-                 self.base,
--                self.opts.transaction_filename,
-+                filename=self.opts.transaction_filename,
-                 ignore_installed = self.opts.ignore_installed,
-                 ignore_extras = self.opts.ignore_extras,
-                 skip_unavailable = self.opts.skip_unavailable
-diff --git a/dnf/transaction_sr.py b/dnf/transaction_sr.py
-index 45ca2ef7..e6b06665 100644
---- a/dnf/transaction_sr.py
-+++ b/dnf/transaction_sr.py
-@@ -187,21 +187,23 @@ class TransactionReplay(object):
-     def __init__(
-         self,
-         base,
--        fn,
-+        filename="",
-+        data=None,
-         ignore_extras=False,
-         ignore_installed=False,
-         skip_unavailable=False
-     ):
-         """
-         :param base: the dnf base
--        :param fn: the filename to load the transaction from
-+        :param filename: the filename to load the transaction from (conflicts with the 'data' argument)
-+        :param data: the dictionary to load the transaction from (conflicts with the 'filename' argument)
-         :param ignore_extras: whether to ignore extra package pulled into the transaction
-         :param ignore_installed: whether to ignore installed versions of packages
-         :param skip_unavailable: whether to skip transaction packages that aren't available
-         """
- 
-         self._base = base
--        self._filename = fn
-+        self._filename = filename
-         self._ignore_installed = ignore_installed
-         self._ignore_extras = ignore_extras
-         self._skip_unavailable = skip_unavailable
-@@ -213,25 +215,39 @@ class TransactionReplay(object):
-         self._nevra_reason_cache = {}
-         self._warnings = []
- 
-+        if filename and data:
-+            raise ValueError(_("Conflicting TransactionReplay arguments have been specified: filename, data"))
-+        elif filename:
-+            self._load_from_file(filename)
-+        else:
-+            self._load_from_data(data)
-+
-+
-+    def _load_from_file(self, fn):
-+        self._filename = fn
-         with open(fn, "r") as f:
-             try:
--                self._replay_data = json.load(f)
-+                replay_data = json.load(f)
-             except json.decoder.JSONDecodeError as e:
-                 raise TransactionFileError(fn, str(e) + ".")
- 
-         try:
--            self._verify_toplevel_json(self._replay_data)
-+            self._load_from_data(replay_data)
-+        except TransactionError as e:
-+            raise TransactionFileError(fn, e)
- 
--            self._rpms = self._replay_data.get("rpms", [])
--            self._assert_type(self._rpms, list, "rpms", "array")
-+    def _load_from_data(self, data):
-+        self._replay_data = data
-+        self._verify_toplevel_json(self._replay_data)
- 
--            self._groups = self._replay_data.get("groups", [])
--            self._assert_type(self._groups, list, "groups", "array")
-+        self._rpms = self._replay_data.get("rpms", [])
-+        self._assert_type(self._rpms, list, "rpms", "array")
- 
--            self._environments = self._replay_data.get("environments", [])
--            self._assert_type(self._environments, list, "environments", "array")
--        except TransactionError as e:
--            raise TransactionFileError(fn, e)
-+        self._groups = self._replay_data.get("groups", [])
-+        self._assert_type(self._groups, list, "groups", "array")
-+
-+        self._environments = self._replay_data.get("environments", [])
-+        self._assert_type(self._environments, list, "environments", "array")
- 
-     def _raise_or_warn(self, warn_only, msg):
-         if warn_only:
--- 
-2.26.2
-
-
-From 90d4a2fd72b30b295adcb6da66b8043a70561b33 Mon Sep 17 00:00:00 2001
-From: Daniel Mach <dmach@redhat.com>
-Date: Fri, 20 Nov 2020 19:36:49 +0100
-Subject: [PATCH 04/17] transaction_sr: Store exception attributes for future
- use
-
----
- dnf/transaction_sr.py | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/dnf/transaction_sr.py b/dnf/transaction_sr.py
-index e6b06665..36787de4 100644
---- a/dnf/transaction_sr.py
-+++ b/dnf/transaction_sr.py
-@@ -55,6 +55,10 @@ class TransactionFileError(dnf.exceptions.Error):
-         :param errors: a list of error classes or a string with an error description
-         """
- 
-+        # store args in case someone wants to read them from a caught exception
-+        self.filename = filename
-+        self.errors = errors
-+
-         if isinstance(errors, (list, tuple)):
-             if len(errors) > 1:
-                 msg = _('Errors in "{filename}":').format(filename=filename)
--- 
-2.26.2
-
-
-From 0ffa7ed9ea73035acaec2c4f916d967701fddda2 Mon Sep 17 00:00:00 2001
-From: Daniel Mach <dmach@redhat.com>
-Date: Fri, 20 Nov 2020 19:04:59 +0100
-Subject: [PATCH 05/17] transaction_sr: Handle serialize_transaction(None)
-
----
- dnf/transaction_sr.py | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/dnf/transaction_sr.py b/dnf/transaction_sr.py
-index 36787de4..41ddee1f 100644
---- a/dnf/transaction_sr.py
-+++ b/dnf/transaction_sr.py
-@@ -120,6 +120,9 @@ def serialize_transaction(transaction):
-     groups = []
-     environments = []
- 
-+    if transaction is None:
-+        return data
-+
-     for tsi in transaction.packages():
-         if tsi.is_package():
-             rpms.append({
--- 
-2.26.2
-
-
-From c4bae459caef1d5128bd7ed43fcbb749608449f4 Mon Sep 17 00:00:00 2001
-From: Daniel Mach <dmach@redhat.com>
-Date: Mon, 23 Nov 2020 16:23:53 +0100
-Subject: [PATCH 06/17] transaction_sr: Skip preferred repo lookup if repoid is
- empty
-
----
- dnf/transaction_sr.py | 7 ++++---
- 1 file changed, 4 insertions(+), 3 deletions(-)
-
-diff --git a/dnf/transaction_sr.py b/dnf/transaction_sr.py
-index 41ddee1f..9926bebd 100644
---- a/dnf/transaction_sr.py
-+++ b/dnf/transaction_sr.py
-@@ -314,9 +314,10 @@ class TransactionReplay(object):
-         # This can e.g. make a difference in the system-upgrade plugin, in case
-         # the same NEVRA is in two repos, this makes sure the same repo is used
-         # for both download and upgrade steps of the plugin.
--        query_repo = query.filter(reponame=repo_id)
--        if query_repo:
--            query = query_repo.union(query.installed())
-+        if repo_id:
-+            query_repo = query.filter(reponame=repo_id)
-+            if query_repo:
-+                query = query_repo.union(query.installed())
- 
-         if not query:
-             self._raise_or_warn(self._skip_unavailable, _('Cannot find rpm nevra "{nevra}".').format(nevra=nevra))
--- 
-2.26.2
-
-
-From 3f82f871170be871ce8ec9d509306d751890ac9e Mon Sep 17 00:00:00 2001
-From: Daniel Mach <dmach@redhat.com>
-Date: Fri, 20 Nov 2020 17:44:28 +0100
-Subject: [PATCH 07/17] history: Refactor redo code to use transaction
- store/replay
-
-= changelog =
-msg: Support comps groups in history redo
-type: enhancement
-resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1657123
-resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1809565
-resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1809639
----
- dnf/cli/commands/history.py | 40 +++++++++++++++----------------------
- 1 file changed, 16 insertions(+), 24 deletions(-)
-
-diff --git a/dnf/cli/commands/history.py b/dnf/cli/commands/history.py
-index 0a6dad9b..c28a136a 100644
---- a/dnf/cli/commands/history.py
-+++ b/dnf/cli/commands/history.py
-@@ -120,6 +120,10 @@ class HistoryCommand(commands.Command):
-             if not self.opts.transactions:
-                 raise dnf.cli.CliError(_('No transaction ID or package name given.'))
-         elif self.opts.transactions_action in ['redo', 'undo', 'rollback']:
-+            demands.available_repos = True
-+            demands.resolving = True
-+            demands.root_user = True
-+
-             self._require_one_transaction_id = True
-             if not self.opts.transactions:
-                 msg = _('No transaction ID or package name given.')
-@@ -157,28 +161,16 @@ class HistoryCommand(commands.Command):
-         old = self.base.history_get_transaction(extcmds)
-         if old is None:
-             return 1, ['Failed history redo']
--        tm = dnf.util.normalize_time(old.beg_timestamp)
--        print('Repeating transaction %u, from %s' % (old.tid, tm))
--        self.output.historyInfoCmdPkgsAltered(old)
--
--        for i in old.packages():
--            pkgs = list(self.base.sack.query().filter(nevra=str(i), reponame=i.from_repo))
--            if i.action in dnf.transaction.FORWARD_ACTIONS:
--                if not pkgs:
--                    logger.info(_('No package %s available.'),
--                    self.output.term.bold(ucd(str(i))))
--                    return 1, ['An operation cannot be redone']
--                pkg = pkgs[0]
--                self.base.install(str(pkg))
--            elif i.action == libdnf.transaction.TransactionItemAction_REMOVE:
--                if not pkgs:
--                    # package was removed already, we can skip removing it again
--                    continue
--                pkg = pkgs[0]
--                self.base.remove(str(pkg))
--
--        self.base.resolve()
--        self.base.do_transaction()
-+
-+        data = serialize_transaction(old)
-+        self.replay = TransactionReplay(
-+            self.base,
-+            data=data,
-+            ignore_installed=True,
-+            ignore_extras=True,
-+            skip_unavailable=self.opts.skip_unavailable
-+        )
-+        self.replay.run()
- 
-     def _hcmd_undo(self, extcmds):
-         try:
-@@ -326,13 +318,13 @@ class HistoryCommand(commands.Command):
-             raise dnf.exceptions.Error(strs[0])
- 
-     def run_resolved(self):
--        if self.opts.transactions_action != "replay":
-+        if self.opts.transactions_action not in ("replay", "redo"):
-             return
- 
-         self.replay.post_transaction()
- 
-     def run_transaction(self):
--        if self.opts.transactions_action != "replay":
-+        if self.opts.transactions_action not in ("replay", "redo"):
-             return
- 
-         warnings = self.replay.get_warnings()
--- 
-2.26.2
-
-
-From d1b78ba8449b319121b5208c5b39609b1c6b61de Mon Sep 17 00:00:00 2001
-From: Daniel Mach <dmach@redhat.com>
-Date: Fri, 20 Nov 2020 19:07:50 +0100
-Subject: [PATCH 08/17] history: Refactor rollback code to use transaction
- store/replay
-
-= changelog =
-msg: Support comps groups in history rollback
-type: enhancement
-resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1657123
-resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1809565
-resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1809639
----
- dnf/cli/cli.py              | 56 -----------------------------
- dnf/cli/commands/history.py | 72 ++++++++++++++++++++++++++++++++++---
- 2 files changed, 67 insertions(+), 61 deletions(-)
-
-diff --git a/dnf/cli/cli.py b/dnf/cli/cli.py
-index cd720a97..36671fd8 100644
---- a/dnf/cli/cli.py
-+++ b/dnf/cli/cli.py
-@@ -627,62 +627,6 @@ class BaseCli(dnf.Base):
-             logger.critical(_('Found more than one transaction ID!'))
-         return old[0]
- 
--    def history_rollback_transaction(self, extcmd):
--        """Rollback given transaction."""
--        old = self.history_get_transaction((extcmd,))
--        if old is None:
--            return 1, ['Failed history rollback, no transaction']
--        last = self.history.last()
--        if last is None:
--            return 1, ['Failed history rollback, no last?']
--        if old.tid == last.tid:
--            return 0, ['Rollback to current, nothing to do']
--
--        mobj = None
--        for trans in self.history.old(list(range(old.tid + 1, last.tid + 1))):
--            if trans.altered_lt_rpmdb:
--                logger.warning(_('Transaction history is incomplete, before %u.'), trans.tid)
--            elif trans.altered_gt_rpmdb:
--                logger.warning(_('Transaction history is incomplete, after %u.'), trans.tid)
--
--            if mobj is None:
--                mobj = dnf.db.history.MergedTransactionWrapper(trans)
--            else:
--                mobj.merge(trans)
--
--        tm = dnf.util.normalize_time(old.beg_timestamp)
--        print("Rollback to transaction %u, from %s" % (old.tid, tm))
--        print(self.output.fmtKeyValFill("  Undoing the following transactions: ",
--                                        ", ".join((str(x) for x in mobj.tids()))))
--        self.output.historyInfoCmdPkgsAltered(mobj)  # :todo
--
--#        history = dnf.history.open_history(self.history)  # :todo
--#        m = libdnf.transaction.MergedTransaction()
--
--#        return
--
--#        operations = dnf.history.NEVRAOperations()
--#        for id_ in range(old.tid + 1, last.tid + 1):
--#            operations += history.transaction_nevra_ops(id_)
--
--        try:
--            self._history_undo_operations(mobj, old.tid + 1, True, strict=self.conf.strict)
--        except dnf.exceptions.PackagesNotInstalledError as err:
--            raise
--            logger.info(_('No package %s installed.'),
--                        self.output.term.bold(ucd(err.pkg_spec)))
--            return 1, ['A transaction cannot be undone']
--        except dnf.exceptions.PackagesNotAvailableError as err:
--            raise
--            logger.info(_('No package %s available.'),
--                        self.output.term.bold(ucd(err.pkg_spec)))
--            return 1, ['A transaction cannot be undone']
--        except dnf.exceptions.MarkingError:
--            raise
--            assert False
--        else:
--            return 2, ["Rollback to transaction %u" % (old.tid,)]
--
-     def history_undo_transaction(self, extcmd):
-         """Undo given transaction."""
-         old = self.history_get_transaction((extcmd,))
-diff --git a/dnf/cli/commands/history.py b/dnf/cli/commands/history.py
-index c28a136a..a450aaab 100644
---- a/dnf/cli/commands/history.py
-+++ b/dnf/cli/commands/history.py
-@@ -20,6 +20,7 @@ from __future__ import print_function
- from __future__ import unicode_literals
- 
- import libdnf
-+import hawkey
- 
- from dnf.i18n import _, ucd
- from dnf.cli import commands
-@@ -33,6 +34,7 @@ import dnf.util
- import json
- import logging
- import os
-+import sys
- 
- 
- logger = logging.getLogger('dnf')
-@@ -179,10 +181,70 @@ class HistoryCommand(commands.Command):
-             return 1, [str(err)]
- 
-     def _hcmd_rollback(self, extcmds):
-+        old = self.base.history_get_transaction(extcmds)
-+        if old is None:
-+            return 1, ['Failed history rollback']
-+        last = self.base.history.last()
-+
-+        merged_trans = None
-+        if old.tid != last.tid:
-+            # history.old([]) returns all transactions and we don't want that
-+            # so skip merging the transactions when trying to rollback to the last transaction
-+            # which is the current system state and rollback is not applicable
-+            for trans in self.base.history.old(list(range(old.tid + 1, last.tid + 1))):
-+                if trans.altered_lt_rpmdb:
-+                    logger.warning(_('Transaction history is incomplete, before %u.'), trans.tid)
-+                elif trans.altered_gt_rpmdb:
-+                    logger.warning(_('Transaction history is incomplete, after %u.'), trans.tid)
-+
-+                if merged_trans is None:
-+                    merged_trans = dnf.db.history.MergedTransactionWrapper(trans)
-+                else:
-+                    merged_trans.merge(trans)
-+
-+        return self._revert_transaction(merged_trans)
-+
-+    def _revert_transaction(self, trans):
-+        action_map = {
-+            "Install": "Removed",
-+            "Removed": "Install",
-+            "Upgrade": "Downgraded",
-+            "Upgraded": "Downgrade",
-+            "Downgrade": "Upgraded",
-+            "Downgraded": "Upgrade",
-+            "Reinstalled": "Reinstall",
-+            "Reinstall": "Reinstalled",
-+            "Obsoleted": "Install",
-+            "Obsolete": "Obsoleted",
-+        }
-+
-+        data = serialize_transaction(trans)
-+
-+        # revert actions in the serialized transaction data to perform rollback/undo
-+        for content_type in ("rpms", "groups", "environments"):
-+            for ti in data.get(content_type, []):
-+                ti["action"] = action_map[ti["action"]]
-+
-+                if ti["action"] == "Install" and ti.get("reason", None) == "clean":
-+                    ti["reason"] = "dependency"
-+
-+                if ti.get("repo_id") == hawkey.SYSTEM_REPO_NAME:
-+                    # erase repo_id, because it's not possible to perform forward actions from the @System repo
-+                    ti["repo_id"] = None
-+
-+        self.replay = TransactionReplay(
-+            self.base,
-+            data=data,
-+            ignore_installed=True,
-+            ignore_extras=True,
-+            skip_unavailable=self.opts.skip_unavailable
-+        )
-         try:
--            return self.base.history_rollback_transaction(extcmds[0])
--        except dnf.exceptions.Error as err:
--            return 1, [str(err)]
-+            self.replay.run()
-+        except dnf.transaction_sr.TransactionFileError as ex:
-+            for error in ex.errors:
-+                print(str(error), file=sys.stderr)
-+            raise dnf.exceptions.PackageNotFoundError(_('no package matched'))
- 
-     def _hcmd_userinstalled(self):
-         """Execute history userinstalled command."""
-@@ -318,13 +380,13 @@ class HistoryCommand(commands.Command):
-             raise dnf.exceptions.Error(strs[0])
- 
-     def run_resolved(self):
--        if self.opts.transactions_action not in ("replay", "redo"):
-+        if self.opts.transactions_action not in ("replay", "redo", "rollback"):
-             return
- 
-         self.replay.post_transaction()
- 
-     def run_transaction(self):
--        if self.opts.transactions_action not in ("replay", "redo"):
-+        if self.opts.transactions_action not in ("replay", "redo", "rollback"):
-             return
- 
-         warnings = self.replay.get_warnings()
--- 
-2.26.2
-
-
-From a59a57ce456682e85e86ee362aab4eecc19dbc81 Mon Sep 17 00:00:00 2001
-From: Daniel Mach <dmach@redhat.com>
-Date: Thu, 3 Dec 2020 15:56:52 +0100
-Subject: [PATCH 09/17] history: Refactor undo code to use transaction
- store/replay
-
-= changelog =
-msg: Support comps groups in history undo
-type: enhancement
-resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1657123
-resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1809565
-resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1809639
----
- dnf/cli/cli.py              | 28 ----------------------------
- dnf/cli/commands/history.py | 12 ++++++------
- 2 files changed, 6 insertions(+), 34 deletions(-)
-
-diff --git a/dnf/cli/cli.py b/dnf/cli/cli.py
-index 36671fd8..e4fd39c6 100644
---- a/dnf/cli/cli.py
-+++ b/dnf/cli/cli.py
-@@ -627,34 +627,6 @@ class BaseCli(dnf.Base):
-             logger.critical(_('Found more than one transaction ID!'))
-         return old[0]
- 
--    def history_undo_transaction(self, extcmd):
--        """Undo given transaction."""
--        old = self.history_get_transaction((extcmd,))
--        if old is None:
--            return 1, ['Failed history undo']
--
--        tm = dnf.util.normalize_time(old.beg_timestamp)
--        msg = _("Undoing transaction {}, from {}").format(old.tid, ucd(tm))
--        logger.info(msg)
--        self.output.historyInfoCmdPkgsAltered(old)  # :todo
--
--
--        mobj = dnf.db.history.MergedTransactionWrapper(old)
--
--        try:
--            self._history_undo_operations(mobj, old.tid, strict=self.conf.strict)
--        except dnf.exceptions.PackagesNotInstalledError as err:
--            logger.info(_('No package %s installed.'),
--                        self.output.term.bold(ucd(err.pkg_spec)))
--            return 1, ['An operation cannot be undone']
--        except dnf.exceptions.PackagesNotAvailableError as err:
--            logger.info(_('No package %s available.'),
--                        self.output.term.bold(ucd(err.pkg_spec)))
--            return 1, ['An operation cannot be undone']
--        except dnf.exceptions.MarkingError:
--            raise
--        else:
--            return 2, ["Undoing transaction %u" % (old.tid,)]
- 
- class Cli(object):
-     def __init__(self, base):
-diff --git a/dnf/cli/commands/history.py b/dnf/cli/commands/history.py
-index a450aaab..d60d3f25 100644
---- a/dnf/cli/commands/history.py
-+++ b/dnf/cli/commands/history.py
-@@ -175,10 +175,10 @@ class HistoryCommand(commands.Command):
-         self.replay.run()
- 
-     def _hcmd_undo(self, extcmds):
--        try:
--            return self.base.history_undo_transaction(extcmds[0])
--        except dnf.exceptions.Error as err:
--            return 1, [str(err)]
-+        old = self.base.history_get_transaction(extcmds)
-+        if old is None:
-+            return 1, ['Failed history undo']
-+        return self._revert_transaction(old)
- 
-     def _hcmd_rollback(self, extcmds):
-         old = self.base.history_get_transaction(extcmds)
-@@ -380,13 +380,13 @@ class HistoryCommand(commands.Command):
-             raise dnf.exceptions.Error(strs[0])
- 
-     def run_resolved(self):
--        if self.opts.transactions_action not in ("replay", "redo", "rollback"):
-+        if self.opts.transactions_action not in ("replay", "redo", "rollback", "undo"):
-             return
- 
-         self.replay.post_transaction()
- 
-     def run_transaction(self):
--        if self.opts.transactions_action not in ("replay", "redo", "rollback"):
-+        if self.opts.transactions_action not in ("replay", "redo", "rollback", "undo"):
-             return
- 
-         warnings = self.replay.get_warnings()
--- 
-2.26.2
-
-
-From 5a0b6cc00420fd6559a1fd611de1417ea90b1bfc Mon Sep 17 00:00:00 2001
-From: Daniel Mach <dmach@redhat.com>
-Date: Fri, 20 Nov 2020 19:54:54 +0100
-Subject: [PATCH 10/17] Remove Base._history_undo_operations() as it was
- replaced with transaction_sr code
-
----
- dnf/base.py | 59 -----------------------------------------------------
- 1 file changed, 59 deletions(-)
-
-diff --git a/dnf/base.py b/dnf/base.py
-index ec41ab01..a2955051 100644
---- a/dnf/base.py
-+++ b/dnf/base.py
-@@ -2218,65 +2218,6 @@ class Base(object):
-                                for prefix in ['/bin/', '/sbin/', '/usr/bin/', '/usr/sbin/']]
-         return self.sack.query().filterm(file__glob=binary_provides), binary_provides
- 
--    def _history_undo_operations(self, operations, first_trans, rollback=False, strict=True):
--        """Undo the operations on packages by their NEVRAs.
--
--        :param operations: a NEVRAOperations to be undone
--        :param first_trans: first transaction id being undone
--        :param rollback: True if transaction is performing a rollback
--        :param strict: if True, raise an exception on any errors
--        """
--
--        # map actions to their opposites
--        action_map = {
--            libdnf.transaction.TransactionItemAction_DOWNGRADE: None,
--            libdnf.transaction.TransactionItemAction_DOWNGRADED: libdnf.transaction.TransactionItemAction_UPGRADE,
--            libdnf.transaction.TransactionItemAction_INSTALL: libdnf.transaction.TransactionItemAction_REMOVE,
--            libdnf.transaction.TransactionItemAction_OBSOLETE: None,
--            libdnf.transaction.TransactionItemAction_OBSOLETED: libdnf.transaction.TransactionItemAction_INSTALL,
--            libdnf.transaction.TransactionItemAction_REINSTALL: None,
--            # reinstalls are skipped as they are considered as no-operation from history perspective
--            libdnf.transaction.TransactionItemAction_REINSTALLED: None,
--            libdnf.transaction.TransactionItemAction_REMOVE: libdnf.transaction.TransactionItemAction_INSTALL,
--            libdnf.transaction.TransactionItemAction_UPGRADE: None,
--            libdnf.transaction.TransactionItemAction_UPGRADED: libdnf.transaction.TransactionItemAction_DOWNGRADE,
--            libdnf.transaction.TransactionItemAction_REASON_CHANGE: None,
--        }
--
--        failed = False
--        for ti in operations.packages():
--            try:
--                action = action_map[ti.action]
--            except KeyError:
--                raise RuntimeError(_("Action not handled: {}".format(action)))
--
--            if action is None:
--                continue
--
--            if action == libdnf.transaction.TransactionItemAction_REMOVE:
--                query = self.sack.query().installed().filterm(nevra_strict=str(ti))
--                if not query:
--                    logger.error(_('No package %s installed.'), ucd(str(ti)))
--                    failed = True
--                    continue
--            else:
--                query = self.sack.query().filterm(nevra_strict=str(ti))
--                if not query:
--                    logger.error(_('No package %s available.'), ucd(str(ti)))
--                    failed = True
--                    continue
--
--            if action == libdnf.transaction.TransactionItemAction_REMOVE:
--                for pkg in query:
--                    self._goal.erase(pkg)
--            else:
--                selector = dnf.selector.Selector(self.sack)
--                selector.set(pkg=query)
--                self._goal.install(select=selector, optional=(not strict))
--
--        if strict and failed:
--            raise dnf.exceptions.PackageNotFoundError(_('no package matched'))
--
-     def _merge_update_filters(self, q, pkg_spec=None, warning=True):
-         """
-         Merge Queries in _update_filters and return intersection with q Query
--- 
-2.26.2
-
-
-From c5a02f21d1a7b3be9ace78364ce234d853118574 Mon Sep 17 00:00:00 2001
-From: Daniel Mach <dmach@redhat.com>
-Date: Wed, 2 Dec 2020 08:57:15 +0100
-Subject: [PATCH 11/17] history: Move history methods from BaseCli to
- HistoryCommand
-
----
- dnf/cli/cli.py              | 19 -------------
- dnf/cli/commands/history.py | 53 +++++++++++++++----------------------
- 2 files changed, 22 insertions(+), 50 deletions(-)
-
-diff --git a/dnf/cli/cli.py b/dnf/cli/cli.py
-index e4fd39c6..3080ae64 100644
---- a/dnf/cli/cli.py
-+++ b/dnf/cli/cli.py
-@@ -608,25 +608,6 @@ class BaseCli(dnf.Base):
-             return False
-         return True
- 
--    def _history_get_transactions(self, extcmds):
--        if not extcmds:
--            logger.critical(_('No transaction ID given'))
--            return None
--
--        old = self.history.old(extcmds)
--        if not old:
--            logger.critical(_('Not found given transaction ID'))
--            return None
--        return old
--
--    def history_get_transaction(self, extcmds):
--        old = self._history_get_transactions(extcmds)
--        if old is None:
--            return None
--        if len(old) > 1:
--            logger.critical(_('Found more than one transaction ID!'))
--        return old[0]
--
- 
- class Cli(object):
-     def __init__(self, base):
-diff --git a/dnf/cli/commands/history.py b/dnf/cli/commands/history.py
-index d60d3f25..dfd954ee 100644
---- a/dnf/cli/commands/history.py
-+++ b/dnf/cli/commands/history.py
-@@ -34,7 +34,6 @@ import dnf.util
- import json
- import logging
- import os
--import sys
- 
- 
- logger = logging.getLogger('dnf')
-@@ -160,10 +159,7 @@ class HistoryCommand(commands.Command):
-         return dnf.cli.commands.Command.get_error_output(self, error)
- 
-     def _hcmd_redo(self, extcmds):
--        old = self.base.history_get_transaction(extcmds)
--        if old is None:
--            return 1, ['Failed history redo']
--
-+        old = self._history_get_transaction(extcmds)
-         data = serialize_transaction(old)
-         self.replay = TransactionReplay(
-             self.base,
-@@ -174,16 +170,27 @@ class HistoryCommand(commands.Command):
-         )
-         self.replay.run()
- 
-+    def _history_get_transactions(self, extcmds):
-+        if not extcmds:
-+            raise dnf.cli.CliError(_('No transaction ID given'))
-+
-+        old = self.base.history.old(extcmds)
-+        if not old:
-+            raise dnf.cli.CliError(_('Transaction ID "{0}" not found.').format(extcmds[0]))
-+        return old
-+
-+    def _history_get_transaction(self, extcmds):
-+        old = self._history_get_transactions(extcmds)
-+        if len(old) > 1:
-+            raise dnf.cli.CliError(_('Found more than one transaction ID!'))
-+        return old[0]
-+
-     def _hcmd_undo(self, extcmds):
--        old = self.base.history_get_transaction(extcmds)
--        if old is None:
--            return 1, ['Failed history undo']
-+        old = self._history_get_transaction(extcmds)
-         return self._revert_transaction(old)
- 
-     def _hcmd_rollback(self, extcmds):
--        old = self.base.history_get_transaction(extcmds)
--        if old is None:
--            return 1, ['Failed history rollback']
-+        old = self._history_get_transaction(extcmds)
-         last = self.base.history.last()
- 
-         merged_trans = None
-@@ -239,12 +246,7 @@ class HistoryCommand(commands.Command):
-             ignore_extras=True,
-             skip_unavailable=self.opts.skip_unavailable
-         )
--        try:
--            self.replay.run()
--        except dnf.transaction_sr.TransactionFileError as ex:
--            for error in ex.errors:
--                print(str(error), file=sys.stderr)
--            raise dnf.exceptions.PackageNotFoundError(_('no package matched'))
-+        self.replay.run()
- 
-     def _hcmd_userinstalled(self):
-         """Execute history userinstalled command."""
-@@ -346,11 +348,8 @@ class HistoryCommand(commands.Command):
-             elif vcmd == 'userinstalled':
-                 ret = self._hcmd_userinstalled()
-             elif vcmd == 'store':
--                transactions = self.output.history.old(tids)
--                if not transactions:
--                    raise dnf.cli.CliError(_('Transaction ID "{id}" not found.').format(id=tids[0]))
--
--                data = serialize_transaction(transactions[0])
-+                tid = self._history_get_transaction(tids)
-+                data = serialize_transaction(tid)
-                 try:
-                     filename = self.opts.output if self.opts.output is not None else "transaction.json"
- 
-@@ -371,14 +370,6 @@ class HistoryCommand(commands.Command):
-                 except OSError as e:
-                     raise dnf.cli.CliError(_('Error storing transaction: {}').format(str(e)))
- 
--        if ret is None:
--            return
--        (code, strs) = ret
--        if code == 2:
--            self.cli.demands.resolving = True
--        elif code != 0:
--            raise dnf.exceptions.Error(strs[0])
--
-     def run_resolved(self):
-         if self.opts.transactions_action not in ("replay", "redo", "rollback", "undo"):
-             return
-@@ -393,7 +384,7 @@ class HistoryCommand(commands.Command):
-         if warnings:
-             logger.log(
-                 dnf.logging.WARNING,
--                _("Warning, the following problems occurred while replaying the transaction:")
-+                _("Warning, the following problems occurred while running a transaction:")
-             )
-             for w in warnings:
-                 logger.log(dnf.logging.WARNING, "  " + w)
--- 
-2.26.2
-
-
-From 917f9f3b0fc418492293e08fa7db053b0c490d8f Mon Sep 17 00:00:00 2001
-From: Daniel Mach <dmach@redhat.com>
-Date: Thu, 10 Dec 2020 13:36:52 +0100
-Subject: [PATCH 12/17] transaction_sr: Simplify error reporting, unify with
- history
-
----
- dnf/transaction_sr.py | 20 +++++++++-----------
- 1 file changed, 9 insertions(+), 11 deletions(-)
-
-diff --git a/dnf/transaction_sr.py b/dnf/transaction_sr.py
-index 9926bebd..2122aba4 100644
---- a/dnf/transaction_sr.py
-+++ b/dnf/transaction_sr.py
-@@ -57,21 +57,19 @@ class TransactionFileError(dnf.exceptions.Error):
- 
-         # store args in case someone wants to read them from a caught exception
-         self.filename = filename
--        self.errors = errors
--
-         if isinstance(errors, (list, tuple)):
--            if len(errors) > 1:
--                msg = _('Errors in "{filename}":').format(filename=filename)
--                for error in errors:
--                    msg += "\n  " + str(error)
-+            self.errors = errors
-+        else:
-+            self.errors = [errors]
- 
--                super(TransactionFileError, self).__init__(msg)
--                return
-+        if filename:
-+            msg = _('The following problems occurred while replaying the transaction from file "{filename}":').format(filename=filename)
-+        else:
-+            msg = _('The following problems occurred while running a transaction:')
- 
--            else:
--                errors = str(errors[0])
-+        for error in self.errors:
-+            msg += "\n  " + str(error)
- 
--        msg = _('Error in "{filename}": {error}').format(filename=filename, error=errors)
-         super(TransactionFileError, self).__init__(msg)
- 
- 
--- 
-2.26.2
-
-
-From d2fb741829445efee3187553cf7960f7bc2f643e Mon Sep 17 00:00:00 2001
-From: Daniel Mach <dmach@redhat.com>
-Date: Thu, 17 Dec 2020 16:37:01 +0100
-Subject: [PATCH 13/17] transaction_sr: TransactionFileError exception to
- TransactionReplayError
-
----
- dnf/transaction_sr.py | 20 ++++++++++----------
- 1 file changed, 10 insertions(+), 10 deletions(-)
-
-diff --git a/dnf/transaction_sr.py b/dnf/transaction_sr.py
-index 2122aba4..e4974eb9 100644
---- a/dnf/transaction_sr.py
-+++ b/dnf/transaction_sr.py
-@@ -48,7 +48,7 @@ class TransactionError(dnf.exceptions.Error):
-         super(TransactionError, self).__init__(msg)
- 
- 
--class TransactionFileError(dnf.exceptions.Error):
-+class TransactionReplayError(dnf.exceptions.Error):
-     def __init__(self, filename, errors):
-         """
-         :param filename: The name of the transaction file being replayed
-@@ -70,10 +70,10 @@ class TransactionFileError(dnf.exceptions.Error):
-         for error in self.errors:
-             msg += "\n  " + str(error)
- 
--        super(TransactionFileError, self).__init__(msg)
-+        super(TransactionReplayError, self).__init__(msg)
- 
- 
--class IncompatibleTransactionVersionError(TransactionFileError):
-+class IncompatibleTransactionVersionError(TransactionReplayError):
-     def __init__(self, filename, msg):
-         super(IncompatibleTransactionVersionError, self).__init__(filename, msg)
- 
-@@ -84,7 +84,7 @@ def _check_version(version, filename):
-     try:
-         major = int(major)
-     except ValueError as e:
--        raise TransactionFileError(
-+        raise TransactionReplayError(
-             filename,
-             _('Invalid major version "{major}", number expected.').format(major=major)
-         )
-@@ -92,7 +92,7 @@ def _check_version(version, filename):
-     try:
-         int(minor)  # minor is unused, just check it's a number
-     except ValueError as e:
--        raise TransactionFileError(
-+        raise TransactionReplayError(
-             filename,
-             _('Invalid minor version "{minor}", number expected.').format(minor=minor)
-         )
-@@ -234,12 +234,12 @@ class TransactionReplay(object):
-             try:
-                 replay_data = json.load(f)
-             except json.decoder.JSONDecodeError as e:
--                raise TransactionFileError(fn, str(e) + ".")
-+                raise TransactionReplayError(fn, str(e) + ".")
- 
-         try:
-             self._load_from_data(replay_data)
-         except TransactionError as e:
--            raise TransactionFileError(fn, e)
-+            raise TransactionReplayError(fn, e)
- 
-     def _load_from_data(self, data):
-         self._replay_data = data
-@@ -268,7 +268,7 @@ class TransactionReplay(object):
-         fn = self._filename
- 
-         if "version" not in replay_data:
--            raise TransactionFileError(fn, _('Missing key "{key}".'.format(key="version")))
-+            raise TransactionReplayError(fn, _('Missing key "{key}".'.format(key="version")))
- 
-         self._assert_type(replay_data["version"], str, "version", "string")
- 
-@@ -580,7 +580,7 @@ class TransactionReplay(object):
-                 errors.append(e)
- 
-         if errors:
--            raise TransactionFileError(fn, errors)
-+            raise TransactionReplayError(fn, errors)
- 
-     def post_transaction(self):
-         """
-@@ -635,4 +635,4 @@ class TransactionReplay(object):
-                 pass
- 
-         if errors:
--            raise TransactionFileError(self._filename, errors)
-+            raise TransactionReplayError(self._filename, errors)
--- 
-2.26.2
-
-
-From 1182143e58d4fda530d5dfd19f0d9c9406e8eff3 Mon Sep 17 00:00:00 2001
-From: Daniel Mach <dmach@redhat.com>
-Date: Thu, 17 Dec 2020 16:55:39 +0100
-Subject: [PATCH 14/17] transaction_sr: Don't return if there's a mismatch in
- actions
-
-When _ignore_installed == True, then an exception is raised anyway.
-When _ignore_installed == False, get the requested package to the system
-regardless the action.
----
- dnf/transaction_sr.py | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/dnf/transaction_sr.py b/dnf/transaction_sr.py
-index e4974eb9..dae8d300 100644
---- a/dnf/transaction_sr.py
-+++ b/dnf/transaction_sr.py
-@@ -334,7 +334,6 @@ class TransactionReplay(object):
-             if action == "Install" and query_na.installed() and not self._base._get_installonly_query(query_na):
-                 self._raise_or_warn(self._ignore_installed,
-                     _('Package "{na}" is already installed for action "{action}".').format(na=na, action=action))
--                return
- 
-             sltr = dnf.selector.Selector(self._base.sack).set(pkg=query)
-             self._base.goal.install(select=sltr, optional=not self._base.conf.strict)
--- 
-2.26.2
-
-
-From ff32a3c68fa853b53084a1a4947f345062056f23 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: Fri, 8 Jan 2021 13:37:45 +0100
-Subject: [PATCH 15/17] cli/output: Return number of listed packages from
- listPkgs()
-
-Instead of an error status and message.
----
- dnf/cli/cli.py              |  5 ++---
- dnf/cli/commands/history.py |  4 +++-
- dnf/cli/output.py           | 14 ++------------
- 3 files changed, 7 insertions(+), 16 deletions(-)
-
-diff --git a/dnf/cli/cli.py b/dnf/cli/cli.py
-index 3080ae64..be737ed3 100644
---- a/dnf/cli/cli.py
-+++ b/dnf/cli/cli.py
-@@ -505,7 +505,7 @@ class BaseCli(dnf.Base):
-             # XXX put this into the ListCommand at some point
-             if len(ypl.obsoletes) > 0 and basecmd == 'list':
-             # if we've looked up obsolete lists and it's a list request
--                rop = [0, '']
-+                rop = len(ypl.obsoletes)
-                 print(_('Obsoleting Packages'))
-                 for obtup in sorted(ypl.obsoletesTuples,
-                                     key=operator.itemgetter(0)):
-@@ -517,8 +517,7 @@ class BaseCli(dnf.Base):
-             rrap = self.output.listPkgs(ypl.recent, _('Recently Added Packages'),
-                                  basecmd, columns=columns)
-             if len(patterns) and \
--                rrap[0] and rop[0] and rup[0] and rep[0] and rap[0] and \
--                raep[0] and rip[0]:
-+                    rrap == 0 and rop == 0 and rup == 0 and rep == 0 and rap == 0 and raep == 0 and rip == 0:
-                 raise dnf.exceptions.Error(_('No matching Packages to list'))
- 
-     def returnPkgLists(self, pkgnarrow='all', patterns=None,
-diff --git a/dnf/cli/commands/history.py b/dnf/cli/commands/history.py
-index dfd954ee..e9b91d0f 100644
---- a/dnf/cli/commands/history.py
-+++ b/dnf/cli/commands/history.py
-@@ -251,7 +251,9 @@ class HistoryCommand(commands.Command):
-     def _hcmd_userinstalled(self):
-         """Execute history userinstalled command."""
-         pkgs = tuple(self.base.iter_userinstalled())
--        return self.output.listPkgs(pkgs, 'Packages installed by user', 'nevra')
-+        n_listed = self.output.listPkgs(pkgs, 'Packages installed by user', 'nevra')
-+        if n_listed == 0:
-+            raise dnf.cli.CliError(_('No packages to list'))
- 
-     def _args2transaction_ids(self):
-         """Convert commandline arguments to transaction ids"""
-diff --git a/dnf/cli/output.py b/dnf/cli/output.py
-index 6d729b63..6cfc9e22 100644
---- a/dnf/cli/output.py
-+++ b/dnf/cli/output.py
-@@ -597,18 +597,10 @@ class Output(object):
-                        number
-                  '>' - highlighting used when the package has a higher version
-                        number
--        :return: (exit_code, [errors])
--
--        exit_code is::
--
--            0 = we're done, exit
--            1 = we've errored, exit with error string
--
-+        :return: number of packages listed
-         """
-         if outputType in ['list', 'info', 'name', 'nevra']:
--            thingslisted = 0
-             if len(lst) > 0:
--                thingslisted = 1
-                 print('%s' % description)
-                 info_set = set()
-                 if outputType == 'list':
-@@ -645,9 +637,7 @@ class Output(object):
-                 if info_set:
-                     print("\n".join(sorted(info_set)))
- 
--            if thingslisted == 0:
--                return 1, [_('No packages to list')]
--            return 0, []
-+            return len(lst)
- 
-     def userconfirm(self, msg=None, defaultyes_msg=None):
-         """Get a yes or no from the user, and default to No
--- 
-2.26.2
-
-
-From 0226da7351eb97cd9c4c6739725b1f77d445764e 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: Fri, 8 Jan 2021 13:44:27 +0100
-Subject: [PATCH 16/17] Clean up history command error handling
-
-The removal of `ret` value error handling which was removed previously was not
-complete. Most of it is was no-op as no errors were really propagated through
-it, but the `history userinstalled` command was still relying on it.
-
-The commit removes the last bit and replaces it with raising an exception.
----
- dnf/cli/commands/history.py | 17 ++++++++---------
- 1 file changed, 8 insertions(+), 9 deletions(-)
-
-diff --git a/dnf/cli/commands/history.py b/dnf/cli/commands/history.py
-index e9b91d0f..7b38cb60 100644
---- a/dnf/cli/commands/history.py
-+++ b/dnf/cli/commands/history.py
-@@ -187,7 +187,7 @@ class HistoryCommand(commands.Command):
- 
-     def _hcmd_undo(self, extcmds):
-         old = self._history_get_transaction(extcmds)
--        return self._revert_transaction(old)
-+        self._revert_transaction(old)
- 
-     def _hcmd_rollback(self, extcmds):
-         old = self._history_get_transaction(extcmds)
-@@ -209,7 +209,7 @@ class HistoryCommand(commands.Command):
-                 else:
-                     merged_trans.merge(trans)
- 
--        return self._revert_transaction(merged_trans)
-+        self._revert_transaction(merged_trans)
- 
-     def _revert_transaction(self, trans):
-         action_map = {
-@@ -321,7 +321,6 @@ class HistoryCommand(commands.Command):
- 
-     def run(self):
-         vcmd = self.opts.transactions_action
--        ret = None
- 
-         if vcmd == 'replay':
-             self.base.read_comps(arch_filter=True)
-@@ -338,17 +337,17 @@ class HistoryCommand(commands.Command):
-             tids, merged_tids = self._args2transaction_ids()
- 
-             if vcmd == 'list' and (tids or not self.opts.transactions):
--                ret = self.output.historyListCmd(tids, reverse=self.opts.reverse)
-+                self.output.historyListCmd(tids, reverse=self.opts.reverse)
-             elif vcmd == 'info' and (tids or not self.opts.transactions):
--                ret = self.output.historyInfoCmd(tids, self.opts.transactions, merged_tids)
-+                self.output.historyInfoCmd(tids, self.opts.transactions, merged_tids)
-             elif vcmd == 'undo':
--                ret = self._hcmd_undo(tids)
-+                self._hcmd_undo(tids)
-             elif vcmd == 'redo':
--                ret = self._hcmd_redo(tids)
-+                self._hcmd_redo(tids)
-             elif vcmd == 'rollback':
--                ret = self._hcmd_rollback(tids)
-+                self._hcmd_rollback(tids)
-             elif vcmd == 'userinstalled':
--                ret = self._hcmd_userinstalled()
-+                self._hcmd_userinstalled()
-             elif vcmd == 'store':
-                 tid = self._history_get_transaction(tids)
-                 data = serialize_transaction(tid)
--- 
-2.26.2
-
-
-From 7e862711b3d7b9b444d966594630b49bf3761faf 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: Mon, 23 Nov 2020 16:32:16 +0100
-Subject: [PATCH 17/17] Lazy-load base.comps instead of explicitly
-
-Loading base.comps was done by calling a method at arbitrary places in
-the code, this is hard to maintain and get right. The method could be
-inadvertedly called multiple times per dnf run too.
-
-Instead load the comps data lazily on first access. In case of the
-shell, using "repo enable/disable" can cause the comps data to change
-mid-run. Instead of explicitly reloading, clear the comps attribute and
-let it be lazy-loaded again when needed.
-
-Closes: #1690
-Approved by: j-mracek
----
- dnf/base.py                   | 4 ++--
- dnf/cli/commands/group.py     | 5 -----
- dnf/cli/commands/history.py   | 2 --
- dnf/cli/commands/install.py   | 1 -
- dnf/cli/commands/remove.py    | 1 -
- dnf/cli/commands/repoquery.py | 1 -
- dnf/cli/commands/shell.py     | 3 +++
- dnf/cli/commands/upgrade.py   | 1 -
- tests/api/test_dnf_base.py    | 4 +---
- 9 files changed, 6 insertions(+), 16 deletions(-)
-
-diff --git a/dnf/base.py b/dnf/base.py
-index a2955051..39c21c33 100644
---- a/dnf/base.py
-+++ b/dnf/base.py
-@@ -242,6 +242,8 @@ class Base(object):
-     @property
-     def comps(self):
-         # :api
-+        if self._comps is None:
-+            self.read_comps(arch_filter=True)
-         return self._comps
- 
-     @property
-@@ -1881,7 +1883,6 @@ class Base(object):
-             no_match_module_specs = install_specs.grp_specs
- 
-         if no_match_module_specs:
--            self.read_comps(arch_filter=True)
-             exclude_specs.grp_specs = self._expand_groups(exclude_specs.grp_specs)
-             self._install_groups(no_match_module_specs, exclude_specs, no_match_group_specs, strict)
- 
-@@ -2084,7 +2085,6 @@ class Base(object):
-                     msg = _('Not a valid form: %s')
-                     logger.warning(msg, grp_spec)
-             elif grp_specs:
--                self.read_comps(arch_filter=True)
-                 if self.env_group_remove(grp_specs):
-                     done = True
- 
-diff --git a/dnf/cli/commands/group.py b/dnf/cli/commands/group.py
-index bd17f80f..cf542799 100644
---- a/dnf/cli/commands/group.py
-+++ b/dnf/cli/commands/group.py
-@@ -110,9 +110,6 @@ class GroupCommand(commands.Command):
- 
-         return installed, available
- 
--    def _grp_setup(self):
--        self.base.read_comps(arch_filter=True)
--
-     def _info(self, userlist):
-         for strng in userlist:
-             group_matched = False
-@@ -370,8 +367,6 @@ class GroupCommand(commands.Command):
-         cmd = self.opts.subcmd
-         extcmds = self.opts.args
- 
--        self._grp_setup()
--
-         if cmd == 'summary':
-             return self._summary(extcmds)
-         if cmd == 'list':
-diff --git a/dnf/cli/commands/history.py b/dnf/cli/commands/history.py
-index 7b38cb60..293d93fc 100644
---- a/dnf/cli/commands/history.py
-+++ b/dnf/cli/commands/history.py
-@@ -323,8 +323,6 @@ class HistoryCommand(commands.Command):
-         vcmd = self.opts.transactions_action
- 
-         if vcmd == 'replay':
--            self.base.read_comps(arch_filter=True)
--
-             self.replay = TransactionReplay(
-                 self.base,
-                 filename=self.opts.transaction_filename,
-diff --git a/dnf/cli/commands/install.py b/dnf/cli/commands/install.py
-index 38a90b61..b637af0b 100644
---- a/dnf/cli/commands/install.py
-+++ b/dnf/cli/commands/install.py
-@@ -151,7 +151,6 @@ class InstallCommand(commands.Command):
-         return err_pkgs
- 
-     def _install_groups(self, grp_specs):
--        self.base.read_comps(arch_filter=True)
-         try:
-             self.base.env_group_install(grp_specs,
-                                         tuple(self.base.conf.group_package_types),
-diff --git a/dnf/cli/commands/remove.py b/dnf/cli/commands/remove.py
-index f50dbd91..e455ba6e 100644
---- a/dnf/cli/commands/remove.py
-+++ b/dnf/cli/commands/remove.py
-@@ -142,7 +142,6 @@ class RemoveCommand(commands.Command):
-                 skipped_grps = self.opts.grp_specs
- 
-             if skipped_grps:
--                self.base.read_comps(arch_filter=True)
-                 for group in skipped_grps:
-                     try:
-                         if self.base.env_group_remove([group]):
-diff --git a/dnf/cli/commands/repoquery.py b/dnf/cli/commands/repoquery.py
-index 099a9312..b0d06a90 100644
---- a/dnf/cli/commands/repoquery.py
-+++ b/dnf/cli/commands/repoquery.py
-@@ -632,7 +632,6 @@ class RepoQueryCommand(commands.Command):
-                 print("\n".join(sorted(pkgs)))
- 
-     def _group_member_report(self, query):
--        self.base.read_comps(arch_filter=True)
-         package_conf_dict = {}
-         for group in self.base.comps.groups:
-             package_conf_dict[group.id] = set([pkg.name for pkg in group.packages_iter()])
-diff --git a/dnf/cli/commands/shell.py b/dnf/cli/commands/shell.py
-index 431fe502..18c886ff 100644
---- a/dnf/cli/commands/shell.py
-+++ b/dnf/cli/commands/shell.py
-@@ -239,6 +239,9 @@ exit (or quit)           exit the shell""")
-             if fill_sack:
-                 self.base.fill_sack()
- 
-+            # reset base._comps, as it has changed due to changing the repos
-+            self.base._comps = None
-+
-         else:
-             self._help('repo')
- 
-diff --git a/dnf/cli/commands/upgrade.py b/dnf/cli/commands/upgrade.py
-index 44789c9a..f62cfcc1 100644
---- a/dnf/cli/commands/upgrade.py
-+++ b/dnf/cli/commands/upgrade.py
-@@ -124,7 +124,6 @@ class UpgradeCommand(commands.Command):
- 
-     def _update_groups(self):
-         if self.skipped_grp_specs:
--            self.base.read_comps(arch_filter=True)
-             self.base.env_group_upgrade(self.skipped_grp_specs)
-             return True
-         return False
-diff --git a/tests/api/test_dnf_base.py b/tests/api/test_dnf_base.py
-index ca71b75c..656bd225 100644
---- a/tests/api/test_dnf_base.py
-+++ b/tests/api/test_dnf_base.py
-@@ -34,9 +34,7 @@ class DnfBaseApiTest(TestCase):
-     def test_comps(self):
-         # Base.comps
-         self.assertHasAttr(self.base, "comps")
--
--        # blank initially
--        self.assertEqual(self.base.comps, None)
-+        self.assertHasType(self.base.comps, dnf.comps.Comps)
- 
-         self.base.read_comps()
-         self.assertHasType(self.base.comps, dnf.comps.Comps)
--- 
-2.26.2
-
diff --git a/SOURCES/0006-Remove-sourcepackages-from-install-upgrade-set.patch b/SOURCES/0006-Remove-sourcepackages-from-install-upgrade-set.patch
deleted file mode 100644
index 1ef5a4e..0000000
--- a/SOURCES/0006-Remove-sourcepackages-from-install-upgrade-set.patch
+++ /dev/null
@@ -1,150 +0,0 @@
-From 8f3ce4868ac009976da7323ea39ebcd9a062e32d Mon Sep 17 00:00:00 2001
-From: Jaroslav Mracek <jmracek@redhat.com>
-Date: Mon, 23 Nov 2020 17:00:01 +0100
-Subject: [PATCH 1/3] Remove source packages from install/upgrade set
- (RhBug:1898548)
-
-It prevents Error: Will not install a source rpm package ()
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1898548
----
- dnf/module/module_base.py | 16 ++++++++++------
- 1 file changed, 10 insertions(+), 6 deletions(-)
-
-diff --git a/dnf/module/module_base.py b/dnf/module/module_base.py
-index 04701b9d..49c871c4 100644
---- a/dnf/module/module_base.py
-+++ b/dnf/module/module_base.py
-@@ -140,20 +140,21 @@ class ModuleBase(object):
-         if fail_safe_repo_used:
-             raise dnf.exceptions.Error(_(
-                 "Installing module from Fail-Safe repository is not allowed"))
--        install_base_query = self.base.sack.query().filterm(
--            nevra_strict=install_set_artefacts).apply()
-+        #  Remove source packages they cannot be installed or upgraded
-+        base_no_source_query = self.base.sack.query().filterm(arch__neq=['src', 'nosrc']).apply()
-+        install_base_query = base_no_source_query.filter(nevra_strict=install_set_artefacts)
- 
-         # add hot-fix packages
-         hot_fix_repos = [i.id for i in self.base.repos.iter_enabled() if i.module_hotfixes]
--        hotfix_packages = self.base.sack.query().filterm(reponame=hot_fix_repos).filterm(
--            name=install_dict.keys())
-+        hotfix_packages = base_no_source_query.filter(
-+            reponame=hot_fix_repos, name=install_dict.keys())
-         install_base_query = install_base_query.union(hotfix_packages)
- 
-         for pkg_name, set_specs in install_dict.items():
-             query = install_base_query.filter(name=pkg_name)
-             if not query:
-                 # package can also be non-modular or part of another stream
--                query = self.base.sack.query().filterm(name=pkg_name)
-+                query = base_no_source_query.filter(name=pkg_name)
-                 if not query:
-                     for spec in set_specs:
-                         logger.error(_("Unable to resolve argument {}").format(spec))
-@@ -182,6 +183,9 @@ class ModuleBase(object):
-         fail_safe_repo = hawkey.MODULE_FAIL_SAFE_REPO_NAME
-         fail_safe_repo_used = False
- 
-+        #  Remove source packages they cannot be installed or upgraded
-+        base_no_source_query = self.base.sack.query().filterm(arch__neq=['src', 'nosrc']).apply()
-+
-         for spec in module_specs:
-             module_list, nsvcap = self._get_modules(spec)
-             if not module_list:
-@@ -221,7 +225,7 @@ class ModuleBase(object):
- 
-             if not upgrade_package_set:
-                 logger.error(_("Unable to match profile in argument {}").format(spec))
--            query = self.base.sack.query().filterm(name=upgrade_package_set)
-+            query = base_no_source_query.filter(name=upgrade_package_set)
-             if query:
-                 sltr = dnf.selector.Selector(self.base.sack)
-                 sltr.set(pkg=query)
--- 
-2.26.2
-
-
-From c42680b292b2cca38b24fb18f46f06f800c1934f Mon Sep 17 00:00:00 2001
-From: Jaroslav Mracek <jmracek@redhat.com>
-Date: Mon, 23 Nov 2020 17:04:05 +0100
-Subject: [PATCH 2/3] Remove all source packages from query
-
----
- dnf/base.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/dnf/base.py b/dnf/base.py
-index a2955051..a3d9b63f 100644
---- a/dnf/base.py
-+++ b/dnf/base.py
-@@ -1550,7 +1550,7 @@ class Base(object):
-                 if (comps_pkg.basearchonly):
-                     query_args.update({'arch': basearch})
-                 q = self.sack.query().filterm(**query_args).apply()
--                q.filterm(arch__neq="src")
-+                q.filterm(arch__neq=["src", "nosrc"])
-                 if not q:
-                     package_string = comps_pkg.name
-                     if comps_pkg.basearchonly:
--- 
-2.26.2
-
-
-From 1f68fa6dc59fb350e71a24e787135475f3fb5b4c Mon Sep 17 00:00:00 2001
-From: Jaroslav Mracek <jmracek@redhat.com>
-Date: Mon, 23 Nov 2020 17:29:45 +0100
-Subject: [PATCH 3/3] Run tests with sack in tmp directory
-
----
- tests/api/test_dnf_module_base.py | 17 +++++++++++------
- 1 file changed, 11 insertions(+), 6 deletions(-)
-
-diff --git a/tests/api/test_dnf_module_base.py b/tests/api/test_dnf_module_base.py
-index aa47555b..18dd080d 100644
---- a/tests/api/test_dnf_module_base.py
-+++ b/tests/api/test_dnf_module_base.py
-@@ -7,16 +7,26 @@ from __future__ import unicode_literals
- import dnf
- import dnf.module.module_base
- 
-+import os
-+import shutil
-+import tempfile
-+
- from .common import TestCase
- 
- 
- class DnfModuleBaseApiTest(TestCase):
-     def setUp(self):
-         self.base = dnf.Base(dnf.conf.Conf())
-+        self._installroot = tempfile.mkdtemp(prefix="dnf_test_installroot_")
-+        self.base.conf.installroot = self._installroot
-+        self.base.conf.cachedir = os.path.join(self._installroot, "var/cache/dnf")
-+        self.base._sack = dnf.sack._build_sack(self.base)
-         self.moduleBase = dnf.module.module_base.ModuleBase(self.base)
- 
-     def tearDown(self):
-         self.base.close()
-+        if self._installroot.startswith("/tmp/"):
-+            shutil.rmtree(self._installroot)
- 
-     def test_init(self):
-         moduleBase = dnf.module.module_base.ModuleBase(self.base)
-@@ -51,12 +61,7 @@ class DnfModuleBaseApiTest(TestCase):
-     def test_install(self):
-         # ModuleBase.install()
-         self.assertHasAttr(self.moduleBase, "install")
--        self.assertRaises(
--            AttributeError,
--            self.moduleBase.install,
--            module_specs=[],
--            strict=False,
--        )
-+        self.moduleBase.install(module_specs=[], strict=False)
- 
-     def test_remove(self):
-         # ModuleBase.remove()
--- 
-2.26.2
-
diff --git a/SOURCES/0006-Update-translations.patch b/SOURCES/0006-Update-translations.patch
new file mode 100644
index 0000000..2295616
--- /dev/null
+++ b/SOURCES/0006-Update-translations.patch
@@ -0,0 +1,13620 @@
+From 9895b138f231c380a90ebace39dc3a9c44e00d46 Mon Sep 17 00:00:00 2001
+From: Marek Blaha <mblaha@redhat.com>
+Date: Mon, 13 Sep 2021 09:45:20 +0200
+Subject: [PATCH] Update translations
+
+---
+ po/fr.po    | 1283 +++++++++++++++++--------------
+ po/ja.po    | 1345 ++++++++++++++++++---------------
+ po/ko.po    | 2101 +++++++++++++++++++++++++++------------------------
+ po/zh_CN.po | 1311 +++++++++++++++++---------------
+ 4 files changed, 3225 insertions(+), 2815 deletions(-)
+
+diff --git a/po/fr.po b/po/fr.po
+index 4e883335..44843ed7 100644
+--- a/po/fr.po
++++ b/po/fr.po
+@@ -15,23 +15,25 @@
+ # José Fournier <jaaf64@zoraldia.com>, 2017. #zanata
+ # Jérôme Fenal <jfenal@gmail.com>, 2017. #zanata
+ # Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>, 2018. #zanata, 2020.
+-# Ludek Janda <ljanda@redhat.com>, 2018. #zanata
++# Ludek Janda <ljanda@redhat.com>, 2018. #zanata, 2021.
+ # Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>, 2019. #zanata, 2020.
+-# Julien Humbert <julroy67@gmail.com>, 2020.
++# Julien Humbert <julroy67@gmail.com>, 2020, 2021.
++# Sundeep Anand <suanand@redhat.com>, 2021.
++# Guillaume Jacob <abun.lp@gmail.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-09-12 11:29+0000\n"
+-"Last-Translator: Julien Humbert <julroy67@gmail.com>\n"
+-"Language-Team: French <https://translate.fedoraproject.org/projects/dnf/dnf-master/fr/>\n"
++"POT-Creation-Date: 2021-08-11 16:00+0200\n"
++"PO-Revision-Date: 2021-09-06 17:24+0000\n"
++"Last-Translator: Sundeep Anand <suanand@redhat.com>\n"
++"Language-Team: French <https://translate.fedoraproject.org/projects/dnf/dnf-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.2.2\n"
++"X-Generator: Weblate 4.8\n"
+ 
+ #: dnf/automatic/emitter.py:32
+ #, python-format
+@@ -78,7 +80,7 @@ msgstr "Échec de l’envoi d’un courriel par « %s » : %s"
+ msgid "Failed to execute command '%s': returned %d"
+ msgstr "Échec dans l’exécution de la commande « %s » : code retour %d"
+ 
+-#: dnf/automatic/main.py:164 dnf/conf/config.py:151
++#: dnf/automatic/main.py:164
+ #, python-format
+ msgid "Unknown configuration value: %s=%s in %s; %s"
+ msgstr "Valeur de configuration inconnue : %s=%s dans %s ; %s"
+@@ -88,22 +90,23 @@ msgstr "Valeur de configuration inconnue : %s=%s dans %s ; %s"
+ msgid "Unknown configuration option: %s = %s in %s"
+ msgstr "Option de configuration inconnue : %s=%s dans %s"
+ 
+-#: dnf/automatic/main.py:237 dnf/cli/cli.py:299
++#: dnf/automatic/main.py:237 dnf/cli/cli.py:305
+ msgid "GPG check FAILED"
+ msgstr "La vérification GPG a ÉCHOUÉ"
+ 
+ #: dnf/automatic/main.py:274
+ msgid "Waiting for internet connection..."
+-msgstr "En attente d'une connexion Internet…"
++msgstr "En attente d'une connexion Internet..."
+ 
+ #: dnf/automatic/main.py:304
+ msgid "Started dnf-automatic."
+ msgstr "dnf-automatic démarré."
+ 
+ #: dnf/automatic/main.py:308
+-#, python-format
+-msgid "Sleep for %s seconds"
+-msgstr "Mise en sommeil pendant %s secondes"
++msgid "Sleep for {} second"
++msgid_plural "Sleep for {} seconds"
++msgstr[0] "Mise en sommeil pendant {} seconde"
++msgstr[1] "Mise en sommeil pendant {} secondes"
+ 
+ #: dnf/automatic/main.py:315
+ msgid "System is off-line."
+@@ -115,84 +118,84 @@ msgstr "Le système est hors-ligne."
+ msgid "Error: %s"
+ msgstr "Erreur : %s"
+ 
+-#: dnf/base.py:146
++#: dnf/base.py:148 dnf/base.py:477 dnf/base.py:479
+ msgid "loading repo '{}' failure: {}"
+ msgstr "Erreur lors du chargement du dépôt « {} » : {}"
+ 
+-#: dnf/base.py:148
++#: dnf/base.py:150
+ msgid "Loading repository '{}' has failed"
+ msgstr "Échec du chargement du dépôt « {} »"
+ 
+-#: dnf/base.py:320
++#: dnf/base.py:327
+ msgid "Metadata timer caching disabled when running on metered connection."
+ msgstr ""
+ "Mise en cache temporisée des métadonnées désactivée lors du fonctionnement "
+ "sur connexion limitée."
+ 
+-#: dnf/base.py:325
++#: dnf/base.py:332
+ msgid "Metadata timer caching disabled when running on a battery."
+ msgstr ""
+ "Mise en cache temporisée des métadonnées désactivée lors du fonctionnement "
+ "sur batterie."
+ 
+-#: dnf/base.py:330
++#: dnf/base.py:337
+ msgid "Metadata timer caching disabled."
+ msgstr "Mise en cache temporisée des métadonnées désactivée."
+ 
+-#: dnf/base.py:335
++#: dnf/base.py:342
+ msgid "Metadata cache refreshed recently."
+ msgstr "Cache des métadonnées mis à jour récemment."
+ 
+-#: dnf/base.py:341 dnf/cli/commands/__init__.py:91
++#: dnf/base.py:348 dnf/cli/commands/__init__.py:91
+ msgid "There are no enabled repositories in \"{}\"."
+ msgstr "Il n’y a pas de dépôts activés dans « {} »."
+ 
+-#: dnf/base.py:348
++#: dnf/base.py:355
+ #, python-format
+ msgid "%s: will never be expired and will not be refreshed."
+ msgstr "%s : n’expirera jamais et ne sera pas réinitialisé."
+ 
+-#: dnf/base.py:350
++#: dnf/base.py:357
+ #, python-format
+ msgid "%s: has expired and will be refreshed."
+ msgstr "%s : a expiré et sera réinitialisé."
+ 
+ #. expires within the checking period:
+-#: dnf/base.py:354
++#: dnf/base.py:361
+ #, python-format
+ msgid "%s: metadata will expire after %d seconds and will be refreshed now"
+ msgstr ""
+ "%s : métadonnées expireront après %d secondes et seront réinitialisées "
+ "maintenant"
+ 
+-#: dnf/base.py:358
++#: dnf/base.py:365
+ #, python-format
+ msgid "%s: will expire after %d seconds."
+ msgstr "%s : expireront après %d secondes."
+ 
+ #. performs the md sync
+-#: dnf/base.py:364
++#: dnf/base.py:371
+ msgid "Metadata cache created."
+ msgstr "Cache des métadonnées créé."
+ 
+-#: dnf/base.py:397
++#: dnf/base.py:404 dnf/base.py:471
+ #, python-format
+ msgid "%s: using metadata from %s."
+ msgstr "%s : utilisation des métadonnées depuis le %s."
+ 
+-#: dnf/base.py:409
++#: dnf/base.py:416 dnf/base.py:484
+ #, python-format
+ msgid "Ignoring repositories: %s"
+ msgstr "Dépôts ignorés : %s"
+ 
+-#: dnf/base.py:412
++#: dnf/base.py:419
+ #, python-format
+ msgid "Last metadata expiration check: %s ago on %s."
+ msgstr ""
+ "Dernière vérification de l’expiration des métadonnées effectuée il y a %s le"
+ " %s."
+ 
+-#: dnf/base.py:443
++#: dnf/base.py:512
+ msgid ""
+ "The downloaded packages were saved in cache until the next successful "
+ "transaction."
+@@ -200,59 +203,59 @@ msgstr ""
+ "Les paquets téléchargés ont été mis en cache jusqu’à la prochaine "
+ "transaction réussie."
+ 
+-#: dnf/base.py:445
++#: dnf/base.py:514
+ #, python-format
+ msgid "You can remove cached packages by executing '%s'."
+ msgstr "Vous pouvez supprimer les paquets en cache en exécutant « %s »."
+ 
+-#: dnf/base.py:535
++#: dnf/base.py:606
+ #, python-format
+ msgid "Invalid tsflag in config file: %s"
+ msgstr "tsflag invalide dans le fichier de configuration : %s"
+ 
+-#: dnf/base.py:591
++#: dnf/base.py:662
+ #, python-format
+ msgid "Failed to add groups file for repository: %s - %s"
+ msgstr "Échec d’ajout du fichier de groupes pour le dépôt : %s - %s"
+ 
+-#: dnf/base.py:823
++#: dnf/base.py:904
+ msgid "Running transaction check"
+ msgstr "Test de la transaction"
+ 
+-#: dnf/base.py:831
++#: dnf/base.py:912
+ msgid "Error: transaction check vs depsolve:"
+ msgstr ""
+ "Erreur : vérification de transaction contre résolution des dépendances :"
+ 
+-#: dnf/base.py:837
++#: dnf/base.py:918
+ msgid "Transaction check succeeded."
+ msgstr "La vérification de la transaction a réussi."
+ 
+-#: dnf/base.py:840
++#: dnf/base.py:921
+ msgid "Running transaction test"
+ msgstr "Lancement de la transaction de test"
+ 
+-#: dnf/base.py:850 dnf/base.py:992
++#: dnf/base.py:931 dnf/base.py:1082
+ msgid "RPM: {}"
+ msgstr "RPM : {}"
+ 
+-#: dnf/base.py:851
++#: dnf/base.py:932
+ msgid "Transaction test error:"
+ msgstr "Erreur de la transaction de test :"
+ 
+-#: dnf/base.py:862
++#: dnf/base.py:943
+ msgid "Transaction test succeeded."
+ msgstr "Transaction de test réussie."
+ 
+-#: dnf/base.py:883
++#: dnf/base.py:964
+ msgid "Running transaction"
+ msgstr "Exécution de la transaction"
+ 
+-#: dnf/base.py:911
++#: dnf/base.py:1001
+ msgid "Disk Requirements:"
+ msgstr "Besoins en espace disque :"
+ 
+-#: dnf/base.py:914
++#: dnf/base.py:1004
+ #, python-brace-format
+ msgid "At least {0}MB more space needed on the {1} filesystem."
+ msgid_plural "At least {0}MB more space needed on the {1} filesystem."
+@@ -263,151 +266,151 @@ msgstr[1] ""
+ "Au moins {0} Mio supplémentaires sont nécessaires sur le système de fichiers"
+ " {1}."
+ 
+-#: dnf/base.py:921
++#: dnf/base.py:1011
+ msgid "Error Summary"
+ msgstr "Résumé des erreurs"
+ 
+-#: dnf/base.py:947
++#: dnf/base.py:1037
+ #, python-brace-format
+ msgid "RPMDB altered outside of {prog}."
+ msgstr "RPMDB modifié en dehors de {prog}."
+ 
+-#: dnf/base.py:993 dnf/base.py:1001
++#: dnf/base.py:1083 dnf/base.py:1091
+ msgid "Could not run transaction."
+ msgstr "Impossible d’exécuter la transaction."
+ 
+-#: dnf/base.py:996
++#: dnf/base.py:1086
+ msgid "Transaction couldn't start:"
+ msgstr "La transaction n’a pas pu démarrer :"
+ 
+-#: dnf/base.py:1010
++#: dnf/base.py:1100
+ #, python-format
+ msgid "Failed to remove transaction file %s"
+ msgstr "Échec de la suppression du fichier de transaction %s"
+ 
+-#: dnf/base.py:1092
++#: dnf/base.py:1182
+ msgid "Some packages were not downloaded. Retrying."
+ msgstr "Certains paquets n’ont pas été téléchargés. Nouvel essai."
+ 
+-#: dnf/base.py:1122
++#: dnf/base.py:1212
+ #, python-format
+ msgid "Delta RPMs reduced %.1f MB of updates to %.1f MB (%d.1%% saved)"
+ msgstr ""
+ "Les Delta RPM ont réduit la taille des mises à jour de %.1f Mio à %.1f Mio "
+ "(%d.1%% économisés)"
+ 
+-#: dnf/base.py:1125
++#: dnf/base.py:1215
+ #, python-format
+ msgid ""
+ "Failed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)"
+ msgstr ""
+-"L’échec des Delta RPMs ont fait augmenter les %.1f MO de mises à jour de "
+-"%.1f MB (%d.1%% gaspillés)"
++"Les Delta RPMs en échec ont fait augmenter la taille des mises à jour de "
++"%.1f Mio à %.1f Mio (%d.1%% gaspillés)"
+ 
+-#: dnf/base.py:1167
++#: dnf/base.py:1257
+ msgid "Cannot add local packages, because transaction job already exists"
+ msgstr ""
+ "Impossible d’ajouter des paquets locaux, car un travail de transaction "
+ "existe déjà"
+ 
+-#: dnf/base.py:1181
++#: dnf/base.py:1271
+ msgid "Could not open: {}"
+ msgstr "Impossible d’ouvrir : {}"
+ 
+-#: dnf/base.py:1219
++#: dnf/base.py:1309
+ #, python-format
+ msgid "Public key for %s is not installed"
+ msgstr "La clé publique pour %s n’est pas installée"
+ 
+-#: dnf/base.py:1223
++#: dnf/base.py:1313
+ #, python-format
+ msgid "Problem opening package %s"
+ msgstr "Problème à l’ouverture du paquet %s"
+ 
+-#: dnf/base.py:1231
++#: dnf/base.py:1321
+ #, python-format
+ msgid "Public key for %s is not trusted"
+ msgstr "La clé publique pour %s n’est pas de confiance"
+ 
+-#: dnf/base.py:1235
++#: dnf/base.py:1325
+ #, python-format
+ msgid "Package %s is not signed"
+ msgstr "Le paquet %s n’est pas signé"
+ 
+-#: dnf/base.py:1265
++#: dnf/base.py:1355
+ #, python-format
+ msgid "Cannot remove %s"
+ msgstr "Impossible de supprimer %s"
+ 
+-#: dnf/base.py:1269
++#: dnf/base.py:1359
+ #, python-format
+ msgid "%s removed"
+ msgstr "%s supprimé"
+ 
+-#: dnf/base.py:1549
++#: dnf/base.py:1639
+ msgid "No match for group package \"{}\""
+ msgstr "Aucune correspondance pour le paquet du groupe « {} »"
+ 
+-#: dnf/base.py:1635
++#: dnf/base.py:1725
+ #, python-format
+ msgid "Adding packages from group '%s': %s"
+ msgstr "Ajout de paquets en provenance du groupe « %s » : %s"
+ 
+-#: dnf/base.py:1658 dnf/cli/cli.py:219 dnf/cli/commands/__init__.py:442
+-#: dnf/cli/commands/__init__.py:499 dnf/cli/commands/__init__.py:592
+-#: dnf/cli/commands/__init__.py:641 dnf/cli/commands/install.py:80
++#: dnf/base.py:1748 dnf/cli/cli.py:221 dnf/cli/commands/__init__.py:437
++#: dnf/cli/commands/__init__.py:494 dnf/cli/commands/__init__.py:587
++#: dnf/cli/commands/__init__.py:636 dnf/cli/commands/install.py:80
+ #: dnf/cli/commands/install.py:103 dnf/cli/commands/install.py:110
+ msgid "Nothing to do."
+ msgstr "Rien à faire."
+ 
+-#: dnf/base.py:1676
++#: dnf/base.py:1766
+ msgid "No groups marked for removal."
+ msgstr "Aucun groupe marqué pour suppression."
+ 
+-#: dnf/base.py:1710
++#: dnf/base.py:1800
+ msgid "No group marked for upgrade."
+ msgstr "Aucun groupe marqué pour mise à jour."
+ 
+-#: dnf/base.py:1925
++#: dnf/base.py:2014
+ #, python-format
+ msgid "Package %s not installed, cannot downgrade it."
+ msgstr "Le paquet %s n’est pas installé, impossible de le rétrograder."
+ 
+-#: dnf/base.py:1927 dnf/base.py:1946 dnf/base.py:1959 dnf/base.py:1980
+-#: dnf/base.py:2029 dnf/base.py:2037 dnf/base.py:2172 dnf/cli/cli.py:411
+-#: dnf/cli/commands/__init__.py:425 dnf/cli/commands/__init__.py:482
+-#: dnf/cli/commands/__init__.py:586 dnf/cli/commands/__init__.py:633
+-#: dnf/cli/commands/__init__.py:711 dnf/cli/commands/install.py:147
++#: dnf/base.py:2016 dnf/base.py:2035 dnf/base.py:2048 dnf/base.py:2075
++#: dnf/base.py:2128 dnf/base.py:2136 dnf/base.py:2270 dnf/cli/cli.py:417
++#: dnf/cli/commands/__init__.py:420 dnf/cli/commands/__init__.py:477
++#: dnf/cli/commands/__init__.py:581 dnf/cli/commands/__init__.py:628
++#: dnf/cli/commands/__init__.py:706 dnf/cli/commands/install.py:147
+ #: dnf/cli/commands/reinstall.py:70 dnf/cli/commands/reinstall.py:84
+-#: dnf/cli/commands/upgrade.py:110 dnf/cli/commands/upgrade.py:121
++#: dnf/cli/commands/upgrade.py:105 dnf/cli/commands/upgrade.py:116
+ #, python-format
+ msgid "No match for argument: %s"
+ msgstr "Aucune correspondance pour l’argument : %s"
+ 
+-#: dnf/base.py:1934
++#: dnf/base.py:2023
+ #, python-format
+ msgid "Package %s of lower version already installed, cannot downgrade it."
+ msgstr ""
+ "Le paquet %s est déjà installé dans une version inférieure, impossible de le"
+ " rétrograder."
+ 
+-#: dnf/base.py:1957
++#: dnf/base.py:2046
+ #, python-format
+ msgid "Package %s not installed, cannot reinstall it."
+ msgstr "Le paquet %s n’est pas installé, impossible de le réinstaller."
+ 
+-#: dnf/base.py:1972
++#: dnf/base.py:2061
+ #, python-format
+ msgid "File %s is a source package and cannot be updated, ignoring."
+ msgstr ""
+ "Le fichier %s est un paquet source et ne peut pas être mis à jour, ignoré."
+ 
+-#: dnf/base.py:1978
++#: dnf/base.py:2072
+ #, python-format
+ msgid "Package %s not installed, cannot update it."
+ msgstr "Le paquet %s n’est pas installé, impossible de le mettre à jour."
+ 
+-#: dnf/base.py:1987
++#: dnf/base.py:2082
+ #, python-format
+ msgid ""
+ "The same or higher version of %s is already installed, cannot update it."
+@@ -415,127 +418,113 @@ msgstr ""
+ "La même une ou version supérieure de %s est déjà installée, mise à jour "
+ "impossible."
+ 
+-#: dnf/base.py:2026 dnf/cli/commands/reinstall.py:81
++#: dnf/base.py:2125 dnf/cli/commands/reinstall.py:81
+ #, python-format
+ msgid "Package %s available, but not installed."
+ msgstr "Le paquet %s est disponible mais n’est pas installé."
+ 
+-#: dnf/base.py:2032
++#: dnf/base.py:2131
+ #, python-format
+ msgid "Package %s available, but installed for different architecture."
+ msgstr ""
+ "Le paquet %s est disponible mais est installé pour une autre architecture."
+ 
+-#: dnf/base.py:2057 dnf/base.py:2250 dnf/cli/cli.py:668 dnf/cli/cli.py:699
++#: dnf/base.py:2156
+ #, python-format
+ msgid "No package %s installed."
+ msgstr "Aucun paquet %s installé."
+ 
+-#: dnf/base.py:2075 dnf/cli/commands/install.py:136
++#: dnf/base.py:2174 dnf/cli/commands/install.py:136
+ #: dnf/cli/commands/remove.py:133
+ #, python-format
+ msgid "Not a valid form: %s"
+ msgstr "Format invalide : %s"
+ 
+-#: dnf/base.py:2091 dnf/cli/commands/__init__.py:681
+-#: dnf/cli/commands/remove.py:163
++#: dnf/base.py:2189 dnf/cli/commands/__init__.py:676
++#: dnf/cli/commands/remove.py:162
+ msgid "No packages marked for removal."
+ msgstr "Aucun paquet marqué pour suppression."
+ 
+-#: dnf/base.py:2179 dnf/cli/cli.py:422
++#: dnf/base.py:2277 dnf/cli/cli.py:428
+ #, python-format
+ msgid "Packages for argument %s available, but not installed."
+ msgstr "Les paquets pour le paramètre %s sont disponibles mais pas installés."
+ 
+-#: dnf/base.py:2184
++#: dnf/base.py:2282
+ #, python-format
+ msgid "Package %s of lowest version already installed, cannot downgrade it."
+ msgstr ""
+ "La version la plus ancienne du paquet %s est déjà installée, impossible de "
+ "le rétrograder."
+ 
+-#: dnf/base.py:2242
+-msgid "Action not handled: {}"
+-msgstr "Action non gérée : {}"
+-
+-#: dnf/base.py:2256 dnf/cli/cli.py:419 dnf/cli/cli.py:673 dnf/cli/cli.py:703
+-#: dnf/cli/commands/group.py:400 dnf/cli/commands/history.py:169
+-#, python-format
+-msgid "No package %s available."
+-msgstr "Aucun paquet %s n’est disponible."
+-
+-#: dnf/base.py:2269
+-msgid "no package matched"
+-msgstr "aucun paquet correspondant"
+-
+-#: dnf/base.py:2290
++#: dnf/base.py:2382
+ msgid "No security updates needed, but {} update available"
+ msgstr ""
+ "Aucune mise à jour de sécurité n’est nécessaire, mais la mise à jour {} est "
+ "disponible"
+ 
+-#: dnf/base.py:2292
++#: dnf/base.py:2384
+ msgid "No security updates needed, but {} updates available"
+ msgstr ""
+ "Aucune mise à jour de sécurité n’est nécessaire, mais les mises à jour {} "
+ "sont disponibles"
+ 
+-#: dnf/base.py:2296
++#: dnf/base.py:2388
+ msgid "No security updates needed for \"{}\", but {} update available"
+ msgstr ""
+ "Aucune mise à jour de sécurité n’est nécessaire pour « {} », mais la mise à "
+ "jour {} est disponible"
+ 
+-#: dnf/base.py:2298
++#: dnf/base.py:2390
+ msgid "No security updates needed for \"{}\", but {} updates available"
+ msgstr ""
+ "Aucune mise à jour de sécurité n’est nécessaire pour « {} », mais les mises "
+ "à jour {} sont disponibles"
+ 
+ #. raise an exception, because po.repoid is not in self.repos
+-#: dnf/base.py:2319
++#: dnf/base.py:2411
+ #, python-format
+ msgid "Unable to retrieve a key for a commandline package: %s"
+ msgstr ""
+ "Impossible de récupérer une clé pour un paquet en ligne de commande : %s"
+ 
+-#: dnf/base.py:2327
++#: dnf/base.py:2419
+ #, python-format
+ msgid ". Failing package is: %s"
+ msgstr ". Le paquet en erreur est : %s"
+ 
+-#: dnf/base.py:2328
++#: dnf/base.py:2420
+ #, python-format
+ msgid "GPG Keys are configured as: %s"
+ msgstr "Les clés GPG sont configurées comme : %s"
+ 
+-#: dnf/base.py:2340
++#: dnf/base.py:2432
+ #, python-format
+ msgid "GPG key at %s (0x%s) is already installed"
+ msgstr "La clé GPG %s (0x%s) est déjà installée"
+ 
+-#: dnf/base.py:2373
++#: dnf/base.py:2468
+ msgid "The key has been approved."
+ msgstr "La clef a été approuvée."
+ 
+-#: dnf/base.py:2376
++#: dnf/base.py:2471
+ msgid "The key has been rejected."
+ msgstr "La clef a été rejetée."
+ 
+-#: dnf/base.py:2409
++#: dnf/base.py:2504
+ #, python-format
+ msgid "Key import failed (code %d)"
+ msgstr "L’import de la clé a échoué (code %d)"
+ 
+-#: dnf/base.py:2411
++#: dnf/base.py:2506
+ msgid "Key imported successfully"
+ msgstr "La clé a bien été importée"
+ 
+-#: dnf/base.py:2415
++#: dnf/base.py:2510
+ msgid "Didn't install any keys"
+ msgstr "Toutes les clés n’ont pas été installées"
+ 
+-#: dnf/base.py:2418
++#: dnf/base.py:2513
+ #, python-format
+ msgid ""
+ "The GPG keys listed for the \"%s\" repository are already installed but they are not correct for this package.\n"
+@@ -544,28 +533,28 @@ msgstr ""
+ "Les clés GPG listées pour le dépôt « %s » sont déjà installées mais sont incorrectes pour ce paquet.\n"
+ "Vérifiez que les URL des clés pour ce dépôt soient correctes."
+ 
+-#: dnf/base.py:2429
++#: dnf/base.py:2524
+ msgid "Import of key(s) didn't help, wrong key(s)?"
+ msgstr ""
+ "L’import de la ou des clés n’a pas résolu le problème, clés incorrectes ?"
+ 
+-#: dnf/base.py:2482
++#: dnf/base.py:2577
+ msgid "  * Maybe you meant: {}"
+ msgstr "  * Peut-être vouliez-vous dire : {}"
+ 
+-#: dnf/base.py:2514
++#: dnf/base.py:2609
+ msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum"
+ msgstr "Le paquet \"{}\" du dépôt local \"{}\" a une somme de contrôle incorrecte"
+ 
+-#: dnf/base.py:2517
++#: dnf/base.py:2612
+ msgid "Some packages from local repository have incorrect checksum"
+ msgstr "Certains paquets du dépôt local ont une somme de contrôle incorrecte"
+ 
+-#: dnf/base.py:2520
++#: dnf/base.py:2615
+ msgid "Package \"{}\" from repository \"{}\" has incorrect checksum"
+ msgstr "Le paquet \"{}\" du dépôt \"{}\" a une somme de contrôle incorrecte"
+ 
+-#: dnf/base.py:2523
++#: dnf/base.py:2618
+ msgid ""
+ "Some packages have invalid cache, but cannot be downloaded due to \"--"
+ "cacheonly\" option"
+@@ -573,29 +562,29 @@ msgstr ""
+ "Certains paquets ont un cache invalide, mais ne peuvent pas être téléchargés"
+ " à cause de l’option « --cacheonly »"
+ 
+-#: dnf/base.py:2541 dnf/base.py:2561
++#: dnf/base.py:2636 dnf/base.py:2656
+ msgid "No match for argument"
+ msgstr "Aucune correspondance pour le paramètre"
+ 
+-#: dnf/base.py:2549 dnf/base.py:2569
++#: dnf/base.py:2644 dnf/base.py:2664
+ msgid "All matches were filtered out by exclude filtering for argument"
+ msgstr ""
+ "Toutes les correspondances ont été filtrées en excluant le filtrage pour "
+ "l’argument"
+ 
+-#: dnf/base.py:2551
++#: dnf/base.py:2646
+ msgid "All matches were filtered out by modular filtering for argument"
+ msgstr ""
+ "Toutes les correspondances ont été filtrées par filtrage modulaire pour les "
+ "arguments"
+ 
+-#: dnf/base.py:2567
++#: dnf/base.py:2662
+ msgid "All matches were installed from a different repository for argument"
+ msgstr ""
+ "Toutes les correspondances ont été installées à partir d’un dépôt différent "
+ "pour le paramètre"
+ 
+-#: dnf/base.py:2583
++#: dnf/base.py:2709
+ #, python-format
+ msgid "Package %s is already installed."
+ msgstr "Le paquet %s est déjà installé."
+@@ -616,8 +605,8 @@ msgstr "La lecture du fichier « %s » a échoué : %s"
+ msgid "Cannot read file \"%s\": %s"
+ msgstr "Impossible de lire le fichier « %s » : %s"
+ 
+-#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:902
+-#: dnf/cli/cli.py:906 dnf/cli/commands/alias.py:108
++#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:804
++#: dnf/cli/cli.py:808 dnf/cli/commands/alias.py:108
+ #, python-format
+ msgid "Config error: %s"
+ msgstr "Erreur de configuration : %s"
+@@ -650,21 +639,21 @@ msgstr ""
+ "Le résulta de l’opération sera le basculement du flux« {1} » du module « {0}"
+ " » vers le flux« {2} »"
+ 
+-#: dnf/cli/cli.py:172
++#: dnf/cli/cli.py:173
+ #, python-brace-format
+ 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 '{prog} module reset <module_name>' command. After you reset the module, you can install the other stream."
++"It is not possible to switch enabled streams of a module unless explicitly enabled via configuration option module_stream_switch.\n"
++"It is recommended to rather remove all installed content from the module, and reset the module using '{prog} 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 et recommandé de retirer tout contenu installé par le module, et de réinitialiser le mode en utilisant la commande « {prog} module reset <nom_du_module> ». Après la réinitialisation, vous pouvez installer les autres flux."
++"Il n’est pas possible de basculer les flux actifs d’un module sauf si cela est explicitement activé par l’option de configuration module_stream_switch.\n"
++"Il est plutôt recommandé de retirer tout contenu installé par le module, et de réinitialiser le mode en utilisant la commande « {prog} module reset <nom_du_module> ». Après la réinitialisation, vous pouvez installer les autres flux."
+ 
+-#: dnf/cli/cli.py:210
++#: dnf/cli/cli.py:212
+ #, python-brace-format
+ msgid "{prog} will only download packages for the transaction."
+ msgstr "{prog} ne téléchargera que les paquets pour la transaction."
+ 
+-#: dnf/cli/cli.py:213
++#: dnf/cli/cli.py:215
+ #, python-brace-format
+ msgid ""
+ "{prog} will only download packages, install gpg keys, and check the "
+@@ -673,23 +662,23 @@ msgstr ""
+ "{prog} ne téléchargera que les paquets, installera les clefs GPG et "
+ "vérifiera la transaction."
+ 
+-#: dnf/cli/cli.py:217
++#: dnf/cli/cli.py:219
+ msgid "Operation aborted."
+ msgstr "Opération avortée."
+ 
+-#: dnf/cli/cli.py:224
++#: dnf/cli/cli.py:226
+ msgid "Downloading Packages:"
+ msgstr "Téléchargement des paquets :"
+ 
+-#: dnf/cli/cli.py:230
++#: dnf/cli/cli.py:232
+ msgid "Error downloading packages:"
+ msgstr "Erreur de téléchargement des paquets :"
+ 
+-#: dnf/cli/cli.py:258
++#: dnf/cli/cli.py:264
+ msgid "Transaction failed"
+ msgstr "La transaction a échoué"
+ 
+-#: dnf/cli/cli.py:281
++#: dnf/cli/cli.py:287
+ msgid ""
+ "Refusing to automatically import keys when running unattended.\n"
+ "Use \"-y\" to override."
+@@ -697,91 +686,70 @@ msgstr ""
+ "Refus de l’importation automatique des clés lors d’une exécution sans surveillance.\n"
+ "Utilisez l’option « -y » pour passer outre."
+ 
+-#: dnf/cli/cli.py:331
++#: dnf/cli/cli.py:337
+ msgid "Changelogs for {}"
+ msgstr "Changements pour {}"
+ 
+-#: dnf/cli/cli.py:364 dnf/cli/cli.py:505 dnf/cli/cli.py:511
++#: dnf/cli/cli.py:370 dnf/cli/cli.py:511 dnf/cli/cli.py:517
+ msgid "Obsoleting Packages"
+ msgstr "Passage de paquets en obsolètes"
+ 
+-#: dnf/cli/cli.py:393
++#: dnf/cli/cli.py:399
+ msgid "No packages marked for distribution synchronization."
+ msgstr "Aucun paquet marqué pour la synchronisation de la distribution."
+ 
+-#: dnf/cli/cli.py:428
++#: dnf/cli/cli.py:425 dnf/cli/commands/group.py:395
++#, python-format
++msgid "No package %s available."
++msgstr "Aucun paquet %s n’est disponible."
++
++#: dnf/cli/cli.py:434
+ msgid "No packages marked for downgrade."
+ msgstr "Aucun paquet n’a été marqué pour passer à une version antérieure."
+ 
+-#: dnf/cli/cli.py:479
++#: dnf/cli/cli.py:485
+ msgid "Installed Packages"
+ msgstr "Paquets installés"
+ 
+-#: dnf/cli/cli.py:487
++#: dnf/cli/cli.py:493
+ msgid "Available Packages"
+ msgstr "Paquets disponibles"
+ 
+-#: dnf/cli/cli.py:491
++#: dnf/cli/cli.py:497
+ msgid "Autoremove Packages"
+ msgstr "Supprime des paquets automatiquement"
+ 
+-#: dnf/cli/cli.py:493
++#: dnf/cli/cli.py:499
+ msgid "Extra Packages"
+ msgstr "Paquets supplémentaires"
+ 
+-#: dnf/cli/cli.py:497
++#: dnf/cli/cli.py:503
+ msgid "Available Upgrades"
+ msgstr "Mises à jour disponibles"
+ 
+-#: dnf/cli/cli.py:513
++#: dnf/cli/cli.py:519
+ msgid "Recently Added Packages"
+ msgstr "Paquets récemment ajoutés"
+ 
+-#: dnf/cli/cli.py:518
++#: dnf/cli/cli.py:523
+ msgid "No matching Packages to list"
+ msgstr "Aucun paquet correspondant à lister"
+ 
+-#: dnf/cli/cli.py:599
++#: dnf/cli/cli.py:604
+ msgid "No Matches found"
+ msgstr "Aucune correspondance trouvée"
+ 
+-#: dnf/cli/cli.py:609
+-msgid "No transaction ID given"
+-msgstr "Aucun identifiant de transaction n’a été fourni"
+-
+-#: dnf/cli/cli.py:614
+-msgid "Not found given transaction ID"
+-msgstr "L’identifiant de transaction fourni est introuvable"
+-
+-#: dnf/cli/cli.py:623
+-msgid "Found more than one transaction ID!"
+-msgstr "Plus d’un identifiant de transaction ont été trouvés !"
+-
+-#: dnf/cli/cli.py:640
+-#, python-format
+-msgid "Transaction history is incomplete, before %u."
+-msgstr "L’historique des transactions est incomplet, avant %u."
+-
+-#: dnf/cli/cli.py:642
+-#, python-format
+-msgid "Transaction history is incomplete, after %u."
+-msgstr "L’historique des transactions est incomplet, après %u."
+-
+-#: dnf/cli/cli.py:689
+-msgid "Undoing transaction {}, from {}"
+-msgstr "Révocation de lla transaction {}, de {}"
+-
+-#: dnf/cli/cli.py:769 dnf/cli/commands/shell.py:237
++#: dnf/cli/cli.py:671 dnf/cli/commands/shell.py:237
+ #, python-format
+ msgid "Unknown repo: '%s'"
+ msgstr "Dépôt inconnu : « %s »"
+ 
+-#: dnf/cli/cli.py:783
++#: dnf/cli/cli.py:685
+ #, python-format
+ msgid "No repository match: %s"
+ msgstr "Aucun dépôt ne correspond à %s"
+ 
+-#: dnf/cli/cli.py:817
++#: dnf/cli/cli.py:719
+ msgid ""
+ "This command has to be run with superuser privileges (under the root user on"
+ " most systems)."
+@@ -789,12 +757,12 @@ msgstr ""
+ "Cette commande doit être exécutée avec les privilèges super-utilisateur "
+ "(sous l’utilisateur root sur la plupart des systèmes)."
+ 
+-#: dnf/cli/cli.py:847
++#: dnf/cli/cli.py:749
+ #, python-format
+ msgid "No such command: %s. Please use %s --help"
+ msgstr "Aucune commande telle que : %s. Veuillez utiliser %s --help"
+ 
+-#: dnf/cli/cli.py:850
++#: dnf/cli/cli.py:752
+ #, python-format, python-brace-format
+ msgid ""
+ "It could be a {PROG} plugin command, try: \"{prog} install 'dnf-"
+@@ -803,7 +771,7 @@ msgstr ""
+ "Cela est peut-être une commande d’un module supplémentaire de {PROG}, "
+ "essayez : « {prog} install 'dnf-command(%s)' »"
+ 
+-#: dnf/cli/cli.py:854
++#: dnf/cli/cli.py:756
+ #, python-brace-format
+ msgid ""
+ "It could be a {prog} plugin command, but loading of plugins is currently "
+@@ -812,7 +780,7 @@ msgstr ""
+ "Cela est peut-être une commande d’un module supplémentaire de {prog}, mais "
+ "le chargement de modules supplémentaires est actuellement désactivé."
+ 
+-#: dnf/cli/cli.py:912
++#: dnf/cli/cli.py:814
+ msgid ""
+ "--destdir or --downloaddir must be used with --downloadonly or download or "
+ "system-upgrade command."
+@@ -820,7 +788,7 @@ msgstr ""
+ "--destdir ou --downloaddir doit être utilisé avec la commande --downloadonly"
+ " ou download ou system-upgrade command."
+ 
+-#: dnf/cli/cli.py:918
++#: dnf/cli/cli.py:820
+ msgid ""
+ "--enable, --set-enabled and --disable, --set-disabled must be used with "
+ "config-manager command."
+@@ -828,7 +796,7 @@ msgstr ""
+ "--enable, --set-enabled et --disable, --set-disabled doit être utilisé avec "
+ "la commande config-manager."
+ 
+-#: dnf/cli/cli.py:1000
++#: dnf/cli/cli.py:902
+ msgid ""
+ "Warning: Enforcing GPG signature check globally as per active RPM security "
+ "policy (see 'gpgcheck' in dnf.conf(5) for how to squelch this message)"
+@@ -837,11 +805,11 @@ msgstr ""
+ "politique de sécurité RPM active (voir « gpgcheck » dans dnf.conf(5) pour "
+ "savoir comment interpréter ce message)"
+ 
+-#: dnf/cli/cli.py:1020
++#: dnf/cli/cli.py:922
+ msgid "Config file \"{}\" does not exist"
+ msgstr "Le fichier de configuration \"{}\" n’existe pas"
+ 
+-#: dnf/cli/cli.py:1040
++#: dnf/cli/cli.py:942
+ msgid ""
+ "Unable to detect release version (use '--releasever' to specify release "
+ "version)"
+@@ -849,28 +817,28 @@ msgstr ""
+ "Impossible de détecter le numéro de version (utilisez « --releasever » pour "
+ "spécifier une version)"
+ 
+-#: dnf/cli/cli.py:1127 dnf/cli/commands/repoquery.py:471
++#: dnf/cli/cli.py:1016 dnf/cli/commands/repoquery.py:471
+ msgid "argument {}: not allowed with argument {}"
+ msgstr "paramètre {} : non autorisé avec le paramètre {}"
+ 
+-#: dnf/cli/cli.py:1134
++#: dnf/cli/cli.py:1023
+ #, python-format
+ msgid "Command \"%s\" already defined"
+ msgstr "Commande « %s » déjà définie"
+ 
+-#: dnf/cli/cli.py:1154
++#: dnf/cli/cli.py:1043
+ msgid "Excludes in dnf.conf: "
+ msgstr "Exclut dans dnf.conf : "
+ 
+-#: dnf/cli/cli.py:1157
++#: dnf/cli/cli.py:1046
+ msgid "Includes in dnf.conf: "
+ msgstr "Inclut dans dnf.conf : "
+ 
+-#: dnf/cli/cli.py:1160
++#: dnf/cli/cli.py:1049
+ msgid "Excludes in repo "
+ msgstr "Exclut dans dépôt "
+ 
+-#: dnf/cli/cli.py:1163
++#: dnf/cli/cli.py:1052
+ msgid "Includes in repo "
+ msgstr "Inclut dans dépôt "
+ 
+@@ -924,38 +892,38 @@ msgstr "Problème avec le dépôt : %s"
+ msgid "display details about a package or group of packages"
+ msgstr "affiche les détails d’un paquet ou d’un groupe de paquets"
+ 
+-#: dnf/cli/commands/__init__.py:168 dnf/cli/commands/__init__.py:740
++#: dnf/cli/commands/__init__.py:168 dnf/cli/commands/__init__.py:735
+ msgid "show all packages (default)"
+ msgstr "affiche tous les paquets (par défaut)"
+ 
+-#: dnf/cli/commands/__init__.py:171 dnf/cli/commands/__init__.py:743
+-#: dnf/cli/commands/module.py:351
++#: dnf/cli/commands/__init__.py:171 dnf/cli/commands/__init__.py:738
++#: dnf/cli/commands/module.py:376
+ msgid "show only available packages"
+ msgstr "affiche uniquement les paquets disponibles"
+ 
+-#: dnf/cli/commands/__init__.py:174 dnf/cli/commands/__init__.py:746
++#: dnf/cli/commands/__init__.py:174 dnf/cli/commands/__init__.py:741
+ msgid "show only installed packages"
+ msgstr "affiche uniquement les paquets installés"
+ 
+-#: dnf/cli/commands/__init__.py:177 dnf/cli/commands/__init__.py:749
++#: dnf/cli/commands/__init__.py:177 dnf/cli/commands/__init__.py:744
+ msgid "show only extras packages"
+ msgstr "affiche uniquement les paquets supplémentaires"
+ 
+ #: dnf/cli/commands/__init__.py:180 dnf/cli/commands/__init__.py:183
+-#: dnf/cli/commands/__init__.py:752 dnf/cli/commands/__init__.py:755
++#: dnf/cli/commands/__init__.py:747 dnf/cli/commands/__init__.py:750
+ msgid "show only upgrades packages"
+ msgstr "affiche uniquement les paquets à mettre à jour"
+ 
+-#: dnf/cli/commands/__init__.py:186 dnf/cli/commands/__init__.py:758
++#: dnf/cli/commands/__init__.py:186 dnf/cli/commands/__init__.py:753
+ msgid "show only autoremove packages"
+ msgstr "affiche uniquement les paquets à suppression automatique"
+ 
+-#: dnf/cli/commands/__init__.py:189 dnf/cli/commands/__init__.py:761
++#: dnf/cli/commands/__init__.py:189 dnf/cli/commands/__init__.py:756
+ msgid "show only recently changed packages"
+ msgstr "affiche uniquement les paquet modifiés récemment"
+ 
+ #: dnf/cli/commands/__init__.py:190 dnf/cli/commands/__init__.py:265
+-#: dnf/cli/commands/__init__.py:774 dnf/cli/commands/autoremove.py:48
++#: dnf/cli/commands/__init__.py:769 dnf/cli/commands/autoremove.py:48
+ #: dnf/cli/commands/install.py:51 dnf/cli/commands/reinstall.py:44
+ #: dnf/cli/commands/remove.py:61 dnf/cli/commands/upgrade.py:46
+ msgid "PACKAGE"
+@@ -993,70 +961,70 @@ msgstr "recherche les mises à jour de paquets disponibles"
+ msgid "show changelogs before update"
+ msgstr "affiche les changelogs avant la mise à jour"
+ 
+-#: dnf/cli/commands/__init__.py:361 dnf/cli/commands/__init__.py:414
+-#: dnf/cli/commands/__init__.py:470
++#: dnf/cli/commands/__init__.py:356 dnf/cli/commands/__init__.py:409
++#: dnf/cli/commands/__init__.py:465
+ msgid "No package available."
+ msgstr "Pas de paquet disponible."
+ 
+-#: dnf/cli/commands/__init__.py:376
++#: dnf/cli/commands/__init__.py:371
+ msgid "No packages marked for install."
+ msgstr "Aucun paquet marqué en vue d’être installé."
+ 
+-#: dnf/cli/commands/__init__.py:412
++#: dnf/cli/commands/__init__.py:407
+ msgid "No package installed."
+ msgstr "Pas de paquet installé."
+ 
+-#: dnf/cli/commands/__init__.py:432 dnf/cli/commands/__init__.py:489
++#: dnf/cli/commands/__init__.py:427 dnf/cli/commands/__init__.py:484
+ #: dnf/cli/commands/reinstall.py:91
+ #, python-format
+ msgid " (from %s)"
+ msgstr " (depuis %s)"
+ 
+-#: dnf/cli/commands/__init__.py:433 dnf/cli/commands/__init__.py:490
++#: dnf/cli/commands/__init__.py:428 dnf/cli/commands/__init__.py:485
+ #: dnf/cli/commands/reinstall.py:92 dnf/cli/commands/remove.py:105
+ #, python-format
+ msgid "Installed package %s%s not available."
+ msgstr "Le paquet installé %s%s est indisponible."
+ 
+-#: dnf/cli/commands/__init__.py:467 dnf/cli/commands/__init__.py:576
+-#: dnf/cli/commands/__init__.py:619 dnf/cli/commands/__init__.py:666
++#: dnf/cli/commands/__init__.py:462 dnf/cli/commands/__init__.py:571
++#: dnf/cli/commands/__init__.py:614 dnf/cli/commands/__init__.py:661
+ msgid "No package installed from the repository."
+ msgstr "Aucun paquet installé depuis le dépôt."
+ 
+-#: dnf/cli/commands/__init__.py:530 dnf/cli/commands/reinstall.py:101
++#: dnf/cli/commands/__init__.py:525 dnf/cli/commands/reinstall.py:101
+ msgid "No packages marked for reinstall."
+ msgstr "Aucun paquet marqué pour réinstallation."
+ 
+-#: dnf/cli/commands/__init__.py:716 dnf/cli/commands/upgrade.py:89
++#: dnf/cli/commands/__init__.py:711 dnf/cli/commands/upgrade.py:84
+ msgid "No packages marked for upgrade."
+ msgstr "Aucun paquet marqué pour mise à jour."
+ 
+-#: dnf/cli/commands/__init__.py:726
++#: dnf/cli/commands/__init__.py:721
+ msgid "run commands on top of all packages in given repository"
+ msgstr "exécute des commandes pour chaque paquet d’un dépôt donné"
+ 
+-#: dnf/cli/commands/__init__.py:765
++#: dnf/cli/commands/__init__.py:760
+ msgid "REPOID"
+ msgstr "REPOID"
+ 
+-#: dnf/cli/commands/__init__.py:765
++#: dnf/cli/commands/__init__.py:760
+ msgid "Repository ID"
+ msgstr "ID du dépôt"
+ 
+-#: dnf/cli/commands/__init__.py:777 dnf/cli/commands/mark.py:48
++#: dnf/cli/commands/__init__.py:772 dnf/cli/commands/mark.py:48
+ #: dnf/cli/commands/updateinfo.py:108
+ msgid "Package specification"
+ msgstr "Caractéristiques de paquet"
+ 
+-#: dnf/cli/commands/__init__.py:801
++#: dnf/cli/commands/__init__.py:796
+ msgid "display a helpful usage message"
+ msgstr "affiche un message d’aide à l’utilisation"
+ 
+-#: dnf/cli/commands/__init__.py:805
++#: dnf/cli/commands/__init__.py:800
+ msgid "COMMAND"
+ msgstr "COMMANDE"
+ 
+-#: dnf/cli/commands/__init__.py:806
++#: dnf/cli/commands/__init__.py:801
+ #, python-brace-format
+ msgid "{prog} command to get help for"
+ msgstr "{prog} commande pour obtenir de l’aide"
+@@ -1231,9 +1199,12 @@ msgstr ""
+ "En attente de la fin d’exécution du processus ayant l’identifiant (pid) %d."
+ 
+ #: dnf/cli/commands/deplist.py:32
+-msgid "List package's dependencies and what packages provide them"
++msgid ""
++"[deprecated, use repoquery --deplist] List package's dependencies and what "
++"packages provide them"
+ msgstr ""
+-"Liste les dépendances du paquet et indique quels paquets les fournissent"
++"[obsolète, utilsez repoquery --deplist] Liste les dépendances du paquet et "
++"indique quels paquets les fournissent"
+ 
+ #: dnf/cli/commands/distrosync.py:32
+ msgid "synchronize installed packages to the latest available versions"
+@@ -1260,78 +1231,78 @@ msgstr "affiche ou utilise les informations des groupes"
+ msgid "No group data available for configured repositories."
+ msgstr "Aucune donnée sur les groupes disponibles pour les dépôts configurés."
+ 
+-#: dnf/cli/commands/group.py:129
++#: dnf/cli/commands/group.py:126
+ #, python-format
+ msgid "Warning: Group %s does not exist."
+ msgstr "Attention : le groupe %s n’existe pas."
+ 
+-#: dnf/cli/commands/group.py:170
++#: dnf/cli/commands/group.py:167
+ msgid "Warning: No groups match:"
+ msgstr "Attention : aucun groupe ne correspond à :"
+ 
+-#: dnf/cli/commands/group.py:182 dnf/cli/commands/group.py:193
+-#: dnf/cli/output.py:1226
++#: dnf/cli/commands/group.py:179 dnf/cli/commands/group.py:190
++#: dnf/cli/output.py:1139
+ msgid "<name-unset>"
+ msgstr "<name-unset>"
+ 
+-#: dnf/cli/commands/group.py:199
++#: dnf/cli/commands/group.py:196
+ msgid "Available Environment Groups:"
+ msgstr "Groupes d’environnements disponibles :"
+ 
+-#: dnf/cli/commands/group.py:201
++#: dnf/cli/commands/group.py:198
+ msgid "Installed Environment Groups:"
+ msgstr "Groupes d’environnements installés :"
+ 
+-#: dnf/cli/commands/group.py:208 dnf/cli/commands/group.py:294
++#: dnf/cli/commands/group.py:205 dnf/cli/commands/group.py:291
+ msgid "Installed Groups:"
+ msgstr "Groupes installés :"
+ 
+-#: dnf/cli/commands/group.py:215 dnf/cli/commands/group.py:301
++#: dnf/cli/commands/group.py:212 dnf/cli/commands/group.py:298
+ msgid "Installed Language Groups:"
+ msgstr "Groupes de langues installés :"
+ 
+-#: dnf/cli/commands/group.py:225 dnf/cli/commands/group.py:308
++#: dnf/cli/commands/group.py:222 dnf/cli/commands/group.py:305
+ msgid "Available Groups:"
+ msgstr "Groupes disponibles :"
+ 
+-#: dnf/cli/commands/group.py:232 dnf/cli/commands/group.py:315
++#: dnf/cli/commands/group.py:229 dnf/cli/commands/group.py:312
+ msgid "Available Language Groups:"
+ msgstr "Groupes de langues disponibles :"
+ 
+-#: dnf/cli/commands/group.py:322
++#: dnf/cli/commands/group.py:319
+ msgid "include optional packages from group"
+ msgstr "inclure les paquets optionnels du groupe"
+ 
+-#: dnf/cli/commands/group.py:325
++#: dnf/cli/commands/group.py:322
+ msgid "show also hidden groups"
+ msgstr "affiche également les groupes cachés"
+ 
+-#: dnf/cli/commands/group.py:327
++#: dnf/cli/commands/group.py:324
+ msgid "show only installed groups"
+ msgstr "affiche seulement les groupes installés"
+ 
+-#: dnf/cli/commands/group.py:329
++#: dnf/cli/commands/group.py:326
+ msgid "show only available groups"
+ msgstr "affiche uniquement les groupes disponibles"
+ 
+-#: dnf/cli/commands/group.py:331
++#: dnf/cli/commands/group.py:328
+ msgid "show also ID of groups"
+ msgstr "affiche également les ID des groupes"
+ 
+-#: dnf/cli/commands/group.py:333
++#: dnf/cli/commands/group.py:330
+ msgid "available subcommands: {} (default), {}"
+ msgstr "sous-commandes disponibles : {} (par défaut), {}"
+ 
+-#: dnf/cli/commands/group.py:337
++#: dnf/cli/commands/group.py:334
+ msgid "argument for group subcommand"
+ msgstr "paramètre pour la sous-commande group"
+ 
+-#: dnf/cli/commands/group.py:346
++#: dnf/cli/commands/group.py:343
+ #, python-format
+ msgid "Invalid groups sub-command, use: %s."
+ msgstr "Sous-commande de groupes invalide, utilisez : %s."
+ 
+-#: dnf/cli/commands/group.py:403
++#: dnf/cli/commands/group.py:398
+ msgid "Unable to find a mandatory group package."
+ msgstr "Impossible de trouver un paquet obligatoire du groupe."
+ 
+@@ -1385,16 +1356,16 @@ msgstr "Pas de transaction ou de nom de fichier fourni."
+ msgid "More than one argument given as transaction file name."
+ msgstr "Plus d’un argument donné comme nom de fichier de transaction."
+ 
+-#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:126
++#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:130
+ msgid "No transaction ID or package name given."
+ msgstr "Pas d’identifiant de transaction ou de nom de paquet fourni."
+ 
+-#: dnf/cli/commands/history.py:138
++#: dnf/cli/commands/history.py:142
+ #, python-format
+ msgid "You don't have access to the history DB: %s"
+ msgstr "Vous n’avez pas accès à la base de données de l’historique : %s"
+ 
+-#: dnf/cli/commands/history.py:147
++#: dnf/cli/commands/history.py:151
+ #, python-format
+ msgid ""
+ "Cannot undo transaction %s, doing so would result in an inconsistent package"
+@@ -1403,7 +1374,7 @@ msgstr ""
+ "Impossible de défaire la transaction %s ; cela aboutirait à une base de "
+ "données des paquets incohérente."
+ 
+-#: dnf/cli/commands/history.py:152
++#: dnf/cli/commands/history.py:156
+ #, python-format
+ msgid ""
+ "Cannot rollback transaction %s, doing so would result in an inconsistent "
+@@ -1412,7 +1383,34 @@ msgstr ""
+ "Impossible de défaire la transaction %s ; cela aboutirait à une base de "
+ "données des paquets incohérente."
+ 
+-#: dnf/cli/commands/history.py:222
++#: dnf/cli/commands/history.py:175
++msgid "No transaction ID given"
++msgstr "Aucun identifiant de transaction n’a été fourni"
++
++#: dnf/cli/commands/history.py:179
++#, python-brace-format
++msgid "Transaction ID \"{0}\" not found."
++msgstr "ID de transaction « {0} » non trouvé."
++
++#: dnf/cli/commands/history.py:185
++msgid "Found more than one transaction ID!"
++msgstr "Plus d’un identifiant de transaction ont été trouvés !"
++
++#: dnf/cli/commands/history.py:203
++#, python-format
++msgid "Transaction history is incomplete, before %u."
++msgstr "L’historique des transactions est incomplet, avant %u."
++
++#: dnf/cli/commands/history.py:205
++#, python-format
++msgid "Transaction history is incomplete, after %u."
++msgstr "L’historique des transactions est incomplet, après %u."
++
++#: dnf/cli/commands/history.py:256
++msgid "No packages to list"
++msgstr "Aucun paquet à lister"
++
++#: dnf/cli/commands/history.py:279
+ msgid ""
+ "Invalid transaction ID range definition '{}'.\n"
+ "Use '<transaction-id>..<transaction-id>'."
+@@ -1420,7 +1418,7 @@ msgstr ""
+ "La définition de la plage d’identifiants de transaction est invalide « {} ».\n"
+ "Utilisez « <transaction-id>..<transaction-id> »."
+ 
+-#: dnf/cli/commands/history.py:226
++#: dnf/cli/commands/history.py:283
+ msgid ""
+ "Can't convert '{}' to transaction ID.\n"
+ "Use '<number>', 'last', 'last-<number>'."
+@@ -1428,36 +1426,30 @@ msgstr ""
+ "Impossible de convertir « {} » à ID transaction.\n"
+ "Utiliser « <number>», « last », « last-<number> »."
+ 
+-#: dnf/cli/commands/history.py:255
++#: dnf/cli/commands/history.py:312
+ msgid "No transaction which manipulates package '{}' was found."
+ msgstr "Aucune transaction manipulant le paquet « {} » n’a été trouvée."
+ 
+-#: dnf/cli/commands/history.py:305
+-#, python-brace-format
+-msgid "Transaction ID \"{id}\" not found."
+-msgstr "ID de Transaction « {id} » non trouvé."
+-
+-#: dnf/cli/commands/history.py:313
++#: dnf/cli/commands/history.py:357
+ msgid "{} exists, overwrite?"
+ msgstr "{} existe, l’écraser ?"
+ 
+-#: dnf/cli/commands/history.py:316
++#: dnf/cli/commands/history.py:360
+ msgid "Not overwriting {}, exiting."
+ msgstr "{} non écrasé, sortie."
+ 
+-#: dnf/cli/commands/history.py:323
++#: dnf/cli/commands/history.py:367
+ msgid "Transaction saved to {}."
+ msgstr "Transaction enregistrée vers {}."
+ 
+-#: dnf/cli/commands/history.py:326
++#: dnf/cli/commands/history.py:370
+ msgid "Error storing transaction: {}"
+ msgstr "Erreur lors du stockage de la transaction : {}"
+ 
+-#: dnf/cli/commands/history.py:350
+-msgid ""
+-"Warning, the following problems occurred while replaying the transaction:"
++#: dnf/cli/commands/history.py:386
++msgid "Warning, the following problems occurred while running a transaction:"
+ msgstr ""
+-"Attention, les problèmes suivants sont survenus lors de la relecture de la "
++"Attention, les problèmes suivants sont survenus lors de l'exécution d’une "
+ "transaction :"
+ 
+ #: dnf/cli/commands/install.py:47
+@@ -1477,7 +1469,7 @@ msgstr "Impossible de trouver une correspondance"
+ msgid "Not a valid rpm file path: %s"
+ msgstr "Chemin du fichier RPM invalide : %s"
+ 
+-#: dnf/cli/commands/install.py:167
++#: dnf/cli/commands/install.py:166
+ #, python-brace-format
+ msgid "There are following alternatives for \"{0}\": {1}"
+ msgstr "Il existe les alternatives suivantes pour \"{0}\" : {1}"
+@@ -1522,7 +1514,7 @@ msgid "%s marked as group installed."
+ msgstr "%s marqué comme étant installé par un groupe."
+ 
+ #: dnf/cli/commands/mark.py:85 dnf/cli/commands/shell.py:129
+-#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:279
++#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:282
+ msgid "Error:"
+ msgstr "Erreur :"
+ 
+@@ -1531,7 +1523,7 @@ msgstr "Erreur :"
+ msgid "Package %s is not installed."
+ msgstr "Le paquet %s n’est pas installé."
+ 
+-#: dnf/cli/commands/module.py:51
++#: dnf/cli/commands/module.py:54
+ msgid ""
+ "Only module name, stream, architecture or profile is used. Ignoring unneeded"
+ " information in argument: '{}'"
+@@ -1539,83 +1531,87 @@ msgstr ""
+ "Seul le nom, le flux, l’architecture ou le profil du module est utilisé. Les"
+ " paramètres inutiles ont été ignorés dans le paramètre : « {} »"
+ 
+-#: dnf/cli/commands/module.py:77
++#: dnf/cli/commands/module.py:80
+ msgid "list all module streams, profiles and states"
+ msgstr "dresser la liste de tous les flux, profils et états des modules"
+ 
+-#: dnf/cli/commands/module.py:105 dnf/cli/commands/module.py:128
++#: dnf/cli/commands/module.py:108 dnf/cli/commands/module.py:131
+ msgid "No matching Modules to list"
+ msgstr "Aucun module correspondant à lister"
+ 
+-#: dnf/cli/commands/module.py:111
++#: dnf/cli/commands/module.py:114
+ msgid "print detailed information about a module"
+ msgstr "afficher les informations détaillées à propos d’un module"
+ 
+-#: dnf/cli/commands/module.py:133
++#: dnf/cli/commands/module.py:136
+ msgid "enable a module stream"
+ msgstr "activer un flux de modules"
+ 
+-#: dnf/cli/commands/module.py:157
++#: dnf/cli/commands/module.py:160
+ msgid "disable a module with all its streams"
+ msgstr "désactiver un module avec tous ses flux"
+ 
+-#: dnf/cli/commands/module.py:181
++#: dnf/cli/commands/module.py:184
+ msgid "reset a module"
+ msgstr "réinitialiser un module"
+ 
+-#: dnf/cli/commands/module.py:202
++#: dnf/cli/commands/module.py:205
+ msgid "install a module profile including its packages"
+ msgstr "installer un profil de module, y compris ses paquets"
+ 
+-#: dnf/cli/commands/module.py:223
++#: dnf/cli/commands/module.py:226
+ msgid "update packages associated with an active stream"
+ msgstr "mettre à jour les paquets associés à un flux actif"
+ 
+-#: dnf/cli/commands/module.py:240
++#: dnf/cli/commands/module.py:243
+ msgid "remove installed module profiles and their packages"
+ msgstr "supprimer les profils de modules installés et leurs paquets"
+ 
+-#: dnf/cli/commands/module.py:264
++#: dnf/cli/commands/module.py:267
+ msgid "Package {} belongs to multiple modules, skipping"
+ msgstr "Le paquet {} appartient à de multiples modules, ignorer"
+ 
+-#: dnf/cli/commands/module.py:277
++#: dnf/cli/commands/module.py:280
++msgid "switch a module to a stream and distrosync rpm packages"
++msgstr "passer un module à un flux et à des paquets de rpm de distrosync"
++
++#: dnf/cli/commands/module.py:302
+ msgid "list modular packages"
+ msgstr "dresser une liste des paquets modulaires"
+ 
+-#: dnf/cli/commands/module.py:292
++#: dnf/cli/commands/module.py:317
+ msgid "list packages belonging to a module"
+ msgstr "dresser une liste des paquets appartenant à un module"
+ 
+-#: dnf/cli/commands/module.py:327
++#: dnf/cli/commands/module.py:352
+ msgid "Interact with Modules."
+ msgstr "Interagit avec les modules."
+ 
+-#: dnf/cli/commands/module.py:340
++#: dnf/cli/commands/module.py:365
+ msgid "show only enabled modules"
+ msgstr "n’affiche que les modules activés"
+ 
+-#: dnf/cli/commands/module.py:343
++#: dnf/cli/commands/module.py:368
+ msgid "show only disabled modules"
+ msgstr "n’affiche que les modules désactivés"
+ 
+-#: dnf/cli/commands/module.py:346
++#: dnf/cli/commands/module.py:371
+ msgid "show only installed modules or packages"
+ msgstr "affiche uniquement les paquets ou modules installés"
+ 
+-#: dnf/cli/commands/module.py:349
++#: dnf/cli/commands/module.py:374
+ msgid "show profile content"
+ msgstr "affiche le contenu du profil"
+ 
+-#: dnf/cli/commands/module.py:354
++#: dnf/cli/commands/module.py:379
+ msgid "remove all modular packages"
+ msgstr "Supprimer les paquets modulaires"
+ 
+-#: dnf/cli/commands/module.py:364
++#: dnf/cli/commands/module.py:389
+ msgid "Module specification"
+ msgstr "Caractéristique de module"
+ 
+-#: dnf/cli/commands/module.py:386
++#: dnf/cli/commands/module.py:411
+ msgid "{} {} {}: too few arguments"
+ msgstr "{} {} {} : trop peu de paramètres"
+ 
+@@ -2133,22 +2129,22 @@ msgstr "MOTCLEF"
+ msgid "Keyword to search for"
+ msgstr "Mot-clef à chercher"
+ 
+-#: dnf/cli/commands/search.py:61 dnf/cli/output.py:506
++#: dnf/cli/commands/search.py:61 dnf/cli/output.py:460
+ msgctxt "long"
+ msgid "Name"
+ msgstr "Nom"
+ 
+-#: dnf/cli/commands/search.py:62 dnf/cli/output.py:559
++#: dnf/cli/commands/search.py:62 dnf/cli/output.py:513
+ msgctxt "long"
+ msgid "Summary"
+ msgstr "Résumé"
+ 
+-#: dnf/cli/commands/search.py:63 dnf/cli/output.py:569
++#: dnf/cli/commands/search.py:63 dnf/cli/output.py:523
+ msgctxt "long"
+ msgid "Description"
+ msgstr "Description"
+ 
+-#: dnf/cli/commands/search.py:64 dnf/cli/output.py:562
++#: dnf/cli/commands/search.py:64 dnf/cli/output.py:516
+ msgid "URL"
+ msgstr "URL"
+ 
+@@ -2291,16 +2287,16 @@ msgstr ""
+ "run                      résoud et exécute l’ensemble de transactions\n"
+ "exit (ou quit)           quitte l’interpréteur de commandes"
+ 
+-#: dnf/cli/commands/shell.py:259
++#: dnf/cli/commands/shell.py:262
+ #, python-format
+ msgid "Error: Cannot open %s for reading"
+ msgstr "Erreur : %s n’a pu être ouvert pour lecture"
+ 
+-#: dnf/cli/commands/shell.py:281 dnf/cli/main.py:187
++#: dnf/cli/commands/shell.py:284 dnf/cli/main.py:187
+ msgid "Complete!"
+ msgstr "Terminé !"
+ 
+-#: dnf/cli/commands/shell.py:291
++#: dnf/cli/commands/shell.py:294
+ msgid "Leaving Shell"
+ msgstr "Abandon de l’interpréteur de commandes"
+ 
+@@ -2497,8 +2493,8 @@ msgstr "Criticité"
+ msgid "Files"
+ msgstr "Fichiers"
+ 
+-#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1499
+-#: dnf/cli/output.py:1772 dnf/cli/output.py:1774
++#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1654
++#: dnf/cli/output.py:1656 dnf/util.py:617
+ msgid "Installed"
+ msgstr "Installé"
+ 
+@@ -2862,13 +2858,13 @@ msgstr "Impossible d’encoder l’argument « %s » : %s"
+ #. Translators: This is abbreviated 'Name'. Should be no longer
+ #. than 12 characters. You can use the full version if it is short
+ #. enough in your language.
+-#: dnf/cli/output.py:505
++#: dnf/cli/output.py:459
+ msgctxt "short"
+ msgid "Name"
+ msgstr "Nom"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:511
++#: dnf/cli/output.py:465
+ msgid "Epoch"
+ msgstr "Époque"
+ 
+@@ -2876,38 +2872,38 @@ msgstr "Époque"
+ #. use the full (unabbreviated) term 'Version' if you think that
+ #. the translation to your language is not too long and will
+ #. always fit to limited space.
+-#: dnf/cli/output.py:512 dnf/cli/output.py:1335
++#: dnf/cli/output.py:466 dnf/cli/output.py:1248
+ msgctxt "short"
+ msgid "Version"
+ msgstr "Version"
+ 
+ #. Translators: This is the full (unabbreviated) term 'Version'.
+-#: dnf/cli/output.py:513 dnf/cli/output.py:1337
++#: dnf/cli/output.py:467 dnf/cli/output.py:1250
+ msgctxt "long"
+ msgid "Version"
+ msgstr "Version"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:516
++#: dnf/cli/output.py:470
+ msgid "Release"
+ msgstr "Publication"
+ 
+ #. Translators: This is abbreviated 'Architecture', used when
+ #. we have not enough space to display the full word.
+-#: dnf/cli/output.py:517 dnf/cli/output.py:1326
++#: dnf/cli/output.py:471 dnf/cli/output.py:1239
+ msgctxt "short"
+ msgid "Arch"
+ msgstr "Architecture"
+ 
+ #. Translators: This is the full word 'Architecture', used when
+ #. we have enough space.
+-#: dnf/cli/output.py:518 dnf/cli/output.py:1329
++#: dnf/cli/output.py:472 dnf/cli/output.py:1242
+ msgctxt "long"
+ msgid "Architecture"
+ msgstr "Architecture"
+ 
+ #. Translators: This is the full (unabbreviated) term 'Size'.
+-#: dnf/cli/output.py:520 dnf/cli/output.py:1352
++#: dnf/cli/output.py:474 dnf/cli/output.py:1265
+ msgctxt "long"
+ msgid "Size"
+ msgstr "Taille"
+@@ -2916,32 +2912,32 @@ msgstr "Taille"
+ #. not be longer than 5 characters. If the term 'Size' in your
+ #. language is not longer than 5 characters then you can use it
+ #. unabbreviated.
+-#: dnf/cli/output.py:520 dnf/cli/output.py:1350
++#: dnf/cli/output.py:474 dnf/cli/output.py:1263
+ msgctxt "short"
+ msgid "Size"
+ msgstr "Taille"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:524
++#: dnf/cli/output.py:478
+ msgid "Source"
+ msgstr "Source"
+ 
+ #. Translators: This is abbreviated 'Repository', used when
+ #. we have not enough space to display the full word.
+-#: dnf/cli/output.py:525 dnf/cli/output.py:1341
++#: dnf/cli/output.py:479 dnf/cli/output.py:1254
+ msgctxt "short"
+ msgid "Repo"
+ msgstr "Dépôt"
+ 
+ #. Translators: This is the full word 'Repository', used when
+ #. we have enough space.
+-#: dnf/cli/output.py:526 dnf/cli/output.py:1344
++#: dnf/cli/output.py:480 dnf/cli/output.py:1257
+ msgctxt "long"
+ msgid "Repository"
+ msgstr "Dépôt"
+ 
+ #. Translators: This message should be no longer than 12 chars.
+-#: dnf/cli/output.py:533
++#: dnf/cli/output.py:487
+ msgid "From repo"
+ msgstr "Depuis le dépôt"
+ 
+@@ -2949,316 +2945,312 @@ msgstr "Depuis le dépôt"
+ #. print(_("Committer   : %s") % ucd(pkg.committer))
+ #. print(_("Committime  : %s") % time.ctime(pkg.committime))
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:539
++#: dnf/cli/output.py:493
+ msgid "Packager"
+ msgstr "Empaqueteur"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:541
++#: dnf/cli/output.py:495
+ msgid "Buildtime"
+ msgstr "Date de compilation"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:545
++#: dnf/cli/output.py:499
+ msgid "Install time"
+ msgstr "Date d’installation"
+ 
+ #. Translators: This message should be no longer than 12 chars.
+-#: dnf/cli/output.py:554
++#: dnf/cli/output.py:508
+ msgid "Installed by"
+ msgstr "Installé par"
+ 
+ #. Translators: This is abbreviated 'Summary'. Should be no longer
+ #. than 12 characters. You can use the full version if it is short
+ #. enough in your language.
+-#: dnf/cli/output.py:558
++#: dnf/cli/output.py:512
+ msgctxt "short"
+ msgid "Summary"
+ msgstr "Résumé"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:564
++#: dnf/cli/output.py:518
+ msgid "License"
+ msgstr "Licence"
+ 
+ #. Translators: This is abbreviated 'Description'. Should be no longer
+ #. than 12 characters. You can use the full version if it is short
+ #. enough in your language.
+-#: dnf/cli/output.py:568
++#: dnf/cli/output.py:522
+ msgctxt "short"
+ msgid "Description"
+ msgstr "Description"
+ 
+-#: dnf/cli/output.py:695
+-msgid "No packages to list"
+-msgstr "Aucun paquet à lister"
+-
+-#: dnf/cli/output.py:706
++#: dnf/cli/output.py:650
+ msgid "y"
+ msgstr "o"
+ 
+-#: dnf/cli/output.py:706
++#: dnf/cli/output.py:650
+ msgid "yes"
+ msgstr "oui"
+ 
+-#: dnf/cli/output.py:707
++#: dnf/cli/output.py:651
+ msgid "n"
+ msgstr "n"
+ 
+-#: dnf/cli/output.py:707
++#: dnf/cli/output.py:651
+ msgid "no"
+ msgstr "non"
+ 
+-#: dnf/cli/output.py:711
++#: dnf/cli/output.py:655
+ msgid "Is this ok [y/N]: "
+ msgstr "Voulez-vous continuer ? [o/N] : "
+ 
+-#: dnf/cli/output.py:715
++#: dnf/cli/output.py:659
+ msgid "Is this ok [Y/n]: "
+ msgstr "Voulez-vous continuer ? [O/n] : "
+ 
+-#: dnf/cli/output.py:795
++#: dnf/cli/output.py:739
+ #, python-format
+ msgid "Group: %s"
+ msgstr "Groupe : %s"
+ 
+-#: dnf/cli/output.py:799
++#: dnf/cli/output.py:743
+ #, python-format
+ msgid " Group-Id: %s"
+ msgstr " Identifiant du groupe : %s"
+ 
+-#: dnf/cli/output.py:801 dnf/cli/output.py:840
++#: dnf/cli/output.py:745 dnf/cli/output.py:784
+ #, python-format
+ msgid " Description: %s"
+ msgstr " Description : %s"
+ 
+-#: dnf/cli/output.py:803
++#: dnf/cli/output.py:747
+ #, python-format
+ msgid " Language: %s"
+ msgstr " Langue : %s"
+ 
+-#: dnf/cli/output.py:806
++#: dnf/cli/output.py:750
+ msgid " Mandatory Packages:"
+ msgstr " Paquets obligatoires :"
+ 
+-#: dnf/cli/output.py:807
++#: dnf/cli/output.py:751
+ msgid " Default Packages:"
+ msgstr " Paquets par défaut :"
+ 
+-#: dnf/cli/output.py:808
++#: dnf/cli/output.py:752
+ msgid " Optional Packages:"
+ msgstr " Paquets optionnels :"
+ 
+-#: dnf/cli/output.py:809
++#: dnf/cli/output.py:753
+ msgid " Conditional Packages:"
+ msgstr " Paquets conditionnels :"
+ 
+-#: dnf/cli/output.py:834
++#: dnf/cli/output.py:778
+ #, python-format
+ msgid "Environment Group: %s"
+ msgstr "Groupe d’environnement : %s"
+ 
+-#: dnf/cli/output.py:837
++#: dnf/cli/output.py:781
+ #, python-format
+ msgid " Environment-Id: %s"
+ msgstr " Identifiant d’environnement : %s"
+ 
+-#: dnf/cli/output.py:843
++#: dnf/cli/output.py:787
+ msgid " Mandatory Groups:"
+ msgstr " Groupes obligatoires :"
+ 
+-#: dnf/cli/output.py:844
++#: dnf/cli/output.py:788
+ msgid " Optional Groups:"
+ msgstr " Groupes optionnels :"
+ 
+-#: dnf/cli/output.py:865
++#: dnf/cli/output.py:809
+ msgid "Matched from:"
+ msgstr "Correspondances trouvées dans  :"
+ 
+-#: dnf/cli/output.py:879
++#: dnf/cli/output.py:823
+ #, python-format
+ msgid "Filename    : %s"
+ msgstr "Nom de fichier : %s"
+ 
+-#: dnf/cli/output.py:904
++#: dnf/cli/output.py:848
+ #, python-format
+ msgid "Repo        : %s"
+ msgstr "Dépôt               : %s"
+ 
+-#: dnf/cli/output.py:913
++#: dnf/cli/output.py:857
+ msgid "Description : "
+ msgstr "Description  : "
+ 
+-#: dnf/cli/output.py:917
++#: dnf/cli/output.py:861
+ #, python-format
+ msgid "URL         : %s"
+ msgstr "URL                 : %s"
+ 
+-#: dnf/cli/output.py:921
++#: dnf/cli/output.py:865
+ #, python-format
+ msgid "License     : %s"
+ msgstr "Licence        : %s"
+ 
+-#: dnf/cli/output.py:927
++#: dnf/cli/output.py:871
+ #, python-format
+ msgid "Provide    : %s"
+ msgstr "Provide    : %s"
+ 
+-#: dnf/cli/output.py:947
++#: dnf/cli/output.py:891
+ #, python-format
+ msgid "Other       : %s"
+ msgstr "Autre  : %s"
+ 
+-#: dnf/cli/output.py:996
++#: dnf/cli/output.py:940
+ msgid "There was an error calculating total download size"
+ msgstr ""
+ "Une erreur est survenue pendant le calcul de la taille totale des "
+ "téléchargements"
+ 
+-#: dnf/cli/output.py:1002
++#: dnf/cli/output.py:946
+ #, python-format
+ msgid "Total size: %s"
+ msgstr "Taille totale  : %s"
+ 
+-#: dnf/cli/output.py:1005
++#: dnf/cli/output.py:949
+ #, python-format
+ msgid "Total download size: %s"
+ msgstr "Taille totale des téléchargements : %s"
+ 
+-#: dnf/cli/output.py:1008
++#: dnf/cli/output.py:952
+ #, python-format
+ msgid "Installed size: %s"
+ msgstr "Taille des paquets installés : %s"
+ 
+-#: dnf/cli/output.py:1026
++#: dnf/cli/output.py:970
+ msgid "There was an error calculating installed size"
+ msgstr ""
+ "Une erreur est survenue pendant le calcul de la taille des paquets "
+ "installées"
+ 
+-#: dnf/cli/output.py:1030
++#: dnf/cli/output.py:974
+ #, python-format
+ msgid "Freed space: %s"
+ msgstr "Espace libéré : %s"
+ 
+-#: dnf/cli/output.py:1039
++#: dnf/cli/output.py:983
+ msgid "Marking packages as installed by the group:"
+ msgstr "Marquage des paquets installés par le groupe :"
+ 
+-#: dnf/cli/output.py:1046
++#: dnf/cli/output.py:990
+ msgid "Marking packages as removed by the group:"
+ msgstr "Marquage des paquets supprimés par le groupe :"
+ 
+-#: dnf/cli/output.py:1056
++#: dnf/cli/output.py:1000
+ msgid "Group"
+ msgstr "Groupe"
+ 
+-#: dnf/cli/output.py:1056
++#: dnf/cli/output.py:1000
+ msgid "Packages"
+ msgstr "Paquets"
+ 
+-#: dnf/cli/output.py:1133
++#: dnf/cli/output.py:1046
+ msgid "Installing group/module packages"
+ msgstr "Installation des paquets du groupe/module"
+ 
+-#: dnf/cli/output.py:1134
++#: dnf/cli/output.py:1047
+ msgid "Installing group packages"
+ msgstr "Installation du groupe de paquets"
+ 
+ #. TRANSLATORS: This is for a list of packages to be installed.
+-#: dnf/cli/output.py:1138
++#: dnf/cli/output.py:1051
+ msgctxt "summary"
+ msgid "Installing"
+ msgstr "Installation"
+ 
+ #. TRANSLATORS: This is for a list of packages to be upgraded.
+-#: dnf/cli/output.py:1140
++#: dnf/cli/output.py:1053
+ msgctxt "summary"
+ msgid "Upgrading"
+ msgstr "Mise à jour"
+ 
+ #. TRANSLATORS: This is for a list of packages to be reinstalled.
+-#: dnf/cli/output.py:1142
++#: dnf/cli/output.py:1055
+ msgctxt "summary"
+ msgid "Reinstalling"
+ msgstr "Réinstallation"
+ 
+-#: dnf/cli/output.py:1144
++#: dnf/cli/output.py:1057
+ msgid "Installing dependencies"
+ msgstr "Installation des dépendances"
+ 
+-#: dnf/cli/output.py:1145
++#: dnf/cli/output.py:1058
+ msgid "Installing weak dependencies"
+ msgstr "Installation des dépendances faibles"
+ 
+ #. TRANSLATORS: This is for a list of packages to be removed.
+-#: dnf/cli/output.py:1147
++#: dnf/cli/output.py:1060
+ msgid "Removing"
+ msgstr "Suppression"
+ 
+-#: dnf/cli/output.py:1148
++#: dnf/cli/output.py:1061
+ msgid "Removing dependent packages"
+ msgstr "Supprimer des paquets dépendants"
+ 
+-#: dnf/cli/output.py:1149
++#: dnf/cli/output.py:1062
+ msgid "Removing unused dependencies"
+ msgstr "Suppression des dépendances inutilisées"
+ 
+ #. TRANSLATORS: This is for a list of packages to be downgraded.
+-#: dnf/cli/output.py:1151
++#: dnf/cli/output.py:1064
+ msgctxt "summary"
+ msgid "Downgrading"
+ msgstr "Rétrogradation"
+ 
+-#: dnf/cli/output.py:1176
++#: dnf/cli/output.py:1089
+ msgid "Installing module profiles"
+ msgstr "Installation des profils de module"
+ 
+-#: dnf/cli/output.py:1185
++#: dnf/cli/output.py:1098
+ msgid "Disabling module profiles"
+ msgstr "Désactivation des profils de module"
+ 
+-#: dnf/cli/output.py:1194
++#: dnf/cli/output.py:1107
+ msgid "Enabling module streams"
+ msgstr "Activation des flux de modules"
+ 
+-#: dnf/cli/output.py:1202
++#: dnf/cli/output.py:1115
+ msgid "Switching module streams"
+ msgstr "Basculement des flux de modules"
+ 
+-#: dnf/cli/output.py:1210
++#: dnf/cli/output.py:1123
+ msgid "Disabling modules"
+ msgstr "Désactivation des modules"
+ 
+-#: dnf/cli/output.py:1218
++#: dnf/cli/output.py:1131
+ msgid "Resetting modules"
+ msgstr "Réinitialisation des modules"
+ 
+-#: dnf/cli/output.py:1230
++#: dnf/cli/output.py:1143
+ msgid "Installing Environment Groups"
+ msgstr "Installation des groupes d’environnement"
+ 
+-#: dnf/cli/output.py:1237
++#: dnf/cli/output.py:1150
+ msgid "Upgrading Environment Groups"
+ msgstr "Mise à niveau des groupes d’environnement"
+ 
+-#: dnf/cli/output.py:1244
++#: dnf/cli/output.py:1157
+ msgid "Removing Environment Groups"
+ msgstr "Suppression des groupes d’environnement"
+ 
+-#: dnf/cli/output.py:1251
++#: dnf/cli/output.py:1164
+ msgid "Installing Groups"
+ msgstr "Installation des groupes"
+ 
+-#: dnf/cli/output.py:1258
++#: dnf/cli/output.py:1171
+ msgid "Upgrading Groups"
+ msgstr "Mise à niveau des groupes"
+ 
+-#: dnf/cli/output.py:1265
++#: dnf/cli/output.py:1178
+ msgid "Removing Groups"
+ msgstr "Suppression des groupes"
+ 
+-#: dnf/cli/output.py:1281
++#: dnf/cli/output.py:1194
+ #, python-format
+ msgid ""
+ "Skipping packages with conflicts:\n"
+@@ -3267,12 +3259,12 @@ msgstr ""
+ "Ignorer les paquets en conflit :\n"
+ "(ajouter « %s » à la ligne de commande pour forcer leur mise à niveau)"
+ 
+-#: dnf/cli/output.py:1291
++#: dnf/cli/output.py:1204
+ #, python-format
+ msgid "Skipping packages with broken dependencies%s"
+ msgstr "Ignorer les paquets ayant des dépendances cassées %s"
+ 
+-#: dnf/cli/output.py:1295
++#: dnf/cli/output.py:1208
+ msgid " or part of a group"
+ msgstr " ou qui fait parti d’un groupe"
+ 
+@@ -3280,22 +3272,22 @@ msgstr " ou qui fait parti d’un groupe"
+ #. use the full (unabbreviated) term 'Package' if you think that
+ #. the translation to your language is not too long and will
+ #. always fit to limited space.
+-#: dnf/cli/output.py:1320
++#: dnf/cli/output.py:1233
+ msgctxt "short"
+ msgid "Package"
+ msgstr "Paquet"
+ 
+ #. Translators: This is the full (unabbreviated) term 'Package'.
+-#: dnf/cli/output.py:1322
++#: dnf/cli/output.py:1235
+ msgctxt "long"
+ msgid "Package"
+ msgstr "Paquet"
+ 
+-#: dnf/cli/output.py:1371
++#: dnf/cli/output.py:1284
+ msgid "replacing"
+ msgstr "remplacement"
+ 
+-#: dnf/cli/output.py:1378
++#: dnf/cli/output.py:1291
+ #, python-format
+ msgid ""
+ "\n"
+@@ -3307,289 +3299,273 @@ msgstr ""
+ "%s\n"
+ 
+ #. TODO: remove
+-#: dnf/cli/output.py:1383 dnf/cli/output.py:1932 dnf/cli/output.py:1933
++#: dnf/cli/output.py:1296 dnf/cli/output.py:1814 dnf/cli/output.py:1815
+ msgid "Install"
+ msgstr "Installer"
+ 
+-#: dnf/cli/output.py:1387 dnf/cli/output.py:1941
++#: dnf/cli/output.py:1300 dnf/cli/output.py:1823
+ msgid "Upgrade"
+ msgstr "Mettre à niveau"
+ 
+-#: dnf/cli/output.py:1388
++#: dnf/cli/output.py:1301
+ msgid "Remove"
+ msgstr "Supprimer"
+ 
+-#: dnf/cli/output.py:1390 dnf/cli/output.py:1939
++#: dnf/cli/output.py:1303 dnf/cli/output.py:1821
+ msgid "Downgrade"
+ msgstr "Retrograder"
+ 
+-#: dnf/cli/output.py:1391
++#: dnf/cli/output.py:1304
+ msgid "Skip"
+ msgstr "Ignorer"
+ 
+-#: dnf/cli/output.py:1400 dnf/cli/output.py:1416
++#: dnf/cli/output.py:1313 dnf/cli/output.py:1329
+ msgid "Package"
+ msgid_plural "Packages"
+ msgstr[0] "Paquet"
+ msgstr[1] "Paquets"
+ 
+-#: dnf/cli/output.py:1418
++#: dnf/cli/output.py:1331
+ msgid "Dependent package"
+ msgid_plural "Dependent packages"
+ msgstr[0] "Paquet dépendant"
+ msgstr[1] "Paquets dépendants"
+ 
+-#: dnf/cli/output.py:1497 dnf/cli/output.py:1773 dnf/cli/output.py:1942
+-msgid "Upgraded"
+-msgstr "Mis à niveau"
+-
+-#: dnf/cli/output.py:1498 dnf/cli/output.py:1773 dnf/cli/output.py:1940
+-msgid "Downgraded"
+-msgstr "Rétrogradé"
+-
+-#: dnf/cli/output.py:1503
+-msgid "Reinstalled"
+-msgstr "Réinstallé"
+-
+-#: dnf/cli/output.py:1504
+-msgid "Skipped"
+-msgstr "Ignoré"
+-
+-#: dnf/cli/output.py:1505
+-msgid "Removed"
+-msgstr "Supprimé"
+-
+-#: dnf/cli/output.py:1508
+-msgid "Failed"
+-msgstr "Échec"
+-
+-#: dnf/cli/output.py:1559
++#: dnf/cli/output.py:1439
+ msgid "Total"
+ msgstr "Total"
+ 
+-#: dnf/cli/output.py:1587
++#: dnf/cli/output.py:1467
+ msgid "<unset>"
+ msgstr "<unset>"
+ 
+-#: dnf/cli/output.py:1588
++#: dnf/cli/output.py:1468
+ msgid "System"
+ msgstr "Système"
+ 
+-#: dnf/cli/output.py:1638
++#: dnf/cli/output.py:1518
+ msgid "Command line"
+ msgstr "Ligne de commande"
+ 
+ #. TRANSLATORS: user names who executed transaction in history command output
+-#: dnf/cli/output.py:1649
++#: dnf/cli/output.py:1531
+ msgid "User name"
+ msgstr "Nom d’utilisateur"
+ 
+-#: dnf/cli/output.py:1651
++#: dnf/cli/output.py:1533
+ msgid "ID"
+ msgstr "ID"
+ 
+-#: dnf/cli/output.py:1653
++#: dnf/cli/output.py:1535
+ msgid "Date and time"
+ msgstr "Date et heure"
+ 
+-#: dnf/cli/output.py:1654
++#: dnf/cli/output.py:1536
+ msgid "Action(s)"
+ msgstr "Action(s)"
+ 
+-#: dnf/cli/output.py:1655
++#: dnf/cli/output.py:1537
+ msgid "Altered"
+ msgstr "Modifié"
+ 
+-#: dnf/cli/output.py:1698
++#: dnf/cli/output.py:1580
+ msgid "No transactions"
+ msgstr "Pas de transaction"
+ 
+-#: dnf/cli/output.py:1699 dnf/cli/output.py:1715
++#: dnf/cli/output.py:1581 dnf/cli/output.py:1597
+ msgid "Failed history info"
+ msgstr "Infos sur l’historique des échecs"
+ 
+-#: dnf/cli/output.py:1714
++#: dnf/cli/output.py:1596
+ msgid "No transaction ID, or package, given"
+ msgstr "Pas de paquet ou d’identifiant de transaction fourni"
+ 
+-#: dnf/cli/output.py:1772
++#: dnf/cli/output.py:1654
+ msgid "Erased"
+ msgstr "Effacé"
+ 
+-#: dnf/cli/output.py:1774
++#: dnf/cli/output.py:1655 dnf/cli/output.py:1822 dnf/util.py:616
++msgid "Downgraded"
++msgstr "Rétrogradé"
++
++#: dnf/cli/output.py:1655 dnf/cli/output.py:1824 dnf/util.py:615
++msgid "Upgraded"
++msgstr "Mis à niveau"
++
++#: dnf/cli/output.py:1656
+ msgid "Not installed"
+ msgstr "Non installé"
+ 
+-#: dnf/cli/output.py:1775
++#: dnf/cli/output.py:1657
+ msgid "Newer"
+ msgstr "Plus récent"
+ 
+-#: dnf/cli/output.py:1775
++#: dnf/cli/output.py:1657
+ msgid "Older"
+ msgstr "Plus ancien"
+ 
+-#: dnf/cli/output.py:1823 dnf/cli/output.py:1825
++#: dnf/cli/output.py:1705 dnf/cli/output.py:1707
+ msgid "Transaction ID :"
+ msgstr "Identifiant de transaction :"
+ 
+-#: dnf/cli/output.py:1828
++#: dnf/cli/output.py:1710
+ msgid "Begin time     :"
+ msgstr "Temps de début    :"
+ 
+-#: dnf/cli/output.py:1831 dnf/cli/output.py:1833
++#: dnf/cli/output.py:1713 dnf/cli/output.py:1715
+ msgid "Begin rpmdb    :"
+ msgstr "Début de RPMDB    :"
+ 
+-#: dnf/cli/output.py:1839
++#: dnf/cli/output.py:1721
+ #, python-format
+ msgid "(%u seconds)"
+ msgstr "(%u secondes)"
+ 
+-#: dnf/cli/output.py:1841
++#: dnf/cli/output.py:1723
+ #, python-format
+ msgid "(%u minutes)"
+ msgstr "(%u minutes)"
+ 
+-#: dnf/cli/output.py:1843
++#: dnf/cli/output.py:1725
+ #, python-format
+ msgid "(%u hours)"
+ msgstr "(%u heures)"
+ 
+-#: dnf/cli/output.py:1845
++#: dnf/cli/output.py:1727
+ #, python-format
+ msgid "(%u days)"
+ msgstr "(%u jours)"
+ 
+-#: dnf/cli/output.py:1846
++#: dnf/cli/output.py:1728
+ msgid "End time       :"
+ msgstr "Temps de fin :"
+ 
+-#: dnf/cli/output.py:1849 dnf/cli/output.py:1851
++#: dnf/cli/output.py:1731 dnf/cli/output.py:1733
+ msgid "End rpmdb      :"
+ msgstr "Fin de RPMDB :"
+ 
+-#: dnf/cli/output.py:1858 dnf/cli/output.py:1860
++#: dnf/cli/output.py:1740 dnf/cli/output.py:1742
+ msgid "User           :"
+ msgstr "Utilisateur  :"
+ 
+-#: dnf/cli/output.py:1864 dnf/cli/output.py:1871
++#: dnf/cli/output.py:1746 dnf/cli/output.py:1753
+ msgid "Aborted"
+ msgstr "Avorté"
+ 
+-#: dnf/cli/output.py:1864 dnf/cli/output.py:1867 dnf/cli/output.py:1869
+-#: dnf/cli/output.py:1871 dnf/cli/output.py:1873 dnf/cli/output.py:1875
++#: dnf/cli/output.py:1746 dnf/cli/output.py:1749 dnf/cli/output.py:1751
++#: dnf/cli/output.py:1753 dnf/cli/output.py:1755 dnf/cli/output.py:1757
+ msgid "Return-Code    :"
+ msgstr "Code de retour  :"
+ 
+-#: dnf/cli/output.py:1867 dnf/cli/output.py:1875
++#: dnf/cli/output.py:1749 dnf/cli/output.py:1757
+ msgid "Success"
+ msgstr "Réussi"
+ 
+-#: dnf/cli/output.py:1869
++#: dnf/cli/output.py:1751
+ msgid "Failures:"
+ msgstr "Échecs :"
+ 
+-#: dnf/cli/output.py:1873
++#: dnf/cli/output.py:1755
+ msgid "Failure:"
+ msgstr "Échec :"
+ 
+-#: dnf/cli/output.py:1883 dnf/cli/output.py:1885
++#: dnf/cli/output.py:1765 dnf/cli/output.py:1767
+ msgid "Releasever     :"
+ msgstr "Releasever     :"
+ 
+-#: dnf/cli/output.py:1890 dnf/cli/output.py:1892
++#: dnf/cli/output.py:1772 dnf/cli/output.py:1774
+ msgid "Command Line   :"
+ msgstr "Ligne de commande :"
+ 
+-#: dnf/cli/output.py:1897 dnf/cli/output.py:1899
++#: dnf/cli/output.py:1779 dnf/cli/output.py:1781
+ msgid "Comment        :"
+ msgstr "Commentaire :"
+ 
+-#: dnf/cli/output.py:1903
++#: dnf/cli/output.py:1785
+ msgid "Transaction performed with:"
+ msgstr "Transaction effectuée avec :"
+ 
+-#: dnf/cli/output.py:1912
++#: dnf/cli/output.py:1794
+ msgid "Packages Altered:"
+ msgstr "Paquets modifiés :"
+ 
+-#: dnf/cli/output.py:1918
++#: dnf/cli/output.py:1800
+ msgid "Scriptlet output:"
+ msgstr "Sortie du mini script :"
+ 
+-#: dnf/cli/output.py:1925
++#: dnf/cli/output.py:1807
+ msgid "Errors:"
+ msgstr "Erreurs :"
+ 
+-#: dnf/cli/output.py:1934
++#: dnf/cli/output.py:1816
+ msgid "Dep-Install"
+ msgstr "Installation des dépendances"
+ 
+-#: dnf/cli/output.py:1935
++#: dnf/cli/output.py:1817
+ msgid "Obsoleted"
+ msgstr "Rendu obsolète"
+ 
+-#: dnf/cli/output.py:1936 dnf/transaction.py:84 dnf/transaction.py:85
++#: dnf/cli/output.py:1818 dnf/transaction.py:84 dnf/transaction.py:85
+ msgid "Obsoleting"
+ msgstr "Rend obsolète"
+ 
+-#: dnf/cli/output.py:1937
++#: dnf/cli/output.py:1819
+ msgid "Erase"
+ msgstr "Effacement"
+ 
+-#: dnf/cli/output.py:1938
++#: dnf/cli/output.py:1820
+ msgid "Reinstall"
+ msgstr "Réinstallation"
+ 
+-#: dnf/cli/output.py:2016
++#: dnf/cli/output.py:1894
+ #, python-format
+ msgid "---> Package %s.%s %s will be installed"
+ msgstr "---> Le paquet %s.%s %s sera installé"
+ 
+-#: dnf/cli/output.py:2018
++#: dnf/cli/output.py:1896
+ #, python-format
+ msgid "---> Package %s.%s %s will be an upgrade"
+ msgstr "---> Le paquet %s.%s %s sera une mise à jour"
+ 
+-#: dnf/cli/output.py:2020
++#: dnf/cli/output.py:1898
+ #, python-format
+ msgid "---> Package %s.%s %s will be erased"
+ msgstr "---> Le paquet %s.%s %s sera supprimé"
+ 
+-#: dnf/cli/output.py:2022
++#: dnf/cli/output.py:1900
+ #, python-format
+ msgid "---> Package %s.%s %s will be reinstalled"
+ msgstr "---> Le paquet %s.%s %s sera réinstallé"
+ 
+-#: dnf/cli/output.py:2024
++#: dnf/cli/output.py:1902
+ #, python-format
+ msgid "---> Package %s.%s %s will be a downgrade"
+ msgstr "---> Le paquet %s.%s %s sera une rétrogradation"
+ 
+-#: dnf/cli/output.py:2026
++#: dnf/cli/output.py:1904
+ #, python-format
+ msgid "---> Package %s.%s %s will be obsoleting"
+ msgstr "---> Le paquet %s.%s %s sera rendu obsolète"
+ 
+-#: dnf/cli/output.py:2028
++#: dnf/cli/output.py:1906
+ #, python-format
+ msgid "---> Package %s.%s %s will be upgraded"
+ msgstr "---> Le paquet %s.%s %s sera mis à jour"
+ 
+-#: dnf/cli/output.py:2030
++#: dnf/cli/output.py:1908
+ #, python-format
+ msgid "---> Package %s.%s %s will be obsoleted"
+ msgstr "---> Le paquet %s.%s %s sera rendu obsolète"
+ 
+-#: dnf/cli/output.py:2039
++#: dnf/cli/output.py:1917
+ msgid "--> Starting dependency resolution"
+ msgstr "--> Début de la résolution des dépendances"
+ 
+-#: dnf/cli/output.py:2044
++#: dnf/cli/output.py:1921
+ msgid "--> Finished dependency resolution"
+ msgstr "--> Résolution des dépendances terminée"
+ 
+-#: dnf/cli/output.py:2058 dnf/crypto.py:132
++#: dnf/cli/output.py:1935 dnf/crypto.py:132
+ #, python-format
+ msgid ""
+ "Importing GPG key 0x%s:\n"
+@@ -3677,7 +3653,7 @@ msgstr "Module ou Groupe « %s » n’existe pas."
+ msgid "Environment id '%s' does not exist."
+ msgstr "L’id d’environnement « %s » n’existe pas."
+ 
+-#: dnf/comps.py:622 dnf/transaction_sr.py:443 dnf/transaction_sr.py:453
++#: dnf/comps.py:622 dnf/transaction_sr.py:477 dnf/transaction_sr.py:487
+ #, python-format
+ msgid "Environment id '%s' is not installed."
+ msgstr "L’id d’environnement « %s » n’est pas installé."
+@@ -3702,6 +3678,11 @@ msgstr "L’id de groupe « %s » n’existe pas."
+ msgid "Error parsing '%s': %s"
+ msgstr "Erreur lors l’analyse de « %s » : %s"
+ 
++#: dnf/conf/config.py:151
++#, python-format
++msgid "Invalid configuration value: %s=%s in %s; %s"
++msgstr "Valeur de configuration non valide : %s=%s dans %s ; %s"
++
+ #: dnf/conf/config.py:226
+ msgid "Could not set cachedir: {}"
+ msgstr "N’a pas pu définir cachedir : {}"
+@@ -3745,39 +3726,39 @@ msgstr ""
+ msgid "Repo %s did not have a %s attr. before setopt"
+ msgstr "Le dépôt « %s » n’avait pas d’attr. %s avant setopt"
+ 
+-#: dnf/conf/read.py:51
++#: dnf/conf/read.py:60
+ #, python-format
+ msgid "Warning: failed loading '%s', skipping."
+ msgstr "Attention : lecture de « %s » erronée ; ignorer."
+ 
+-#: dnf/conf/read.py:63
++#: dnf/conf/read.py:72
+ msgid "Bad id for repo: {} ({}), byte = {} {}"
+ msgstr "Id erroné pour le dépôt : {} ({}), byte = {} {}"
+ 
+-#: dnf/conf/read.py:67
++#: dnf/conf/read.py:76
+ msgid "Bad id for repo: {}, byte = {} {}"
+ msgstr "Id erroné pour le dépôt : {}, byte = {} {}"
+ 
+-#: dnf/conf/read.py:75
++#: dnf/conf/read.py:84
+ msgid "Repository '{}' ({}): Error parsing config: {}"
+ msgstr "Dépôt « {} » ({}) : erreur lors de l’analyse de la configuration : {}"
+ 
+-#: dnf/conf/read.py:78
++#: dnf/conf/read.py:87
+ msgid "Repository '{}': Error parsing config: {}"
+ msgstr "Dépôt « {} » : erreur lors de l’analyse de la configuration : {}"
+ 
+-#: dnf/conf/read.py:84
++#: dnf/conf/read.py:93
+ msgid "Repository '{}' ({}) is missing name in configuration, using id."
+ msgstr ""
+ "Il manque le nom du dépôt « {} » ({}) dans la configuration, utilisation de "
+ "l’id."
+ 
+-#: dnf/conf/read.py:87
++#: dnf/conf/read.py:96
+ msgid "Repository '{}' is missing name in configuration, using id."
+ msgstr ""
+ "Il manque le nom du dépôt « {} » dans la configuration, utilisation de l’id."
+ 
+-#: dnf/conf/read.py:104
++#: dnf/conf/read.py:113
+ msgid "Parsing file \"{}\" failed: {}"
+ msgstr "La lecture du fichier « {} » a échoué : {}"
+ 
+@@ -3791,7 +3772,20 @@ msgstr "dépôt %s : 0x%s déjà importé"
+ msgid "repo %s: imported key 0x%s."
+ msgstr "dépôt %s : clé importée 0x%s."
+ 
+-#: dnf/db/group.py:293
++#: dnf/crypto.py:145
++msgid "Verified using DNS record with DNSSEC signature."
++msgstr "Vérifié en utilisant un enregistrement DNS avec une signature DNSSEC."
++
++#: dnf/crypto.py:147
++msgid "NOT verified using DNS record."
++msgstr "NON vérifié avec un enregistrement DNS."
++
++#: dnf/crypto.py:184
++#, python-format
++msgid "retrieving repo key for %s unencrypted from %s"
++msgstr "récupération de la clé de dépôt pour %s déchiffrée à partir de %s"
++
++#: dnf/db/group.py:301
+ msgid ""
+ "No available modular metadata for modular package '{}', it cannot be "
+ "installed on the system"
+@@ -3799,21 +3793,21 @@ msgstr ""
+ "Aucune métadonnée de module disponible pour le paquet modulaire « {} », ne "
+ "peut pas être installé dans le système"
+ 
+-#: dnf/db/group.py:343
++#: dnf/db/group.py:351
+ msgid "No available modular metadata for modular package"
+ msgstr "Aucune métadonnée de module disponible pour le paquet modulaire"
+ 
+-#: dnf/db/group.py:377
++#: dnf/db/group.py:385
+ #, python-format
+ msgid "Will not install a source rpm package (%s)."
+ msgstr "Un paquet source rpm ne sera pas installé (%s)."
+ 
+ #: dnf/dnssec.py:168
+ msgid ""
+-"Configuration option 'gpgkey_dns_verification' requires libunbound ({})"
++"Configuration option 'gpgkey_dns_verification' requires python3-unbound ({})"
+ msgstr ""
+-"L’option de configuration « gpgkey_dns_verification » nécessite libunbound "
+-"({})"
++"L’option de configuration « gpgkey_dns_verification » nécessite "
++"python3-unbound({})"
+ 
+ #: dnf/dnssec.py:239
+ msgid "DNSSEC extension: Key for user "
+@@ -3878,7 +3872,7 @@ msgid_plural "Modular dependency problems with Defaults:"
+ msgstr[0] "Problème de dépendance modulaire avec les valeurs par défaut :"
+ msgstr[1] "Problèmes de dépendance modulaire avec les valeurs par défaut :"
+ 
+-#: dnf/exceptions.py:131 dnf/module/module_base.py:686
++#: dnf/exceptions.py:131 dnf/module/module_base.py:854
+ msgid "Modular dependency problem:"
+ msgid_plural "Modular dependency problems:"
+ msgstr[0] "Problème de dépendance modulaire :"
+@@ -3915,7 +3909,47 @@ msgstr "Modules activés : {}."
+ msgid "No profile specified for '{}', please specify profile."
+ msgstr "Aucun profil spécifié pour « {} », veuillez spécifier un profil."
+ 
+-#: dnf/module/module_base.py:33
++#: dnf/module/exceptions.py:27
++msgid "No such module: {}"
++msgstr "Aucun module de ce type : {}"
++
++#: dnf/module/exceptions.py:33
++msgid "No such stream: {}"
++msgstr "Aucun flux de ce type : {}"
++
++#: dnf/module/exceptions.py:39
++msgid "No enabled stream for module: {}"
++msgstr "Aucun flux activé pour le module : {}"
++
++#: dnf/module/exceptions.py:46
++msgid "Cannot enable more streams from module '{}' at the same time"
++msgstr "Ne peut pas activer plus de flux du module « {} » en même temps"
++
++#: dnf/module/exceptions.py:52
++msgid "Different stream enabled for module: {}"
++msgstr "Différent flux activé pour le module : {}"
++
++#: dnf/module/exceptions.py:58
++msgid "No such profile: {}"
++msgstr "Aucun profil de ce type : {}"
++
++#: dnf/module/exceptions.py:64
++msgid "Specified profile not installed for {}"
++msgstr "Le profil spécifié n'est pas installé pour {}"
++
++#: dnf/module/exceptions.py:70
++msgid "No stream specified for '{}', please specify stream"
++msgstr "Aucun flux spécifié pour « {} », veuillez spécifier un flux"
++
++#: dnf/module/exceptions.py:82
++msgid "No such profile: {}. No profiles available"
++msgstr "Aucun dépôt de ce type : {}. Aucun profile n’est disponible"
++
++#: dnf/module/exceptions.py:88
++msgid "No profile to remove for '{}'"
++msgstr "Aucun profil à retirer pour « {} »"
++
++#: dnf/module/module_base.py:35
+ msgid ""
+ "\n"
+ "\n"
+@@ -3925,7 +3959,7 @@ msgstr ""
+ "\n"
+ "Aide : [d]éfaut, [e]activé, [x]désactivé, [i]nstallé"
+ 
+-#: dnf/module/module_base.py:34
++#: dnf/module/module_base.py:36
+ msgid ""
+ "\n"
+ "\n"
+@@ -3935,82 +3969,105 @@ msgstr ""
+ "\n"
+ "Aide : [d]éfaut, [e]activé, [x]désactivé, [i]nstallé, [a]ctivé"
+ 
+-#: dnf/module/module_base.py:54 dnf/module/module_base.py:421
+-#: dnf/module/module_base.py:477 dnf/module/module_base.py:543
++#: dnf/module/module_base.py:56 dnf/module/module_base.py:556
++#: dnf/module/module_base.py:615 dnf/module/module_base.py:681
+ msgid "Ignoring unnecessary profile: '{}/{}'"
+ msgstr "Profil inutile ignoré : {}/{}"
+ 
+-#: dnf/module/module_base.py:84
++#: dnf/module/module_base.py:86
+ #, python-brace-format
+ msgid "All matches for argument '{0}' in module '{1}:{2}' are not active"
+ msgstr ""
+-"Toutes les correspondance pour le paramètre « {0} » dans le mode module « "
++"Toutes les correspondances pour le paramètre « {0} » dans le mode module « "
+ "{1}:{2} » ne sont pas actives"
+ 
+-#: dnf/module/module_base.py:92
++#: dnf/module/module_base.py:94 dnf/module/module_base.py:204
+ #, python-brace-format
+ msgid "Installing module '{0}' from Fail-Safe repository {1} is not allowed"
+ msgstr ""
+ "L’installation du module « {0} » à partir du dépôt Fail-Safe {1} n’est pas "
+ "permise"
+ 
+-#: dnf/module/module_base.py:102
++#: dnf/module/module_base.py:104 dnf/module/module_base.py:214
+ msgid ""
+ "Unable to match profile for argument {}. Available profiles for '{}:{}': {}"
+ msgstr ""
+ "Impossible de faire correspondre le profil pour l’argument {}. Profils "
+ "disponibles pour « {}:{} » : {}"
+ 
+-#: dnf/module/module_base.py:106
++#: dnf/module/module_base.py:108 dnf/module/module_base.py:218
+ msgid "Unable to match profile for argument {}"
+ msgstr "Impossible de faire correspondre le profil pour l’argument {}"
+ 
+-#: dnf/module/module_base.py:118
++#: dnf/module/module_base.py:120
+ msgid "No default profiles for module {}:{}. Available profiles: {}"
+ msgstr ""
+ "Aucun profil par défaut pour le module {}:{}. Profils disponibles : {}"
+ 
+-#: dnf/module/module_base.py:122
++#: dnf/module/module_base.py:124
+ msgid "No profiles for module {}:{}"
+ msgstr "Aucun profil pour le module {} : {}"
+ 
+-#: dnf/module/module_base.py:129
++#: dnf/module/module_base.py:131
+ msgid "Default profile {} not available in module {}:{}"
+ msgstr "Le profil par défaut {} n’est pas disponible dans le module {} : {}"
+ 
+-#: dnf/module/module_base.py:142
++#: dnf/module/module_base.py:144 dnf/module/module_base.py:247
+ msgid "Installing module from Fail-Safe repository is not allowed"
+ msgstr ""
+ "L’installation du module à partir du dépôt Fail-Safe n’est pas permise"
+ 
+-#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
+-#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
+-#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
+-#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
++#: dnf/module/module_base.py:196
++#, python-brace-format
++msgid "No active matches for argument '{0}' in module '{1}:{2}'"
++msgstr ""
++"Aucune correspondance active pour le paramètre « {0} » dans le module « "
++"{1}:{2} »"
++
++#: dnf/module/module_base.py:228
++#, python-brace-format
++msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'"
++msgstr ""
++"Le profil installé « {0} » n’est pas disponible dans le module « {1} » flux "
++"« {2} »"
++
++#: dnf/module/module_base.py:267
++msgid "No packages available to distrosync for package name '{}'"
++msgstr "Aucun paquet distrosync disponible pour le nom de paquet « {} »"
++
++#: dnf/module/module_base.py:310 dnf/module/module_base.py:461
++#: dnf/module/module_base.py:486 dnf/module/module_base.py:505
++#: dnf/module/module_base.py:552 dnf/module/module_base.py:611
++#: dnf/module/module_base.py:677 dnf/module/module_base.py:840
+ msgid "Unable to resolve argument {}"
+ msgstr "Impossible de résoudre le paramètre {}"
+ 
+-#: dnf/module/module_base.py:160
+-msgid "No match for package {}"
+-msgstr "Aucune correspondance pour le paquet {}"
+-
+-#: dnf/module/module_base.py:204
++#: dnf/module/module_base.py:321
+ #, python-brace-format
+ msgid "Upgrading module '{0}' from Fail-Safe repository {1} is not allowed"
+ msgstr ""
+ "La mise à niveau du module « {0} » à partir du dépôt Fail-Safe {1} n’est pas"
+ " permise"
+ 
+-#: dnf/module/module_base.py:223 dnf/module/module_base.py:251
++#: dnf/module/module_base.py:340 dnf/module/module_base.py:368
+ msgid "Unable to match profile in argument {}"
+ msgstr "Impossible de faire correspondre le profil dans l’argument {}"
+ 
+-#: dnf/module/module_base.py:231
++#: dnf/module/module_base.py:348
+ msgid "Upgrading module from Fail-Safe repository is not allowed"
+ msgstr ""
+ "La mise à niveau du module à partir du dépôt Fail-Safe n’est pas permise"
+ 
+-#: dnf/module/module_base.py:367
++#: dnf/module/module_base.py:422
++#, python-brace-format
++msgid ""
++"Argument '{argument}' matches {stream_count} streams ('{streams}') of module"
++" '{module}', but none of the streams are enabled or default"
++msgstr ""
++"L'argument « {argument} » correspond à {stream_count} flux (« {streams} ») "
++"du module « {module} », mais aucun des flux n'est activé ou par défaut"
++
++#: dnf/module/module_base.py:509
+ msgid ""
+ "Only module name is required. Ignoring unneeded information in argument: "
+ "'{}'"
+@@ -4018,10 +4075,9 @@ msgstr ""
+ "Seul le nom du module est nécessaire. Les paramètres inutiles ont été "
+ "ignorés : « {} »"
+ 
+-#: dnf/package.py:298
+-#, python-format
+-msgid "%s: %s check failed: %s vs %s"
+-msgstr "%s : %s vérification a échoué : %s vs %s"
++#: dnf/module/module_base.py:841
++msgid "No match for package {}"
++msgstr "Aucune correspondance pour le paquet {}"
+ 
+ #. empty file is invalid json format
+ #: dnf/persistor.py:54
+@@ -4032,12 +4088,12 @@ msgstr "%s est un fichier vide"
+ #: dnf/persistor.py:91
+ #, python-format
+ msgid "Failed to load expired repos cache: %s"
+-msgstr ""
++msgstr "Échec du chargement du cache des dépôts expirés : %s"
+ 
+ #: dnf/persistor.py:99
+ #, python-format
+ msgid "Failed to store expired repos cache: %s"
+-msgstr ""
++msgstr "Échec du stockage du cache des dépôts expirés : %s"
+ 
+ #: dnf/persistor.py:106
+ msgid "Failed storing last makecache time."
+@@ -4057,17 +4113,17 @@ msgstr "La lecture du fichier a échoué : %s"
+ msgid "Loaded plugins: %s"
+ msgstr "Plugins chargés : %s"
+ 
+-#: dnf/plugin.py:199
++#: dnf/plugin.py:211
+ #, python-format
+ msgid "Failed loading plugin \"%s\": %s"
+ msgstr "Échec lors du chargement du module « %s » : %s"
+ 
+-#: dnf/plugin.py:231
++#: dnf/plugin.py:243
+ msgid "No matches found for the following enable plugin patterns: {}"
+ msgstr ""
+ "Aucun élément correspondant aux modèles de plugin d’activation suivants : {}"
+ 
+-#: dnf/plugin.py:235
++#: dnf/plugin.py:247
+ msgid "No matches found for the following disable plugin patterns: {}"
+ msgstr ""
+ "Aucun élément correspondant aux modèles de plugin de désactivation suivants "
+@@ -4098,10 +4154,32 @@ msgstr "activation du dépôt %s"
+ msgid "Added %s repo from %s"
+ msgstr "Ajout du dépôt %s depuis le %s"
+ 
++#: dnf/rpm/miscutils.py:35
++#, python-brace-format
++msgid ""
++"Using rpmkeys executable from {path} to verify signature for package: "
++"{package}."
++msgstr ""
++"Utilisation de l'exécutable rpmkeys de {path} pour vérifier la signature du "
++"package : {package}."
++
++#: dnf/rpm/miscutils.py:39
++msgid "Cannot find rpmkeys executable to verify signatures."
++msgstr ""
++"Impossible de trouver l’exécutable rpmkeys pour vérifier les signatures."
++
+ #: dnf/rpm/transaction.py:119
+ msgid "Errors occurred during test transaction."
+ msgstr "Des erreurs sont survenues lors de la transaction de test."
+ 
++#: dnf/sack.py:47
++msgid ""
++"allow_vendor_change is disabled. This option is currently not supported for "
++"downgrade and distro-sync commands"
++msgstr ""
++"allow_vendor_change est désactivé. Cette option n’est actuellement pas prise"
++" en charge pour les commandes downgrade et distro-sync"
++
+ #. TRANSLATORS: This is for a single package currently being downgraded.
+ #: dnf/transaction.py:80
+ msgctxt "currently"
+@@ -4148,27 +4226,31 @@ msgstr "Exécution du scriptlet"
+ msgid "Preparing"
+ msgstr "Préparation"
+ 
+-#: dnf/transaction_sr.py:60
++#: dnf/transaction_sr.py:66
+ #, python-brace-format
+-msgid "Errors in \"{filename}\":"
+-msgstr "Erreurs dans « {filename} » :"
++msgid ""
++"The following problems occurred while replaying the transaction from file "
++"\"{filename}\":"
++msgstr ""
++"Les problèmes suivants sont survenus lors de la relecture de la transaction "
++"à partir du fichier « {filename} » :"
+ 
+-#: dnf/transaction_sr.py:70
+-#, python-brace-format
+-msgid "Error in \"{filename}\": {error}"
+-msgstr "Erreur dans « {filename} » : {error}"
++#: dnf/transaction_sr.py:68
++msgid "The following problems occurred while running a transaction:"
++msgstr ""
++"Les problèmes suivants sont survenus lors de l'exécution d'une transaction :"
+ 
+-#: dnf/transaction_sr.py:87
++#: dnf/transaction_sr.py:89
+ #, python-brace-format
+ msgid "Invalid major version \"{major}\", number expected."
+ msgstr "Version majeur invalide « {major} », numéro attendu."
+ 
+-#: dnf/transaction_sr.py:95
++#: dnf/transaction_sr.py:97
+ #, python-brace-format
+ msgid "Invalid minor version \"{minor}\", number expected."
+ msgstr "Version mineure invalide « {minor} », numéro attendu."
+ 
+-#: dnf/transaction_sr.py:101
++#: dnf/transaction_sr.py:103
+ #, python-brace-format
+ msgid ""
+ "Incompatible major version \"{major}\", supported major version is "
+@@ -4177,137 +4259,192 @@ msgstr ""
+ "Version majeure incompatible « {major} », la version majeure prise en charge"
+ " est « {major_supp} »."
+ 
+-#: dnf/transaction_sr.py:244
++#: dnf/transaction_sr.py:224
++msgid ""
++"Conflicting TransactionReplay arguments have been specified: filename, data"
++msgstr ""
++"Des arguments contradictoires de TransactionReplay ont été spécifiés : nom "
++"de fichier, données"
++
++#: dnf/transaction_sr.py:265
+ #, python-brace-format
+ msgid "Unexpected type of \"{id}\", {exp} expected."
+ msgstr "Type de « {id} » inattendu, {exp} attendu."
+ 
+-#: dnf/transaction_sr.py:250
++#: dnf/transaction_sr.py:271
+ #, python-brace-format
+ msgid "Missing key \"{key}\"."
+ msgstr "Clé « {key} » manquante."
+ 
+-#: dnf/transaction_sr.py:263
++#: dnf/transaction_sr.py:285
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in an rpm."
+ msgstr "Clé objet « {key} » manquante dans un rpm."
+ 
+-#: dnf/transaction_sr.py:267
++#: dnf/transaction_sr.py:289
+ #, python-brace-format
+ msgid "Unexpected value of package reason \"{reason}\" for rpm nevra \"{nevra}\"."
+ msgstr ""
++"Valeur inattendue pour le paquet de raison « {reason} » pour le rpm nevra "
++"« {nevra} »."
+ 
+-#: dnf/transaction_sr.py:275
++#: dnf/transaction_sr.py:297
+ #, python-brace-format
+ msgid "Cannot parse NEVRA for package \"{nevra}\"."
+-msgstr ""
++msgstr "Impossible d’analyser NEVRA pour le paquet « {nevra} »."
+ 
+-#: dnf/transaction_sr.py:286
++#: dnf/transaction_sr.py:321
+ #, python-brace-format
+ msgid "Cannot find rpm nevra \"{nevra}\"."
+-msgstr ""
++msgstr "Impossible de trouver le rpm nevra « {nevra} »."
+ 
+-#: dnf/transaction_sr.py:301
+-#, fuzzy, python-brace-format
+-#| msgid "Package %s is already installed."
++#: dnf/transaction_sr.py:336
++#, python-brace-format
+ msgid "Package \"{na}\" is already installed for action \"{action}\"."
+-msgstr "Le paquet %s est déjà installé."
++msgstr "Le paquet « {na} » est déjà installé pour l’action « {action} »."
+ 
+-#: dnf/transaction_sr.py:311
++#: dnf/transaction_sr.py:345
+ #, python-brace-format
+ msgid ""
+ "Package nevra \"{nevra}\" not available in repositories for action "
+ "\"{action}\"."
+ msgstr ""
++"Le paquet nevra « {nevra} » n’est pas disponible dans les dépôts pour "
++"l’action « {action} »."
+ 
+-#: dnf/transaction_sr.py:322
++#: dnf/transaction_sr.py:356
+ #, python-brace-format
+ msgid "Package nevra \"{nevra}\" not installed for action \"{action}\"."
+ msgstr ""
++"Le paquet nevra « {nevra} » n’est pas installé pour l’action « {action} »."
+ 
+-#: dnf/transaction_sr.py:336
++#: dnf/transaction_sr.py:370
+ #, python-brace-format
+ msgid "Unexpected value of package action \"{action}\" for rpm nevra \"{nevra}\"."
+ msgstr ""
++"Valeur inattendue pour l’action de paquet « {action} » pour le rpm nevra "
++"« {nevra} »."
+ 
+-#: dnf/transaction_sr.py:343
+-#, fuzzy, python-format
+-#| msgid "Module or Group '%s' is not available."
++#: dnf/transaction_sr.py:377
++#, python-format
+ msgid "Group id '%s' is not available."
+-msgstr "Module ou Groupe « %s » non disponible."
++msgstr "ID de groupe « %s » non disponible."
+ 
+-#: dnf/transaction_sr.py:364
++#: dnf/transaction_sr.py:398
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in groups.packages."
+-msgstr ""
++msgstr "Clé d’objet « {key} » manquante dans groups.packages."
+ 
+-#: dnf/transaction_sr.py:377 dnf/transaction_sr.py:387
+-#, fuzzy, python-format
+-#| msgid "Module or Group '%s' is not installed."
++#: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421
++#, python-format
+ msgid "Group id '%s' is not installed."
+-msgstr "Module ou Groupe « %s » non installé."
++msgstr "ID de groupe « %s » non installé."
+ 
+-#: dnf/transaction_sr.py:398
+-#, fuzzy, python-format
+-#| msgid "Environment '%s' is not available."
++#: dnf/transaction_sr.py:432
++#, python-format
+ msgid "Environment id '%s' is not available."
+-msgstr "L’environnement « %s » n’est pas disponible."
++msgstr "ID d’environnement « %s » non disponible."
+ 
+-#: dnf/transaction_sr.py:422
++#: dnf/transaction_sr.py:456
+ #, python-brace-format
+ msgid ""
+ "Invalid value \"{group_type}\" of environments.groups.group_type, only "
+ "\"mandatory\" or \"optional\" is supported."
+ msgstr ""
++"Valeur invalide « {group_type} » pour environments.groups.group_type, seuls "
++"« mandatory » ou « optional » sont pris en charge."
+ 
+-#: dnf/transaction_sr.py:430
++#: dnf/transaction_sr.py:464
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in environments.groups."
+-msgstr ""
++msgstr "Clé d’objet « {key} » manquante dans environments.groups."
+ 
+-#: dnf/transaction_sr.py:508
++#: dnf/transaction_sr.py:542
+ #, python-brace-format
+ msgid "Unexpected value of group action \"{action}\" for group \"{group}\"."
+ msgstr ""
++"Valeur inattendue pour l’action de groupe « {action} » pour le groupe "
++"« {group} »."
+ 
+-#: dnf/transaction_sr.py:513
++#: dnf/transaction_sr.py:547
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in a group."
+-msgstr ""
++msgstr "Clé d’objet « {key} » manquante dans un groupe."
+ 
+-#: dnf/transaction_sr.py:537
++#: dnf/transaction_sr.py:571
+ #, python-brace-format
+ msgid "Unexpected value of environment action \"{action}\" for environment \"{env}\"."
+ msgstr ""
++"Valeur inattendue pour l’action d’environnement « {action} » pour "
++"l’environnement « {env} »."
+ 
+-#: dnf/transaction_sr.py:542
++#: dnf/transaction_sr.py:576
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in an environment."
+-msgstr ""
++msgstr "Clé d’objet « {key} » manquante dans un environnement."
+ 
+-#: dnf/transaction_sr.py:581
++#: dnf/transaction_sr.py:615
+ #, python-brace-format
+ msgid ""
+ "Package nevra \"{nevra}\", which is not present in the transaction file, was"
+ " pulled into the transaction."
+ msgstr ""
++"Le paquet nevra « {nevra} », qui n’est pas présent dans le fichier de "
++"transaction, a été retiré de la transaction."
+ 
+-#: dnf/util.py:391 dnf/util.py:393
++#: dnf/util.py:419 dnf/util.py:421
+ msgid "Problem"
+ msgstr "Problème"
+ 
+-#: dnf/util.py:444
++#: dnf/util.py:472
+ msgid "TransactionItem not found for key: {}"
+ msgstr "TransactionItem n’a pas été trouvé pour la clef : {}"
+ 
+-#: dnf/util.py:454
++#: dnf/util.py:482
+ msgid "TransactionSWDBItem not found for key: {}"
+ msgstr "TransactionSWDBItem n’a pas été trouvé pour la clef : {}"
+ 
+-#: dnf/util.py:457
++#: dnf/util.py:485
+ msgid "Errors occurred during transaction."
+ msgstr "Des erreurs sont survenues lors de la transaction."
+ 
++#: dnf/util.py:621
++msgid "Reinstalled"
++msgstr "Réinstallé"
++
++#: dnf/util.py:622
++msgid "Skipped"
++msgstr "Ignoré"
++
++#: dnf/util.py:623
++msgid "Removed"
++msgstr "Supprimé"
++
++#: dnf/util.py:626
++msgid "Failed"
++msgstr "Échec"
++
++#~ msgid "%s: %s check failed: %s vs %s"
++#~ msgstr "%s : %s vérification a échoué : %s vs %s"
++
++#~ msgid "Action not handled: {}"
++#~ msgstr "Action non gérée : {}"
++
++#~ msgid "no package matched"
++#~ msgstr "aucun paquet correspondant"
++
++#~ msgid "Not found given transaction ID"
++#~ msgstr "L’identifiant de transaction fourni est introuvable"
++
++#~ msgid "Undoing transaction {}, from {}"
++#~ msgstr "Révocation de lla transaction {}, de {}"
++
++#~ msgid "Errors in \"{filename}\":"
++#~ msgstr "Erreurs dans « {filename} » :"
++
++#~ msgid "Error in \"{filename}\": {error}"
++#~ msgstr "Erreur dans « {filename} » : {error}"
++
+ #~ msgid "format for displaying found packages"
+ #~ msgstr "format d’affichage des paquets trouvés"
+ 
+diff --git a/po/ja.po b/po/ja.po
+index 6435271c..887cd57c 100644
+--- a/po/ja.po
++++ b/po/ja.po
+@@ -14,7 +14,7 @@
+ # Hajime Taira <htaira@fedoraproject.org>, 2017. #zanata
+ # Ooyama Yosiyuki <qqke6wd9k@apricot.ocn.ne.jp>, 2017. #zanata
+ # Casey Jones <nahareport@live.com>, 2018. #zanata
+-# Ludek Janda <ljanda@redhat.com>, 2018. #zanata
++# Ludek Janda <ljanda@redhat.com>, 2018. #zanata, 2021.
+ # Noriko Mizumoto <noriko.mizumoto@gmail.com>, 2018. #zanata
+ # Ooyama Yosiyuki <qqke6wd9k@apricot.ocn.ne.jp>, 2018. #zanata
+ # Hajime Taira <htaira@fedoraproject.org>, 2019. #zanata
+@@ -22,20 +22,21 @@
+ # Julien Humbert <julroy67@gmail.com>, 2020.
+ # Casey Jones <nahareport@yahoo.com>, 2020.
+ # Hajime Taira <htaira@pantora.net>, 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-07-27 05:29+0000\n"
+-"Last-Translator: Hajime Taira <htaira@pantora.net>\n"
+-"Language-Team: Japanese <https://translate.fedoraproject.org/projects/dnf/dnf-master/ja/>\n"
++"POT-Creation-Date: 2021-08-11 16:00+0200\n"
++"PO-Revision-Date: 2021-09-06 17:24+0000\n"
++"Last-Translator: Sundeep Anand <suanand@redhat.com>\n"
++"Language-Team: Japanese <https://translate.fedoraproject.org/projects/dnf/dnf-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.1.1\n"
++"X-Generator: Weblate 4.8\n"
+ 
+ #: dnf/automatic/emitter.py:32
+ #, python-format
+@@ -45,7 +46,7 @@ msgstr "'%s' に以下の更新が適用されました:"
+ #: dnf/automatic/emitter.py:33
+ #, python-format
+ msgid "Updates completed at %s"
+-msgstr "'%s' に更新が適用されました。"
++msgstr "'%s' に更新が適用されました"
+ 
+ #: dnf/automatic/emitter.py:34
+ #, python-format
+@@ -82,7 +83,7 @@ msgstr "'%s' を使用した電子メールの送信に失敗しました: %s"
+ msgid "Failed to execute command '%s': returned %d"
+ msgstr "コマンド '%s' の実行に失敗しました: %d を返しました"
+ 
+-#: dnf/automatic/main.py:164 dnf/conf/config.py:151
++#: dnf/automatic/main.py:164
+ #, python-format
+ msgid "Unknown configuration value: %s=%s in %s; %s"
+ msgstr "不明な設定値: %s=%s in %s; %s"
+@@ -92,7 +93,7 @@ msgstr "不明な設定値: %s=%s in %s; %s"
+ msgid "Unknown configuration option: %s = %s in %s"
+ msgstr "不明な設定オプション: %s = %s in %s"
+ 
+-#: dnf/automatic/main.py:237 dnf/cli/cli.py:299
++#: dnf/automatic/main.py:237 dnf/cli/cli.py:305
+ msgid "GPG check FAILED"
+ msgstr "GPG の確認に失敗しました"
+ 
+@@ -105,9 +106,9 @@ msgid "Started dnf-automatic."
+ msgstr "dnf-automatic を開始しました。"
+ 
+ #: dnf/automatic/main.py:308
+-#, python-format
+-msgid "Sleep for %s seconds"
+-msgstr "%s 秒スリープします"
++msgid "Sleep for {} second"
++msgid_plural "Sleep for {} seconds"
++msgstr[0] "{} 秒スリープします"
+ 
+ #: dnf/automatic/main.py:315
+ msgid "System is off-line."
+@@ -119,388 +120,374 @@ msgstr "システムはオフラインです。"
+ msgid "Error: %s"
+ msgstr "エラー: %s"
+ 
+-#: dnf/base.py:146
++#: dnf/base.py:148 dnf/base.py:477 dnf/base.py:479
+ msgid "loading repo '{}' failure: {}"
+ msgstr "repo '{}' のロードに失敗しました: {}"
+ 
+-#: dnf/base.py:148
++#: dnf/base.py:150
+ msgid "Loading repository '{}' has failed"
+ msgstr "repository '{}' のロードに失敗しました"
+ 
+-#: dnf/base.py:320
++#: dnf/base.py:327
+ msgid "Metadata timer caching disabled when running on metered connection."
+ msgstr "metered 接続で実行する際、メタデータタイマーキャッシュは無効化されました。"
+ 
+-#: dnf/base.py:325
++#: dnf/base.py:332
+ msgid "Metadata timer caching disabled when running on a battery."
+ msgstr "バッテリーで実行する際、メタデータタイマーキャッシュは無効化されました。"
+ 
+-#: dnf/base.py:330
++#: dnf/base.py:337
+ msgid "Metadata timer caching disabled."
+ msgstr "メタデータタイマーキャッシュは無効化されました。"
+ 
+-#: dnf/base.py:335
++#: dnf/base.py:342
+ msgid "Metadata cache refreshed recently."
+ msgstr "メタデータキャッシュは最近、リフレッシュされました。"
+ 
+-#: dnf/base.py:341 dnf/cli/commands/__init__.py:91
++#: dnf/base.py:348 dnf/cli/commands/__init__.py:91
+ msgid "There are no enabled repositories in \"{}\"."
+ msgstr "\"{}\" には有効化されたリポジトリーがありません。"
+ 
+-#: dnf/base.py:348
++#: dnf/base.py:355
+ #, python-format
+ msgid "%s: will never be expired and will not be refreshed."
+ msgstr "%s: は期限切れになることはなく、リフレッシュされることもありません。"
+ 
+-#: dnf/base.py:350
++#: dnf/base.py:357
+ #, python-format
+ msgid "%s: has expired and will be refreshed."
+ msgstr "%s: は期限切れとなったのでリフレッシュされます。"
+ 
+ #. expires within the checking period:
+-#: dnf/base.py:354
++#: dnf/base.py:361
+ #, python-format
+ msgid "%s: metadata will expire after %d seconds and will be refreshed now"
+ msgstr "%s: メタデータは %d 秒後に期限切れとなり、すぐにリフレッシュされます"
+ 
+-#: dnf/base.py:358
++#: dnf/base.py:365
+ #, python-format
+ msgid "%s: will expire after %d seconds."
+ msgstr "%s: は %d 秒後に期限切れとなります。"
+ 
+ #. performs the md sync
+-#: dnf/base.py:364
++#: dnf/base.py:371
+ msgid "Metadata cache created."
+ msgstr "メタデータキャッシュを作成しました。"
+ 
+-#: dnf/base.py:397
++#: dnf/base.py:404 dnf/base.py:471
+ #, python-format
+ msgid "%s: using metadata from %s."
+-msgstr "%s: は %s から取得したメタデータを使用中"
++msgstr "%s: は %s から取得したメタデータを使用中。"
+ 
+-#: dnf/base.py:409
++#: dnf/base.py:416 dnf/base.py:484
+ #, python-format
+ msgid "Ignoring repositories: %s"
+ msgstr "リポジトリーを無視します: %s"
+ 
+-#: dnf/base.py:412
++#: dnf/base.py:419
+ #, python-format
+ msgid "Last metadata expiration check: %s ago on %s."
+ msgstr "メタデータの期限切れの最終確認: %s 時間前の %s に実施しました。"
+ 
+-#: dnf/base.py:443
++#: dnf/base.py:512
+ msgid ""
+ "The downloaded packages were saved in cache until the next successful "
+ "transaction."
+ msgstr "ダウンロード済みのパッケージは、次の正常なトランザクションまでキャッシュに保存されました。"
+ 
+-#: dnf/base.py:445
++#: dnf/base.py:514
+ #, python-format
+ msgid "You can remove cached packages by executing '%s'."
+ msgstr "'%s' を実行することでキャッシュパッケージを削除できます。"
+ 
+-#: dnf/base.py:535
++#: dnf/base.py:606
+ #, python-format
+ msgid "Invalid tsflag in config file: %s"
+ msgstr "設定ファイルの tsflag が無効です: %s"
+ 
+-#: dnf/base.py:591
++#: dnf/base.py:662
+ #, python-format
+ msgid "Failed to add groups file for repository: %s - %s"
+ msgstr "リポジトリーのグループファイルを追加できませんでした: %s - %s"
+ 
+-#: dnf/base.py:823
++#: dnf/base.py:904
+ msgid "Running transaction check"
+ msgstr "トランザクションの確認を実行中"
+ 
+-#: dnf/base.py:831
++#: dnf/base.py:912
+ msgid "Error: transaction check vs depsolve:"
+ msgstr "エラー: トランザクションの確認 vs depsolve:"
+ 
+-#: dnf/base.py:837
++#: dnf/base.py:918
+ msgid "Transaction check succeeded."
+ msgstr "トランザクションの確認に成功しました。"
+ 
+-#: dnf/base.py:840
++#: dnf/base.py:921
+ msgid "Running transaction test"
+ msgstr "トランザクションのテストを実行中"
+ 
+-#: dnf/base.py:850 dnf/base.py:992
++#: dnf/base.py:931 dnf/base.py:1082
+ msgid "RPM: {}"
+ msgstr "RPM: {}"
+ 
+-#: dnf/base.py:851
++#: dnf/base.py:932
+ msgid "Transaction test error:"
+ msgstr "トランザクションテストエラー:"
+ 
+-#: dnf/base.py:862
++#: dnf/base.py:943
+ msgid "Transaction test succeeded."
+ msgstr "トランザクションのテストに成功しました。"
+ 
+-#: dnf/base.py:883
++#: dnf/base.py:964
+ msgid "Running transaction"
+ msgstr "トランザクションを実行中"
+ 
+-#: dnf/base.py:911
++#: dnf/base.py:1001
+ msgid "Disk Requirements:"
+-msgstr "ディスク要件"
++msgstr "ディスク要件:"
+ 
+-#: dnf/base.py:914
++#: dnf/base.py:1004
+ #, python-brace-format
+ msgid "At least {0}MB more space needed on the {1} filesystem."
+ msgid_plural "At least {0}MB more space needed on the {1} filesystem."
+ msgstr[0] "{1} ファイルシステムに最低 {0}MB の追加スペースが必要です。"
+ 
+-#: dnf/base.py:921
++#: dnf/base.py:1011
+ msgid "Error Summary"
+ msgstr "エラーの概要"
+ 
+-#: dnf/base.py:947
++#: dnf/base.py:1037
+ #, python-brace-format
+ msgid "RPMDB altered outside of {prog}."
+ msgstr "RPMDBは {prog} のサポート外に変更されました。"
+ 
+-#: dnf/base.py:993 dnf/base.py:1001
++#: dnf/base.py:1083 dnf/base.py:1091
+ msgid "Could not run transaction."
+ msgstr "トランザクションを実行できませんでした。"
+ 
+-#: dnf/base.py:996
++#: dnf/base.py:1086
+ msgid "Transaction couldn't start:"
+ msgstr "トランザクションを開始できませんでした:"
+ 
+-#: dnf/base.py:1010
++#: dnf/base.py:1100
+ #, python-format
+ msgid "Failed to remove transaction file %s"
+ msgstr "トランザクションファイル %s の削除に失敗しました"
+ 
+-#: dnf/base.py:1092
++#: dnf/base.py:1182
+ msgid "Some packages were not downloaded. Retrying."
+ msgstr "一部のパッケージはダウンロードされませんでした。再試行中です。"
+ 
+-#: dnf/base.py:1122
++#: dnf/base.py:1212
+ #, python-format
+ msgid "Delta RPMs reduced %.1f MB of updates to %.1f MB (%d.1%% saved)"
+ msgstr "Delta RPM により %.1f MB の更新を %.1f MB に削減できました。(%d.1%% がキャッシュされていました)"
+ 
+-#: dnf/base.py:1125
++#: dnf/base.py:1215
+ #, python-format
+ msgid ""
+ "Failed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)"
+ msgstr "非効率な Delta RPM により %.1f MB の更新が増加し、%.1f MB となりました。(%d.1%% が無駄になりました)"
+ 
+-#: dnf/base.py:1167
++#: dnf/base.py:1257
+ msgid "Cannot add local packages, because transaction job already exists"
+ msgstr "ローカルパッケージを追加できません、トランザクションジョブがすでに存在するためです"
+ 
+-#: dnf/base.py:1181
++#: dnf/base.py:1271
+ msgid "Could not open: {}"
+ msgstr "開くことができませんでした: {}"
+ 
+-#: dnf/base.py:1219
++#: dnf/base.py:1309
+ #, python-format
+ msgid "Public key for %s is not installed"
+ msgstr "%s の公開鍵がインストールされていません"
+ 
+-#: dnf/base.py:1223
++#: dnf/base.py:1313
+ #, python-format
+ msgid "Problem opening package %s"
+ msgstr "パッケージ %s を開くことができません"
+ 
+-#: dnf/base.py:1231
++#: dnf/base.py:1321
+ #, python-format
+ msgid "Public key for %s is not trusted"
+ msgstr "%s の公開鍵は信頼されていません"
+ 
+-#: dnf/base.py:1235
++#: dnf/base.py:1325
+ #, python-format
+ msgid "Package %s is not signed"
+ msgstr "パッケージ %s は署名されていません"
+ 
+-#: dnf/base.py:1265
++#: dnf/base.py:1355
+ #, python-format
+ msgid "Cannot remove %s"
+ msgstr "%s を削除できません"
+ 
+-#: dnf/base.py:1269
++#: dnf/base.py:1359
+ #, python-format
+ msgid "%s removed"
+ msgstr "%s を削除しました"
+ 
+-#: dnf/base.py:1549
++#: dnf/base.py:1639
+ msgid "No match for group package \"{}\""
+-msgstr "グループパッケージ  \"{}\" に一致するものはありません"
++msgstr "グループパッケージ \"{}\" に一致するものはありません"
+ 
+-#: dnf/base.py:1635
++#: dnf/base.py:1725
+ #, python-format
+ msgid "Adding packages from group '%s': %s"
+ msgstr "グループ '%s' からのパッケージを追加します: %s"
+ 
+-#: dnf/base.py:1658 dnf/cli/cli.py:219 dnf/cli/commands/__init__.py:442
+-#: dnf/cli/commands/__init__.py:499 dnf/cli/commands/__init__.py:592
+-#: dnf/cli/commands/__init__.py:641 dnf/cli/commands/install.py:80
++#: dnf/base.py:1748 dnf/cli/cli.py:221 dnf/cli/commands/__init__.py:437
++#: dnf/cli/commands/__init__.py:494 dnf/cli/commands/__init__.py:587
++#: dnf/cli/commands/__init__.py:636 dnf/cli/commands/install.py:80
+ #: dnf/cli/commands/install.py:103 dnf/cli/commands/install.py:110
+ msgid "Nothing to do."
+ msgstr "行うべきことはありません。"
+ 
+-#: dnf/base.py:1676
++#: dnf/base.py:1766
+ msgid "No groups marked for removal."
+ msgstr "削除対象のパッケージはありません。"
+ 
+-#: dnf/base.py:1710
++#: dnf/base.py:1800
+ msgid "No group marked for upgrade."
+ msgstr "アップグレード対象のグループはありません。"
+ 
+-#: dnf/base.py:1925
++#: dnf/base.py:2014
+ #, python-format
+ msgid "Package %s not installed, cannot downgrade it."
+ msgstr "パッケージ %s はインストールされていないので、ダウングレードできません。"
+ 
+-#: dnf/base.py:1927 dnf/base.py:1946 dnf/base.py:1959 dnf/base.py:1980
+-#: dnf/base.py:2029 dnf/base.py:2037 dnf/base.py:2172 dnf/cli/cli.py:411
+-#: dnf/cli/commands/__init__.py:425 dnf/cli/commands/__init__.py:482
+-#: dnf/cli/commands/__init__.py:586 dnf/cli/commands/__init__.py:633
+-#: dnf/cli/commands/__init__.py:711 dnf/cli/commands/install.py:147
++#: dnf/base.py:2016 dnf/base.py:2035 dnf/base.py:2048 dnf/base.py:2075
++#: dnf/base.py:2128 dnf/base.py:2136 dnf/base.py:2270 dnf/cli/cli.py:417
++#: dnf/cli/commands/__init__.py:420 dnf/cli/commands/__init__.py:477
++#: dnf/cli/commands/__init__.py:581 dnf/cli/commands/__init__.py:628
++#: dnf/cli/commands/__init__.py:706 dnf/cli/commands/install.py:147
+ #: dnf/cli/commands/reinstall.py:70 dnf/cli/commands/reinstall.py:84
+-#: dnf/cli/commands/upgrade.py:110 dnf/cli/commands/upgrade.py:121
++#: dnf/cli/commands/upgrade.py:105 dnf/cli/commands/upgrade.py:116
+ #, python-format
+ msgid "No match for argument: %s"
+ msgstr "一致した引数がありません: %s"
+ 
+-#: dnf/base.py:1934
++#: dnf/base.py:2023
+ #, python-format
+ msgid "Package %s of lower version already installed, cannot downgrade it."
+ msgstr "下位バージョンのパッケージ %s はインストール済みなので、ダウングレードできません。"
+ 
+-#: dnf/base.py:1957
++#: dnf/base.py:2046
+ #, python-format
+ msgid "Package %s not installed, cannot reinstall it."
+ msgstr "パッケージ %s はインストールされていないのでの、再インストールできません。"
+ 
+-#: dnf/base.py:1972
++#: dnf/base.py:2061
+ #, python-format
+ msgid "File %s is a source package and cannot be updated, ignoring."
+ msgstr "ファイル %s はソースパッケージで更新できません。無視します。"
+ 
+-#: dnf/base.py:1978
++#: dnf/base.py:2072
+ #, python-format
+ msgid "Package %s not installed, cannot update it."
+ msgstr "パッケージ %s はインストールされていないので、更新できません。"
+ 
+-#: dnf/base.py:1987
++#: dnf/base.py:2082
+ #, python-format
+ msgid ""
+ "The same or higher version of %s is already installed, cannot update it."
+ msgstr "同じまたはさらに新しいバージョンの %s が既にインストールされています、アップデートできません。"
+ 
+-#: dnf/base.py:2026 dnf/cli/commands/reinstall.py:81
++#: dnf/base.py:2125 dnf/cli/commands/reinstall.py:81
+ #, python-format
+ msgid "Package %s available, but not installed."
+ msgstr "パッケージ %s は利用可能ですが、インストールされていません。"
+ 
+-#: dnf/base.py:2032
++#: dnf/base.py:2131
+ #, python-format
+ msgid "Package %s available, but installed for different architecture."
+ msgstr "パッケージ %s は利用可能ですが、他のアーキテクチャー用にインストールされています。"
+ 
+-#: dnf/base.py:2057 dnf/base.py:2250 dnf/cli/cli.py:668 dnf/cli/cli.py:699
++#: dnf/base.py:2156
+ #, python-format
+ msgid "No package %s installed."
+ msgstr "パッケージ %s はインストールされていません。"
+ 
+-#: dnf/base.py:2075 dnf/cli/commands/install.py:136
++#: dnf/base.py:2174 dnf/cli/commands/install.py:136
+ #: dnf/cli/commands/remove.py:133
+ #, python-format
+ msgid "Not a valid form: %s"
+ msgstr "有効な形式ではありません: %s"
+ 
+-#: dnf/base.py:2091 dnf/cli/commands/__init__.py:681
+-#: dnf/cli/commands/remove.py:163
++#: dnf/base.py:2189 dnf/cli/commands/__init__.py:676
++#: dnf/cli/commands/remove.py:162
+ msgid "No packages marked for removal."
+ msgstr "削除対象のパッケージはありません。"
+ 
+-#: dnf/base.py:2179 dnf/cli/cli.py:422
++#: dnf/base.py:2277 dnf/cli/cli.py:428
+ #, python-format
+ msgid "Packages for argument %s available, but not installed."
+-msgstr "引数  %s のパッケージは利用可能ですが、インストールされていません。"
++msgstr "引数 %s のパッケージは利用可能ですが、インストールされていません。"
+ 
+-#: dnf/base.py:2184
++#: dnf/base.py:2282
+ #, python-format
+ msgid "Package %s of lowest version already installed, cannot downgrade it."
+ msgstr "最下位バージョンのパッケージ %s はインストール済みなので、ダウングレードできません。"
+ 
+-#: dnf/base.py:2242
+-msgid "Action not handled: {}"
+-msgstr "動作は対処されていません: {}"
+-
+-#: dnf/base.py:2256 dnf/cli/cli.py:419 dnf/cli/cli.py:673 dnf/cli/cli.py:703
+-#: dnf/cli/commands/group.py:400 dnf/cli/commands/history.py:169
+-#, python-format
+-msgid "No package %s available."
+-msgstr "利用可能なパッケージ %s がありません。"
+-
+-#: dnf/base.py:2269
+-msgid "no package matched"
+-msgstr "一致したパッケージはありません。"
+-
+-#: dnf/base.py:2290
++#: dnf/base.py:2382
+ msgid "No security updates needed, but {} update available"
+ msgstr "セキュリティー更新は必要ありませんが、{} 更新が利用可能です"
+ 
+-#: dnf/base.py:2292
++#: dnf/base.py:2384
+ msgid "No security updates needed, but {} updates available"
+ msgstr "セキュリティー更新は必要ありませんが、{} 更新が利用可能です"
+ 
+-#: dnf/base.py:2296
++#: dnf/base.py:2388
+ msgid "No security updates needed for \"{}\", but {} update available"
+ msgstr "\"{}\" のセキュリティー更新は必要ありませんが、{} 更新が利用可能です"
+ 
+-#: dnf/base.py:2298
++#: dnf/base.py:2390
+ msgid "No security updates needed for \"{}\", but {} updates available"
+ msgstr "\"{}\" のセキュリティー更新は必要ありませんが、{} 更新が利用可能です"
+ 
+ #. raise an exception, because po.repoid is not in self.repos
+-#: dnf/base.py:2319
++#: dnf/base.py:2411
+ #, python-format
+ msgid "Unable to retrieve a key for a commandline package: %s"
+-msgstr ""
++msgstr "コマンドラインパッケージのキーを取得できません: %s"
+ 
+-#: dnf/base.py:2327
++#: dnf/base.py:2419
+ #, python-format
+ msgid ". Failing package is: %s"
+ msgstr ". 失敗したパッケージは: %s"
+ 
+-#: dnf/base.py:2328
++#: dnf/base.py:2420
+ #, python-format
+ msgid "GPG Keys are configured as: %s"
+ msgstr "GPG 鍵が設定されています: %s"
+ 
+-#: dnf/base.py:2340
++#: dnf/base.py:2432
+ #, python-format
+ msgid "GPG key at %s (0x%s) is already installed"
+ msgstr "%s (0x%s) の GPG 鍵はインストール済みです"
+ 
+-#: dnf/base.py:2373
++#: dnf/base.py:2468
+ msgid "The key has been approved."
+ msgstr "鍵が承認されました。"
+ 
+-#: dnf/base.py:2376
++#: dnf/base.py:2471
+ msgid "The key has been rejected."
+ msgstr "鍵が拒否されました。"
+ 
+-#: dnf/base.py:2409
++#: dnf/base.py:2504
+ #, python-format
+ msgid "Key import failed (code %d)"
+ msgstr "鍵のインポートに失敗しました (コード: %d)"
+ 
+-#: dnf/base.py:2411
++#: dnf/base.py:2506
+ msgid "Key imported successfully"
+ msgstr "鍵のインポートに成功しました"
+ 
+-#: dnf/base.py:2415
++#: dnf/base.py:2510
+ msgid "Didn't install any keys"
+ msgstr "鍵を 1 つもインストールしませんでした"
+ 
+-#: dnf/base.py:2418
++#: dnf/base.py:2513
+ #, python-format
+ msgid ""
+ "The GPG keys listed for the \"%s\" repository are already installed but they are not correct for this package.\n"
+@@ -509,49 +496,49 @@ msgstr ""
+ "\"%s\" リポジトリーに一覧表示されている GPG 鍵はインストール済みですが、このパッケージには適切ではありません。\n"
+ "正しい鍵 URL がこのリポジトリー用に設定されているか確認してください。"
+ 
+-#: dnf/base.py:2429
++#: dnf/base.py:2524
+ msgid "Import of key(s) didn't help, wrong key(s)?"
+ msgstr "鍵をインポートしても役に立ちませんでした。鍵が間違っていませんか?"
+ 
+-#: dnf/base.py:2482
++#: dnf/base.py:2577
+ msgid "  * Maybe you meant: {}"
+ msgstr "  * おそらく: {}"
+ 
+-#: dnf/base.py:2514
++#: dnf/base.py:2609
+ msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum"
+ msgstr "ローカルリポジトリー \"{}\" のパッケージ \"{}\" のチェックサムは正しくありません"
+ 
+-#: dnf/base.py:2517
++#: dnf/base.py:2612
+ msgid "Some packages from local repository have incorrect checksum"
+ msgstr "ローカルリポジトリーのいくつかのパッケージのチェックサムは正しくありません"
+ 
+-#: dnf/base.py:2520
++#: dnf/base.py:2615
+ msgid "Package \"{}\" from repository \"{}\" has incorrect checksum"
+ msgstr "リポジトリー \"{}\" のパッケージ \"{}\" のチェックサムは正しくありません"
+ 
+-#: dnf/base.py:2523
++#: dnf/base.py:2618
+ msgid ""
+ "Some packages have invalid cache, but cannot be downloaded due to \"--"
+ "cacheonly\" option"
+ msgstr "いくつかのパッケージには無効なキャッシュがありますが、\"--cacheonly\" オプションによりダウンロードできません"
+ 
+-#: dnf/base.py:2541 dnf/base.py:2561
++#: dnf/base.py:2636 dnf/base.py:2656
+ msgid "No match for argument"
+ msgstr "一致した引数がありません"
+ 
+-#: dnf/base.py:2549 dnf/base.py:2569
++#: dnf/base.py:2644 dnf/base.py:2664
+ msgid "All matches were filtered out by exclude filtering for argument"
+-msgstr "すべての検索結果は引数の除外フィルタリングに一致しません(filter out)"
++msgstr "すべての検索結果は引数の除外フィルタリングに一致しません (filter out)"
+ 
+-#: dnf/base.py:2551
++#: dnf/base.py:2646
+ msgid "All matches were filtered out by modular filtering for argument"
+-msgstr "すべての検出結果は引数のモジュラーフィルタリングに一致しません(filter out)"
++msgstr "すべての検出結果は引数のモジュラーフィルタリングに一致しません (filter out)"
+ 
+-#: dnf/base.py:2567
++#: dnf/base.py:2662
+ msgid "All matches were installed from a different repository for argument"
+ msgstr "すべての検索結果は引数に対し異なるレポジトリからインストールされたものです"
+ 
+-#: dnf/base.py:2583
++#: dnf/base.py:2709
+ #, python-format
+ msgid "Package %s is already installed."
+ msgstr "パッケージ %s は既にインストールされています。"
+@@ -571,8 +558,8 @@ msgstr "ファイル \"%s\" の解析に失敗しました: %s"
+ msgid "Cannot read file \"%s\": %s"
+ msgstr "ファイル \"%s\" を読み込めません: %s"
+ 
+-#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:902
+-#: dnf/cli/cli.py:906 dnf/cli/commands/alias.py:108
++#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:804
++#: dnf/cli/cli.py:808 dnf/cli/commands/alias.py:108
+ #, python-format
+ msgid "Config error: %s"
+ msgstr "設定エラー: %s"
+@@ -603,44 +590,44 @@ msgid ""
+ "stream '{2}'"
+ msgstr "オペレーションは、モジュール '{0}' ストリーム '{1}' を ストリーム '{2}' へと切り替える結果となります"
+ 
+-#: dnf/cli/cli.py:172
++#: dnf/cli/cli.py:173
+ #, python-brace-format
+ 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 '{prog} module reset <module_name>' command. After you reset the module, you can install the other stream."
++"It is not possible to switch enabled streams of a module unless explicitly enabled via configuration option module_stream_switch.\n"
++"It is recommended to rather remove all installed content from the module, and reset the module using '{prog} module reset <module_name>' command. After you reset the module, you can install the other stream."
+ msgstr ""
+-"モジュールの有効なストリームを切り替えることはできません。\n"
+-"モジュールからインストールされた全てのコンテンツを削除し、 '{prog} module reset <module_name>' コマンドを使用してリセットすることが推奨されます。モジュールのリセット後、他のストリームをインストール可能です。"
++"設定オプション module_stream_switch から明示的に有効化されていない限り、モジュールの有効なストリームを切り替えることはできません。\n"
++"モジュールからインストールされた全てのコンテンツを削除し、'{prog} module reset <module_name>' コマンドを使用してリセットすることが推奨されます。モジュールのリセット後、他のストリームをインストール可能です。"
+ 
+-#: dnf/cli/cli.py:210
++#: dnf/cli/cli.py:212
+ #, python-brace-format
+ msgid "{prog} will only download packages for the transaction."
+ msgstr "{prog} はトランザクションでパッケージのダウンロードのみ行います。"
+ 
+-#: dnf/cli/cli.py:213
++#: dnf/cli/cli.py:215
+ #, python-brace-format
+ msgid ""
+ "{prog} will only download packages, install gpg keys, and check the "
+ "transaction."
+ msgstr "{prog} はパッケージのダウンロード、gpgキーのインストール、トランザクションのチェックのみ行います。"
+ 
+-#: dnf/cli/cli.py:217
++#: dnf/cli/cli.py:219
+ msgid "Operation aborted."
+ msgstr "操作が中断されました。"
+ 
+-#: dnf/cli/cli.py:224
++#: dnf/cli/cli.py:226
+ msgid "Downloading Packages:"
+ msgstr "パッケージのダウンロード:"
+ 
+-#: dnf/cli/cli.py:230
++#: dnf/cli/cli.py:232
+ msgid "Error downloading packages:"
+ msgstr "パッケージのダウンロード中にエラーが発生しました:"
+ 
+-#: dnf/cli/cli.py:258
++#: dnf/cli/cli.py:264
+ msgid "Transaction failed"
+ msgstr "トランザクションが失敗しました"
+ 
+-#: dnf/cli/cli.py:281
++#: dnf/cli/cli.py:287
+ msgid ""
+ "Refusing to automatically import keys when running unattended.\n"
+ "Use \"-y\" to override."
+@@ -648,116 +635,95 @@ msgstr ""
+ "無人での実行中に鍵の自動インポートを拒否します。\n"
+ "オーバーライドするには \"-y\" を使用してください。"
+ 
+-#: dnf/cli/cli.py:331
++#: dnf/cli/cli.py:337
+ msgid "Changelogs for {}"
+ msgstr "{} の Changelogs"
+ 
+-#: dnf/cli/cli.py:364 dnf/cli/cli.py:505 dnf/cli/cli.py:511
++#: dnf/cli/cli.py:370 dnf/cli/cli.py:511 dnf/cli/cli.py:517
+ msgid "Obsoleting Packages"
+ msgstr "パッケージの廃止"
+ 
+-#: dnf/cli/cli.py:393
++#: dnf/cli/cli.py:399
+ msgid "No packages marked for distribution synchronization."
+-msgstr "ディストリビューション同期対象のパッケージがありません"
++msgstr "ディストリビューション同期対象のパッケージがありません。"
++
++#: dnf/cli/cli.py:425 dnf/cli/commands/group.py:395
++#, python-format
++msgid "No package %s available."
++msgstr "利用可能なパッケージ %s はありません。"
+ 
+-#: dnf/cli/cli.py:428
++#: dnf/cli/cli.py:434
+ msgid "No packages marked for downgrade."
+ msgstr "ダウングレード対象のパッケージはありません。"
+ 
+-#: dnf/cli/cli.py:479
++#: dnf/cli/cli.py:485
+ msgid "Installed Packages"
+ msgstr "インストール済みパッケージ"
+ 
+-#: dnf/cli/cli.py:487
++#: dnf/cli/cli.py:493
+ msgid "Available Packages"
+ msgstr "利用可能なパッケージ"
+ 
+-#: dnf/cli/cli.py:491
++#: dnf/cli/cli.py:497
+ msgid "Autoremove Packages"
+ msgstr "パッケージを自動削除します"
+ 
+-#: dnf/cli/cli.py:493
++#: dnf/cli/cli.py:499
+ msgid "Extra Packages"
+ msgstr "エクストラパッケージ"
+ 
+-#: dnf/cli/cli.py:497
++#: dnf/cli/cli.py:503
+ msgid "Available Upgrades"
+ msgstr "利用可能なアップグレード"
+ 
+-#: dnf/cli/cli.py:513
++#: dnf/cli/cli.py:519
+ msgid "Recently Added Packages"
+ msgstr "最近追加したパッケージ"
+ 
+-#: dnf/cli/cli.py:518
++#: dnf/cli/cli.py:523
+ msgid "No matching Packages to list"
+ msgstr "表示するための一致したパッケージはありません"
+ 
+-#: dnf/cli/cli.py:599
++#: dnf/cli/cli.py:604
+ msgid "No Matches found"
+ msgstr "一致したものは見つかりませんでした"
+ 
+-#: dnf/cli/cli.py:609
+-msgid "No transaction ID given"
+-msgstr "トランザクション ID は指定されていません"
+-
+-#: dnf/cli/cli.py:614
+-msgid "Not found given transaction ID"
+-msgstr "指定されたトランザクション ID は見つかりません"
+-
+-#: dnf/cli/cli.py:623
+-msgid "Found more than one transaction ID!"
+-msgstr "1 つ以上のトランザクション ID が見つかりました!"
+-
+-#: dnf/cli/cli.py:640
+-#, python-format
+-msgid "Transaction history is incomplete, before %u."
+-msgstr "%u の前のトランザクション履歴が不完全です。"
+-
+-#: dnf/cli/cli.py:642
+-#, python-format
+-msgid "Transaction history is incomplete, after %u."
+-msgstr "%u の後のトランザクション履歴が不完全です。"
+-
+-#: dnf/cli/cli.py:689
+-msgid "Undoing transaction {}, from {}"
+-msgstr "トランザクション {} を {} から取り消しています"
+-
+-#: dnf/cli/cli.py:769 dnf/cli/commands/shell.py:237
++#: dnf/cli/cli.py:671 dnf/cli/commands/shell.py:237
+ #, python-format
+ msgid "Unknown repo: '%s'"
+ msgstr "不明な repo : '%s'"
+ 
+-#: dnf/cli/cli.py:783
++#: dnf/cli/cli.py:685
+ #, python-format
+ msgid "No repository match: %s"
+ msgstr "一致するリポジトリーがありません: %s"
+ 
+-#: dnf/cli/cli.py:817
++#: dnf/cli/cli.py:719
+ msgid ""
+ "This command has to be run with superuser privileges (under the root user on"
+ " most systems)."
+ msgstr "このコマンドはスーパーユーザー特権(大概のシステムではrootユーザー)で実行しなければいけません。"
+ 
+-#: dnf/cli/cli.py:847
++#: dnf/cli/cli.py:749
+ #, python-format
+ msgid "No such command: %s. Please use %s --help"
+-msgstr "そのようなコマンドはありません: %s. %s --help を使用してください。"
++msgstr "そのようなコマンドはありません: %s. %s --help を使用してください"
+ 
+-#: dnf/cli/cli.py:850
++#: dnf/cli/cli.py:752
+ #, python-format, python-brace-format
+ msgid ""
+ "It could be a {PROG} plugin command, try: \"{prog} install 'dnf-"
+ "command(%s)'\""
+ msgstr "{PROG} プラグインコマンドを実行できません、試してください: \"{prog} install 'dnf-command(%s)'\""
+ 
+-#: dnf/cli/cli.py:854
++#: dnf/cli/cli.py:756
+ #, python-brace-format
+ msgid ""
+ "It could be a {prog} plugin command, but loading of plugins is currently "
+ "disabled."
+ msgstr "{prog} プラグインコマンドを実行できません、プラグインのロードが現在無効になっているようです。"
+ 
+-#: dnf/cli/cli.py:912
++#: dnf/cli/cli.py:814
+ msgid ""
+ "--destdir or --downloaddir must be used with --downloadonly or download or "
+ "system-upgrade command."
+@@ -765,7 +731,7 @@ msgstr ""
+ "--destdir または --downloaddir は、--downloadonly、download あるいは system-upgrade "
+ "コマンドと共に使用する必要があります。"
+ 
+-#: dnf/cli/cli.py:918
++#: dnf/cli/cli.py:820
+ msgid ""
+ "--enable, --set-enabled and --disable, --set-disabled must be used with "
+ "config-manager command."
+@@ -773,7 +739,7 @@ msgstr ""
+ "--enable と --set-enabled および --disable と --set-disabled は、config-manager "
+ "コマンドと共に使用しなければなりません。"
+ 
+-#: dnf/cli/cli.py:1000
++#: dnf/cli/cli.py:902
+ msgid ""
+ "Warning: Enforcing GPG signature check globally as per active RPM security "
+ "policy (see 'gpgcheck' in dnf.conf(5) for how to squelch this message)"
+@@ -781,38 +747,38 @@ msgstr ""
+ "警告: アクティブな RPM セキュリティーポリシーにより、GPG 署名の確認をグローバルに強制します "
+ "(このメッセージをスケルチするには、dnf.conf(5) の 'gpgcheck' を参照してください)"
+ 
+-#: dnf/cli/cli.py:1020
++#: dnf/cli/cli.py:922
+ msgid "Config file \"{}\" does not exist"
+ msgstr "設定ファイル \"{}\" は存在しません"
+ 
+-#: dnf/cli/cli.py:1040
++#: dnf/cli/cli.py:942
+ msgid ""
+ "Unable to detect release version (use '--releasever' to specify release "
+ "version)"
+ msgstr "リリースバージョンを検出できません (リリースバージョンを指定するには '--releasever' を使用してください)"
+ 
+-#: dnf/cli/cli.py:1127 dnf/cli/commands/repoquery.py:471
++#: dnf/cli/cli.py:1016 dnf/cli/commands/repoquery.py:471
+ msgid "argument {}: not allowed with argument {}"
+ msgstr "引数 {}: 引数 {} と許可されていません"
+ 
+-#: dnf/cli/cli.py:1134
++#: dnf/cli/cli.py:1023
+ #, python-format
+ msgid "Command \"%s\" already defined"
+ msgstr "コマンド \"%s\" はすでに定義済みです"
+ 
+-#: dnf/cli/cli.py:1154
++#: dnf/cli/cli.py:1043
+ msgid "Excludes in dnf.conf: "
+ msgstr "dnf.conf で除外します: "
+ 
+-#: dnf/cli/cli.py:1157
++#: dnf/cli/cli.py:1046
+ msgid "Includes in dnf.conf: "
+ msgstr "dnf.conf で含めます: "
+ 
+-#: dnf/cli/cli.py:1160
++#: dnf/cli/cli.py:1049
+ msgid "Excludes in repo "
+ msgstr "repo で除外します "
+ 
+-#: dnf/cli/cli.py:1163
++#: dnf/cli/cli.py:1052
+ msgid "Includes in repo "
+ msgstr "repo に含めます "
+ 
+@@ -864,38 +830,38 @@ msgstr "問題のリポジトリ: %s"
+ msgid "display details about a package or group of packages"
+ msgstr "パッケージもしくはパッケージのグループについての詳細を表示します"
+ 
+-#: dnf/cli/commands/__init__.py:168 dnf/cli/commands/__init__.py:740
++#: dnf/cli/commands/__init__.py:168 dnf/cli/commands/__init__.py:735
+ msgid "show all packages (default)"
+ msgstr "すべてのパッケージを表示します (デフォルト)"
+ 
+-#: dnf/cli/commands/__init__.py:171 dnf/cli/commands/__init__.py:743
+-#: dnf/cli/commands/module.py:351
++#: dnf/cli/commands/__init__.py:171 dnf/cli/commands/__init__.py:738
++#: dnf/cli/commands/module.py:376
+ msgid "show only available packages"
+ msgstr "利用可能なパッケージのみを表示します"
+ 
+-#: dnf/cli/commands/__init__.py:174 dnf/cli/commands/__init__.py:746
++#: dnf/cli/commands/__init__.py:174 dnf/cli/commands/__init__.py:741
+ msgid "show only installed packages"
+ msgstr "インストール済みのパッケージのみを表示します"
+ 
+-#: dnf/cli/commands/__init__.py:177 dnf/cli/commands/__init__.py:749
++#: dnf/cli/commands/__init__.py:177 dnf/cli/commands/__init__.py:744
+ msgid "show only extras packages"
+ msgstr "エクストラパッケージのみを表示します"
+ 
+ #: dnf/cli/commands/__init__.py:180 dnf/cli/commands/__init__.py:183
+-#: dnf/cli/commands/__init__.py:752 dnf/cli/commands/__init__.py:755
++#: dnf/cli/commands/__init__.py:747 dnf/cli/commands/__init__.py:750
+ msgid "show only upgrades packages"
+ msgstr "アップグレードパッケージのみを表示します"
+ 
+-#: dnf/cli/commands/__init__.py:186 dnf/cli/commands/__init__.py:758
++#: dnf/cli/commands/__init__.py:186 dnf/cli/commands/__init__.py:753
+ msgid "show only autoremove packages"
+ msgstr "自動削除パッケージのみを表示します"
+ 
+-#: dnf/cli/commands/__init__.py:189 dnf/cli/commands/__init__.py:761
++#: dnf/cli/commands/__init__.py:189 dnf/cli/commands/__init__.py:756
+ msgid "show only recently changed packages"
+ msgstr "最近変更されたパッケージのみを表示します"
+ 
+ #: dnf/cli/commands/__init__.py:190 dnf/cli/commands/__init__.py:265
+-#: dnf/cli/commands/__init__.py:774 dnf/cli/commands/autoremove.py:48
++#: dnf/cli/commands/__init__.py:769 dnf/cli/commands/autoremove.py:48
+ #: dnf/cli/commands/install.py:51 dnf/cli/commands/reinstall.py:44
+ #: dnf/cli/commands/remove.py:61 dnf/cli/commands/upgrade.py:46
+ msgid "PACKAGE"
+@@ -933,70 +899,70 @@ msgstr "利用可能なパッケージのアップグレードを確認します
+ msgid "show changelogs before update"
+ msgstr "更新前に changelogs を表示します"
+ 
+-#: dnf/cli/commands/__init__.py:361 dnf/cli/commands/__init__.py:414
+-#: dnf/cli/commands/__init__.py:470
++#: dnf/cli/commands/__init__.py:356 dnf/cli/commands/__init__.py:409
++#: dnf/cli/commands/__init__.py:465
+ msgid "No package available."
+ msgstr "利用可能なパッケージがありません。"
+ 
+-#: dnf/cli/commands/__init__.py:376
++#: dnf/cli/commands/__init__.py:371
+ msgid "No packages marked for install."
+ msgstr "インストール対象のパッケージはありません。"
+ 
+-#: dnf/cli/commands/__init__.py:412
++#: dnf/cli/commands/__init__.py:407
+ msgid "No package installed."
+ msgstr "インストールされたパッケージはありません。"
+ 
+-#: dnf/cli/commands/__init__.py:432 dnf/cli/commands/__init__.py:489
++#: dnf/cli/commands/__init__.py:427 dnf/cli/commands/__init__.py:484
+ #: dnf/cli/commands/reinstall.py:91
+ #, python-format
+ msgid " (from %s)"
+ msgstr " (%s から)"
+ 
+-#: dnf/cli/commands/__init__.py:433 dnf/cli/commands/__init__.py:490
++#: dnf/cli/commands/__init__.py:428 dnf/cli/commands/__init__.py:485
+ #: dnf/cli/commands/reinstall.py:92 dnf/cli/commands/remove.py:105
+ #, python-format
+ msgid "Installed package %s%s not available."
+ msgstr "インストール済みパッケージ %s%s は利用できません。"
+ 
+-#: dnf/cli/commands/__init__.py:467 dnf/cli/commands/__init__.py:576
+-#: dnf/cli/commands/__init__.py:619 dnf/cli/commands/__init__.py:666
++#: dnf/cli/commands/__init__.py:462 dnf/cli/commands/__init__.py:571
++#: dnf/cli/commands/__init__.py:614 dnf/cli/commands/__init__.py:661
+ msgid "No package installed from the repository."
+ msgstr "リポジトリーからインストールされたパッケージはありません。"
+ 
+-#: dnf/cli/commands/__init__.py:530 dnf/cli/commands/reinstall.py:101
++#: dnf/cli/commands/__init__.py:525 dnf/cli/commands/reinstall.py:101
+ msgid "No packages marked for reinstall."
+ msgstr "再インストール対象のパッケージはありません。"
+ 
+-#: dnf/cli/commands/__init__.py:716 dnf/cli/commands/upgrade.py:89
++#: dnf/cli/commands/__init__.py:711 dnf/cli/commands/upgrade.py:84
+ msgid "No packages marked for upgrade."
+ msgstr "アップグレード対象のパッケージがありません。"
+ 
+-#: dnf/cli/commands/__init__.py:726
++#: dnf/cli/commands/__init__.py:721
+ msgid "run commands on top of all packages in given repository"
+ msgstr "特定のリポジトリーのすべてのパッケージに対して、コマンドを実行します"
+ 
+-#: dnf/cli/commands/__init__.py:765
++#: dnf/cli/commands/__init__.py:760
+ msgid "REPOID"
+ msgstr "REPOID"
+ 
+-#: dnf/cli/commands/__init__.py:765
++#: dnf/cli/commands/__init__.py:760
+ msgid "Repository ID"
+ msgstr "リポジトリーID"
+ 
+-#: dnf/cli/commands/__init__.py:777 dnf/cli/commands/mark.py:48
++#: dnf/cli/commands/__init__.py:772 dnf/cli/commands/mark.py:48
+ #: dnf/cli/commands/updateinfo.py:108
+ msgid "Package specification"
+ msgstr "パッケージspec"
+ 
+-#: dnf/cli/commands/__init__.py:801
++#: dnf/cli/commands/__init__.py:796
+ msgid "display a helpful usage message"
+ msgstr "有用な使用方法のメッセージを表示します"
+ 
+-#: dnf/cli/commands/__init__.py:805
++#: dnf/cli/commands/__init__.py:800
+ msgid "COMMAND"
+ msgstr "コマンド"
+ 
+-#: dnf/cli/commands/__init__.py:806
++#: dnf/cli/commands/__init__.py:801
+ #, python-brace-format
+ msgid "{prog} command to get help for"
+ msgstr "{prog} コマンドでヘルプ表示"
+@@ -1167,8 +1133,10 @@ msgid "Waiting for process with pid %d to finish."
+ msgstr "pid %d のプロセスが終了するのを待ちます。"
+ 
+ #: dnf/cli/commands/deplist.py:32
+-msgid "List package's dependencies and what packages provide them"
+-msgstr "パッケージの依存関係とこれを提供するパッケージがどれかを一覧表示します"
++msgid ""
++"[deprecated, use repoquery --deplist] List package's dependencies and what "
++"packages provide them"
++msgstr "[非推奨、epoquery --deplist を使用] パッケージの依存関係とこれを提供するパッケージがどれかを一覧表示します"
+ 
+ #: dnf/cli/commands/distrosync.py:32
+ msgid "synchronize installed packages to the latest available versions"
+@@ -1194,78 +1162,78 @@ msgstr "グループ情報を表示または使用します"
+ msgid "No group data available for configured repositories."
+ msgstr "設定されたリポジトリーが利用可能なグループデータはありません。"
+ 
+-#: dnf/cli/commands/group.py:129
++#: dnf/cli/commands/group.py:126
+ #, python-format
+ msgid "Warning: Group %s does not exist."
+ msgstr "警告: グループ %s は存在しません。"
+ 
+-#: dnf/cli/commands/group.py:170
++#: dnf/cli/commands/group.py:167
+ msgid "Warning: No groups match:"
+ msgstr "警告: 一致するグループはありません:"
+ 
+-#: dnf/cli/commands/group.py:182 dnf/cli/commands/group.py:193
+-#: dnf/cli/output.py:1226
++#: dnf/cli/commands/group.py:179 dnf/cli/commands/group.py:190
++#: dnf/cli/output.py:1139
+ msgid "<name-unset>"
+ msgstr "<name-unset>"
+ 
+-#: dnf/cli/commands/group.py:199
++#: dnf/cli/commands/group.py:196
+ msgid "Available Environment Groups:"
+ msgstr "利用可能な環境グループ:"
+ 
+-#: dnf/cli/commands/group.py:201
++#: dnf/cli/commands/group.py:198
+ msgid "Installed Environment Groups:"
+ msgstr "インストール済みの環境グループ:"
+ 
+-#: dnf/cli/commands/group.py:208 dnf/cli/commands/group.py:294
++#: dnf/cli/commands/group.py:205 dnf/cli/commands/group.py:291
+ msgid "Installed Groups:"
+ msgstr "インストール済みのグループ:"
+ 
+-#: dnf/cli/commands/group.py:215 dnf/cli/commands/group.py:301
++#: dnf/cli/commands/group.py:212 dnf/cli/commands/group.py:298
+ msgid "Installed Language Groups:"
+ msgstr "インストール済みの言語グループ:"
+ 
+-#: dnf/cli/commands/group.py:225 dnf/cli/commands/group.py:308
++#: dnf/cli/commands/group.py:222 dnf/cli/commands/group.py:305
+ msgid "Available Groups:"
+ msgstr "利用可能なグループ:"
+ 
+-#: dnf/cli/commands/group.py:232 dnf/cli/commands/group.py:315
++#: dnf/cli/commands/group.py:229 dnf/cli/commands/group.py:312
+ msgid "Available Language Groups:"
+ msgstr "利用可能な言語グループ:"
+ 
+-#: dnf/cli/commands/group.py:322
++#: dnf/cli/commands/group.py:319
+ msgid "include optional packages from group"
+ msgstr "グループのオプションパッケージを含めます"
+ 
+-#: dnf/cli/commands/group.py:325
++#: dnf/cli/commands/group.py:322
+ msgid "show also hidden groups"
+ msgstr "非表示のグループも表示します"
+ 
+-#: dnf/cli/commands/group.py:327
++#: dnf/cli/commands/group.py:324
+ msgid "show only installed groups"
+ msgstr "インストール済みのグループのみを表示します"
+ 
+-#: dnf/cli/commands/group.py:329
++#: dnf/cli/commands/group.py:326
+ msgid "show only available groups"
+ msgstr "利用可能なグループのみを表示します"
+ 
+-#: dnf/cli/commands/group.py:331
++#: dnf/cli/commands/group.py:328
+ msgid "show also ID of groups"
+ msgstr "グループIDも表示"
+ 
+-#: dnf/cli/commands/group.py:333
++#: dnf/cli/commands/group.py:330
+ msgid "available subcommands: {} (default), {}"
+ msgstr "利用可能なサブコマンド: {} (default), {}"
+ 
+-#: dnf/cli/commands/group.py:337
++#: dnf/cli/commands/group.py:334
+ msgid "argument for group subcommand"
+ msgstr "グループサブコマンドの引数"
+ 
+-#: dnf/cli/commands/group.py:346
++#: dnf/cli/commands/group.py:343
+ #, python-format
+ msgid "Invalid groups sub-command, use: %s."
+-msgstr "groups のサブコマンドが無効です: %s. を使用します"
++msgstr "groups のサブコマンドが無効です: %s を使用します。"
+ 
+-#: dnf/cli/commands/group.py:403
++#: dnf/cli/commands/group.py:398
+ msgid "Unable to find a mandatory group package."
+ msgstr "必須のグループパッケージを見つけることができません。"
+ 
+@@ -1275,25 +1243,25 @@ msgstr "トランザクション履歴を表示、または使用します"
+ 
+ #: dnf/cli/commands/history.py:66
+ msgid "For the store command, file path to store the transaction to"
+-msgstr ""
++msgstr "store コマンドの場合は、トランザクションを保存するファイルパス"
+ 
+ #: dnf/cli/commands/history.py:68
+ msgid ""
+ "For the replay command, don't check for installed packages matching those in"
+ " transaction"
+-msgstr ""
++msgstr "replay コマンドの場合は、トランザクション内のパッケージに一致するインストール済みパッケージを確認しない"
+ 
+ #: dnf/cli/commands/history.py:71
+ msgid ""
+ "For the replay command, don't check for extra packages pulled into the "
+ "transaction"
+-msgstr ""
++msgstr "replay コマンドの場合は、トランザクションにプルされた追加パッケージを確認しない"
+ 
+ #: dnf/cli/commands/history.py:74
+ msgid ""
+ "For the replay command, skip packages that are not available or have missing"
+ " dependencies"
+-msgstr ""
++msgstr "replay コマンドの場合は、利用できないパッケージや、依存関係が不足しているパッケージをスキップ"
+ 
+ #: dnf/cli/commands/history.py:94
+ msgid ""
+@@ -1304,41 +1272,64 @@ msgstr ""
+ "'{}' は 1 つのトランザクション ID またはパッケージ名が必要です。"
+ 
+ #: dnf/cli/commands/history.py:101
+-#, fuzzy
+-#| msgid "No transaction ID or package name given."
+ msgid "No transaction file name given."
+-msgstr "トランザクション ID、またはパッケージ名が指定されていません。"
++msgstr "トランザクションファイル名が指定されていません。"
+ 
+ #: dnf/cli/commands/history.py:103
+-#, fuzzy
+-#| msgid "Failed to remove transaction file %s"
+ msgid "More than one argument given as transaction file name."
+-msgstr "トランザクションファイル %s の削除に失敗しました"
++msgstr "トランザクションファイル名として指定された複数の引数。"
+ 
+-#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:126
++#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:130
+ msgid "No transaction ID or package name given."
+ msgstr "トランザクション ID、またはパッケージ名が指定されていません。"
+ 
+-#: dnf/cli/commands/history.py:138
++#: dnf/cli/commands/history.py:142
+ #, python-format
+ msgid "You don't have access to the history DB: %s"
+ msgstr "履歴 DB にアクセスできません: %s"
+ 
+-#: dnf/cli/commands/history.py:147
++#: dnf/cli/commands/history.py:151
+ #, python-format
+ msgid ""
+ "Cannot undo transaction %s, doing so would result in an inconsistent package"
+ " database."
+ msgstr "トランザクション %s を取り消すことはできません。取り消すことで、パッケージデータベースに矛盾が生じます。"
+ 
+-#: dnf/cli/commands/history.py:152
++#: dnf/cli/commands/history.py:156
+ #, python-format
+ msgid ""
+ "Cannot rollback transaction %s, doing so would result in an inconsistent "
+ "package database."
+ msgstr "トランザクション %s をロールバックすることはできません。ロールバックすることで、パッケージデータベースに矛盾が生じます。"
+ 
+-#: dnf/cli/commands/history.py:222
++#: dnf/cli/commands/history.py:175
++msgid "No transaction ID given"
++msgstr "トランザクション ID は指定されていません"
++
++#: dnf/cli/commands/history.py:179
++#, python-brace-format
++msgid "Transaction ID \"{0}\" not found."
++msgstr "トランザクション ID \"{0}\" が見つかりません。"
++
++#: dnf/cli/commands/history.py:185
++msgid "Found more than one transaction ID!"
++msgstr "1 つ以上のトランザクション ID が見つかりました!"
++
++#: dnf/cli/commands/history.py:203
++#, python-format
++msgid "Transaction history is incomplete, before %u."
++msgstr "%u の前のトランザクション履歴が不完全です。"
++
++#: dnf/cli/commands/history.py:205
++#, python-format
++msgid "Transaction history is incomplete, after %u."
++msgstr "%u の後のトランザクション履歴が不完全です。"
++
++#: dnf/cli/commands/history.py:256
++msgid "No packages to list"
++msgstr "一覧表示するパッケージはありません"
++
++#: dnf/cli/commands/history.py:279
+ msgid ""
+ "Invalid transaction ID range definition '{}'.\n"
+ "Use '<transaction-id>..<transaction-id>'."
+@@ -1346,7 +1337,7 @@ msgstr ""
+ "無効なトランザクション ID の範囲の定義 '{}'。\n"
+ "'<transaction-id>..<transaction-id>' を使用してください。"
+ 
+-#: dnf/cli/commands/history.py:226
++#: dnf/cli/commands/history.py:283
+ msgid ""
+ "Can't convert '{}' to transaction ID.\n"
+ "Use '<number>', 'last', 'last-<number>'."
+@@ -1354,40 +1345,29 @@ msgstr ""
+ "'{}' をトランザクション IDに変換できません。\n"
+ "'<number>', 'last', 'last-<number>' を使用してください。"
+ 
+-#: dnf/cli/commands/history.py:255
++#: dnf/cli/commands/history.py:312
+ msgid "No transaction which manipulates package '{}' was found."
+ msgstr "パッケージ '{}' を操作するトランザクションが見つかりません。"
+ 
+-#: dnf/cli/commands/history.py:305
+-#, fuzzy, python-brace-format
+-#| msgid "TransactionItem not found for key: {}"
+-msgid "Transaction ID \"{id}\" not found."
+-msgstr "TransactionItemが見つかりません鍵: {}"
+-
+-#: dnf/cli/commands/history.py:313
++#: dnf/cli/commands/history.py:357
+ msgid "{} exists, overwrite?"
+-msgstr ""
++msgstr "{} は存在します。上書きしますか?"
+ 
+-#: dnf/cli/commands/history.py:316
++#: dnf/cli/commands/history.py:360
+ msgid "Not overwriting {}, exiting."
+-msgstr ""
++msgstr "{} は存在するため上書きしません。"
+ 
+-#: dnf/cli/commands/history.py:323
+-#, fuzzy
+-#| msgid "Transaction failed"
++#: dnf/cli/commands/history.py:367
+ msgid "Transaction saved to {}."
+-msgstr "トランザクションが失敗しました"
++msgstr "{} に保存されているトランザクション。"
+ 
+-#: dnf/cli/commands/history.py:326
+-#, fuzzy
+-#| msgid "Errors occurred during transaction."
++#: dnf/cli/commands/history.py:370
+ msgid "Error storing transaction: {}"
+-msgstr "トランザクション中にエラーが発生しました。"
++msgstr "トランザクションの保存エラー: {}"
+ 
+-#: dnf/cli/commands/history.py:350
+-msgid ""
+-"Warning, the following problems occurred while replaying the transaction:"
+-msgstr ""
++#: dnf/cli/commands/history.py:386
++msgid "Warning, the following problems occurred while running a transaction:"
++msgstr "警告: トランザクションの実行中に以下の問題が発生しました:"
+ 
+ #: dnf/cli/commands/install.py:47
+ msgid "install a package or packages on your system"
+@@ -1406,7 +1386,7 @@ msgstr "一致するものが見つかりません"
+ msgid "Not a valid rpm file path: %s"
+ msgstr "有効な rpm ファイルパスではありません: %s"
+ 
+-#: dnf/cli/commands/install.py:167
++#: dnf/cli/commands/install.py:166
+ #, python-brace-format
+ msgid "There are following alternatives for \"{0}\": {1}"
+ msgstr "\"{0}\"には次の選択肢があります: {1}"
+@@ -1449,7 +1429,7 @@ msgid "%s marked as group installed."
+ msgstr "グループインストールには %s のマークがついています。"
+ 
+ #: dnf/cli/commands/mark.py:85 dnf/cli/commands/shell.py:129
+-#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:279
++#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:282
+ msgid "Error:"
+ msgstr "エラー:"
+ 
+@@ -1458,89 +1438,93 @@ msgstr "エラー:"
+ msgid "Package %s is not installed."
+ msgstr "パッケージ %s はインストールされていません。"
+ 
+-#: dnf/cli/commands/module.py:51
++#: dnf/cli/commands/module.py:54
+ msgid ""
+ "Only module name, stream, architecture or profile is used. Ignoring unneeded"
+ " information in argument: '{}'"
+ msgstr "モジュール名、ストリーム、アーキテクチャーまたはプロファイルのみが使用されています。引数: '{}' の不要な情報は無視します"
+ 
+-#: dnf/cli/commands/module.py:77
++#: dnf/cli/commands/module.py:80
+ msgid "list all module streams, profiles and states"
+ msgstr "全てのモジュールストリーム、プロファイル、状態をリスト"
+ 
+-#: dnf/cli/commands/module.py:105 dnf/cli/commands/module.py:128
++#: dnf/cli/commands/module.py:108 dnf/cli/commands/module.py:131
+ msgid "No matching Modules to list"
+ msgstr "表示する一致モジュールはありません"
+ 
+-#: dnf/cli/commands/module.py:111
++#: dnf/cli/commands/module.py:114
+ msgid "print detailed information about a module"
+ msgstr "モジュールに関する詳細情報を表示"
+ 
+-#: dnf/cli/commands/module.py:133
++#: dnf/cli/commands/module.py:136
+ msgid "enable a module stream"
+ msgstr "モジュールストリームを有効化"
+ 
+-#: dnf/cli/commands/module.py:157
++#: dnf/cli/commands/module.py:160
+ msgid "disable a module with all its streams"
+ msgstr "すべてのストリームのモジュールを無効化"
+ 
+-#: dnf/cli/commands/module.py:181
++#: dnf/cli/commands/module.py:184
+ msgid "reset a module"
+ msgstr "モジュールのリセット"
+ 
+-#: dnf/cli/commands/module.py:202
++#: dnf/cli/commands/module.py:205
+ msgid "install a module profile including its packages"
+ msgstr "パッケージを含むモジュールプロファイルのインストール"
+ 
+-#: dnf/cli/commands/module.py:223
++#: dnf/cli/commands/module.py:226
+ msgid "update packages associated with an active stream"
+ msgstr "アクティブストリームに紐づいたパッケージをアップデート"
+ 
+-#: dnf/cli/commands/module.py:240
++#: dnf/cli/commands/module.py:243
+ msgid "remove installed module profiles and their packages"
+ msgstr "インストールされたモジュールプロファイルとそのパッケージを削除"
+ 
+-#: dnf/cli/commands/module.py:264
++#: dnf/cli/commands/module.py:267
+ msgid "Package {} belongs to multiple modules, skipping"
+ msgstr "パッケージ {} は複数のモジュールに属しています、スキップします"
+ 
+-#: dnf/cli/commands/module.py:277
++#: dnf/cli/commands/module.py:280
++msgid "switch a module to a stream and distrosync rpm packages"
++msgstr "モジュールをストリームに切り替え、rpm パッケージを distrosync します"
++
++#: dnf/cli/commands/module.py:302
+ msgid "list modular packages"
+ msgstr "モジュラーパッケージをリスト"
+ 
+-#: dnf/cli/commands/module.py:292
++#: dnf/cli/commands/module.py:317
+ msgid "list packages belonging to a module"
+ msgstr "モジュールに属するパッケージをリスト"
+ 
+-#: dnf/cli/commands/module.py:327
++#: dnf/cli/commands/module.py:352
+ msgid "Interact with Modules."
+ msgstr "モジュールと対話します。"
+ 
+-#: dnf/cli/commands/module.py:340
++#: dnf/cli/commands/module.py:365
+ msgid "show only enabled modules"
+ msgstr "有効なモジュールのみを表示します"
+ 
+-#: dnf/cli/commands/module.py:343
++#: dnf/cli/commands/module.py:368
+ msgid "show only disabled modules"
+ msgstr "無効なモジュールのみを表示します"
+ 
+-#: dnf/cli/commands/module.py:346
++#: dnf/cli/commands/module.py:371
+ msgid "show only installed modules or packages"
+ msgstr "インストールされたモジュールまたはパッケージのみ表示"
+ 
+-#: dnf/cli/commands/module.py:349
++#: dnf/cli/commands/module.py:374
+ msgid "show profile content"
+ msgstr "プロファイルコンテンツを表示します"
+ 
+-#: dnf/cli/commands/module.py:354
++#: dnf/cli/commands/module.py:379
+ msgid "remove all modular packages"
+ msgstr "すべてのモジュラーパッケージを削除"
+ 
+-#: dnf/cli/commands/module.py:364
++#: dnf/cli/commands/module.py:389
+ msgid "Module specification"
+ msgstr "モジュールspec"
+ 
+-#: dnf/cli/commands/module.py:386
++#: dnf/cli/commands/module.py:411
+ msgid "{} {} {}: too few arguments"
+ msgstr "{} {} {}: 引数が足りません"
+ 
+@@ -1843,6 +1827,8 @@ msgid ""
+ "display format for listing packages: \"%%{name} %%{version} ...\", use "
+ "--querytags to view full tag list"
+ msgstr ""
++"パッケージを一覧表示するための形式の表示: \"%%{name} %%{version} ...\"。--querytags "
++"を指定して完全なタグリストを表示"
+ 
+ #: dnf/cli/commands/repoquery.py:198
+ msgid "show available tags to use with --queryformat"
+@@ -1853,7 +1839,7 @@ msgid ""
+ "use name-epoch:version-release.architecture format for displaying found "
+ "packages (default)"
+ msgstr ""
+-"見つかったパッケージを表示するには  name-epoch:version-release.architecture 形式を使用します (デフォルト)"
++"見つかったパッケージを表示するには name-epoch:version-release.architecture 形式を使用します (デフォルト)"
+ 
+ #: dnf/cli/commands/repoquery.py:205
+ msgid ""
+@@ -1977,7 +1963,7 @@ msgid ""
+ msgstr ""
+ "オプションの '--resolve' は、'--conflicts'、'--depends'、'--enhances'、'--provides'、'--"
+ "recommends'、'--requires'、'--requires-pre'、'--suggests' または '--supplements' "
+-"オプションのいずれか 1 つと使用する必要があります。"
++"オプションのいずれか 1 つと使用する必要があります"
+ 
+ #: dnf/cli/commands/repoquery.py:305
+ msgid ""
+@@ -1986,7 +1972,7 @@ msgid ""
+ "--resolve'"
+ msgstr ""
+ "オプションの '--recursive' は、'--whatrequires <REQ>' (オプションでは '--exactdeps' ではなく、'"
+-"--alldeps' と共に使用) または '--requires <REQ> --resolve' と共に使用する必要があります。"
++"--alldeps' と共に使用) または '--requires <REQ> --resolve' と共に使用する必要があります"
+ 
+ #: dnf/cli/commands/repoquery.py:312
+ msgid "argument {} requires --whatrequires or --whatdepends option"
+@@ -2027,22 +2013,22 @@ msgstr "KEYWORD"
+ msgid "Keyword to search for"
+ msgstr "検索のキーワード"
+ 
+-#: dnf/cli/commands/search.py:61 dnf/cli/output.py:506
++#: dnf/cli/commands/search.py:61 dnf/cli/output.py:460
+ msgctxt "long"
+ msgid "Name"
+ msgstr "名前"
+ 
+-#: dnf/cli/commands/search.py:62 dnf/cli/output.py:559
++#: dnf/cli/commands/search.py:62 dnf/cli/output.py:513
+ msgctxt "long"
+ msgid "Summary"
+ msgstr "概要"
+ 
+-#: dnf/cli/commands/search.py:63 dnf/cli/output.py:569
++#: dnf/cli/commands/search.py:63 dnf/cli/output.py:523
+ msgctxt "long"
+ msgid "Description"
+ msgstr "説明"
+ 
+-#: dnf/cli/commands/search.py:64 dnf/cli/output.py:562
++#: dnf/cli/commands/search.py:64 dnf/cli/output.py:516
+ msgid "URL"
+ msgstr "URL"
+ 
+@@ -2185,16 +2171,16 @@ msgstr ""
+ "実行                      トランザクションセットの解決および実行\n"
+ "終了 (または 中止)           シェルの終了"
+ 
+-#: dnf/cli/commands/shell.py:259
++#: dnf/cli/commands/shell.py:262
+ #, python-format
+ msgid "Error: Cannot open %s for reading"
+ msgstr "エラー: 読み込み用に %s を開くことができません"
+ 
+-#: dnf/cli/commands/shell.py:281 dnf/cli/main.py:187
++#: dnf/cli/commands/shell.py:284 dnf/cli/main.py:187
+ msgid "Complete!"
+ msgstr "完了しました!"
+ 
+-#: dnf/cli/commands/shell.py:291
++#: dnf/cli/commands/shell.py:294
+ msgid "Leaving Shell"
+ msgstr "シェルを終了します"
+ 
+@@ -2385,8 +2371,8 @@ msgstr "重大度"
+ msgid "Files"
+ msgstr "ファイル"
+ 
+-#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1499
+-#: dnf/cli/output.py:1772 dnf/cli/output.py:1774
++#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1654
++#: dnf/cli/output.py:1656 dnf/util.py:617
+ msgid "Installed"
+ msgstr "インストール済み"
+ 
+@@ -2699,7 +2685,7 @@ msgstr "主要コマンドの一覧:"
+ 
+ #: dnf/cli/option_parser.py:376
+ msgid "List of Plugin Commands:"
+-msgstr "プラグインコマンドの一覧"
++msgstr "プラグインコマンドの一覧:"
+ 
+ #: dnf/cli/option_parser.py:413
+ #, python-format
+@@ -2709,13 +2695,13 @@ msgstr "引数をエンコードできません '%s': %s"
+ #. Translators: This is abbreviated 'Name'. Should be no longer
+ #. than 12 characters. You can use the full version if it is short
+ #. enough in your language.
+-#: dnf/cli/output.py:505
++#: dnf/cli/output.py:459
+ msgctxt "short"
+ msgid "Name"
+ msgstr "名前"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:511
++#: dnf/cli/output.py:465
+ msgid "Epoch"
+ msgstr "エポック"
+ 
+@@ -2723,38 +2709,38 @@ msgstr "エポック"
+ #. use the full (unabbreviated) term 'Version' if you think that
+ #. the translation to your language is not too long and will
+ #. always fit to limited space.
+-#: dnf/cli/output.py:512 dnf/cli/output.py:1335
++#: dnf/cli/output.py:466 dnf/cli/output.py:1248
+ msgctxt "short"
+ msgid "Version"
+ msgstr "バージョン"
+ 
+ #. Translators: This is the full (unabbreviated) term 'Version'.
+-#: dnf/cli/output.py:513 dnf/cli/output.py:1337
++#: dnf/cli/output.py:467 dnf/cli/output.py:1250
+ msgctxt "long"
+ msgid "Version"
+ msgstr "バージョン"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:516
++#: dnf/cli/output.py:470
+ msgid "Release"
+ msgstr "リリース"
+ 
+ #. Translators: This is abbreviated 'Architecture', used when
+ #. we have not enough space to display the full word.
+-#: dnf/cli/output.py:517 dnf/cli/output.py:1326
++#: dnf/cli/output.py:471 dnf/cli/output.py:1239
+ msgctxt "short"
+ msgid "Arch"
+ msgstr "Arch"
+ 
+ #. Translators: This is the full word 'Architecture', used when
+ #. we have enough space.
+-#: dnf/cli/output.py:518 dnf/cli/output.py:1329
++#: dnf/cli/output.py:472 dnf/cli/output.py:1242
+ msgctxt "long"
+ msgid "Architecture"
+ msgstr "アーキテクチャー"
+ 
+ #. Translators: This is the full (unabbreviated) term 'Size'.
+-#: dnf/cli/output.py:520 dnf/cli/output.py:1352
++#: dnf/cli/output.py:474 dnf/cli/output.py:1265
+ msgctxt "long"
+ msgid "Size"
+ msgstr "サイズ"
+@@ -2763,32 +2749,32 @@ msgstr "サイズ"
+ #. not be longer than 5 characters. If the term 'Size' in your
+ #. language is not longer than 5 characters then you can use it
+ #. unabbreviated.
+-#: dnf/cli/output.py:520 dnf/cli/output.py:1350
++#: dnf/cli/output.py:474 dnf/cli/output.py:1263
+ msgctxt "short"
+ msgid "Size"
+ msgstr "サイズ"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:524
++#: dnf/cli/output.py:478
+ msgid "Source"
+ msgstr "ソース"
+ 
+ #. Translators: This is abbreviated 'Repository', used when
+ #. we have not enough space to display the full word.
+-#: dnf/cli/output.py:525 dnf/cli/output.py:1341
++#: dnf/cli/output.py:479 dnf/cli/output.py:1254
+ msgctxt "short"
+ msgid "Repo"
+ msgstr "Repo"
+ 
+ #. Translators: This is the full word 'Repository', used when
+ #. we have enough space.
+-#: dnf/cli/output.py:526 dnf/cli/output.py:1344
++#: dnf/cli/output.py:480 dnf/cli/output.py:1257
+ msgctxt "long"
+ msgid "Repository"
+ msgstr "リポジトリー"
+ 
+ #. Translators: This message should be no longer than 12 chars.
+-#: dnf/cli/output.py:533
++#: dnf/cli/output.py:487
+ msgid "From repo"
+ msgstr "repo から"
+ 
+@@ -2796,312 +2782,308 @@ msgstr "repo から"
+ #. print(_("Committer   : %s") % ucd(pkg.committer))
+ #. print(_("Committime  : %s") % time.ctime(pkg.committime))
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:539
++#: dnf/cli/output.py:493
+ msgid "Packager"
+ msgstr "パッケージャー"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:541
++#: dnf/cli/output.py:495
+ msgid "Buildtime"
+ msgstr "ビルド時間"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:545
++#: dnf/cli/output.py:499
+ msgid "Install time"
+ msgstr "インストール時間"
+ 
+ #. Translators: This message should be no longer than 12 chars.
+-#: dnf/cli/output.py:554
++#: dnf/cli/output.py:508
+ msgid "Installed by"
+ msgstr "インストール済み"
+ 
+ #. Translators: This is abbreviated 'Summary'. Should be no longer
+ #. than 12 characters. You can use the full version if it is short
+ #. enough in your language.
+-#: dnf/cli/output.py:558
++#: dnf/cli/output.py:512
+ msgctxt "short"
+ msgid "Summary"
+ msgstr "概要"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:564
++#: dnf/cli/output.py:518
+ msgid "License"
+ msgstr "ライセンス"
+ 
+ #. Translators: This is abbreviated 'Description'. Should be no longer
+ #. than 12 characters. You can use the full version if it is short
+ #. enough in your language.
+-#: dnf/cli/output.py:568
++#: dnf/cli/output.py:522
+ msgctxt "short"
+ msgid "Description"
+ msgstr "説明"
+ 
+-#: dnf/cli/output.py:695
+-msgid "No packages to list"
+-msgstr "一覧表示するパッケージはありません"
+-
+-#: dnf/cli/output.py:706
++#: dnf/cli/output.py:650
+ msgid "y"
+ msgstr "y"
+ 
+-#: dnf/cli/output.py:706
++#: dnf/cli/output.py:650
+ msgid "yes"
+ msgstr "はい"
+ 
+-#: dnf/cli/output.py:707
++#: dnf/cli/output.py:651
+ msgid "n"
+ msgstr "n"
+ 
+-#: dnf/cli/output.py:707
++#: dnf/cli/output.py:651
+ msgid "no"
+ msgstr "いいえ"
+ 
+-#: dnf/cli/output.py:711
++#: dnf/cli/output.py:655
+ msgid "Is this ok [y/N]: "
+ msgstr "これでよろしいですか? [y/N]: "
+ 
+-#: dnf/cli/output.py:715
++#: dnf/cli/output.py:659
+ msgid "Is this ok [Y/n]: "
+ msgstr "これでよろしいですか? [Y/n]: "
+ 
+-#: dnf/cli/output.py:795
++#: dnf/cli/output.py:739
+ #, python-format
+ msgid "Group: %s"
+ msgstr "グループ: %s"
+ 
+-#: dnf/cli/output.py:799
++#: dnf/cli/output.py:743
+ #, python-format
+ msgid " Group-Id: %s"
+ msgstr " グループ ID: %s"
+ 
+-#: dnf/cli/output.py:801 dnf/cli/output.py:840
++#: dnf/cli/output.py:745 dnf/cli/output.py:784
+ #, python-format
+ msgid " Description: %s"
+ msgstr " 説明: %s"
+ 
+-#: dnf/cli/output.py:803
++#: dnf/cli/output.py:747
+ #, python-format
+ msgid " Language: %s"
+ msgstr " 言語: %s"
+ 
+-#: dnf/cli/output.py:806
++#: dnf/cli/output.py:750
+ msgid " Mandatory Packages:"
+ msgstr " 必須なパッケージ:"
+ 
+-#: dnf/cli/output.py:807
++#: dnf/cli/output.py:751
+ msgid " Default Packages:"
+ msgstr " 標準パッケージ:"
+ 
+-#: dnf/cli/output.py:808
++#: dnf/cli/output.py:752
+ msgid " Optional Packages:"
+ msgstr " オプション パッケージ:"
+ 
+-#: dnf/cli/output.py:809
++#: dnf/cli/output.py:753
+ msgid " Conditional Packages:"
+ msgstr " 条件付きパッケージ:"
+ 
+-#: dnf/cli/output.py:834
++#: dnf/cli/output.py:778
+ #, python-format
+ msgid "Environment Group: %s"
+ msgstr "環境グループ: %s"
+ 
+-#: dnf/cli/output.py:837
++#: dnf/cli/output.py:781
+ #, python-format
+ msgid " Environment-Id: %s"
+ msgstr " 環境 Id: %s"
+ 
+-#: dnf/cli/output.py:843
++#: dnf/cli/output.py:787
+ msgid " Mandatory Groups:"
+ msgstr " 必須なグループ:"
+ 
+-#: dnf/cli/output.py:844
++#: dnf/cli/output.py:788
+ msgid " Optional Groups:"
+ msgstr " 任意なグループ:"
+ 
+-#: dnf/cli/output.py:865
++#: dnf/cli/output.py:809
+ msgid "Matched from:"
+ msgstr "一致:"
+ 
+-#: dnf/cli/output.py:879
++#: dnf/cli/output.py:823
+ #, python-format
+ msgid "Filename    : %s"
+ msgstr "ファイル名    : %s"
+ 
+-#: dnf/cli/output.py:904
++#: dnf/cli/output.py:848
+ #, python-format
+ msgid "Repo        : %s"
+ msgstr "Repo        : %s"
+ 
+-#: dnf/cli/output.py:913
++#: dnf/cli/output.py:857
+ msgid "Description : "
+-msgstr "説明                : "
++msgstr "説明: "
+ 
+-#: dnf/cli/output.py:917
++#: dnf/cli/output.py:861
+ #, python-format
+ msgid "URL         : %s"
+ msgstr "URL                 : %s"
+ 
+-#: dnf/cli/output.py:921
++#: dnf/cli/output.py:865
+ #, python-format
+ msgid "License     : %s"
+ msgstr "ライセンス    : %s"
+ 
+-#: dnf/cli/output.py:927
++#: dnf/cli/output.py:871
+ #, python-format
+ msgid "Provide    : %s"
+ msgstr "提供する    : %s"
+ 
+-#: dnf/cli/output.py:947
++#: dnf/cli/output.py:891
+ #, python-format
+ msgid "Other       : %s"
+ msgstr "その他       : %s"
+ 
+-#: dnf/cli/output.py:996
++#: dnf/cli/output.py:940
+ msgid "There was an error calculating total download size"
+ msgstr "ダウンロードサイズの合計を計算中にエラーが発生しました"
+ 
+-#: dnf/cli/output.py:1002
++#: dnf/cli/output.py:946
+ #, python-format
+ msgid "Total size: %s"
+ msgstr "合計サイズ: %s"
+ 
+-#: dnf/cli/output.py:1005
++#: dnf/cli/output.py:949
+ #, python-format
+ msgid "Total download size: %s"
+ msgstr "ダウンロードサイズの合計: %s"
+ 
+-#: dnf/cli/output.py:1008
++#: dnf/cli/output.py:952
+ #, python-format
+ msgid "Installed size: %s"
+ msgstr "インストール後のサイズ: %s"
+ 
+-#: dnf/cli/output.py:1026
++#: dnf/cli/output.py:970
+ msgid "There was an error calculating installed size"
+ msgstr "インストール後のサイズを計算中にエラーが発生しました"
+ 
+-#: dnf/cli/output.py:1030
++#: dnf/cli/output.py:974
+ #, python-format
+ msgid "Freed space: %s"
+ msgstr "解放された容量: %s"
+ 
+-#: dnf/cli/output.py:1039
++#: dnf/cli/output.py:983
+ msgid "Marking packages as installed by the group:"
+ msgstr "パッケージをグループごとにインストール済みとマークします:"
+ 
+-#: dnf/cli/output.py:1046
++#: dnf/cli/output.py:990
+ msgid "Marking packages as removed by the group:"
+ msgstr "パッケージをグループごとに削除済みとマークします:"
+ 
+-#: dnf/cli/output.py:1056
++#: dnf/cli/output.py:1000
+ msgid "Group"
+ msgstr "グループ"
+ 
+-#: dnf/cli/output.py:1056
++#: dnf/cli/output.py:1000
+ msgid "Packages"
+ msgstr "パッケージ"
+ 
+-#: dnf/cli/output.py:1133
++#: dnf/cli/output.py:1046
+ msgid "Installing group/module packages"
+ msgstr "group/moduleパッケージをインストール"
+ 
+-#: dnf/cli/output.py:1134
++#: dnf/cli/output.py:1047
+ msgid "Installing group packages"
+ msgstr "グループパッケージのインストール"
+ 
+ #. TRANSLATORS: This is for a list of packages to be installed.
+-#: dnf/cli/output.py:1138
++#: dnf/cli/output.py:1051
+ msgctxt "summary"
+ msgid "Installing"
+ msgstr "インストール"
+ 
+ #. TRANSLATORS: This is for a list of packages to be upgraded.
+-#: dnf/cli/output.py:1140
++#: dnf/cli/output.py:1053
+ msgctxt "summary"
+ msgid "Upgrading"
+ msgstr "アップグレード"
+ 
+ #. TRANSLATORS: This is for a list of packages to be reinstalled.
+-#: dnf/cli/output.py:1142
++#: dnf/cli/output.py:1055
+ msgctxt "summary"
+ msgid "Reinstalling"
+ msgstr "再インストール"
+ 
+-#: dnf/cli/output.py:1144
++#: dnf/cli/output.py:1057
+ msgid "Installing dependencies"
+ msgstr "依存関係のインストール"
+ 
+-#: dnf/cli/output.py:1145
++#: dnf/cli/output.py:1058
+ msgid "Installing weak dependencies"
+ msgstr "弱い依存関係のインストール"
+ 
+ #. TRANSLATORS: This is for a list of packages to be removed.
+-#: dnf/cli/output.py:1147
++#: dnf/cli/output.py:1060
+ msgid "Removing"
+ msgstr "削除中"
+ 
+-#: dnf/cli/output.py:1148
++#: dnf/cli/output.py:1061
+ msgid "Removing dependent packages"
+ msgstr "依存関係パッケージの削除"
+ 
+-#: dnf/cli/output.py:1149
++#: dnf/cli/output.py:1062
+ msgid "Removing unused dependencies"
+ msgstr "未使用の依存関係の削除"
+ 
+ #. TRANSLATORS: This is for a list of packages to be downgraded.
+-#: dnf/cli/output.py:1151
++#: dnf/cli/output.py:1064
+ msgctxt "summary"
+ msgid "Downgrading"
+ msgstr "ダウングレード"
+ 
+-#: dnf/cli/output.py:1176
++#: dnf/cli/output.py:1089
+ msgid "Installing module profiles"
+ msgstr "モジュールプロファイルのインストール中"
+ 
+-#: dnf/cli/output.py:1185
++#: dnf/cli/output.py:1098
+ msgid "Disabling module profiles"
+ msgstr "モジュールプロファイルの無効化中"
+ 
+-#: dnf/cli/output.py:1194
++#: dnf/cli/output.py:1107
+ msgid "Enabling module streams"
+ msgstr "モジュールストリームの有効化中"
+ 
+-#: dnf/cli/output.py:1202
++#: dnf/cli/output.py:1115
+ msgid "Switching module streams"
+ msgstr "モジュールストリームの切り替え中"
+ 
+-#: dnf/cli/output.py:1210
++#: dnf/cli/output.py:1123
+ msgid "Disabling modules"
+ msgstr "モジュールの無効化"
+ 
+-#: dnf/cli/output.py:1218
++#: dnf/cli/output.py:1131
+ msgid "Resetting modules"
+ msgstr "モジュールの再設定中"
+ 
+-#: dnf/cli/output.py:1230
++#: dnf/cli/output.py:1143
+ msgid "Installing Environment Groups"
+ msgstr "環境グループのインストール中"
+ 
+-#: dnf/cli/output.py:1237
++#: dnf/cli/output.py:1150
+ msgid "Upgrading Environment Groups"
+ msgstr "環境グループのアップグレード中"
+ 
+-#: dnf/cli/output.py:1244
++#: dnf/cli/output.py:1157
+ msgid "Removing Environment Groups"
+ msgstr "環境グループの削除中"
+ 
+-#: dnf/cli/output.py:1251
++#: dnf/cli/output.py:1164
+ msgid "Installing Groups"
+ msgstr "グループのインストール中"
+ 
+-#: dnf/cli/output.py:1258
++#: dnf/cli/output.py:1171
+ msgid "Upgrading Groups"
+ msgstr "グループのアップグレード中"
+ 
+-#: dnf/cli/output.py:1265
++#: dnf/cli/output.py:1178
+ msgid "Removing Groups"
+ msgstr "グループの削除中"
+ 
+-#: dnf/cli/output.py:1281
++#: dnf/cli/output.py:1194
+ #, python-format
+ msgid ""
+ "Skipping packages with conflicts:\n"
+@@ -3110,12 +3092,12 @@ msgstr ""
+ "競合するパッケージをスキップします:\n"
+ "(アップグレードを強制するにはコマンドラインに '%s' を追加します)"
+ 
+-#: dnf/cli/output.py:1291
++#: dnf/cli/output.py:1204
+ #, python-format
+ msgid "Skipping packages with broken dependencies%s"
+ msgstr "壊れた dependencies%s のパッケージをスキップします"
+ 
+-#: dnf/cli/output.py:1295
++#: dnf/cli/output.py:1208
+ msgid " or part of a group"
+ msgstr " またはグループの一部"
+ 
+@@ -3123,22 +3105,22 @@ msgstr " またはグループの一部"
+ #. use the full (unabbreviated) term 'Package' if you think that
+ #. the translation to your language is not too long and will
+ #. always fit to limited space.
+-#: dnf/cli/output.py:1320
++#: dnf/cli/output.py:1233
+ msgctxt "short"
+ msgid "Package"
+ msgstr "パッケージ"
+ 
+ #. Translators: This is the full (unabbreviated) term 'Package'.
+-#: dnf/cli/output.py:1322
++#: dnf/cli/output.py:1235
+ msgctxt "long"
+ msgid "Package"
+ msgstr "パッケージ"
+ 
+-#: dnf/cli/output.py:1371
++#: dnf/cli/output.py:1284
+ msgid "replacing"
+ msgstr "置き換え"
+ 
+-#: dnf/cli/output.py:1378
++#: dnf/cli/output.py:1291
+ #, python-format
+ msgid ""
+ "\n"
+@@ -3150,287 +3132,271 @@ msgstr ""
+ "%s\n"
+ 
+ #. TODO: remove
+-#: dnf/cli/output.py:1383 dnf/cli/output.py:1932 dnf/cli/output.py:1933
++#: dnf/cli/output.py:1296 dnf/cli/output.py:1814 dnf/cli/output.py:1815
+ msgid "Install"
+ msgstr "インストール"
+ 
+-#: dnf/cli/output.py:1387 dnf/cli/output.py:1941
++#: dnf/cli/output.py:1300 dnf/cli/output.py:1823
+ msgid "Upgrade"
+ msgstr "アップグレード"
+ 
+-#: dnf/cli/output.py:1388
++#: dnf/cli/output.py:1301
+ msgid "Remove"
+ msgstr "削除"
+ 
+-#: dnf/cli/output.py:1390 dnf/cli/output.py:1939
++#: dnf/cli/output.py:1303 dnf/cli/output.py:1821
+ msgid "Downgrade"
+ msgstr "ダウングレード"
+ 
+-#: dnf/cli/output.py:1391
++#: dnf/cli/output.py:1304
+ msgid "Skip"
+ msgstr "スキップ"
+ 
+-#: dnf/cli/output.py:1400 dnf/cli/output.py:1416
++#: dnf/cli/output.py:1313 dnf/cli/output.py:1329
+ msgid "Package"
+ msgid_plural "Packages"
+ msgstr[0] "パッケージ"
+ 
+-#: dnf/cli/output.py:1418
++#: dnf/cli/output.py:1331
+ msgid "Dependent package"
+ msgid_plural "Dependent packages"
+ msgstr[0] "依存パッケージ"
+ 
+-#: dnf/cli/output.py:1497 dnf/cli/output.py:1773 dnf/cli/output.py:1942
+-msgid "Upgraded"
+-msgstr "アップグレード済み"
+-
+-#: dnf/cli/output.py:1498 dnf/cli/output.py:1773 dnf/cli/output.py:1940
+-msgid "Downgraded"
+-msgstr "ダウングレード済み"
+-
+-#: dnf/cli/output.py:1503
+-msgid "Reinstalled"
+-msgstr "再インストール済み"
+-
+-#: dnf/cli/output.py:1504
+-msgid "Skipped"
+-msgstr "スキップ済み"
+-
+-#: dnf/cli/output.py:1505
+-msgid "Removed"
+-msgstr "削除しました"
+-
+-#: dnf/cli/output.py:1508
+-msgid "Failed"
+-msgstr "失敗しました"
+-
+-#: dnf/cli/output.py:1559
++#: dnf/cli/output.py:1439
+ msgid "Total"
+ msgstr "合計"
+ 
+-#: dnf/cli/output.py:1587
++#: dnf/cli/output.py:1467
+ msgid "<unset>"
+ msgstr "<未設定>"
+ 
+-#: dnf/cli/output.py:1588
++#: dnf/cli/output.py:1468
+ msgid "System"
+ msgstr "システム"
+ 
+-#: dnf/cli/output.py:1638
++#: dnf/cli/output.py:1518
+ msgid "Command line"
+ msgstr "コマンドライン"
+ 
+ #. TRANSLATORS: user names who executed transaction in history command output
+-#: dnf/cli/output.py:1649
++#: dnf/cli/output.py:1531
+ msgid "User name"
+ msgstr "ユーザー名"
+ 
+-#: dnf/cli/output.py:1651
++#: dnf/cli/output.py:1533
+ msgid "ID"
+ msgstr "ID"
+ 
+-#: dnf/cli/output.py:1653
++#: dnf/cli/output.py:1535
+ msgid "Date and time"
+ msgstr "日時"
+ 
+-#: dnf/cli/output.py:1654
++#: dnf/cli/output.py:1536
+ msgid "Action(s)"
+ msgstr "動作"
+ 
+-#: dnf/cli/output.py:1655
++#: dnf/cli/output.py:1537
+ msgid "Altered"
+ msgstr "変更されました"
+ 
+-#: dnf/cli/output.py:1698
++#: dnf/cli/output.py:1580
+ msgid "No transactions"
+ msgstr "トランザクションがありません"
+ 
+-#: dnf/cli/output.py:1699 dnf/cli/output.py:1715
++#: dnf/cli/output.py:1581 dnf/cli/output.py:1597
+ msgid "Failed history info"
+ msgstr "失敗した履歴情報"
+ 
+-#: dnf/cli/output.py:1714
++#: dnf/cli/output.py:1596
+ msgid "No transaction ID, or package, given"
+ msgstr "トランザクション ID、またはパッケージが指定されていません"
+ 
+-#: dnf/cli/output.py:1772
++#: dnf/cli/output.py:1654
+ msgid "Erased"
+ msgstr "削除されました"
+ 
+-#: dnf/cli/output.py:1774
++#: dnf/cli/output.py:1655 dnf/cli/output.py:1822 dnf/util.py:616
++msgid "Downgraded"
++msgstr "ダウングレード済み"
++
++#: dnf/cli/output.py:1655 dnf/cli/output.py:1824 dnf/util.py:615
++msgid "Upgraded"
++msgstr "アップグレード済み"
++
++#: dnf/cli/output.py:1656
+ msgid "Not installed"
+ msgstr "インストールされていません"
+ 
+-#: dnf/cli/output.py:1775
++#: dnf/cli/output.py:1657
+ msgid "Newer"
+ msgstr "新しい"
+ 
+-#: dnf/cli/output.py:1775
++#: dnf/cli/output.py:1657
+ msgid "Older"
+ msgstr "古い"
+ 
+-#: dnf/cli/output.py:1823 dnf/cli/output.py:1825
++#: dnf/cli/output.py:1705 dnf/cli/output.py:1707
+ msgid "Transaction ID :"
+ msgstr "トランザクション ID :"
+ 
+-#: dnf/cli/output.py:1828
++#: dnf/cli/output.py:1710
+ msgid "Begin time     :"
+ msgstr "開始時間            :"
+ 
+-#: dnf/cli/output.py:1831 dnf/cli/output.py:1833
++#: dnf/cli/output.py:1713 dnf/cli/output.py:1715
+ msgid "Begin rpmdb    :"
+ msgstr "開始 rpmdb          :"
+ 
+-#: dnf/cli/output.py:1839
++#: dnf/cli/output.py:1721
+ #, python-format
+ msgid "(%u seconds)"
+ msgstr "(%u 秒)"
+ 
+-#: dnf/cli/output.py:1841
++#: dnf/cli/output.py:1723
+ #, python-format
+ msgid "(%u minutes)"
+ msgstr "(%u 分)"
+ 
+-#: dnf/cli/output.py:1843
++#: dnf/cli/output.py:1725
+ #, python-format
+ msgid "(%u hours)"
+ msgstr "(%u 時間)"
+ 
+-#: dnf/cli/output.py:1845
++#: dnf/cli/output.py:1727
+ #, python-format
+ msgid "(%u days)"
+ msgstr "(%u 日)"
+ 
+-#: dnf/cli/output.py:1846
++#: dnf/cli/output.py:1728
+ msgid "End time       :"
+ msgstr "終了時間            :"
+ 
+-#: dnf/cli/output.py:1849 dnf/cli/output.py:1851
++#: dnf/cli/output.py:1731 dnf/cli/output.py:1733
+ msgid "End rpmdb      :"
+ msgstr "終了 rpmdb          :"
+ 
+-#: dnf/cli/output.py:1858 dnf/cli/output.py:1860
++#: dnf/cli/output.py:1740 dnf/cli/output.py:1742
+ msgid "User           :"
+ msgstr "ユーザー            :"
+ 
+-#: dnf/cli/output.py:1864 dnf/cli/output.py:1871
++#: dnf/cli/output.py:1746 dnf/cli/output.py:1753
+ msgid "Aborted"
+ msgstr "中断しました"
+ 
+-#: dnf/cli/output.py:1864 dnf/cli/output.py:1867 dnf/cli/output.py:1869
+-#: dnf/cli/output.py:1871 dnf/cli/output.py:1873 dnf/cli/output.py:1875
++#: dnf/cli/output.py:1746 dnf/cli/output.py:1749 dnf/cli/output.py:1751
++#: dnf/cli/output.py:1753 dnf/cli/output.py:1755 dnf/cli/output.py:1757
+ msgid "Return-Code    :"
+ msgstr "終了コード          :"
+ 
+-#: dnf/cli/output.py:1867 dnf/cli/output.py:1875
++#: dnf/cli/output.py:1749 dnf/cli/output.py:1757
+ msgid "Success"
+ msgstr "成功"
+ 
+-#: dnf/cli/output.py:1869
++#: dnf/cli/output.py:1751
+ msgid "Failures:"
+ msgstr "失敗:"
+ 
+-#: dnf/cli/output.py:1873
++#: dnf/cli/output.py:1755
+ msgid "Failure:"
+ msgstr "失敗しました:"
+ 
+-#: dnf/cli/output.py:1883 dnf/cli/output.py:1885
++#: dnf/cli/output.py:1765 dnf/cli/output.py:1767
+ msgid "Releasever     :"
+ msgstr "Releasever     :"
+ 
+-#: dnf/cli/output.py:1890 dnf/cli/output.py:1892
++#: dnf/cli/output.py:1772 dnf/cli/output.py:1774
+ msgid "Command Line   :"
+ msgstr "コマンドライン      :"
+ 
+-#: dnf/cli/output.py:1897 dnf/cli/output.py:1899
++#: dnf/cli/output.py:1779 dnf/cli/output.py:1781
+ msgid "Comment        :"
+ msgstr "コメント        :"
+ 
+-#: dnf/cli/output.py:1903
++#: dnf/cli/output.py:1785
+ msgid "Transaction performed with:"
+ msgstr "実行されたトランザクション:"
+ 
+-#: dnf/cli/output.py:1912
++#: dnf/cli/output.py:1794
+ msgid "Packages Altered:"
+ msgstr "変更されたパッケージ:"
+ 
+-#: dnf/cli/output.py:1918
++#: dnf/cli/output.py:1800
+ msgid "Scriptlet output:"
+ msgstr "Scriptlet の出力:"
+ 
+-#: dnf/cli/output.py:1925
++#: dnf/cli/output.py:1807
+ msgid "Errors:"
+ msgstr "エラー:"
+ 
+-#: dnf/cli/output.py:1934
++#: dnf/cli/output.py:1816
+ msgid "Dep-Install"
+ msgstr "Dep-Install"
+ 
+-#: dnf/cli/output.py:1935
++#: dnf/cli/output.py:1817
+ msgid "Obsoleted"
+ msgstr "廃止された"
+ 
+-#: dnf/cli/output.py:1936 dnf/transaction.py:84 dnf/transaction.py:85
++#: dnf/cli/output.py:1818 dnf/transaction.py:84 dnf/transaction.py:85
+ msgid "Obsoleting"
+ msgstr "廃止"
+ 
+-#: dnf/cli/output.py:1937
++#: dnf/cli/output.py:1819
+ msgid "Erase"
+ msgstr "削除"
+ 
+-#: dnf/cli/output.py:1938
++#: dnf/cli/output.py:1820
+ msgid "Reinstall"
+ msgstr "再インストール"
+ 
+-#: dnf/cli/output.py:2016
++#: dnf/cli/output.py:1894
+ #, python-format
+ msgid "---> Package %s.%s %s will be installed"
+ msgstr "---> パッケージ %s.%s %s はインストールされます"
+ 
+-#: dnf/cli/output.py:2018
++#: dnf/cli/output.py:1896
+ #, python-format
+ msgid "---> Package %s.%s %s will be an upgrade"
+ msgstr "---> パッケージ %s.%s %s はアップグレードされます"
+ 
+-#: dnf/cli/output.py:2020
++#: dnf/cli/output.py:1898
+ #, python-format
+ msgid "---> Package %s.%s %s will be erased"
+ msgstr "---> パッケージ %s.%s %s は消去されます"
+ 
+-#: dnf/cli/output.py:2022
++#: dnf/cli/output.py:1900
+ #, python-format
+ msgid "---> Package %s.%s %s will be reinstalled"
+ msgstr "---> パッケージ %s.%s %s は再インストールされます"
+ 
+-#: dnf/cli/output.py:2024
++#: dnf/cli/output.py:1902
+ #, python-format
+ msgid "---> Package %s.%s %s will be a downgrade"
+ msgstr "---> パッケージ %s.%s %s はダウングレードされます"
+ 
+-#: dnf/cli/output.py:2026
++#: dnf/cli/output.py:1904
+ #, python-format
+ msgid "---> Package %s.%s %s will be obsoleting"
+ msgstr "---> パッケージ %s.%s %s は廃止となります"
+ 
+-#: dnf/cli/output.py:2028
++#: dnf/cli/output.py:1906
+ #, python-format
+ msgid "---> Package %s.%s %s will be upgraded"
+ msgstr "---> パッケージ %s.%s %s はアップグレードされます"
+ 
+-#: dnf/cli/output.py:2030
++#: dnf/cli/output.py:1908
+ #, python-format
+ msgid "---> Package %s.%s %s will be obsoleted"
+ msgstr "---> パッケージ %s.%s %s は廃止されます"
+ 
+-#: dnf/cli/output.py:2039
++#: dnf/cli/output.py:1917
+ msgid "--> Starting dependency resolution"
+ msgstr "--> 依存関係の解決を開始しました"
+ 
+-#: dnf/cli/output.py:2044
++#: dnf/cli/output.py:1921
+ msgid "--> Finished dependency resolution"
+ msgstr "--> 依存関係の解決が完了しました"
+ 
+-#: dnf/cli/output.py:2058 dnf/crypto.py:132
++#: dnf/cli/output.py:1935 dnf/crypto.py:132
+ #, python-format
+ msgid ""
+ "Importing GPG key 0x%s:\n"
+@@ -3512,16 +3478,14 @@ msgid "Module or Group '%s' does not exist."
+ msgstr "モジュールまたはグループ '%s' は存在しません。"
+ 
+ #: dnf/comps.py:599
+-#, fuzzy, python-format
+-#| msgid "Environment '%s' is not installed."
++#, python-format
+ msgid "Environment id '%s' does not exist."
+-msgstr "環境 '%s' はインストールされていません。"
++msgstr "環境 id '%s' は存在しません。"
+ 
+-#: dnf/comps.py:622 dnf/transaction_sr.py:443 dnf/transaction_sr.py:453
+-#, fuzzy, python-format
+-#| msgid "Environment '%s' is not installed."
++#: dnf/comps.py:622 dnf/transaction_sr.py:477 dnf/transaction_sr.py:487
++#, python-format
+ msgid "Environment id '%s' is not installed."
+-msgstr "環境 '%s' はインストールされていません。"
++msgstr "環境 id '%s' はインストールされていません。"
+ 
+ #: dnf/comps.py:639
+ #, python-format
+@@ -3534,16 +3498,20 @@ msgid "Environment '%s' is not available."
+ msgstr "環境 '%s' は利用不可です。"
+ 
+ #: dnf/comps.py:673
+-#, fuzzy, python-format
+-#| msgid "Group_id '%s' does not exist."
++#, python-format
+ msgid "Group id '%s' does not exist."
+-msgstr "Group_id '%s' は存在しません。"
++msgstr "グループ id '%s' は存在しません。"
+ 
+ #: dnf/conf/config.py:136
+ #, python-format
+ msgid "Error parsing '%s': %s"
+ msgstr "'%s' の解析中にエラーが発生しました: %s"
+ 
++#: dnf/conf/config.py:151
++#, python-format
++msgid "Invalid configuration value: %s=%s in %s; %s"
++msgstr "正しくない設定値: %s=%s in %s; %s"
++
+ #: dnf/conf/config.py:226
+ msgid "Could not set cachedir: {}"
+ msgstr "cachedir を設定できませんでした: {}"
+@@ -3585,36 +3553,36 @@ msgstr "鍵 '%s.%s'、値 '%s' の --setopt を解析中にエラーが発生し
+ msgid "Repo %s did not have a %s attr. before setopt"
+ msgstr "repo %s には setopt の前に %s attr. がありませんでした"
+ 
+-#: dnf/conf/read.py:51
++#: dnf/conf/read.py:60
+ #, python-format
+ msgid "Warning: failed loading '%s', skipping."
+-msgstr "警告:  '%s' のロードに失敗、スキップします。"
++msgstr "警告: '%s' のロードに失敗、スキップします。"
+ 
+-#: dnf/conf/read.py:63
++#: dnf/conf/read.py:72
+ msgid "Bad id for repo: {} ({}), byte = {} {}"
+ msgstr "repo: {} ({}) に正しくないid、 byte = {} {}"
+ 
+-#: dnf/conf/read.py:67
++#: dnf/conf/read.py:76
+ msgid "Bad id for repo: {}, byte = {} {}"
+ msgstr "repo: {} に正しくないid、byte = {} {}"
+ 
+-#: dnf/conf/read.py:75
++#: dnf/conf/read.py:84
+ msgid "Repository '{}' ({}): Error parsing config: {}"
+ msgstr "レポジトリ '{}' ({}): 設定変更エラー: {}"
+ 
+-#: dnf/conf/read.py:78
++#: dnf/conf/read.py:87
+ msgid "Repository '{}': Error parsing config: {}"
+ msgstr "レポジトリ '{}': 設定変更エラー: {}"
+ 
+-#: dnf/conf/read.py:84
++#: dnf/conf/read.py:93
+ msgid "Repository '{}' ({}) is missing name in configuration, using id."
+ msgstr "レポジトリ '{}' ({}) はidを使用した設定内に見つかりません。"
+ 
+-#: dnf/conf/read.py:87
++#: dnf/conf/read.py:96
+ msgid "Repository '{}' is missing name in configuration, using id."
+ msgstr "レポジトリ '{}' idを使用した設定内に見つかりません。"
+ 
+-#: dnf/conf/read.py:104
++#: dnf/conf/read.py:113
+ msgid "Parsing file \"{}\" failed: {}"
+ msgstr "ファイル \"{}\" の解析に失敗しました: {}"
+ 
+@@ -3626,27 +3594,40 @@ msgstr "repo %s: 0x%s はインポート済みです"
+ #: dnf/crypto.py:115
+ #, python-format
+ msgid "repo %s: imported key 0x%s."
+-msgstr "repo %s: インポート済みの鍵 0x%s。"
++msgstr "repo %s: インポート済みのキー 0x%s。"
++
++#: dnf/crypto.py:145
++msgid "Verified using DNS record with DNSSEC signature."
++msgstr "DNSSEC 署名付きの DNS レコードを使用して検証しました。"
++
++#: dnf/crypto.py:147
++msgid "NOT verified using DNS record."
++msgstr "DNS レコードを使用して検証されませんでした。"
+ 
+-#: dnf/db/group.py:293
++#: dnf/crypto.py:184
++#, python-format
++msgid "retrieving repo key for %s unencrypted from %s"
++msgstr "%s から暗号化されていない %s の repo キーを取得しています"
++
++#: dnf/db/group.py:301
+ msgid ""
+ "No available modular metadata for modular package '{}', it cannot be "
+ "installed on the system"
+ msgstr "モジュラーパッケージ '{}' のモジュラーメタデータは利用不可です、システムにインストールはできません"
+ 
+-#: dnf/db/group.py:343
++#: dnf/db/group.py:351
+ msgid "No available modular metadata for modular package"
+ msgstr "モジュラーパッケージ のモジュラーメタデータは利用不可です"
+ 
+-#: dnf/db/group.py:377
++#: dnf/db/group.py:385
+ #, python-format
+ msgid "Will not install a source rpm package (%s)."
+ msgstr "ソース rpm パッケージ (%s) をインストールしません。"
+ 
+ #: dnf/dnssec.py:168
+ msgid ""
+-"Configuration option 'gpgkey_dns_verification' requires libunbound ({})"
+-msgstr "設定オプション 'gpgkey_dns_verification' は libunbound ({}) が必要です"
++"Configuration option 'gpgkey_dns_verification' requires python3-unbound ({})"
++msgstr "設定オプション 'gpgkey_dns_verification' は python3-unbound ({}) が必要です"
+ 
+ #: dnf/dnssec.py:239
+ msgid "DNSSEC extension: Key for user "
+@@ -3710,7 +3691,7 @@ msgid "Modular dependency problem with Defaults:"
+ msgid_plural "Modular dependency problems with Defaults:"
+ msgstr[0] "デフォルトのモジュラー依存問題:"
+ 
+-#: dnf/exceptions.py:131 dnf/module/module_base.py:686
++#: dnf/exceptions.py:131 dnf/module/module_base.py:854
+ msgid "Modular dependency problem:"
+ msgid_plural "Modular dependency problems:"
+ msgstr[0] "モジュラーの依存に関する問題:"
+@@ -3744,7 +3725,47 @@ msgstr "有効なモジュール: {}."
+ msgid "No profile specified for '{}', please specify profile."
+ msgstr "'{}' に指定したプロファイルはありません。プロファイルを指定してください。"
+ 
+-#: dnf/module/module_base.py:33
++#: dnf/module/exceptions.py:27
++msgid "No such module: {}"
++msgstr "次のようなモジュールはありません: {}"
++
++#: dnf/module/exceptions.py:33
++msgid "No such stream: {}"
++msgstr "次のようなストリームはありません: {}"
++
++#: dnf/module/exceptions.py:39
++msgid "No enabled stream for module: {}"
++msgstr "次のモジュールに有効化されたストリームはありません: {}"
++
++#: dnf/module/exceptions.py:46
++msgid "Cannot enable more streams from module '{}' at the same time"
++msgstr "モジュール '{}' から、さらにストリームを同時に有効にできません"
++
++#: dnf/module/exceptions.py:52
++msgid "Different stream enabled for module: {}"
++msgstr "次のモジュールに有効化された異なるストリーム: {}"
++
++#: dnf/module/exceptions.py:58
++msgid "No such profile: {}"
++msgstr "次ようなプロファイルはありません: {}"
++
++#: dnf/module/exceptions.py:64
++msgid "Specified profile not installed for {}"
++msgstr "指定のプロファイルは次にインストールされていません: {}"
++
++#: dnf/module/exceptions.py:70
++msgid "No stream specified for '{}', please specify stream"
++msgstr "'{}' に指定したストリームはありません。ストリームを指定してください"
++
++#: dnf/module/exceptions.py:82
++msgid "No such profile: {}. No profiles available"
++msgstr "次のようなプロファイルはありません: {}。利用できるプロファイルはありません"
++
++#: dnf/module/exceptions.py:88
++msgid "No profile to remove for '{}'"
++msgstr "'{}' の削除するプロファイルがありません"
++
++#: dnf/module/module_base.py:35
+ msgid ""
+ "\n"
+ "\n"
+@@ -3754,7 +3775,7 @@ msgstr ""
+ "\n"
+ "ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled"
+ 
+-#: dnf/module/module_base.py:34
++#: dnf/module/module_base.py:36
+ msgid ""
+ "\n"
+ "\n"
+@@ -3764,80 +3785,98 @@ msgstr ""
+ "\n"
+ "ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled, [a]ctive"
+ 
+-#: dnf/module/module_base.py:54 dnf/module/module_base.py:421
+-#: dnf/module/module_base.py:477 dnf/module/module_base.py:543
++#: dnf/module/module_base.py:56 dnf/module/module_base.py:556
++#: dnf/module/module_base.py:615 dnf/module/module_base.py:681
+ msgid "Ignoring unnecessary profile: '{}/{}'"
+ msgstr "不要なプロファイルを無視します: '{}/{}'"
+ 
+-#: dnf/module/module_base.py:84
++#: dnf/module/module_base.py:86
+ #, python-brace-format
+ msgid "All matches for argument '{0}' in module '{1}:{2}' are not active"
+ msgstr "モジュール '{1}:{2}' の引数 '{0}' に一致するものはすべて非アクティブです"
+ 
+-#: dnf/module/module_base.py:92
++#: dnf/module/module_base.py:94 dnf/module/module_base.py:204
+ #, python-brace-format
+ msgid "Installing module '{0}' from Fail-Safe repository {1} is not allowed"
+ msgstr "フェイルセーフレポジトリー {1} からのモジュール '{0}' インストールは許可されていません"
+ 
+-#: dnf/module/module_base.py:102
++#: dnf/module/module_base.py:104 dnf/module/module_base.py:214
+ msgid ""
+ "Unable to match profile for argument {}. Available profiles for '{}:{}': {}"
+ msgstr "引数 {} でプロファイルが見つかりません。利用可能プロファイル '{}:{}': {}"
+ 
+-#: dnf/module/module_base.py:106
++#: dnf/module/module_base.py:108 dnf/module/module_base.py:218
+ msgid "Unable to match profile for argument {}"
+ msgstr "引数 {} でプロファイルが見つかりません"
+ 
+-#: dnf/module/module_base.py:118
++#: dnf/module/module_base.py:120
+ msgid "No default profiles for module {}:{}. Available profiles: {}"
+ msgstr "モジュール {}:{} にデフォルトのプロファイルがありません。利用可能プロファイル: {}"
+ 
+-#: dnf/module/module_base.py:122
++#: dnf/module/module_base.py:124
+ msgid "No profiles for module {}:{}"
+ msgstr "モジュール {}:{} にプロファイルがありません"
+ 
+-#: dnf/module/module_base.py:129
++#: dnf/module/module_base.py:131
+ msgid "Default profile {} not available in module {}:{}"
+ msgstr "デフォルトのプロファイル {} はモジュール {}:{} で利用不可です"
+ 
+-#: dnf/module/module_base.py:142
++#: dnf/module/module_base.py:144 dnf/module/module_base.py:247
+ msgid "Installing module from Fail-Safe repository is not allowed"
+ msgstr "フェイルセーフレポジトリーからのモジュールインストールは許可されていません"
+ 
+-#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
+-#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
+-#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
+-#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
++#: dnf/module/module_base.py:196
++#, python-brace-format
++msgid "No active matches for argument '{0}' in module '{1}:{2}'"
++msgstr "モジュール '{1}:{2}' の引数 '{0}' には、アクティブな一致がありません"
++
++#: dnf/module/module_base.py:228
++#, python-brace-format
++msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'"
++msgstr "インストールされたプロファイル '{0}' は、モジュール '{1}' ストリーム '{2}' では利用できません"
++
++#: dnf/module/module_base.py:267
++msgid "No packages available to distrosync for package name '{}'"
++msgstr "パッケージ名 '{}' 向けに distrosync するパッケージはありません"
++
++#: dnf/module/module_base.py:310 dnf/module/module_base.py:461
++#: dnf/module/module_base.py:486 dnf/module/module_base.py:505
++#: dnf/module/module_base.py:552 dnf/module/module_base.py:611
++#: dnf/module/module_base.py:677 dnf/module/module_base.py:840
+ msgid "Unable to resolve argument {}"
+ msgstr "引数 {} を解決できません"
+ 
+-#: dnf/module/module_base.py:160
+-msgid "No match for package {}"
+-msgstr "パッケージ {} に一致するものはありません"
+-
+-#: dnf/module/module_base.py:204
++#: dnf/module/module_base.py:321
+ #, python-brace-format
+ msgid "Upgrading module '{0}' from Fail-Safe repository {1} is not allowed"
+ msgstr "フェイルセーフレポジトリー {1} からのモジュール '{0}' アップグレードは許可されていません"
+ 
+-#: dnf/module/module_base.py:223 dnf/module/module_base.py:251
++#: dnf/module/module_base.py:340 dnf/module/module_base.py:368
+ msgid "Unable to match profile in argument {}"
+ msgstr "引数 {} でプロファイルを一致できません"
+ 
+-#: dnf/module/module_base.py:231
++#: dnf/module/module_base.py:348
+ msgid "Upgrading module from Fail-Safe repository is not allowed"
+ msgstr "フェイルセーフレポジトリーからのモジュールアップグレードは許可されていません"
+ 
+-#: dnf/module/module_base.py:367
++#: dnf/module/module_base.py:422
++#, python-brace-format
++msgid ""
++"Argument '{argument}' matches {stream_count} streams ('{streams}') of module"
++" '{module}', but none of the streams are enabled or default"
++msgstr ""
++"引数 '{argument}' は、モジュール '{module}' の {stream_count} ストリーム ('{streams}' "
++"と一致しますが、有効化されている、あるいはデフォルトのストリームはありません"
++
++#: dnf/module/module_base.py:509
+ msgid ""
+ "Only module name is required. Ignoring unneeded information in argument: "
+ "'{}'"
+ msgstr "モジュール名のみが必要です。引数で不必要な情報を無視します: '{}'"
+ 
+-#: dnf/package.py:298
+-#, python-format
+-msgid "%s: %s check failed: %s vs %s"
+-msgstr "%s: %s の確認に失敗しました: %s vs %s"
++#: dnf/module/module_base.py:841
++msgid "No match for package {}"
++msgstr "パッケージ {} に一致するものはありません"
+ 
+ #. empty file is invalid json format
+ #: dnf/persistor.py:54
+@@ -3848,12 +3887,12 @@ msgstr "%s は空のファイルです"
+ #: dnf/persistor.py:91
+ #, python-format
+ msgid "Failed to load expired repos cache: %s"
+-msgstr ""
++msgstr "期限切れのリポジトリーキャッシュのロードに失敗しました: %s"
+ 
+ #: dnf/persistor.py:99
+ #, python-format
+ msgid "Failed to store expired repos cache: %s"
+-msgstr ""
++msgstr "期限切れのリポジトリーキャッシュの保存に失敗しました: %s"
+ 
+ #: dnf/persistor.py:106
+ msgid "Failed storing last makecache time."
+@@ -3873,16 +3912,16 @@ msgstr "ファイルの解析に失敗しました: %s"
+ msgid "Loaded plugins: %s"
+ msgstr "ロードされたプラグイン: %s"
+ 
+-#: dnf/plugin.py:199
++#: dnf/plugin.py:211
+ #, python-format
+ msgid "Failed loading plugin \"%s\": %s"
+ msgstr "plugin \"%s\" のロードに失敗しました: %s"
+ 
+-#: dnf/plugin.py:231
++#: dnf/plugin.py:243
+ msgid "No matches found for the following enable plugin patterns: {}"
+ msgstr "以下有効プラグインパターンが見つかりません: {}"
+ 
+-#: dnf/plugin.py:235
++#: dnf/plugin.py:247
+ msgid "No matches found for the following disable plugin patterns: {}"
+ msgstr "以下無効プラグインパターンが見つかりません: {}"
+ 
+@@ -3911,10 +3950,29 @@ msgstr "%s リポジトリーの有効化"
+ msgid "Added %s repo from %s"
+ msgstr "%s から %s repo を追加しました"
+ 
++#: dnf/rpm/miscutils.py:35
++#, python-brace-format
++msgid ""
++"Using rpmkeys executable from {path} to verify signature for package: "
++"{package}."
++msgstr "{path} から実行可能ファイル rpmkeys を使用して、パッケージの署名を検証します: {package}。"
++
++#: dnf/rpm/miscutils.py:39
++msgid "Cannot find rpmkeys executable to verify signatures."
++msgstr "署名を検証する rpmkeys 実行ファイルが見つかりません。"
++
+ #: dnf/rpm/transaction.py:119
+ msgid "Errors occurred during test transaction."
+ msgstr "テストトランザクション中にエラーが発生しました。"
+ 
++#: dnf/sack.py:47
++msgid ""
++"allow_vendor_change is disabled. This option is currently not supported for "
++"downgrade and distro-sync commands"
++msgstr ""
++"allow_vendor_change は無効になっています。このオプションは、downgrade コマンドおよび distro-sync "
++"コマンドではサポートされていません"
++
+ #. TRANSLATORS: This is for a single package currently being downgraded.
+ #: dnf/transaction.py:80
+ msgctxt "currently"
+@@ -3961,168 +4019,203 @@ msgstr "scriptletの実行中"
+ msgid "Preparing"
+ msgstr "準備"
+ 
+-#: dnf/transaction_sr.py:60
++#: dnf/transaction_sr.py:66
+ #, python-brace-format
+-msgid "Errors in \"{filename}\":"
+-msgstr ""
++msgid ""
++"The following problems occurred while replaying the transaction from file "
++"\"{filename}\":"
++msgstr "ファイル \"{filename}\" からのトランザクションの再生中に以下の問題が発生しました:"
+ 
+-#: dnf/transaction_sr.py:70
+-#, python-brace-format
+-msgid "Error in \"{filename}\": {error}"
+-msgstr ""
++#: dnf/transaction_sr.py:68
++msgid "The following problems occurred while running a transaction:"
++msgstr "トランザクションの実行中に以下の問題が発生しました:"
+ 
+-#: dnf/transaction_sr.py:87
++#: dnf/transaction_sr.py:89
+ #, python-brace-format
+ msgid "Invalid major version \"{major}\", number expected."
+-msgstr ""
++msgstr "無効なメジャーバージョン \"{major}\"。数字が必要です。"
+ 
+-#: dnf/transaction_sr.py:95
++#: dnf/transaction_sr.py:97
+ #, python-brace-format
+ msgid "Invalid minor version \"{minor}\", number expected."
+-msgstr ""
++msgstr "無効なマイナーバージョン \"{minor}\"。数字が必要です。"
+ 
+-#: dnf/transaction_sr.py:101
++#: dnf/transaction_sr.py:103
+ #, python-brace-format
+ msgid ""
+ "Incompatible major version \"{major}\", supported major version is "
+ "\"{major_supp}\"."
+-msgstr ""
++msgstr "互換性のないメジャーバージョン \"{major}\"。サポートされているメジャーバージョンは \"{major_supp}\" です。"
++
++#: dnf/transaction_sr.py:224
++msgid ""
++"Conflicting TransactionReplay arguments have been specified: filename, data"
++msgstr "競合する TransactionReplay 引数が指定されています。filename, data"
+ 
+-#: dnf/transaction_sr.py:244
++#: dnf/transaction_sr.py:265
+ #, python-brace-format
+ msgid "Unexpected type of \"{id}\", {exp} expected."
+-msgstr ""
++msgstr "予期しない {id}\" のタイプ。{exp} が必要です。"
+ 
+-#: dnf/transaction_sr.py:250
++#: dnf/transaction_sr.py:271
+ #, python-brace-format
+ msgid "Missing key \"{key}\"."
+-msgstr ""
++msgstr "\"{key}\" キーがありません。"
+ 
+-#: dnf/transaction_sr.py:263
++#: dnf/transaction_sr.py:285
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in an rpm."
+-msgstr ""
++msgstr "オブジェクトキー \"{key}\" が rpm にありません。"
+ 
+-#: dnf/transaction_sr.py:267
++#: dnf/transaction_sr.py:289
+ #, python-brace-format
+ msgid "Unexpected value of package reason \"{reason}\" for rpm nevra \"{nevra}\"."
+-msgstr ""
++msgstr "rpm nevra \"{nevra}\" の予期しないパッケージ理由 \"{reason}\" の値。"
+ 
+-#: dnf/transaction_sr.py:275
++#: dnf/transaction_sr.py:297
+ #, python-brace-format
+ msgid "Cannot parse NEVRA for package \"{nevra}\"."
+-msgstr ""
++msgstr "パッケージ \"{nevra}\" の NEVRA を解析できません。"
+ 
+-#: dnf/transaction_sr.py:286
++#: dnf/transaction_sr.py:321
+ #, python-brace-format
+ msgid "Cannot find rpm nevra \"{nevra}\"."
+-msgstr ""
++msgstr "rpm nevra \"{nevra}\" を見つけることはできません。"
+ 
+-#: dnf/transaction_sr.py:301
+-#, fuzzy, python-brace-format
+-#| msgid "Package %s is already installed."
++#: dnf/transaction_sr.py:336
++#, python-brace-format
+ msgid "Package \"{na}\" is already installed for action \"{action}\"."
+-msgstr "パッケージ %s は既にインストールされています。"
++msgstr "パッケージ \"{na}\" は、アクション \"{action}\" 用に既にインストールされています。"
+ 
+-#: dnf/transaction_sr.py:311
++#: dnf/transaction_sr.py:345
+ #, python-brace-format
+ msgid ""
+ "Package nevra \"{nevra}\" not available in repositories for action "
+ "\"{action}\"."
+-msgstr ""
++msgstr "アクション \"{action}\" に利用できる パッケージ nevra \"{nevra}\" はレポジトリーにありません。"
+ 
+-#: dnf/transaction_sr.py:322
++#: dnf/transaction_sr.py:356
+ #, python-brace-format
+ msgid "Package nevra \"{nevra}\" not installed for action \"{action}\"."
+-msgstr ""
++msgstr "アクション \"{action}\" には、パッケージ nevra \"{nevra}\" インストールされていません。"
+ 
+-#: dnf/transaction_sr.py:336
++#: dnf/transaction_sr.py:370
+ #, python-brace-format
+ msgid "Unexpected value of package action \"{action}\" for rpm nevra \"{nevra}\"."
+-msgstr ""
++msgstr "rpm nevra \"{nevra}\" の、パッケージアクション \"{action}\" の予期しない値。"
+ 
+-#: dnf/transaction_sr.py:343
+-#, fuzzy, python-format
+-#| msgid "Module or Group '%s' is not available."
++#: dnf/transaction_sr.py:377
++#, python-format
+ msgid "Group id '%s' is not available."
+-msgstr "モジュールまたはグループ '%s' は利用不可です。"
++msgstr "グループ id '%s' は利用できません。"
+ 
+-#: dnf/transaction_sr.py:364
++#: dnf/transaction_sr.py:398
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in groups.packages."
+-msgstr ""
++msgstr "オブジェクトキー \"{key}\" が groups.packages に含まれません。"
+ 
+-#: dnf/transaction_sr.py:377 dnf/transaction_sr.py:387
+-#, fuzzy, python-format
+-#| msgid "Module or Group '%s' is not installed."
++#: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421
++#, python-format
+ msgid "Group id '%s' is not installed."
+-msgstr "モジュールまたはグループ '%s' がインストールされていません。"
++msgstr "グループ id '%s' がインストールされていません。"
+ 
+-#: dnf/transaction_sr.py:398
+-#, fuzzy, python-format
+-#| msgid "Environment '%s' is not available."
++#: dnf/transaction_sr.py:432
++#, python-format
+ msgid "Environment id '%s' is not available."
+-msgstr "環境 '%s' は利用不可です。"
++msgstr "環境 id '%s' は利用できません。"
+ 
+-#: dnf/transaction_sr.py:422
++#: dnf/transaction_sr.py:456
+ #, python-brace-format
+ msgid ""
+ "Invalid value \"{group_type}\" of environments.groups.group_type, only "
+ "\"mandatory\" or \"optional\" is supported."
+ msgstr ""
++"environments.groups.group_type の無効な値 \"{group_type}\"。\"mandatory\" または "
++"\"optional\" のみに対応しています。"
+ 
+-#: dnf/transaction_sr.py:430
++#: dnf/transaction_sr.py:464
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in environments.groups."
+-msgstr ""
++msgstr "オブジェクトキー \"{key}\" が environments.groups に含まれません。"
+ 
+-#: dnf/transaction_sr.py:508
++#: dnf/transaction_sr.py:542
+ #, python-brace-format
+ msgid "Unexpected value of group action \"{action}\" for group \"{group}\"."
+-msgstr ""
++msgstr "グループ \"{group}\" の グループアクション \"{action}\" の予期しない値。"
+ 
+-#: dnf/transaction_sr.py:513
++#: dnf/transaction_sr.py:547
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in a group."
+-msgstr ""
++msgstr "オブジェクトキー \"{key}\" がグループ内にありません。"
+ 
+-#: dnf/transaction_sr.py:537
++#: dnf/transaction_sr.py:571
+ #, python-brace-format
+ msgid "Unexpected value of environment action \"{action}\" for environment \"{env}\"."
+-msgstr ""
++msgstr "環境 \"{env}\" の環境アクション \"{action}\" の予期しない値。"
+ 
+-#: dnf/transaction_sr.py:542
++#: dnf/transaction_sr.py:576
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in an environment."
+-msgstr ""
++msgstr "オブジェクトキー \"{key}\" が環境にありません。"
+ 
+-#: dnf/transaction_sr.py:581
++#: dnf/transaction_sr.py:615
+ #, python-brace-format
+ msgid ""
+ "Package nevra \"{nevra}\", which is not present in the transaction file, was"
+ " pulled into the transaction."
+-msgstr ""
++msgstr "トランザクションファイルに存在しないパッケージ nevra \"{nevra}\" がトランザクションにプルされていました。"
+ 
+ # translation auto-copied from project jbpm-designer, version 6.0.1, document
+ # org.jbpm/jbpm-designer-
+ # api/resources/org/jbpm/designer/resources/i18n/DesignerConstants, author
+ # nmirasch
+-#: dnf/util.py:391 dnf/util.py:393
++#: dnf/util.py:419 dnf/util.py:421
+ msgid "Problem"
+ msgstr "問題"
+ 
+-#: dnf/util.py:444
++#: dnf/util.py:472
+ msgid "TransactionItem not found for key: {}"
+ msgstr "TransactionItemが見つかりません鍵: {}"
+ 
+-#: dnf/util.py:454
++#: dnf/util.py:482
+ msgid "TransactionSWDBItem not found for key: {}"
+ msgstr "TransactionSWDBItemが見つかりません鍵: {}"
+ 
+-#: dnf/util.py:457
++#: dnf/util.py:485
+ msgid "Errors occurred during transaction."
+ msgstr "トランザクション中にエラーが発生しました。"
+ 
++#: dnf/util.py:621
++msgid "Reinstalled"
++msgstr "再インストール済み"
++
++#: dnf/util.py:622
++msgid "Skipped"
++msgstr "スキップ済み"
++
++#: dnf/util.py:623
++msgid "Removed"
++msgstr "削除しました"
++
++#: dnf/util.py:626
++msgid "Failed"
++msgstr "失敗しました"
++
++#~ msgid "%s: %s check failed: %s vs %s"
++#~ msgstr "%s: %s の確認に失敗しました: %s vs %s"
++
++#~ msgid "Action not handled: {}"
++#~ msgstr "動作は対処されていません: {}"
++
++#~ msgid "no package matched"
++#~ msgstr "一致したパッケージはありません。"
++
++#~ msgid "Not found given transaction ID"
++#~ msgstr "指定されたトランザクション ID は見つかりません"
++
++#~ msgid "Undoing transaction {}, from {}"
++#~ msgstr "トランザクション {} を {} から取り消しています"
++
+ #~ msgid "format for displaying found packages"
+ #~ msgstr "見つかったパッケージを表示する形式"
+ 
+diff --git a/po/ko.po b/po/ko.po
+index 449f6130..78e18309 100644
+--- a/po/ko.po
++++ b/po/ko.po
+@@ -1,68 +1,68 @@
+ # MinWoo Joh <igtzhsou@naver.com>, 2015. #zanata
+ # Eun-Ju Kim <eukim@redhat.com>, 2016. #zanata
+ # Ludek Janda <ljanda@redhat.com>, 2018. #zanata, 2020.
++# 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: 2020-09-12 11:29+0000\n"
+-"Last-Translator: Ludek Janda <ljanda@redhat.com>\n"
+-"Language-Team: Korean <https://translate.fedoraproject.org/projects/dnf/dnf-master/ko/>\n"
++"POT-Creation-Date: 2021-08-11 16:00+0200\n"
++"PO-Revision-Date: 2021-08-12 16:04+0000\n"
++"Last-Translator: simmon <simmon@nplob.com>\n"
++"Language-Team: Korean <https://translate.fedoraproject.org/projects/dnf/dnf-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: Weblate 4.2.2\n"
++"X-Generator: Weblate 4.7.2\n"
+ 
+ #: dnf/automatic/emitter.py:32
+ #, python-format
+ msgid "The following updates have been applied on '%s':"
+-msgstr "'%s'에 다음 업데이트가 적용되었습니다:"
++msgstr "다음 최신화가 '%s'에 적용되었습니다:"
+ 
+ #: dnf/automatic/emitter.py:33
+-#, fuzzy, python-format
+-#| msgid "Updates applied on '%s'."
++#, python-format
+ msgid "Updates completed at %s"
+-msgstr "'%s'에 업데이트가 적용 되었습니다."
++msgstr "'%s'에 최신화가 적용 되었습니다"
+ 
+ #: dnf/automatic/emitter.py:34
+ #, python-format
+ msgid "The following updates are available on '%s':"
+-msgstr "'%s'에서 다음 업데이트를 사용할 수 있습니다:"
++msgstr "다음 최신화가 '%s'에서 사용 할 수 있습니다:"
+ 
+ #: dnf/automatic/emitter.py:35
+ #, python-format
+ msgid "The following updates were downloaded on '%s':"
+-msgstr "'%s'에 다음 업데이트가 다운로드되었습니다:"
++msgstr "'%s'에 다음 최신화가 내려받기 되었습니다:"
+ 
+ #: dnf/automatic/emitter.py:83
+ #, python-format
+ msgid "Updates applied on '%s'."
+-msgstr "'%s'에 업데이트가 적용되었습니다."
++msgstr "'%s'에서 적용되어 최신화되었습니다."
+ 
+ #: dnf/automatic/emitter.py:85
+ #, python-format
+ msgid "Updates downloaded on '%s'."
+-msgstr "'%s'에 업데이트가 다운로드되었습니다."
++msgstr "'%s'에 최신화가 내려받기 되었습니다."
+ 
+ #: dnf/automatic/emitter.py:87
+ #, python-format
+ msgid "Updates available on '%s'."
+-msgstr "'%s'에서 업데이트가 가능합니다."
++msgstr "'%s'에서 가능한 최신화입니다."
+ 
+ #: dnf/automatic/emitter.py:110
+ #, python-format
+ msgid "Failed to send an email via '%s': %s"
+-msgstr "'%s'를 통한 이메일 전송을 실패했습니다: %s"
++msgstr "'%s'를 통한 전자우편 전송을 실패했습니다: %s"
+ 
+ #: dnf/automatic/emitter.py:140
+ #, python-format
+ msgid "Failed to execute command '%s': returned %d"
+ msgstr "명령’%s'을 실행하지 못했습니다: %d를 반환했습니다"
+ 
+-#: dnf/automatic/main.py:164 dnf/conf/config.py:151
++#: dnf/automatic/main.py:164
+ #, python-format
+ msgid "Unknown configuration value: %s=%s in %s; %s"
+ msgstr "알 수없는 설정: %s=%s in %s; %s"
+@@ -72,26 +72,26 @@ msgstr "알 수없는 설정: %s=%s in %s; %s"
+ msgid "Unknown configuration option: %s = %s in %s"
+ msgstr "알 수없는 옵션 : %s = %s in %s"
+ 
+-#: dnf/automatic/main.py:237 dnf/cli/cli.py:299
++#: dnf/automatic/main.py:237 dnf/cli/cli.py:305
+ msgid "GPG check FAILED"
+ msgstr "GPG 확인 실패"
+ 
+ #: dnf/automatic/main.py:274
+ msgid "Waiting for internet connection..."
+-msgstr ""
++msgstr "인터넷 연결을 위한 대기..."
+ 
+ #: dnf/automatic/main.py:304
+ msgid "Started dnf-automatic."
+ msgstr "dnf-automatic을 시작했습니다."
+ 
+ #: dnf/automatic/main.py:308
+-#, python-format
+-msgid "Sleep for %s seconds"
+-msgstr "%s 초 동안 절전합니다"
++msgid "Sleep for {} second"
++msgid_plural "Sleep for {} seconds"
++msgstr[0] "{} 초 동안 절전합니다"
+ 
+ #: dnf/automatic/main.py:315
+ msgid "System is off-line."
+-msgstr ""
++msgstr "네트웍 끊김."
+ 
+ #: dnf/automatic/main.py:344 dnf/cli/main.py:59 dnf/cli/main.py:80
+ #: dnf/cli/main.py:83
+@@ -99,442 +99,428 @@ msgstr ""
+ msgid "Error: %s"
+ msgstr "오류: %s"
+ 
+-#: dnf/base.py:146
++#: dnf/base.py:148 dnf/base.py:477 dnf/base.py:479
+ msgid "loading repo '{}' failure: {}"
+-msgstr "repo '{}'의 로드에 실패했습니다 : {}"
++msgstr "repo '{}'의 적재에 실패했습니다 : {}"
+ 
+-#: dnf/base.py:148
++#: dnf/base.py:150
+ msgid "Loading repository '{}' has failed"
+-msgstr "리포지토리 '{}'의 로드에 실패했습니다"
++msgstr "저장소 '{}'의 적재하기가 실패했습니다"
+ 
+-#: dnf/base.py:320
++#: dnf/base.py:327
+ msgid "Metadata timer caching disabled when running on metered connection."
+-msgstr "데이터 통신 연결을 사용할 때 메타 데이터 타이머 캐싱을 비활성화합니다."
++msgstr "데이터 통신 연결을 사용 할 때에 메타 자료 타이머 캐싱을 비활성화합니다."
+ 
+-#: dnf/base.py:325
++#: dnf/base.py:332
+ msgid "Metadata timer caching disabled when running on a battery."
+-msgstr "배터리를 사용할할 때 메타 데이터 타이머 캐싱을 비활성화합니다."
++msgstr "배터리에서 동작 할 때에 메타자료 타이머 캐싱을 비활성화합니다."
+ 
+-#: dnf/base.py:330
++#: dnf/base.py:337
+ msgid "Metadata timer caching disabled."
+-msgstr "메타 데이터 타이머 캐싱이 비활성화되었습니다."
++msgstr "메타자료 타이머 캐싱이 비활성화되었습니다."
+ 
+-#: dnf/base.py:335
++#: dnf/base.py:342
+ msgid "Metadata cache refreshed recently."
+-msgstr "최근에 메타 데이터 캐시가 새로 고쳐졌습니다."
++msgstr "최근에 메타 자료 캐쉬가 새로 고쳐졌습니다."
+ 
+-#: dnf/base.py:341 dnf/cli/commands/__init__.py:91
++#: dnf/base.py:348 dnf/cli/commands/__init__.py:91
+ msgid "There are no enabled repositories in \"{}\"."
+ msgstr "\"{}\"에 사용 가능한 저장소가 없습니다."
+ 
+-#: dnf/base.py:348
++#: dnf/base.py:355
+ #, python-format
+ msgid "%s: will never be expired and will not be refreshed."
+ msgstr "%s: 만료되지 않고 새로 고침되지 않습니다."
+ 
+-#: dnf/base.py:350
++#: dnf/base.py:357
+ #, python-format
+ msgid "%s: has expired and will be refreshed."
+ msgstr "%s: 만료되어 새로 고침됩니다."
+ 
+ #. expires within the checking period:
+-#: dnf/base.py:354
++#: dnf/base.py:361
+ #, python-format
+ msgid "%s: metadata will expire after %d seconds and will be refreshed now"
+-msgstr "%s: 메타 데이터는 %d 초 이후에 만료되며 이제 새로 고침됩니다."
++msgstr "%s: 메타 데이터는 %d 초 이후에 만료되며 이제 새로 고침됩니다"
+ 
+-#: dnf/base.py:358
++#: dnf/base.py:365
+ #, python-format
+ msgid "%s: will expire after %d seconds."
+ msgstr "%s: %d 초 후에 만료됩니다."
+ 
+ #. performs the md sync
+-#: dnf/base.py:364
++#: dnf/base.py:371
+ msgid "Metadata cache created."
+-msgstr "메타 데이터 캐시가 생성되었습니다."
++msgstr "메타 자료 캐쉬가 생성되었습니다."
+ 
+-#: dnf/base.py:397
++#: dnf/base.py:404 dnf/base.py:471
+ #, python-format
+ msgid "%s: using metadata from %s."
+-msgstr "%s: %s에서 메타 데이터 사용 중"
++msgstr "%s: 메타 자료 사용 중 %s."
+ 
+-#: dnf/base.py:409
++#: dnf/base.py:416 dnf/base.py:484
+ #, python-format
+ msgid "Ignoring repositories: %s"
+-msgstr "리포지토리를 무시합니다: %s"
++msgstr "저장소를 무시합니다: %s"
+ 
+-#: dnf/base.py:412
++#: dnf/base.py:419
+ #, python-format
+ msgid "Last metadata expiration check: %s ago on %s."
+-msgstr "마지막 메타 데이터 만료 확인 :%s. %s 이전에 확인"
++msgstr "마지막 메타자료 만료확인 %s 이전인: %s."
+ 
+-#: dnf/base.py:443
++#: dnf/base.py:512
+ msgid ""
+ "The downloaded packages were saved in cache until the next successful "
+ "transaction."
+-msgstr "다운로드된 패키지는 다음 번 성공적인 트랜잭션까지 캐시에 저장됩니다."
++msgstr "내려받기된 꾸러미는 다음 번 성공적인 연결까지 캐쉬에 저장됩니다."
+ 
+-#: dnf/base.py:445
++#: dnf/base.py:514
+ #, python-format
+ msgid "You can remove cached packages by executing '%s'."
+-msgstr "'%s'을/를 실행하여 캐시 패키지를 삭제할 수 있습니다."
++msgstr "'%s' 를 실행하여 캐쉬 꾸러미를 삭제 할 수 있습니다."
+ 
+-#: dnf/base.py:535
++#: dnf/base.py:606
+ #, python-format
+ msgid "Invalid tsflag in config file: %s"
+ msgstr "설정 파일에서 tsflag 사용이 잘못되었습니다: %s"
+ 
+-#: dnf/base.py:591
++#: dnf/base.py:662
+ #, python-format
+ msgid "Failed to add groups file for repository: %s - %s"
+ msgstr "리포지토리의 그룹 파일을 추가하지 못했습니다. %s - %s"
+ 
+-#: dnf/base.py:823
++#: dnf/base.py:904
+ msgid "Running transaction check"
+-msgstr "트랜잭션 확인 실행 중"
++msgstr "연결 확인 실행 중"
+ 
+-#: dnf/base.py:831
++#: dnf/base.py:912
+ msgid "Error: transaction check vs depsolve:"
+-msgstr "오류 : 트랜잭션 확인 및 종속성 해결 오류"
++msgstr "오류: 연결 확인 및 종속성 해결 오류:"
+ 
+-#: dnf/base.py:837
++#: dnf/base.py:918
+ msgid "Transaction check succeeded."
+-msgstr "트랜잭션 확인에 성공했습니다."
++msgstr "연결 확인에 성공했습니다."
+ 
+-#: dnf/base.py:840
++#: dnf/base.py:921
+ msgid "Running transaction test"
+-msgstr "트랜잭션 테스트 실행 중"
++msgstr "연결 시험 실행 중"
+ 
+-#: dnf/base.py:850 dnf/base.py:992
++#: dnf/base.py:931 dnf/base.py:1082
+ msgid "RPM: {}"
+ msgstr "RPM: {}"
+ 
+-#: dnf/base.py:851
++#: dnf/base.py:932
+ msgid "Transaction test error:"
+-msgstr "트랜잭션 테스트 오류:"
++msgstr "연결 시험 오류:"
+ 
+-#: dnf/base.py:862
++#: dnf/base.py:943
+ msgid "Transaction test succeeded."
+-msgstr "트랜잭션 테스트에 성공했습니다."
++msgstr "연결 시험에 성공했습니다."
+ 
+-#: dnf/base.py:883
++#: dnf/base.py:964
+ msgid "Running transaction"
+-msgstr "트랜잭션 실행 중"
++msgstr "연결 실행 중"
+ 
+-#: dnf/base.py:911
++#: dnf/base.py:1001
+ msgid "Disk Requirements:"
+ msgstr "디스크 요구 사항 :"
+ 
+-#: dnf/base.py:914
++#: dnf/base.py:1004
+ #, python-brace-format
+ msgid "At least {0}MB more space needed on the {1} filesystem."
+ msgid_plural "At least {0}MB more space needed on the {1} filesystem."
+ msgstr[0] "{1} 파일 시스템에 최소 {0}MB의 공간이 더 필요합니다."
+ 
+-#: dnf/base.py:921
++#: dnf/base.py:1011
+ msgid "Error Summary"
+ msgstr "오류 요약"
+ 
+-#: dnf/base.py:947
++#: dnf/base.py:1037
+ #, python-brace-format
+ msgid "RPMDB altered outside of {prog}."
+ msgstr "RPMDB는 {prog} 외부에서 변경되었습니다."
+ 
+-#: dnf/base.py:993 dnf/base.py:1001
++#: dnf/base.py:1083 dnf/base.py:1091
+ msgid "Could not run transaction."
+-msgstr "트랜잭션을 실행할 수 없습니다."
++msgstr "연결를 실행 할 수 없습니다."
+ 
+-#: dnf/base.py:996
++#: dnf/base.py:1086
+ msgid "Transaction couldn't start:"
+-msgstr "트랜잭션을 시작할 수 없습니다 :"
++msgstr "연결을 시작 할 수 없습니다 :"
+ 
+-#: dnf/base.py:1010
++#: dnf/base.py:1100
+ #, python-format
+ msgid "Failed to remove transaction file %s"
+-msgstr "%s 트랜잭션 파일을 삭제하지 못했습니다"
++msgstr "%s 연결 파일을 삭제하지 못했습니다"
+ 
+-#: dnf/base.py:1092
++#: dnf/base.py:1182
+ msgid "Some packages were not downloaded. Retrying."
+-msgstr "일부 패키지가 다운로드되지 않았습니다. 다시 시도 중입니다."
++msgstr "일부 꾸러미를 내려받지 못했습니다. 다시 시도합니다."
+ 
+-#: dnf/base.py:1122
++#: dnf/base.py:1212
+ #, python-format
+ msgid "Delta RPMs reduced %.1f MB of updates to %.1f MB (%d.1%% saved)"
+-msgstr "Delta RPM이 %.1f MB의 업데이트를 %.1f MB로 줄였습니다. (%d.1 %% 절약됨)"
++msgstr "델타 RPM이 %.1f MB의 최신화를 %.1f MB로 줄였습니다. (%d.1%% 절약됨)"
+ 
+-#: dnf/base.py:1125
++#: dnf/base.py:1215
+ #, python-format
+ msgid ""
+ "Failed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)"
+-msgstr "Delta RPM은 %.1f MB의 업데이트를 %.1f MB로 줄이는데 실패했습니다. (%d.1 %% 손실됨)"
++msgstr "Delta RPM은 %.1f MB의 최신화를 %.1f MB로 줄이는데 실패했습니다. (%d.1 %% 손실됨)"
+ 
+-#: dnf/base.py:1167
++#: dnf/base.py:1257
+ msgid "Cannot add local packages, because transaction job already exists"
+-msgstr "트랜잭션 작업이 이미 존재하므로 로컬 패키지를 추가할 수 없습니다"
++msgstr "연결 작업이 이미 존재하므로 로컬 꾸러미를 추가할 수 없습니다"
+ 
+-#: dnf/base.py:1181
++#: dnf/base.py:1271
+ msgid "Could not open: {}"
+ msgstr "열 수 없음 : {}"
+ 
+-#: dnf/base.py:1219
++#: dnf/base.py:1309
+ #, python-format
+ msgid "Public key for %s is not installed"
+-msgstr "%s의 공개 키는 설치되어 있지 않습니다."
++msgstr "%s의 공개 키는 설치되어 있지 않습니다"
+ 
+-#: dnf/base.py:1223
++#: dnf/base.py:1313
+ #, python-format
+ msgid "Problem opening package %s"
+-msgstr "%s 패키지를 여는 중에 문제가 발생했습니다"
++msgstr "%s 꾸러미를 여는 중에 문제가 발생했습니다"
+ 
+-#: dnf/base.py:1231
++#: dnf/base.py:1321
+ #, python-format
+ msgid "Public key for %s is not trusted"
+-msgstr "%s의 공개 키는 신뢰할 수 없습니다"
++msgstr "%s의 공개 키는 신뢰 할 수 없습니다"
+ 
+-#: dnf/base.py:1235
++#: dnf/base.py:1325
+ #, python-format
+ msgid "Package %s is not signed"
+-msgstr "%s 패키지가 서명되지 않았습니다"
++msgstr "%s 꾸러미가 서명되지 않았습니다"
+ 
+-#: dnf/base.py:1265
++#: dnf/base.py:1355
+ #, python-format
+ msgid "Cannot remove %s"
+-msgstr "%s을/를 삭제할 수 없습니다."
++msgstr "%s를 삭제 할 수 없습니다"
+ 
+-#: dnf/base.py:1269
++#: dnf/base.py:1359
+ #, python-format
+ msgid "%s removed"
+ msgstr "%s가 삭제되었습니다"
+ 
+-#: dnf/base.py:1549
++#: dnf/base.py:1639
+ msgid "No match for group package \"{}\""
+-msgstr "그룹 패키지 \"{}\"에 일치하는 항목이 없습니다"
++msgstr "그룹 꾸러미 \"{}\"에 일치하는 항목이 없습니다"
+ 
+-#: dnf/base.py:1635
++#: dnf/base.py:1725
+ #, python-format
+ msgid "Adding packages from group '%s': %s"
+-msgstr "'%s' 그룹에서 패키지 추가: %s"
++msgstr "'%s' 그룹에서 꾸러미 추가: %s"
+ 
+-#: dnf/base.py:1658 dnf/cli/cli.py:219 dnf/cli/commands/__init__.py:442
+-#: dnf/cli/commands/__init__.py:499 dnf/cli/commands/__init__.py:592
+-#: dnf/cli/commands/__init__.py:641 dnf/cli/commands/install.py:80
++#: dnf/base.py:1748 dnf/cli/cli.py:221 dnf/cli/commands/__init__.py:437
++#: dnf/cli/commands/__init__.py:494 dnf/cli/commands/__init__.py:587
++#: dnf/cli/commands/__init__.py:636 dnf/cli/commands/install.py:80
+ #: dnf/cli/commands/install.py:103 dnf/cli/commands/install.py:110
+ msgid "Nothing to do."
+-msgstr "처리가 필요하지 않습니다"
++msgstr "처리가 필요하지 않습니다."
+ 
+-#: dnf/base.py:1676
++#: dnf/base.py:1766
+ msgid "No groups marked for removal."
+-msgstr "제거할 패키지 그룹이 없습니다"
++msgstr "제거할 꾸러미 그룹이 없습니다."
+ 
+-#: dnf/base.py:1710
++#: dnf/base.py:1800
+ msgid "No group marked for upgrade."
+-msgstr "업그레이드용으로 표시된 그룹이 없습니다."
++msgstr "향상을 위해 표시된 그룹이 없습니다."
+ 
+-#: dnf/base.py:1925
++#: dnf/base.py:2014
+ #, python-format
+ msgid "Package %s not installed, cannot downgrade it."
+-msgstr "%s 패키지가 설치되어 있지 않기 때문에 다운 그레이드할 수 없습니다."
++msgstr "%s 꾸러미가 설치되어 있지 않기 때문에 하향설치 할 수 없습니다."
+ 
+-#: dnf/base.py:1927 dnf/base.py:1946 dnf/base.py:1959 dnf/base.py:1980
+-#: dnf/base.py:2029 dnf/base.py:2037 dnf/base.py:2172 dnf/cli/cli.py:411
+-#: dnf/cli/commands/__init__.py:425 dnf/cli/commands/__init__.py:482
+-#: dnf/cli/commands/__init__.py:586 dnf/cli/commands/__init__.py:633
+-#: dnf/cli/commands/__init__.py:711 dnf/cli/commands/install.py:147
++#: dnf/base.py:2016 dnf/base.py:2035 dnf/base.py:2048 dnf/base.py:2075
++#: dnf/base.py:2128 dnf/base.py:2136 dnf/base.py:2270 dnf/cli/cli.py:417
++#: dnf/cli/commands/__init__.py:420 dnf/cli/commands/__init__.py:477
++#: dnf/cli/commands/__init__.py:581 dnf/cli/commands/__init__.py:628
++#: dnf/cli/commands/__init__.py:706 dnf/cli/commands/install.py:147
+ #: dnf/cli/commands/reinstall.py:70 dnf/cli/commands/reinstall.py:84
+-#: dnf/cli/commands/upgrade.py:110 dnf/cli/commands/upgrade.py:121
++#: dnf/cli/commands/upgrade.py:105 dnf/cli/commands/upgrade.py:116
+ #, python-format
+ msgid "No match for argument: %s"
+-msgstr "일치하는 인수가 없습니다 : %s"
++msgstr "인수가 일치하지 않습니다: %s"
+ 
+-#: dnf/base.py:1934
++#: dnf/base.py:2023
+ #, python-format
+ msgid "Package %s of lower version already installed, cannot downgrade it."
+-msgstr "%s 패키지의 하위 버전이 이미 설치되어 있으므로 다운 그레이드할 수 없습니다."
++msgstr "%s 꾸러미의 하위 버전이 이미 설치되어 있으므로 다운그레이드 할 수 없습니다."
+ 
+-#: dnf/base.py:1957
++#: dnf/base.py:2046
+ #, python-format
+ msgid "Package %s not installed, cannot reinstall it."
+-msgstr "%s 패키지가 설치되어 있지 않기 때문에 다시 설치할 수 없습니다."
++msgstr "꾸러미 %s가 설치되지 않아서, 다시 설치 할 수 없습니다."
+ 
+-#: dnf/base.py:1972
++#: dnf/base.py:2061
+ #, python-format
+ msgid "File %s is a source package and cannot be updated, ignoring."
+-msgstr "%s 파일은 소스 패키지이며 업데이트할 수 없습니다. 무시합니다."
++msgstr "%s 파일은 소스 꾸러미이며 최신화 할 수 없습니다. 무시합니다."
+ 
+-#: dnf/base.py:1978
++#: dnf/base.py:2072
+ #, python-format
+ msgid "Package %s not installed, cannot update it."
+-msgstr "%s 패키지가 설치되어 있지 않기 때문에 업데이트할 수 없습니다."
++msgstr "%s 꾸러미가 설치되어 있지 않기 때문에 최신화 할 수 없습니다."
+ 
+-#: dnf/base.py:1987
++#: dnf/base.py:2082
+ #, python-format
+ msgid ""
+ "The same or higher version of %s is already installed, cannot update it."
+-msgstr "%s 이상의 버전이 이미 설치되어 있으므로 업데이트할 수 없습니다."
++msgstr "%s 이상의 버전이 이미 설치되어 있으므로 최신화 할 수 없습니다."
+ 
+-#: dnf/base.py:2026 dnf/cli/commands/reinstall.py:81
++#: dnf/base.py:2125 dnf/cli/commands/reinstall.py:81
+ #, python-format
+ msgid "Package %s available, but not installed."
+-msgstr "%s 패키지는 사용할 수는 있지만 설치되어 있지 않습니다."
++msgstr "%s 꾸러미는 사용할 수는 있지만 설치되어 있지 않습니다."
+ 
+-#: dnf/base.py:2032
++#: dnf/base.py:2131
+ #, python-format
+ msgid "Package %s available, but installed for different architecture."
+-msgstr "%s 패키지는 사용 가능하지만 다른 아키텍처 용으로 설치되어 있습니다."
++msgstr "%s 꾸러미는 사용 가능하지만 다른 구조용으로 설치되어 있습니다."
+ 
+-#: dnf/base.py:2057 dnf/base.py:2250 dnf/cli/cli.py:668 dnf/cli/cli.py:699
++#: dnf/base.py:2156
+ #, python-format
+ msgid "No package %s installed."
+-msgstr "%s 패키지는 설치되어 있지 않습니다"
++msgstr "%s 꾸러미는 설치되어 있지 않습니다."
+ 
+-#: dnf/base.py:2075 dnf/cli/commands/install.py:136
++#: dnf/base.py:2174 dnf/cli/commands/install.py:136
+ #: dnf/cli/commands/remove.py:133
+ #, python-format
+ msgid "Not a valid form: %s"
+ msgstr "잘못된 형식: %s"
+ 
+-#: dnf/base.py:2091 dnf/cli/commands/__init__.py:681
+-#: dnf/cli/commands/remove.py:163
++#: dnf/base.py:2189 dnf/cli/commands/__init__.py:676
++#: dnf/cli/commands/remove.py:162
+ msgid "No packages marked for removal."
+-msgstr "제거 대상 패키지가 없습니다."
++msgstr "제거 대상 꾸러미가 없습니다."
+ 
+-#: dnf/base.py:2179 dnf/cli/cli.py:422
++#: dnf/base.py:2277 dnf/cli/cli.py:428
+ #, python-format
+ msgid "Packages for argument %s available, but not installed."
+-msgstr "%s 인수에 대한 패키지를 사용할 수 있지만 설치되어 있지 않습니다."
++msgstr "%s 인수에 대한 꾸러미를 사용할 수 있지만 설치되어 있지 않습니다."
+ 
+-#: dnf/base.py:2184
++#: dnf/base.py:2282
+ #, python-format
+ msgid "Package %s of lowest version already installed, cannot downgrade it."
+-msgstr "%s 패키지의 최하위 버전이 이미 설치되어 있으므로 다운 그레이드할 수 없습니다."
+-
+-#: dnf/base.py:2242
+-msgid "Action not handled: {}"
+-msgstr "작업이 처리되지 않았습니다: {}"
++msgstr "%s 꾸러미의 최하위 버전이 이미 설치되어 있으므로 다운그레이드 할 수 없습니다."
+ 
+-#: dnf/base.py:2256 dnf/cli/cli.py:419 dnf/cli/cli.py:673 dnf/cli/cli.py:703
+-#: dnf/cli/commands/group.py:400 dnf/cli/commands/history.py:169
+-#, python-format
+-msgid "No package %s available."
+-msgstr "사용 가능한 패키지 %s가 없습니다."
+-
+-#: dnf/base.py:2269
+-msgid "no package matched"
+-msgstr "일치하는 패키지가 없습니다."
+-
+-#: dnf/base.py:2290
++#: dnf/base.py:2382
+ msgid "No security updates needed, but {} update available"
+-msgstr "보안 업데이트가 필요하지 않지만 {} 업데이트가 가능합니다"
++msgstr "보안 최신화가 필요하지 않지만, {} 최신화가 가능합니다"
+ 
+-#: dnf/base.py:2292
++#: dnf/base.py:2384
+ msgid "No security updates needed, but {} updates available"
+-msgstr "보안 업데이트는 필요하지 않지만 {} 업데이트가 가능합니다"
++msgstr "보안 최신화는 필요하지 않지만 {} 최신화는 가능합니다"
+ 
+-#: dnf/base.py:2296
++#: dnf/base.py:2388
+ msgid "No security updates needed for \"{}\", but {} update available"
+-msgstr "\"{}\"에는 보안 업데이트가 필요하지 않지만 {} 업데이트가 가능합니다"
++msgstr "\"{}\"에는 보안 최신화가 필요하지 않지만 {} 최신화가 가능합니다"
+ 
+-#: dnf/base.py:2298
++#: dnf/base.py:2390
+ msgid "No security updates needed for \"{}\", but {} updates available"
+-msgstr "\"{}\"에는 보안 업데이트가 필요하지 않지만 {} 업데이트가 가능합니다"
++msgstr "\"{}\"에는 보안 최신화가 필요하지 않지만 {} 최신화가 가능합니다"
+ 
+ #. raise an exception, because po.repoid is not in self.repos
+-#: dnf/base.py:2319
++#: dnf/base.py:2411
+ #, python-format
+ msgid "Unable to retrieve a key for a commandline package: %s"
+-msgstr ""
++msgstr "명령줄 꾸러미: %s 대한 키를 검색 할 수 없습니다"
+ 
+-#: dnf/base.py:2327
++#: dnf/base.py:2419
+ #, python-format
+ msgid ". Failing package is: %s"
+-msgstr "실패한 패키지는 다음과 같습니다. %s"
++msgstr "실패한 꾸러미는 다음과 같습니다. %s"
+ 
+-#: dnf/base.py:2328
++#: dnf/base.py:2420
+ #, python-format
+ msgid "GPG Keys are configured as: %s"
+ msgstr "GPG 키는 다음과 같이 설정되어 있습니다. %s"
+ 
+-#: dnf/base.py:2340
++#: dnf/base.py:2432
+ #, python-format
+ msgid "GPG key at %s (0x%s) is already installed"
+ msgstr "%s (0x%s)의 GPG 키가 이미 설치되어 있습니다"
+ 
+-#: dnf/base.py:2373
++#: dnf/base.py:2468
+ msgid "The key has been approved."
+ msgstr "키가 승인되었습니다."
+ 
+-#: dnf/base.py:2376
++#: dnf/base.py:2471
+ msgid "The key has been rejected."
+ msgstr "키가 거부되었습니다."
+ 
+-#: dnf/base.py:2409
++#: dnf/base.py:2504
+ #, python-format
+ msgid "Key import failed (code %d)"
+ msgstr "키 가져 오기에 실패했습니다 (코드 %d)"
+ 
+-#: dnf/base.py:2411
++#: dnf/base.py:2506
+ msgid "Key imported successfully"
+ msgstr "키 가져오기에 성공했습니다"
+ 
+-#: dnf/base.py:2415
++#: dnf/base.py:2510
+ msgid "Didn't install any keys"
+ msgstr "키를 하나도 설치하지 못했습니다"
+ 
+-#: dnf/base.py:2418
++#: dnf/base.py:2513
+ #, python-format
+ msgid ""
+ "The GPG keys listed for the \"%s\" repository are already installed but they are not correct for this package.\n"
+ "Check that the correct key URLs are configured for this repository."
+ msgstr ""
+-"해당 GPG 키는 \"%s\"저장소가 이미 설치되어 있지만이 패키지에 맞지 않습니다.\n"
++"해당 GPG 키는 \"%s\"저장소가 이미 설치되어 있지만이 꾸러미에 맞지 않습니다.\n"
+ "이 저장소에 대해 올바른 키 URL이 구성되었는지 확인하십시오."
+ 
+-#: dnf/base.py:2429
++#: dnf/base.py:2524
+ msgid "Import of key(s) didn't help, wrong key(s)?"
+ msgstr "가져온 키에 문제가 있습니다. 잘못된 키입니까?"
+ 
+-#: dnf/base.py:2482
++#: dnf/base.py:2577
+ msgid "  * Maybe you meant: {}"
+-msgstr "  * 다음을 의미할 수도 있습니다: {}"
++msgstr "  * 다음을 의미 할 수도 있습니다: {}"
+ 
+-#: dnf/base.py:2514
++#: dnf/base.py:2609
+ msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum"
+-msgstr "로컬 저장소 \"{}\"의 \"{}\"패키지에 잘못된 체크섬이 있습니다"
++msgstr "로컬 저장소 \"{}\"의 \"{}\"꾸러미에 잘못된 체크섬이 있습니다"
+ 
+-#: dnf/base.py:2517
++#: dnf/base.py:2612
+ msgid "Some packages from local repository have incorrect checksum"
+-msgstr "로컬 저장소의 일부 패키지에 잘못된 체크섬이 있습니다"
++msgstr "로컬 저장소의 일부 꾸러미에 잘못된 체크섬이 있습니다"
+ 
+-#: dnf/base.py:2520
++#: dnf/base.py:2615
+ msgid "Package \"{}\" from repository \"{}\" has incorrect checksum"
+-msgstr "저장소 \"{}\"의 패키지 \"{}\"에 잘못된 체크섬이 있습니다"
++msgstr "저장소 \"{}\"의 꾸러미 \"{}\"에 잘못된 체크섬이 있습니다"
+ 
+-#: dnf/base.py:2523
++#: dnf/base.py:2618
+ msgid ""
+ "Some packages have invalid cache, but cannot be downloaded due to \"--"
+ "cacheonly\" option"
+-msgstr "일부 패키지에는 유효하지 않은 캐시가 있지만 \"--cacheonly\"옵션으로 인해 다운로드할 수 없습니다"
++msgstr "일부 꾸러미에는 유효하지 않은 캐쉬가 있지만 \"--cacheonly\"옵션으로 인해 내려받기 할 수 없습니다"
+ 
+-#: dnf/base.py:2541 dnf/base.py:2561
++#: dnf/base.py:2636 dnf/base.py:2656
+ msgid "No match for argument"
+ msgstr "일치하는 인수가 없습니다"
+ 
+-#: dnf/base.py:2549 dnf/base.py:2569
++#: dnf/base.py:2644 dnf/base.py:2664
+ msgid "All matches were filtered out by exclude filtering for argument"
+ msgstr "모든 일치 항목이 인수의 제외 필터로 필터링되었습니다"
+ 
+-#: dnf/base.py:2551
++#: dnf/base.py:2646
+ msgid "All matches were filtered out by modular filtering for argument"
+ msgstr "모든 일치 항목이 인수의 모듈식 필터로 필터링되었습니다"
+ 
+-#: dnf/base.py:2567
++#: dnf/base.py:2662
+ msgid "All matches were installed from a different repository for argument"
+ msgstr "모든 일치 항목이 인수의 다른 리포지토리에서 설치되었습니다"
+ 
+-#: dnf/base.py:2583
++#: dnf/base.py:2709
+ #, python-format
+ msgid "Package %s is already installed."
+-msgstr "패키지 %s이/가 이미 설치되어 있습니다."
++msgstr "꾸러미 %s가 이미 설치되어 있습니다."
+ 
+ #: dnf/cli/aliases.py:96
+ #, python-format
+@@ -551,8 +537,8 @@ msgstr "\"%s\" 파일의 구문 분석에 실패했습니다 : %s"
+ msgid "Cannot read file \"%s\": %s"
+ msgstr "\"%s\" 파일을 읽을 수 없습니다: %s"
+ 
+-#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:902
+-#: dnf/cli/cli.py:906 dnf/cli/commands/alias.py:108
++#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:804
++#: dnf/cli/cli.py:808 dnf/cli/commands/alias.py:108
+ #, python-format
+ msgid "Config error: %s"
+ msgstr "설정 오류: %s"
+@@ -564,17 +550,17 @@ msgstr "별칭에는 무한 재귀가 포함되어 있습니다"
+ #: dnf/cli/aliases.py:209
+ #, python-format
+ msgid "%s, using original arguments."
+-msgstr "%s, 원래 인수를 사용하고 있습니다"
++msgstr "%s, 원래 인수를 사용."
+ 
+ #: dnf/cli/cli.py:137
+ #, python-format
+ msgid "  Installed: %s-%s at %s"
+-msgstr "  설치됨:  %s-%s (일시: %s)"
++msgstr "  설치되었습니다: %s-%s (일시: %s)"
+ 
+ #: dnf/cli/cli.py:139
+ #, python-format
+ msgid "  Built    : %s at %s"
+-msgstr "  빌드됨    :%s (일시: %s)"
++msgstr "  구성 :%s (일시: %s)"
+ 
+ #: dnf/cli/cli.py:147
+ #, python-brace-format
+@@ -583,44 +569,44 @@ msgid ""
+ "stream '{2}'"
+ msgstr "이 작업은 '{0}' 모듈을 '{1}' 스트림에서 ‘{2}' 스트림으로 전환합니다"
+ 
+-#: dnf/cli/cli.py:172
++#: dnf/cli/cli.py:173
+ #, python-brace-format
+ 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 '{prog} module reset <module_name>' command. After you reset the module, you can install the other stream."
++"It is not possible to switch enabled streams of a module unless explicitly enabled via configuration option module_stream_switch.\n"
++"It is recommended to rather remove all installed content from the module, and reset the module using '{prog} module reset <module_name>' command. After you reset the module, you can install the other stream."
+ msgstr ""
+-"활성화된 모듈 스트림을 전환 할 수 없습니다.\n"
++"구성 선택(옵션) module_stream_switch를 통해 명시적으로 활성화하지 않는 한 활성화된 모듈 스트림을 전환 할 수 없습니다.\n"
+ "설치된 모든 내용을 모듈에서 제거하고 ‘{prog} module reset <module_name>' 명령을 사용하여 모듈을 재설정하는 것이 좋습니다. 모듈을 재설정한 후 다른 스트림을 설치할 수 있습니다."
+ 
+-#: dnf/cli/cli.py:210
++#: dnf/cli/cli.py:212
+ #, python-brace-format
+ msgid "{prog} will only download packages for the transaction."
+-msgstr "{prog}은/는 트랜잭션용 패키지 만 다운로드합니다."
++msgstr "{prog}은/는 연결용 꾸러미만 내려받기합니다."
+ 
+-#: dnf/cli/cli.py:213
++#: dnf/cli/cli.py:215
+ #, python-brace-format
+ msgid ""
+ "{prog} will only download packages, install gpg keys, and check the "
+ "transaction."
+-msgstr "{prog}은/는 패키지 만 다운로드하고 gpg 키를 설치하며 트랜잭션을 확인합니다."
++msgstr "{prog}은/는 꾸러미만 내려받기하고 gpg 키를 설치하며 연결을 확인합니다."
+ 
+-#: dnf/cli/cli.py:217
++#: dnf/cli/cli.py:219
+ msgid "Operation aborted."
+-msgstr "작업이 중지됨."
++msgstr "작업이 중지됩니다."
+ 
+-#: dnf/cli/cli.py:224
++#: dnf/cli/cli.py:226
+ msgid "Downloading Packages:"
+-msgstr "패키지 다운로드중:"
++msgstr "꾸러미 내려받기중:"
+ 
+-#: dnf/cli/cli.py:230
++#: dnf/cli/cli.py:232
+ msgid "Error downloading packages:"
+-msgstr "패키지 다운로드중 오류 발생:"
++msgstr "꾸러미 내려받기 중 오류 발생:"
+ 
+-#: dnf/cli/cli.py:258
++#: dnf/cli/cli.py:264
+ msgid "Transaction failed"
+-msgstr "트랜잭션 실패"
++msgstr "연결 실패"
+ 
+-#: dnf/cli/cli.py:281
++#: dnf/cli/cli.py:287
+ msgid ""
+ "Refusing to automatically import keys when running unattended.\n"
+ "Use \"-y\" to override."
+@@ -628,117 +614,96 @@ msgstr ""
+ "키를 자동으로 가져 오는 것을 거부합니다.\n"
+ "동작을 무시하려면 \"-y\"를 사용하십시오."
+ 
+-#: dnf/cli/cli.py:331
++#: dnf/cli/cli.py:337
+ msgid "Changelogs for {}"
+ msgstr "{}의 변경 사항"
+ 
+-#: dnf/cli/cli.py:364 dnf/cli/cli.py:505 dnf/cli/cli.py:511
++#: dnf/cli/cli.py:370 dnf/cli/cli.py:511 dnf/cli/cli.py:517
+ msgid "Obsoleting Packages"
+-msgstr "더 이상 사용되지 않는 패키지"
++msgstr "더 이상 사용되지 않는 꾸러미"
+ 
+-#: dnf/cli/cli.py:393
++#: dnf/cli/cli.py:399
+ msgid "No packages marked for distribution synchronization."
+-msgstr "배포 동기화가 필요한 패키지가 없습니다."
++msgstr "배포 동기화가 필요한 꾸러미가 없습니다."
++
++#: dnf/cli/cli.py:425 dnf/cli/commands/group.py:395
++#, python-format
++msgid "No package %s available."
++msgstr "가용한 꾸러미(package) %s가 없습니다."
+ 
+-#: dnf/cli/cli.py:428
++#: dnf/cli/cli.py:434
+ msgid "No packages marked for downgrade."
+-msgstr "다운 그레이드 대상으로 표시된 패키지가 없습니다."
++msgstr "하향설치 대상으로 표시된 꾸러미가 없습니다."
+ 
+-#: dnf/cli/cli.py:479
++#: dnf/cli/cli.py:485
+ msgid "Installed Packages"
+-msgstr "설치된 패키지"
++msgstr "설치된 꾸러미"
+ 
+-#: dnf/cli/cli.py:487
++#: dnf/cli/cli.py:493
+ msgid "Available Packages"
+-msgstr "사용 가능한 패키지"
++msgstr "사용 가능한 꾸러미"
+ 
+-#: dnf/cli/cli.py:491
++#: dnf/cli/cli.py:497
+ msgid "Autoremove Packages"
+-msgstr "패키지 자동 삭제"
++msgstr "꾸러미 자동 삭제"
+ 
+ # ctx::sourcefile::Systems Navigation Menu
+-#: dnf/cli/cli.py:493
++#: dnf/cli/cli.py:499
+ msgid "Extra Packages"
+-msgstr "추가 패키지"
++msgstr "추가 꾸러미"
+ 
+-#: dnf/cli/cli.py:497
++#: dnf/cli/cli.py:503
+ msgid "Available Upgrades"
+-msgstr "사용 가능한 업그레이드"
++msgstr "사용 가능한 최신화"
+ 
+-#: dnf/cli/cli.py:513
++#: dnf/cli/cli.py:519
+ msgid "Recently Added Packages"
+-msgstr "최근에 추가 된 패키지"
++msgstr "최근에 추가 된 꾸러미"
+ 
+-#: dnf/cli/cli.py:518
++#: dnf/cli/cli.py:523
+ msgid "No matching Packages to list"
+-msgstr "목록과 일치하는 패키지가 없습니다"
++msgstr "목록과 일치하는 꾸러미가 없습니다"
+ 
+-#: dnf/cli/cli.py:599
++#: dnf/cli/cli.py:604
+ msgid "No Matches found"
+ msgstr "검색 결과가 없습니다"
+ 
+-#: dnf/cli/cli.py:609
+-msgid "No transaction ID given"
+-msgstr "지정된 트랜잭션 ID가 없습니다"
+-
+-#: dnf/cli/cli.py:614
+-msgid "Not found given transaction ID"
+-msgstr "주어진 트랜잭션 ID를 찾을 수 없습니다"
+-
+-#: dnf/cli/cli.py:623
+-msgid "Found more than one transaction ID!"
+-msgstr "두 개 이상의 트랜잭션 ID를 찾았습니다!"
+-
+-#: dnf/cli/cli.py:640
+-#, python-format
+-msgid "Transaction history is incomplete, before %u."
+-msgstr "%u이전 트랜잭션 내역이 불완전합니다."
+-
+-#: dnf/cli/cli.py:642
+-#, python-format
+-msgid "Transaction history is incomplete, after %u."
+-msgstr "%u이후 트랜잭션 내역이 불완전합니다."
+-
+-#: dnf/cli/cli.py:689
+-msgid "Undoing transaction {}, from {}"
+-msgstr "{}에서 {} 트랜잭션 실행을 취소하고 있습니다"
+-
+-#: dnf/cli/cli.py:769 dnf/cli/commands/shell.py:237
++#: dnf/cli/cli.py:671 dnf/cli/commands/shell.py:237
+ #, python-format
+ msgid "Unknown repo: '%s'"
+ msgstr "알 수 없는 저장소: '%s'"
+ 
+-#: dnf/cli/cli.py:783
++#: dnf/cli/cli.py:685
+ #, python-format
+ msgid "No repository match: %s"
+ msgstr "일치하는 저장소가 없습니다 : %s"
+ 
+-#: dnf/cli/cli.py:817
++#: dnf/cli/cli.py:719
+ msgid ""
+ "This command has to be run with superuser privileges (under the root user on"
+ " most systems)."
+-msgstr "이 명령은 수퍼 유저 권한으로 실행해야합니다 (대부분의 시스템에서 root 사용자로 실행)."
++msgstr "이 명령은 슈퍼유저 권한으로 실행해야합니다 (대부분의 시스템에서 root 사용자로 실행)."
+ 
+-#: dnf/cli/cli.py:847
++#: dnf/cli/cli.py:749
+ #, python-format
+ msgid "No such command: %s. Please use %s --help"
+ msgstr "명령을 찾을 수 없습니다: %s . %s --help를 사용하십시오"
+ 
+-#: dnf/cli/cli.py:850
++#: dnf/cli/cli.py:752
+ #, python-format, python-brace-format
+ msgid ""
+ "It could be a {PROG} plugin command, try: \"{prog} install 'dnf-"
+ "command(%s)'\""
+ msgstr "{PROG} 플러그인 명령일 수 있습니다: \"{prog} 'dnf-command(%s)'\""
+ 
+-#: dnf/cli/cli.py:854
++#: dnf/cli/cli.py:756
+ #, python-brace-format
+ msgid ""
+ "It could be a {prog} plugin command, but loading of plugins is currently "
+ "disabled."
+ msgstr "{prog} 플러그인 명령일 수 있지만 플러그인 로딩은 현재 비활성화되어 있습니다."
+ 
+-#: dnf/cli/cli.py:912
++#: dnf/cli/cli.py:814
+ msgid ""
+ "--destdir or --downloaddir must be used with --downloadonly or download or "
+ "system-upgrade command."
+@@ -746,7 +711,7 @@ msgstr ""
+ "--destdir 또는 --downloaddir은 --downloadonly 또는 download 또는 system-upgrade 명령과"
+ " 함께 사용해야합니다."
+ 
+-#: dnf/cli/cli.py:918
++#: dnf/cli/cli.py:820
+ msgid ""
+ "--enable, --set-enabled and --disable, --set-disabled must be used with "
+ "config-manager command."
+@@ -754,7 +719,7 @@ msgstr ""
+ "--enable, --set-enabled 및 --disable, --set-disabled는 config-manager 명령과 함께 "
+ "사용해야합니다."
+ 
+-#: dnf/cli/cli.py:1000
++#: dnf/cli/cli.py:902
+ msgid ""
+ "Warning: Enforcing GPG signature check globally as per active RPM security "
+ "policy (see 'gpgcheck' in dnf.conf(5) for how to squelch this message)"
+@@ -762,38 +727,38 @@ msgstr ""
+ "경고: 활성화된 RPM 보안 정책에 따라 GPG 서명 검사를 전체적으로 시행합니다 (이 메시지를 제거하는 방법은 dnf.conf (5)의"
+ " 'gpgcheck' 참조)"
+ 
+-#: dnf/cli/cli.py:1020
++#: dnf/cli/cli.py:922
+ msgid "Config file \"{}\" does not exist"
+-msgstr "\"{}\" 설정 파일이 존재하지 않습니다"
++msgstr "설정 파일 \"{}\" 이 존재하지 않습니다"
+ 
+-#: dnf/cli/cli.py:1040
++#: dnf/cli/cli.py:942
+ msgid ""
+ "Unable to detect release version (use '--releasever' to specify release "
+ "version)"
+-msgstr "릴리스 버전을 찾을 수 없습니다 ('--releasever'를 사용하여 릴리스 버전을 지정하십시오)"
++msgstr "출시 버전을 찾을 수 없습니다 ('--releasever'를 사용하여 출시 버전을 지정하십시오)"
+ 
+-#: dnf/cli/cli.py:1127 dnf/cli/commands/repoquery.py:471
++#: dnf/cli/cli.py:1016 dnf/cli/commands/repoquery.py:471
+ msgid "argument {}: not allowed with argument {}"
+ msgstr "인수 {}: 인수 {}과 함께 사용할 수 없습니다"
+ 
+-#: dnf/cli/cli.py:1134
++#: dnf/cli/cli.py:1023
+ #, python-format
+ msgid "Command \"%s\" already defined"
+ msgstr "\"%s\" 명령이 이미 정의되어 있습니다"
+ 
+-#: dnf/cli/cli.py:1154
++#: dnf/cli/cli.py:1043
+ msgid "Excludes in dnf.conf: "
+ msgstr "dnf.conf에서 제외: "
+ 
+-#: dnf/cli/cli.py:1157
++#: dnf/cli/cli.py:1046
+ msgid "Includes in dnf.conf: "
+ msgstr "dnf.conf에 포함:. "
+ 
+-#: dnf/cli/cli.py:1160
++#: dnf/cli/cli.py:1049
+ msgid "Excludes in repo "
+ msgstr "리포지토리에서 제외 "
+ 
+-#: dnf/cli/cli.py:1163
++#: dnf/cli/cli.py:1052
+ msgid "Includes in repo "
+ msgstr "리포지토리에 포함 "
+ 
+@@ -823,17 +788,18 @@ msgid ""
+ "\n"
+ "For more information contact your distribution or package provider."
+ msgstr ""
+-"GPG 키를 통해 패키지 검사를 활성화했습니다. 이는 적절한 작업 실행입니다. \n"
+-"그러나 GPG 공개 키가 설치되어 있지 않습니다. 설치하려는 패키지의 키를 다운로드하여 설치해야합니다.\n"
++"GPG 키를 통해 꾸러미 검사를 활성화했습니다. 이는 적절한 작업 실행입니다.\n"
++"그러나 GPG 공개 키가 설치되어 있지 않습니다.\n"
++"설치하려는 꾸러미의 키를 내려받기하여 설치해야 합니다.\n"
+ "다음 명령으로 이 작업을 수행할 수 있습니다:\n"
+-"    rpm --import public.gpg.key\n"
++"rpm --import public.gpg.key\n"
+ "\n"
+ "\n"
+-"또는 리포지토리 섹션의 'gpgkey' 옵션을 사용하여 \n"
+-"리포지토리에 사용할 키의 URL을 지정할 수 있으며 {prog}이/가 \n"
+-"이를 설치합니다 \n"
++"또는 저장소 섹션의 'gpgkey' 옵션을 사용하여\n"
++"저장소에 사용할 키의 URL을 지정할 수 있으며 {prog}가\n"
++"이를 설치합니다\n"
+ "\n"
+-"자세한 내용은 배포 또는 패키지 공급 업체에 문의하십시오."
++"자세한 내용은 배포 또는 꾸러미 공급 업체에 문의하십시오."
+ 
+ #: dnf/cli/commands/__init__.py:71
+ #, python-format
+@@ -842,56 +808,56 @@ msgstr "문제 저장소 : %s"
+ 
+ #: dnf/cli/commands/__init__.py:158
+ msgid "display details about a package or group of packages"
+-msgstr "패키지 또는 패키지 그룹에 대한 세부 정보 표시"
++msgstr "꾸러미 또는 꾸러미 그룹에 대한 세부 정보 표시"
+ 
+-#: dnf/cli/commands/__init__.py:168 dnf/cli/commands/__init__.py:740
++#: dnf/cli/commands/__init__.py:168 dnf/cli/commands/__init__.py:735
+ msgid "show all packages (default)"
+-msgstr "모든 패키지 표시 (기본값)"
++msgstr "모든 꾸러미 표시 (기본값)"
+ 
+-#: dnf/cli/commands/__init__.py:171 dnf/cli/commands/__init__.py:743
+-#: dnf/cli/commands/module.py:351
++#: dnf/cli/commands/__init__.py:171 dnf/cli/commands/__init__.py:738
++#: dnf/cli/commands/module.py:376
+ msgid "show only available packages"
+-msgstr "사용 가능한 패키지 만 표시"
++msgstr "사용 가능한 꾸러미만 표시"
+ 
+-#: dnf/cli/commands/__init__.py:174 dnf/cli/commands/__init__.py:746
++#: dnf/cli/commands/__init__.py:174 dnf/cli/commands/__init__.py:741
+ msgid "show only installed packages"
+-msgstr "설치된 패키지 만 표시"
++msgstr "설치된 꾸러미만 보여주기"
+ 
+-#: dnf/cli/commands/__init__.py:177 dnf/cli/commands/__init__.py:749
++#: dnf/cli/commands/__init__.py:177 dnf/cli/commands/__init__.py:744
+ msgid "show only extras packages"
+-msgstr "엑스트라 패키지 만 표시"
++msgstr "엑스트라 꾸러미만 표시"
+ 
+ #: dnf/cli/commands/__init__.py:180 dnf/cli/commands/__init__.py:183
+-#: dnf/cli/commands/__init__.py:752 dnf/cli/commands/__init__.py:755
++#: dnf/cli/commands/__init__.py:747 dnf/cli/commands/__init__.py:750
+ msgid "show only upgrades packages"
+-msgstr "업그레이드 패키지 만 표시"
++msgstr "향상 꾸러미만 표시"
+ 
+-#: dnf/cli/commands/__init__.py:186 dnf/cli/commands/__init__.py:758
++#: dnf/cli/commands/__init__.py:186 dnf/cli/commands/__init__.py:753
+ msgid "show only autoremove packages"
+-msgstr "자동 삭제 패키지 만 표시"
++msgstr "자동 삭제 꾸러미만 표시"
+ 
+-#: dnf/cli/commands/__init__.py:189 dnf/cli/commands/__init__.py:761
++#: dnf/cli/commands/__init__.py:189 dnf/cli/commands/__init__.py:756
+ msgid "show only recently changed packages"
+-msgstr "최근에 변경된 패키지 만 표시"
++msgstr "최근에 변경된 꾸러미만 표시"
+ 
+ #: dnf/cli/commands/__init__.py:190 dnf/cli/commands/__init__.py:265
+-#: dnf/cli/commands/__init__.py:774 dnf/cli/commands/autoremove.py:48
++#: dnf/cli/commands/__init__.py:769 dnf/cli/commands/autoremove.py:48
+ #: dnf/cli/commands/install.py:51 dnf/cli/commands/reinstall.py:44
+ #: dnf/cli/commands/remove.py:61 dnf/cli/commands/upgrade.py:46
+ msgid "PACKAGE"
+-msgstr "패키지"
++msgstr "꾸러미(package)"
+ 
+ #: dnf/cli/commands/__init__.py:193
+ msgid "Package name specification"
+-msgstr "패키지 이름 사양"
++msgstr "꾸러미 이름 사양"
+ 
+ #: dnf/cli/commands/__init__.py:221
+ msgid "list a package or groups of packages"
+-msgstr "패키지 또는 패키지 그룹 나열"
++msgstr "꾸러미 또는 꾸러미 그룹 나열"
+ 
+ #: dnf/cli/commands/__init__.py:235
+ msgid "find what package provides the given value"
+-msgstr "지정된 컨텐츠를 제공하는 패키지 찾기"
++msgstr "지정된 내용을 제공하는 꾸러미 찾기"
+ 
+ #: dnf/cli/commands/__init__.py:239
+ msgid "PROVIDE"
+@@ -903,80 +869,80 @@ msgstr "검색할 사양 제공"
+ 
+ #: dnf/cli/commands/__init__.py:249 dnf/cli/commands/search.py:159
+ msgid "Searching Packages: "
+-msgstr "패키지 검색 : "
++msgstr "꾸러미 검색 : "
+ 
+ #: dnf/cli/commands/__init__.py:258
+ msgid "check for available package upgrades"
+-msgstr "사용 가능한 패키지 업그레이드 확인"
++msgstr "사용 가능한 꾸러미 향상 확인"
+ 
+ #: dnf/cli/commands/__init__.py:264
+ msgid "show changelogs before update"
+-msgstr "업데이트 전에 changelog 표시"
++msgstr "최신화 전에 변경기록 표시"
+ 
+-#: dnf/cli/commands/__init__.py:361 dnf/cli/commands/__init__.py:414
+-#: dnf/cli/commands/__init__.py:470
++#: dnf/cli/commands/__init__.py:356 dnf/cli/commands/__init__.py:409
++#: dnf/cli/commands/__init__.py:465
+ msgid "No package available."
+-msgstr "사용할 수 있는 패키지가 없습니다."
++msgstr "사용할 수 있는 꾸러미가 없습니다."
+ 
+-#: dnf/cli/commands/__init__.py:376
++#: dnf/cli/commands/__init__.py:371
+ msgid "No packages marked for install."
+-msgstr "설치용으로 표시된 패키지가 없습니다."
++msgstr "설치용으로 표시된 꾸러미 없습니다."
+ 
+-#: dnf/cli/commands/__init__.py:412
++#: dnf/cli/commands/__init__.py:407
+ msgid "No package installed."
+-msgstr "설치된 패키지가 없습니다."
++msgstr "설치된 꾸러미가 없습니다."
+ 
+-#: dnf/cli/commands/__init__.py:432 dnf/cli/commands/__init__.py:489
++#: dnf/cli/commands/__init__.py:427 dnf/cli/commands/__init__.py:484
+ #: dnf/cli/commands/reinstall.py:91
+ #, python-format
+ msgid " (from %s)"
+ msgstr " (%s에서)"
+ 
+-#: dnf/cli/commands/__init__.py:433 dnf/cli/commands/__init__.py:490
++#: dnf/cli/commands/__init__.py:428 dnf/cli/commands/__init__.py:485
+ #: dnf/cli/commands/reinstall.py:92 dnf/cli/commands/remove.py:105
+ #, python-format
+ msgid "Installed package %s%s not available."
+-msgstr "설치된 패키지 %s%s 사용 불가."
++msgstr "설치된 꾸러미 %s%s 사용 불가."
+ 
+-#: dnf/cli/commands/__init__.py:467 dnf/cli/commands/__init__.py:576
+-#: dnf/cli/commands/__init__.py:619 dnf/cli/commands/__init__.py:666
++#: dnf/cli/commands/__init__.py:462 dnf/cli/commands/__init__.py:571
++#: dnf/cli/commands/__init__.py:614 dnf/cli/commands/__init__.py:661
+ msgid "No package installed from the repository."
+-msgstr "저장소에서 설치된 패키지가 없습니다."
++msgstr "저장소에서 설치된 꾸러미가 없습니다."
+ 
+-#: dnf/cli/commands/__init__.py:530 dnf/cli/commands/reinstall.py:101
++#: dnf/cli/commands/__init__.py:525 dnf/cli/commands/reinstall.py:101
+ msgid "No packages marked for reinstall."
+-msgstr "다시 설치하도록 표시된 패키지가 없습니다."
++msgstr "다시 설치하도록 표시된 꾸러미가 없습니다."
+ 
+-#: dnf/cli/commands/__init__.py:716 dnf/cli/commands/upgrade.py:89
++#: dnf/cli/commands/__init__.py:711 dnf/cli/commands/upgrade.py:84
+ msgid "No packages marked for upgrade."
+-msgstr "업그레이드할 패키지 없음."
++msgstr "최신화 할 꾸러미 없음."
+ 
+-#: dnf/cli/commands/__init__.py:726
++#: dnf/cli/commands/__init__.py:721
+ msgid "run commands on top of all packages in given repository"
+-msgstr "지정된 저장소의 모든 패키지에 대해 명령을 실행합니다"
++msgstr "지정된 저장소의 모든 꾸러미에 대해 명령을 실행합니다"
+ 
+-#: dnf/cli/commands/__init__.py:765
++#: dnf/cli/commands/__init__.py:760
+ msgid "REPOID"
+ msgstr "REPOID"
+ 
+-#: dnf/cli/commands/__init__.py:765
++#: dnf/cli/commands/__init__.py:760
+ msgid "Repository ID"
+-msgstr "리포지터리 ID"
++msgstr "저장소 ID"
+ 
+-#: dnf/cli/commands/__init__.py:777 dnf/cli/commands/mark.py:48
++#: dnf/cli/commands/__init__.py:772 dnf/cli/commands/mark.py:48
+ #: dnf/cli/commands/updateinfo.py:108
+ msgid "Package specification"
+-msgstr "패키지 사양"
++msgstr "꾸러미 사양"
+ 
+-#: dnf/cli/commands/__init__.py:801
++#: dnf/cli/commands/__init__.py:796
+ msgid "display a helpful usage message"
+ msgstr "유용한 사용법 메시지 표시"
+ 
+-#: dnf/cli/commands/__init__.py:805
++#: dnf/cli/commands/__init__.py:800
+ msgid "COMMAND"
+ msgstr "명령"
+ 
+-#: dnf/cli/commands/__init__.py:806
++#: dnf/cli/commands/__init__.py:801
+ #, python-brace-format
+ msgid "{prog} command to get help for"
+ msgstr "{prog} 명령 도움말 표시"
+@@ -1068,11 +1034,11 @@ msgstr "일치하는 별칭이 없습니다 : %s"
+ #: dnf/cli/commands/autoremove.py:41
+ msgid ""
+ "remove all unneeded packages that were originally installed as dependencies"
+-msgstr "종속성으로 설치된 불필요한 패키지를 모두 제거합니다"
++msgstr "종속성으로 설치된 불필요한 꾸러미를 모두 제거합니다"
+ 
+ #: dnf/cli/commands/autoremove.py:46 dnf/cli/commands/remove.py:59
+ msgid "Package to remove"
+-msgstr "제거할 패키지"
++msgstr "제거할 꾸러미"
+ 
+ #: dnf/cli/commands/check.py:34
+ msgid "check for problems in the packagedb"
+@@ -1092,7 +1058,7 @@ msgstr "중복된 문제를 표시"
+ 
+ #: dnf/cli/commands/check.py:49
+ msgid "show obsoleted packages"
+-msgstr "더 이상 사용되지 않는 패키지 표시"
++msgstr "더 이상 사용되지 않는꾸러미 표시"
+ 
+ #: dnf/cli/commands/check.py:52
+ msgid "show problems with provides"
+@@ -1121,7 +1087,7 @@ msgstr "%s 파일 제거 중"
+ 
+ #: dnf/cli/commands/clean.py:87
+ msgid "remove cached data"
+-msgstr "캐시된 데이터 제거"
++msgstr "캐쉬된 자료 제거"
+ 
+ #: dnf/cli/commands/clean.py:93
+ msgid "Metadata type to clean"
+@@ -1133,7 +1099,7 @@ msgstr "데이터 정리 중:  "
+ 
+ #: dnf/cli/commands/clean.py:111
+ msgid "Cache was expired"
+-msgstr "캐시가 만료되었습니다"
++msgstr "캐쉬가 만료되었습니다"
+ 
+ #: dnf/cli/commands/clean.py:115
+ #, python-format
+@@ -1147,24 +1113,26 @@ msgid "Waiting for process with pid %d to finish."
+ msgstr "PID %d 프로세스가 종료되기를 기다리고 있습니다."
+ 
+ #: dnf/cli/commands/deplist.py:32
+-msgid "List package's dependencies and what packages provide them"
+-msgstr "패키지의 종속성 및 패키지를 제공하는 소스 목록 나열"
++msgid ""
++"[deprecated, use repoquery --deplist] List package's dependencies and what "
++"packages provide them"
++msgstr "[더 이상 사용되지 않음, repoquery --deplist 사용] 꾸러미의 종속성과 이를 제공하는 꾸러미 목록 나열"
+ 
+ #: dnf/cli/commands/distrosync.py:32
+ msgid "synchronize installed packages to the latest available versions"
+-msgstr "설치된 패키지를 사용 가능한 최신 버전으로 동기화합니다"
++msgstr "설치된 꾸러미를 사용 가능한 최신 버전으로 동기화합니다"
+ 
+ #: dnf/cli/commands/distrosync.py:36
+ msgid "Package to synchronize"
+-msgstr "동기화할 패키지"
++msgstr "동기화할 꾸러미"
+ 
+ #: dnf/cli/commands/downgrade.py:34
+ msgid "Downgrade a package"
+-msgstr "패키지 다운그레이드"
++msgstr "꾸러미 하향설치"
+ 
+ #: dnf/cli/commands/downgrade.py:38
+ msgid "Package to downgrade"
+-msgstr "다운그레이드할 패키지"
++msgstr "하향설치 할 꾸러미"
+ 
+ #: dnf/cli/commands/group.py:46
+ msgid "display, or use, the groups information"
+@@ -1174,207 +1142,220 @@ msgstr "그룹 정보를 표시하거나 사용합니다"
+ msgid "No group data available for configured repositories."
+ msgstr "설정된 리포지토리에 사용할 수있는 그룹 데이터가 없습니다."
+ 
+-#: dnf/cli/commands/group.py:129
++#: dnf/cli/commands/group.py:126
+ #, python-format
+ msgid "Warning: Group %s does not exist."
+ msgstr "경고: %s 그룹이 존재하지 않습니다."
+ 
+-#: dnf/cli/commands/group.py:170
++#: dnf/cli/commands/group.py:167
+ msgid "Warning: No groups match:"
+-msgstr "경고: 일치하는 그룹이 없습니다"
++msgstr "경고: 일치하는 그룹이 없습니다:"
+ 
+-#: dnf/cli/commands/group.py:182 dnf/cli/commands/group.py:193
+-#: dnf/cli/output.py:1226
++#: dnf/cli/commands/group.py:179 dnf/cli/commands/group.py:190
++#: dnf/cli/output.py:1139
+ msgid "<name-unset>"
+ msgstr "<name-unset>"
+ 
+-#: dnf/cli/commands/group.py:199
++#: dnf/cli/commands/group.py:196
+ msgid "Available Environment Groups:"
+ msgstr "사용 가능한 환경 그룹 :"
+ 
+-#: dnf/cli/commands/group.py:201
++#: dnf/cli/commands/group.py:198
+ msgid "Installed Environment Groups:"
+ msgstr "설치된 환경 그룹 :"
+ 
+-#: dnf/cli/commands/group.py:208 dnf/cli/commands/group.py:294
++#: dnf/cli/commands/group.py:205 dnf/cli/commands/group.py:291
+ msgid "Installed Groups:"
+ msgstr "설치된 그룹 :"
+ 
+-#: dnf/cli/commands/group.py:215 dnf/cli/commands/group.py:301
++#: dnf/cli/commands/group.py:212 dnf/cli/commands/group.py:298
+ msgid "Installed Language Groups:"
+ msgstr "설치된 언어 그룹 :"
+ 
+-#: dnf/cli/commands/group.py:225 dnf/cli/commands/group.py:308
++#: dnf/cli/commands/group.py:222 dnf/cli/commands/group.py:305
+ msgid "Available Groups:"
+ msgstr "사용 가능한 그룹 :"
+ 
+-#: dnf/cli/commands/group.py:232 dnf/cli/commands/group.py:315
++#: dnf/cli/commands/group.py:229 dnf/cli/commands/group.py:312
+ msgid "Available Language Groups:"
+ msgstr "사용 가능한 언어 그룹 :"
+ 
+-#: dnf/cli/commands/group.py:322
++#: dnf/cli/commands/group.py:319
+ msgid "include optional packages from group"
+-msgstr "그룹의 선택 패키지를 포함합니다"
++msgstr "그룹의 선택 꾸러미를 포함합니다"
+ 
+-#: dnf/cli/commands/group.py:325
++#: dnf/cli/commands/group.py:322
+ msgid "show also hidden groups"
+ msgstr "숨겨진 그룹도 표시합니다"
+ 
+-#: dnf/cli/commands/group.py:327
++#: dnf/cli/commands/group.py:324
+ msgid "show only installed groups"
+ msgstr "설치된 그룹 만 표시합니다"
+ 
+-#: dnf/cli/commands/group.py:329
++#: dnf/cli/commands/group.py:326
+ msgid "show only available groups"
+ msgstr "사용 가능한 그룹 만 표시합니다"
+ 
+-#: dnf/cli/commands/group.py:331
++#: dnf/cli/commands/group.py:328
+ msgid "show also ID of groups"
+ msgstr "그룹 ID 표시"
+ 
+-#: dnf/cli/commands/group.py:333
++#: dnf/cli/commands/group.py:330
+ msgid "available subcommands: {} (default), {}"
+ msgstr "사용 가능한 하위 명령: {} (기본값), {}"
+ 
+-#: dnf/cli/commands/group.py:337
++#: dnf/cli/commands/group.py:334
+ msgid "argument for group subcommand"
+ msgstr "그룹 하위 명령의 인수"
+ 
+-#: dnf/cli/commands/group.py:346
++#: dnf/cli/commands/group.py:343
+ #, python-format
+ msgid "Invalid groups sub-command, use: %s."
+-msgstr "그룹 하위 명령이 잘못되었습니다. %s을/를 사용합니다."
++msgstr "그룹 하위 명령이 잘못되었습니다. %s를 사용합니다."
+ 
+-#: dnf/cli/commands/group.py:403
++#: dnf/cli/commands/group.py:398
+ msgid "Unable to find a mandatory group package."
+-msgstr "필수 그룹 패키지를 찾을 수 없습니다."
++msgstr "필수 그룹 꾸러미를 찾을 수 없습니다."
+ 
+ #: dnf/cli/commands/history.py:48
+ msgid "display, or use, the transaction history"
+-msgstr "트랜잭션 내역 표시 또는 사용"
++msgstr "연결 내역 표시 또는 사용"
+ 
+ #: dnf/cli/commands/history.py:66
+ msgid "For the store command, file path to store the transaction to"
+-msgstr ""
++msgstr "저장 명령을 위해, 트랜젝션을 저장할 파일 경로"
+ 
+ #: dnf/cli/commands/history.py:68
+ msgid ""
+ "For the replay command, don't check for installed packages matching those in"
+ " transaction"
+-msgstr ""
++msgstr "재생명령을 위하여, 연결에 그것들과 일치하는 설치된 꾸러미를 확인하지 마세요"
+ 
+ #: dnf/cli/commands/history.py:71
+ msgid ""
+ "For the replay command, don't check for extra packages pulled into the "
+ "transaction"
+-msgstr ""
++msgstr "응답 명령을 위하여, 연결에 추가 된 꾸러미를 확인하지 마세요"
+ 
+ #: dnf/cli/commands/history.py:74
+ msgid ""
+ "For the replay command, skip packages that are not available or have missing"
+ " dependencies"
+-msgstr ""
++msgstr "지연 명령을 위하여, 사용 할 수 없는 또는 찾을 수 없는 의존성을 갖는 목록 건너띄기"
+ 
+ #: dnf/cli/commands/history.py:94
+ msgid ""
+ "Found more than one transaction ID.\n"
+ "'{}' requires one transaction ID or package name."
+ msgstr ""
+-"둘 이상의 트랜잭션 ID를 찾았습니다.\n"
+-"'{}'에는 하나의 트랜잭션 ID 또는 패키지 이름이 필요합니다."
++"둘 이상의 연결 ID를 찾았습니다.\n"
++"'{}'에는 하나의 연결 ID 또는 꾸러미 이름이 필요합니다."
+ 
+ #: dnf/cli/commands/history.py:101
+-#, fuzzy
+-#| msgid "No transaction ID given"
+ msgid "No transaction file name given."
+-msgstr "주어진 거래 ID가 없습니다."
++msgstr "제공된 트랜젝션 파일 이름이 없습니다."
+ 
+ #: dnf/cli/commands/history.py:103
+-#, fuzzy
+-#| msgid "Failed to remove transaction file %s"
+ msgid "More than one argument given as transaction file name."
+-msgstr "트랜잭션 파일을 제거하지 못했습니다. %s"
++msgstr "연결 파일 이름으로 주어진 하나 이상의 인수 이상."
+ 
+-#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:126
++#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:130
+ msgid "No transaction ID or package name given."
+-msgstr "트랜잭션 ID 또는 패키지 이름이 없습니다."
++msgstr "연결 ID 또는 꾸러미 이름이 없습니다."
+ 
+-#: dnf/cli/commands/history.py:138
++#: dnf/cli/commands/history.py:142
+ #, python-format
+ msgid "You don't have access to the history DB: %s"
+ msgstr "기록 DB에 액세스할 수 없습니다: %s"
+ 
+-#: dnf/cli/commands/history.py:147
++#: dnf/cli/commands/history.py:151
+ #, python-format
+ msgid ""
+ "Cannot undo transaction %s, doing so would result in an inconsistent package"
+ " database."
+-msgstr "%s 트랜잭션을 취소할 수 없습니다. 취소하면 패키지 데이터베이스가 일치하지 않게 됩니다."
++msgstr "%s 연결을 취소 할 수 없습니다. 취소하면 꾸러미 자료 저장소가 일치하지 않게 됩니다."
+ 
+-#: dnf/cli/commands/history.py:152
++#: dnf/cli/commands/history.py:156
+ #, python-format
+ msgid ""
+ "Cannot rollback transaction %s, doing so would result in an inconsistent "
+ "package database."
+-msgstr "%s 트랜잭션을 롤백할 수 없습니다. 이렇게하면 패키지 데이터베이스가 일치하지 않게 됩니다."
++msgstr "%s 연결을 되돌릴 수 없습니다. 이렇게 하면 꾸러미 데이타베이스가 일치하지 않게 됩니다."
++
++#: dnf/cli/commands/history.py:175
++msgid "No transaction ID given"
++msgstr "지정된 연결 ID가 없습니다"
++
++#: dnf/cli/commands/history.py:179
++#, python-brace-format
++msgid "Transaction ID \"{0}\" not found."
++msgstr "Transaction ID \"{0}\" 를 찾을 수 없음."
+ 
+-#: dnf/cli/commands/history.py:222
++#: dnf/cli/commands/history.py:185
++msgid "Found more than one transaction ID!"
++msgstr "두 개 이상의 연결 ID를 찾았습니다!"
++
++#: dnf/cli/commands/history.py:203
++#, python-format
++msgid "Transaction history is incomplete, before %u."
++msgstr "%u이전 연결 내역이 불완전합니다."
++
++#: dnf/cli/commands/history.py:205
++#, python-format
++msgid "Transaction history is incomplete, after %u."
++msgstr "%u 이후 연결 내역이 불완전합니다."
++
++#: dnf/cli/commands/history.py:256
++msgid "No packages to list"
++msgstr "목록에 꾸러미가 없습니다"
++
++#: dnf/cli/commands/history.py:279
+ msgid ""
+ "Invalid transaction ID range definition '{}'.\n"
+ "Use '<transaction-id>..<transaction-id>'."
+ msgstr ""
+-"잘못된 트랜잭션 ID 범위 정의 '{}'. \n"
++"잘못된 연결 ID 범위 정의 '{}'.\n"
+ "'<transaction-id>..<transaction-id>' 사용."
+ 
+-#: dnf/cli/commands/history.py:226
++#: dnf/cli/commands/history.py:283
+ msgid ""
+ "Can't convert '{}' to transaction ID.\n"
+ "Use '<number>', 'last', 'last-<number>'."
+ msgstr ""
+-"'{}'을 (를) 트랜잭션 ID로 변환할 수 없습니다. \n"
++"'{}'을 (를) 연결 ID로 변환 할 수 없습니다.\n"
+ "'<number>', 'last', 'last-<number>' 사용."
+ 
+-#: dnf/cli/commands/history.py:255
++#: dnf/cli/commands/history.py:312
+ msgid "No transaction which manipulates package '{}' was found."
+-msgstr "패키지 '{}'을 (를) 사용하는 트랜잭션이 없습니다."
++msgstr "꾸러미 '{}'를 사용하는 연결이 없습니다."
+ 
+-#: dnf/cli/commands/history.py:305
+-#, python-brace-format
+-msgid "Transaction ID \"{id}\" not found."
+-msgstr ""
+-
+-#: dnf/cli/commands/history.py:313
++#: dnf/cli/commands/history.py:357
+ msgid "{} exists, overwrite?"
+-msgstr ""
++msgstr "{} 존재합니다, 덮어 쓸까요?"
+ 
+-#: dnf/cli/commands/history.py:316
++#: dnf/cli/commands/history.py:360
+ msgid "Not overwriting {}, exiting."
+-msgstr ""
++msgstr "존재하기 때문에, {} 덮어 쓸 수 없습니다."
+ 
+-#: dnf/cli/commands/history.py:323
+-#, fuzzy
+-#| msgid "Transaction test succeeded."
++#: dnf/cli/commands/history.py:367
+ msgid "Transaction saved to {}."
+-msgstr "트랜잭션 테스트가 완료되었습니다."
++msgstr "연결이 {}에 저장되었습니다."
+ 
+-#: dnf/cli/commands/history.py:326
+-#, fuzzy
+-#| msgid "Errors occurred during transaction."
++#: dnf/cli/commands/history.py:370
+ msgid "Error storing transaction: {}"
+-msgstr "거래 중에 오류가 발생했습니다."
++msgstr "저장 중 연결 오류: {}"
+ 
+-#: dnf/cli/commands/history.py:350
+-msgid ""
+-"Warning, the following problems occurred while replaying the transaction:"
+-msgstr ""
++#: dnf/cli/commands/history.py:386
++msgid "Warning, the following problems occurred while running a transaction:"
++msgstr "경고, 연결 동작 중에 다음 문제가 발생하였습니다:"
+ 
+ #: dnf/cli/commands/install.py:47
+ msgid "install a package or packages on your system"
+-msgstr "시스템에 패키지를 설치합니다"
++msgstr "시스템에 꾸러미를 설치합니다"
+ 
+ #: dnf/cli/commands/install.py:53
+ msgid "Package to install"
+-msgstr "설치할 패키지"
++msgstr "설치할 꾸러미"
+ 
+ #: dnf/cli/commands/install.py:118
+ msgid "Unable to find a match"
+@@ -1385,22 +1366,22 @@ msgstr "일치하는 항목을 찾을 수 없습니다"
+ msgid "Not a valid rpm file path: %s"
+ msgstr "올바른 rpm 파일 경로가 아닙니다. %s"
+ 
+-#: dnf/cli/commands/install.py:167
++#: dnf/cli/commands/install.py:166
+ #, python-brace-format
+ msgid "There are following alternatives for \"{0}\": {1}"
+ msgstr "다음은 “{0}\"의 대안입니다. {1}"
+ 
+ #: dnf/cli/commands/makecache.py:37
+ msgid "generate the metadata cache"
+-msgstr "메타 데이터 캐시를 생성합니다"
++msgstr "메타 자료 캐쉬를 생성합니다"
+ 
+ #: dnf/cli/commands/makecache.py:48
+ msgid "Making cache files for all metadata files."
+-msgstr "모든 메타 데이터 파일의 캐시 파일을 만듭니다."
++msgstr "모든 메타 자료 파일의 캐쉬 파일을 만듭니다."
+ 
+ #: dnf/cli/commands/mark.py:39
+ msgid "mark or unmark installed packages as installed by user."
+-msgstr "설치된 패키지를 사용자가 설치한 것으로 표시 또는 표시 해제합니다."
++msgstr "설치된 꾸러미를 사용자가 설치한 것으로 표시 또는 표시 해제합니다."
+ 
+ #: dnf/cli/commands/mark.py:44
+ msgid ""
+@@ -1415,7 +1396,7 @@ msgstr ""
+ #: dnf/cli/commands/mark.py:52
+ #, python-format
+ msgid "%s marked as user installed."
+-msgstr "%s은/는 사용자가 설치한 것으로 표시되었습니다"
++msgstr "%s은사용자가 설치한 것으로 표시."
+ 
+ #: dnf/cli/commands/mark.py:56
+ #, python-format
+@@ -1425,131 +1406,135 @@ msgstr "%s은/는 사용자가 설치한 것으로 표시되지 않았습니다.
+ #: dnf/cli/commands/mark.py:60
+ #, python-format
+ msgid "%s marked as group installed."
+-msgstr "%s은/는 그룹이 설치한 것으로 표시되었습니다"
++msgstr "%s은 그룹으로 설치된 것으로 표시."
+ 
+ #: dnf/cli/commands/mark.py:85 dnf/cli/commands/shell.py:129
+-#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:279
++#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:282
+ msgid "Error:"
+ msgstr "오류:"
+ 
+ #: dnf/cli/commands/mark.py:87
+ #, python-format
+ msgid "Package %s is not installed."
+-msgstr "%s 패키지가 설치되지 않았습니다."
++msgstr "꾸러미 %s가 설치되지 않았습니다."
+ 
+-#: dnf/cli/commands/module.py:51
++#: dnf/cli/commands/module.py:54
+ msgid ""
+ "Only module name, stream, architecture or profile is used. Ignoring unneeded"
+ " information in argument: '{}'"
+-msgstr "모듈 이름, 스트림, 아키텍처 또는 프로파일만 사용됩니다. '{}'인수에서 불필요한 정보는 무시하십시오"
++msgstr "모듈 이름, 스트림, 구조 또는 프로파일만 사용됩니다. '{}'인수에서 불필요한 정보는 무시하십시오"
+ 
+-#: dnf/cli/commands/module.py:77
++#: dnf/cli/commands/module.py:80
+ msgid "list all module streams, profiles and states"
+ msgstr "모든 모듈 스트림, 프로파일 및 상태 나열"
+ 
+-#: dnf/cli/commands/module.py:105 dnf/cli/commands/module.py:128
++#: dnf/cli/commands/module.py:108 dnf/cli/commands/module.py:131
+ msgid "No matching Modules to list"
+ msgstr "일치하는 모듈을 나열할 수 없습니다"
+ 
+-#: dnf/cli/commands/module.py:111
++#: dnf/cli/commands/module.py:114
+ msgid "print detailed information about a module"
+ msgstr "모듈 세부 사항을 인쇄"
+ 
+-#: dnf/cli/commands/module.py:133
++#: dnf/cli/commands/module.py:136
+ msgid "enable a module stream"
+ msgstr "모듈 스트림을 활성화합니다"
+ 
+-#: dnf/cli/commands/module.py:157
++#: dnf/cli/commands/module.py:160
+ msgid "disable a module with all its streams"
+ msgstr "모듈의 모든 스트림을 비활성화합니다"
+ 
+-#: dnf/cli/commands/module.py:181
++#: dnf/cli/commands/module.py:184
+ msgid "reset a module"
+ msgstr "모듈 재설정"
+ 
+-#: dnf/cli/commands/module.py:202
++#: dnf/cli/commands/module.py:205
+ msgid "install a module profile including its packages"
+-msgstr "패키지를 포함한 모듈 프로파일 설치"
++msgstr "꾸러미를 포함한 모듈 프로파일 설치"
+ 
+-#: dnf/cli/commands/module.py:223
++#: dnf/cli/commands/module.py:226
+ msgid "update packages associated with an active stream"
+-msgstr "활성 스트림과 관련된 패키지 업데이트"
++msgstr "활성 스트림과 관련된 꾸러미 최신화"
+ 
+-#: dnf/cli/commands/module.py:240
++#: dnf/cli/commands/module.py:243
+ msgid "remove installed module profiles and their packages"
+-msgstr "설치된 모듈 프로파일과 패키지를 제거"
++msgstr "설치된 모듈 프로파일과 꾸러미를 제거"
+ 
+-#: dnf/cli/commands/module.py:264
++#: dnf/cli/commands/module.py:267
+ msgid "Package {} belongs to multiple modules, skipping"
+-msgstr "{} 패키지는 여러 모듈에 속합니다. 건너 뛰기"
++msgstr "{} 꾸러미는 여러 모듈에 속합니다. 건너 뛰기"
++
++#: dnf/cli/commands/module.py:280
++msgid "switch a module to a stream and distrosync rpm packages"
++msgstr "모듈을 스트림과 distrosync rpm 꾸러미로 전환합니다"
+ 
+-#: dnf/cli/commands/module.py:277
++#: dnf/cli/commands/module.py:302
+ msgid "list modular packages"
+-msgstr "모듈 패키지 목록"
++msgstr "모듈러 꾸러미지 목록"
+ 
+-#: dnf/cli/commands/module.py:292
++#: dnf/cli/commands/module.py:317
+ msgid "list packages belonging to a module"
+-msgstr "모듈에 속하는 패키지를 나열하십시오"
++msgstr "모듈에 속하는 꾸러미를 나열하십시오"
+ 
+-#: dnf/cli/commands/module.py:327
++#: dnf/cli/commands/module.py:352
+ msgid "Interact with Modules."
+ msgstr "모듈과 상호 작용합니다."
+ 
+-#: dnf/cli/commands/module.py:340
++#: dnf/cli/commands/module.py:365
+ msgid "show only enabled modules"
+ msgstr "활성화된 모듈 만 표시"
+ 
+-#: dnf/cli/commands/module.py:343
++#: dnf/cli/commands/module.py:368
+ msgid "show only disabled modules"
+ msgstr "비활성화된 모듈 만 표시"
+ 
+-#: dnf/cli/commands/module.py:346
++#: dnf/cli/commands/module.py:371
+ msgid "show only installed modules or packages"
+-msgstr "설치된 모듈 또는 패키지 만 표시"
++msgstr "설치된 모듈 또는 꾸러미만 표시"
+ 
+-#: dnf/cli/commands/module.py:349
++#: dnf/cli/commands/module.py:374
+ msgid "show profile content"
+ msgstr "프로파일 내용 표시"
+ 
+-#: dnf/cli/commands/module.py:354
++#: dnf/cli/commands/module.py:379
+ msgid "remove all modular packages"
+-msgstr "모든 모듈 패키지 삭제"
++msgstr "모든 모듈 꾸러미 삭제"
+ 
+-#: dnf/cli/commands/module.py:364
++#: dnf/cli/commands/module.py:389
+ msgid "Module specification"
+ msgstr "모듈 사양"
+ 
+-#: dnf/cli/commands/module.py:386
++#: dnf/cli/commands/module.py:411
+ msgid "{} {} {}: too few arguments"
+ msgstr "{} {} {}: 인수가 부족합니다"
+ 
+ #: dnf/cli/commands/reinstall.py:38
+ msgid "reinstall a package"
+-msgstr "패키지 다시 설치"
++msgstr "꾸러미 다시 설치"
+ 
+ #: dnf/cli/commands/reinstall.py:42
+ msgid "Package to reinstall"
+-msgstr "다시 설치할 패키지"
++msgstr "다시 설치할 꾸러미"
+ 
+ #: dnf/cli/commands/remove.py:46
+ msgid "remove a package or packages from your system"
+-msgstr "시스템에서 패키지를 제거합니다"
++msgstr "시스템에서 꾸러미를 제거합니다"
+ 
+ #: dnf/cli/commands/remove.py:53
+ msgid "remove duplicated packages"
+-msgstr "중복된 패키지 제거"
++msgstr "중복된 꾸러미 제거"
+ 
+ #: dnf/cli/commands/remove.py:58
+ msgid "remove installonly packages over the limit"
+-msgstr "오래된 설치 전용 패키지 제거"
++msgstr "오래된 설치 전용 꾸러미 제거"
+ 
+ #: dnf/cli/commands/remove.py:95
+ msgid "No duplicated packages found for removal."
+-msgstr "제거할 중복 패키지가 없습니다."
++msgstr "제거할 중복 꾸러미가 없습니다."
+ 
+ #: dnf/cli/commands/remove.py:127
+ msgid "No old installonly packages found for removal."
+-msgstr "제거할 오래된 설치 전용 패키지가 없습니다."
++msgstr "제거할 오래된 설치 전용 꾸러미가 없습니다."
+ 
+ #: dnf/cli/commands/repolist.py:38 dnf/cli/commands/updateinfo.py:47
+ #: dnf/cli/commands/updateinfo.py:318 dnf/cli/commands/updateinfo.py:364
+@@ -1593,7 +1578,7 @@ msgstr "리포지토리 사양"
+ 
+ #: dnf/cli/commands/repolist.py:125
+ msgid "No repositories available"
+-msgstr "사용 가능한 리포지토리가 없습니다"
++msgstr "사용 가능한 저장소가 없습니다"
+ 
+ #: dnf/cli/commands/repolist.py:143 dnf/cli/commands/repolist.py:144
+ msgid "enabled"
+@@ -1605,87 +1590,87 @@ msgstr "사용 안함"
+ 
+ #: dnf/cli/commands/repolist.py:162
+ msgid "Repo-id            : "
+-msgstr "Repo-id            : "
++msgstr "Repo-id : "
+ 
+ #: dnf/cli/commands/repolist.py:163
+ msgid "Repo-name          : "
+-msgstr "Repo-name          : "
++msgstr "Repo-name : "
+ 
+ #: dnf/cli/commands/repolist.py:166
+ msgid "Repo-status        : "
+-msgstr "Repo-status        : "
++msgstr "Repo-status : "
+ 
+ #: dnf/cli/commands/repolist.py:169
+ msgid "Repo-revision      : "
+-msgstr "Repo-revision      : "
++msgstr "Repo-revision : "
+ 
+ #: dnf/cli/commands/repolist.py:173
+ msgid "Repo-tags          : "
+-msgstr "Repo-tags          : "
++msgstr "Repo-tags  : "
+ 
+ #: dnf/cli/commands/repolist.py:180
+ msgid "Repo-distro-tags      : "
+-msgstr "Repo-distro-tags      : "
++msgstr "Repo-distro-tags : "
+ 
+ #: dnf/cli/commands/repolist.py:192
+ msgid "Repo-updated       : "
+-msgstr "Repo-updated       : "
++msgstr "Repo-updated : "
+ 
+ #: dnf/cli/commands/repolist.py:194
+ msgid "Repo-pkgs          : "
+-msgstr "Repo-pkgs          : "
++msgstr "Repo-pkgs : "
+ 
+ #: dnf/cli/commands/repolist.py:195
+ msgid "Repo-available-pkgs: "
+-msgstr "Repo-available-pkgs: "
++msgstr "저장소-이용 할 수 있는-꾸러미: "
+ 
+ #: dnf/cli/commands/repolist.py:196
+ msgid "Repo-size          : "
+-msgstr "Repo-size          : "
++msgstr "Repo-size : "
+ 
+ #: dnf/cli/commands/repolist.py:199
+ msgid "Repo-metalink      : "
+-msgstr "Repo-metalink      : "
++msgstr "Repo-metalink : "
+ 
+ #: dnf/cli/commands/repolist.py:204
+ msgid "  Updated          : "
+-msgstr "  Updated          : "
++msgstr "  Updated : "
+ 
+ #: dnf/cli/commands/repolist.py:206
+ msgid "Repo-mirrors       : "
+-msgstr "Repo-mirrors       : "
++msgstr "Repo-mirrors : "
+ 
+ #: dnf/cli/commands/repolist.py:210 dnf/cli/commands/repolist.py:216
+ msgid "Repo-baseurl       : "
+-msgstr "Repo-baseurl       : "
++msgstr "Repo-baseurl : "
+ 
+ #: dnf/cli/commands/repolist.py:219
+ msgid "Repo-expire        : "
+-msgstr "Repo-expire        : "
++msgstr "Repo-expire : "
+ 
+ #. TRANSLATORS: Packages that are excluded - their names like (dnf systemd)
+ #: dnf/cli/commands/repolist.py:223
+ msgid "Repo-exclude       : "
+-msgstr "Repo-exclude       : "
++msgstr "Repo-exclude : "
+ 
+ #: dnf/cli/commands/repolist.py:227
+ msgid "Repo-include       : "
+-msgstr "Repo-include       : "
++msgstr "Repo-include : "
+ 
+ #. TRANSLATORS: Number of packages that where excluded (5)
+ #: dnf/cli/commands/repolist.py:232
+ msgid "Repo-excluded      : "
+-msgstr "Repo-excluded      : "
++msgstr "Repo-excluded : "
+ 
+ #: dnf/cli/commands/repolist.py:236
+ msgid "Repo-filename      : "
+-msgstr "Repo-filename      : "
++msgstr "Repo-filename : "
+ 
+ #. Work out the first (id) and last (enabled/disabled/count),
+ #. then chop the middle (name)...
+ #: dnf/cli/commands/repolist.py:246 dnf/cli/commands/repolist.py:273
+ msgid "repo id"
+-msgstr "리포지터리 ID"
++msgstr "레포지터리 ID"
+ 
+ #: dnf/cli/commands/repolist.py:259 dnf/cli/commands/repolist.py:260
+ #: dnf/cli/commands/repolist.py:281
+@@ -1694,25 +1679,25 @@ msgstr "상태"
+ 
+ #: dnf/cli/commands/repolist.py:275 dnf/cli/commands/repolist.py:277
+ msgid "repo name"
+-msgstr "리포지터리 이름"
++msgstr "레포지터리 이름"
+ 
+ #: dnf/cli/commands/repolist.py:291
+ msgid "Total packages: {}"
+-msgstr "총 패키지: {}"
++msgstr "총 꾸러미: {}"
+ 
+ #: dnf/cli/commands/repoquery.py:107
+ msgid "search for packages matching keyword"
+-msgstr "키워드와 일치하는 패키지 검색"
++msgstr "키워드와 일치하는 꾸러미 검색"
+ 
+ #: dnf/cli/commands/repoquery.py:121
+ msgid ""
+ "Query all packages (shorthand for repoquery '*' or repoquery without "
+ "argument)"
+-msgstr "모든 패키지를 쿼리하십시오 (repoquery '*'의 축약형 또는 인수없는 repoquery)"
++msgstr "모든 꾸러미를 쿼리하십시오 (repoquery '*'의 축약형 또는 인수없는 repoquery)"
+ 
+ #: dnf/cli/commands/repoquery.py:124
+ msgid "Query all versions of packages (default)"
+-msgstr "패키지의 모든 버전 쿼리 (기본값)"
++msgstr "꾸러미의 모든 버전 질문 (기본값)"
+ 
+ #: dnf/cli/commands/repoquery.py:127
+ msgid "show only results from this ARCH"
+@@ -1730,7 +1715,7 @@ msgstr "REQ와 충돌하는 결과 만 표시"
+ msgid ""
+ "shows results that requires, suggests, supplements, enhances,or recommends "
+ "package provides and files REQ"
+-msgstr "REQ를 제공하고 파일 패키지를 요구, 제안, 보완, 개선, 권장하는 결과를 표시합니다."
++msgstr "REQ를 제공하고 파일 꾸러미를 요구, 제안, 보완, 개선, 권장하는 결과를 표시합니다"
+ 
+ #: dnf/cli/commands/repoquery.py:139
+ msgid "show only results that obsolete REQ"
+@@ -1742,7 +1727,7 @@ msgstr "REQ를 제공하는 결과 만 표시"
+ 
+ #: dnf/cli/commands/repoquery.py:145
+ msgid "shows results that requires package provides and files REQ"
+-msgstr "REQ를 제공 및 파일 패키지가 필요한 결과를 표시"
++msgstr "REQ를 제공 및 파일 꾸러미가 필요한 결과를 표시"
+ 
+ #: dnf/cli/commands/repoquery.py:148
+ msgid "show only results that recommend REQ"
+@@ -1772,19 +1757,19 @@ msgstr "지정된대로 종속성을 확인. --alldeps와 반대됩니다"
+ msgid ""
+ "used with --whatrequires, and --requires --resolve, query packages "
+ "recursively."
+-msgstr "--whatrequires, --requires --resolve와 함계 사용하여 패키지를 재귀적으로 쿼리합니다."
++msgstr "--whatrequires, --requires --resolve와 함계 사용하여 꾸러미를 재귀적으로 쿼리합니다."
+ 
+ #: dnf/cli/commands/repoquery.py:166
+ msgid "show a list of all dependencies and what packages provide them"
+-msgstr "모든 종속성 목록과 이를 제공하는 패키지를 표시합니다"
++msgstr "모든 종속성 목록과 이를 제공하는꾸러미지를 표시합니다"
+ 
+ #: dnf/cli/commands/repoquery.py:168
+ msgid "resolve capabilities to originating package(s)"
+-msgstr "원래 패키지의 기능을 제공합니다"
++msgstr "원래 꾸러미의 기능을 제공합니다"
+ 
+ #: dnf/cli/commands/repoquery.py:170
+ msgid "show recursive tree for package(s)"
+-msgstr "패키지의 재귀 트리를 표시합니다"
++msgstr "꾸러미의 재귀 트리를 표시합니다"
+ 
+ #: dnf/cli/commands/repoquery.py:172
+ msgid "operate on corresponding source RPM"
+@@ -1794,27 +1779,27 @@ msgstr "해당 소스 RPM에서 작동합니다"
+ msgid ""
+ "show N latest packages for a given name.arch (or latest but N if N is "
+ "negative)"
+-msgstr "지정된 name.arch (또는 N이 음수인 경우 가장 오래된 패키지)에 대한 N 개의 최신 패키지를 표시합니다"
++msgstr "지정된 name.arch (또는 N이 음수인 경우 가장 오래된 꾸러미)에 대한 N 개의 최신 꾸러미를 표시합니다"
+ 
+ #: dnf/cli/commands/repoquery.py:177
+ msgid "list also packages of inactive module streams"
+-msgstr "비활성 모듈 스트림의 패키지 목록"
++msgstr "비활성 모듈 스트림의 꾸러미 목록"
+ 
+ #: dnf/cli/commands/repoquery.py:182
+ msgid "show detailed information about the package"
+-msgstr "패키지에 대한 자세한 정보 표시"
++msgstr "꾸러미에 대한 자세한 정보 표시"
+ 
+ #: dnf/cli/commands/repoquery.py:185
+ msgid "show list of files in the package"
+-msgstr "패키지에 있는 파일 목록 표시"
++msgstr "꾸러미에 있는 파일 목록 표시"
+ 
+ #: dnf/cli/commands/repoquery.py:188
+ msgid "show package source RPM name"
+-msgstr "패키지 소스 RPM 이름 표시"
++msgstr "꾸러미 소스 RPM 이름 표시"
+ 
+ #: dnf/cli/commands/repoquery.py:191
+ msgid "show changelogs of the package"
+-msgstr "패키지의 변경 로그 표시"
++msgstr "꾸러미의 변경 로그 표시"
+ 
+ #: dnf/cli/commands/repoquery.py:194
+ #, python-format, python-brace-format
+@@ -1822,6 +1807,8 @@ msgid ""
+ "display format for listing packages: \"%%{name} %%{version} ...\", use "
+ "--querytags to view full tag list"
+ msgstr ""
++"꾸러미 목록 표시형식 : \"%%{name} %%{version} ...\" 모든 태그 목록을 보여주기 위해 --querytags "
++"사용합니다"
+ 
+ #: dnf/cli/commands/repoquery.py:198
+ msgid "show available tags to use with --queryformat"
+@@ -1831,65 +1818,65 @@ msgstr "--queryformat과 함께 사용할 수 있는 태그를 표시합니다"
+ msgid ""
+ "use name-epoch:version-release.architecture format for displaying found "
+ "packages (default)"
+-msgstr "name-epoch:version-release.architecture 형식을 사용하여 검색된 패키지를 표시합니다 (기본값)"
++msgstr "name-epoch:version-release.architecture 형식을 사용하여 검색된 꾸러미를 표시합니다 (기본값)"
+ 
+ #: dnf/cli/commands/repoquery.py:205
+ msgid ""
+ "use name-version-release format for displaying found packages (rpm query "
+ "default)"
+-msgstr "name-version-release 형식을 사용하여 검색된 패키지를 표시합니다 (rpm 쿼리 기본값)"
++msgstr "name-version-release 형식을 사용하여 검색된 꾸러미를 표시합니다 (rpm 쿼리 기본값)"
+ 
+ #: dnf/cli/commands/repoquery.py:211
+ msgid ""
+ "use epoch:name-version-release.architecture format for displaying found "
+ "packages"
+-msgstr "epoch : name-version-release.architecture 형식을 사용하여 검색된 패키지를 표시합니다"
++msgstr "epoch : name-version-release.architecture 형식을 사용하여 검색된 꾸러미를 표시합니다"
+ 
+ #: dnf/cli/commands/repoquery.py:214
+ msgid "Display in which comps groups are presented selected packages"
+-msgstr "선택한 패키지에 제시된 comps 그룹 표시"
++msgstr "선택한 꾸러미에 제시된 comps 그룹 표시"
+ 
+ #: dnf/cli/commands/repoquery.py:218
+ msgid "limit the query to installed duplicate packages"
+-msgstr "설치된 중복 패키지로 쿼리 제한"
++msgstr "설치된 중복 꾸러미로 쿼리 제한"
+ 
+ #: dnf/cli/commands/repoquery.py:225
+ msgid "limit the query to installed installonly packages"
+-msgstr "설치된 설치 전용 패키지로 쿼리 제한"
++msgstr "설치된 설치 전용 꾸러미로 쿼리 제한"
+ 
+ #: dnf/cli/commands/repoquery.py:228
+ msgid "limit the query to installed packages with unsatisfied dependencies"
+-msgstr "설치된 충족되지 않은 종속성이있는 패키지로 쿼리 제한"
++msgstr "설치된 충족되지 않은 종속성이있는 꾸러미로 쿼리 제한"
+ 
+ #: dnf/cli/commands/repoquery.py:230
+ msgid "show a location from where packages can be downloaded"
+-msgstr "패키지를 다운로드할 위치 표시"
++msgstr "꾸러미를 내려받기 할 위치 표시"
+ 
+ #: dnf/cli/commands/repoquery.py:233
+ msgid "Display capabilities that the package conflicts with."
+-msgstr "패키지와 충돌하는 기능을 표시합니다."
++msgstr "꾸러미와 충돌하는 기능을 표시합니다."
+ 
+ #: dnf/cli/commands/repoquery.py:234
+ msgid ""
+ "Display capabilities that the package can depend on, enhance, recommend, "
+ "suggest, and supplement."
+-msgstr "패키지가 종속 기능 강화, 개선, 권장, 제안 및 보완할 수 있는 기능을 표시합니다."
++msgstr "꾸러미가 종속 기능 강화, 개선, 권장, 제안 및 보완할 수 있는 기능을 표시합니다."
+ 
+ #: dnf/cli/commands/repoquery.py:236
+ msgid "Display capabilities that the package can enhance."
+-msgstr "패키지를 확장할 수 있는 기능을 표시합니다."
++msgstr "꾸러미를 확장 할 수 있는 기능을 표시합니다."
+ 
+ #: dnf/cli/commands/repoquery.py:237
+ msgid "Display capabilities provided by the package."
+-msgstr "패키지가 제공하는 기능을 표시합니다."
++msgstr "꾸러미가 제공하는 기능을 표시합니다."
+ 
+ #: dnf/cli/commands/repoquery.py:238
+ msgid "Display capabilities that the package recommends."
+-msgstr "패키지에서 권장하는 기능을 표시합니다."
++msgstr "꾸러미에서 권장하는 기능을 표시합니다."
+ 
+ #: dnf/cli/commands/repoquery.py:239
+ msgid "Display capabilities that the package depends on."
+-msgstr "패키지가 의존하는 기능을 표시합니다."
++msgstr "꾸러미가 의존하는 기능을 표시합니다."
+ 
+ #: dnf/cli/commands/repoquery.py:240
+ #, python-format
+@@ -1898,49 +1885,49 @@ msgid ""
+ "running %%pre and %%post scriptlets. If the package is installed display "
+ "capabilities that is depends for %%pre, %%post, %%preun and %%postun."
+ msgstr ""
+-"패키지가 설치되어 있지 않은 경우 %%pre 과 %%post 스크립트를 실행할 수 있는 기능이 표시됩니다. 패키지가 설치되어있는 경우 "
+-"%%pre, %%post , %%preun, %%postun에 종속된 기능이 표시됩니다."
++"꾸러미가 설치되어 있지 않은 경우 %%pre 과 %%post 스크립트를 실행할 수 있는 기능이 표시됩니다. 꾸러미가 설치 되어 있는 경우"
++" %%pre, %%post , %%preun, %%postun에 종속된 기능이 표시됩니다."
+ 
+ #: dnf/cli/commands/repoquery.py:243
+ msgid "Display capabilities that the package suggests."
+-msgstr "패키지에서 제안하는 기능을 표시합니다."
++msgstr "꾸러미에서 제안하는 기능을 표시합니다."
+ 
+ #: dnf/cli/commands/repoquery.py:244
+ msgid "Display capabilities that the package can supplement."
+-msgstr "패키지가 보완할 수있는 기능을 표시합니다."
++msgstr "꾸러미가 보완할 수있는 기능을 표시합니다."
+ 
+ #: dnf/cli/commands/repoquery.py:250
+ msgid "Display only available packages."
+-msgstr "사용 가능한 패키지 만 표시합니다."
++msgstr "사용 가능한 꾸러미만 표시합니다."
+ 
+ #: dnf/cli/commands/repoquery.py:253
+ msgid "Display only installed packages."
+-msgstr "설치된 패키지 만 표시합니다."
++msgstr "설치된 꾸러미만 표시합니다."
+ 
+ #: dnf/cli/commands/repoquery.py:254
+ msgid ""
+ "Display only packages that are not present in any of available repositories."
+-msgstr "사용 가능한 리포지토리에없는 패키지 만 표시합니다."
++msgstr "사용 가능한 저장소에 없는 꾸러미만 표시합니다."
+ 
+ #: dnf/cli/commands/repoquery.py:255
+ msgid ""
+ "Display only packages that provide an upgrade for some already installed "
+ "package."
+-msgstr "이미 설치된 일부 패키지에 대한 업그레이드를 제공하는 패키지 만 표시합니다."
++msgstr "이미 설치된 일부 꾸러미에 대한 향상를 제공하는 꾸러미만 표시합니다."
+ 
+ #: dnf/cli/commands/repoquery.py:256
+ #, python-brace-format
+ msgid ""
+ "Display only packages that can be removed by \"{prog} autoremove\" command."
+-msgstr "\"{prog} autoremove\" 명령으로 제거할 수 있는 패키지 만 표시합니다."
++msgstr "\"{prog} autoremove\" 명령으로 제거할 수 있는 꾸러미만 표시합니다."
+ 
+ #: dnf/cli/commands/repoquery.py:258
+ msgid "Display only packages that were installed by user."
+-msgstr "사용자가 설치한 패키지 만 표시합니다."
++msgstr "사용자가 설치한 꾸러미만 표시합니다."
+ 
+ #: dnf/cli/commands/repoquery.py:270
+ msgid "Display only recently edited packages"
+-msgstr "최근에 수정한 패키지 만 표시합니다"
++msgstr "최근에 수정한 꾸러미만 표시합니다"
+ 
+ #: dnf/cli/commands/repoquery.py:273
+ msgid "the key to search for"
+@@ -1962,8 +1949,8 @@ msgid ""
+ "with '--alldeps', but not with '--exactdeps'), or with '--requires <REQ> "
+ "--resolve'"
+ msgstr ""
+-"옵션 '--reative'를  '--whatrequires <REQ>' (선택 옵션으로 '--exactdeps' 대신 '--"
+-"alldeps'와 함께 사용), 또는 '--requires <REQ> --resolve'와 함께 사용해야 합니다."
++"옵션 '--reative'를 '--whatrequires <REQ>' (선택 옵션으로 '--exactdeps' 대신 '--"
++"alldeps'와 함께 사용), 또는 '--requires <REQ> --resolve'와 함께 사용해야 합니다"
+ 
+ #: dnf/cli/commands/repoquery.py:312
+ msgid "argument {} requires --whatrequires or --whatdepends option"
+@@ -1971,7 +1958,7 @@ msgstr "인수 {}에는 --whatrequires 또는 --whatdepends 옵션이 필요합
+ 
+ #: dnf/cli/commands/repoquery.py:344
+ msgid "Package {} contains no files"
+-msgstr "패키지 {}에 파일이 없습니다"
++msgstr "꾸러미 {}에 파일이 없습니다"
+ 
+ #: dnf/cli/commands/repoquery.py:561
+ #, python-brace-format
+@@ -1986,15 +1973,15 @@ msgstr ""
+ "사용법: {prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--tree]\n"
+ "\n"
+ "설명:\n"
+-"  지정된 패키지의 경우 패키지 트리를 출력하십시오."
++"  지정된 꾸러미의 경우 꾸러미 트리를 출력하십시오."
+ 
+ #: dnf/cli/commands/search.py:46
+ msgid "search package details for the given string"
+-msgstr "지정된 문자열의 패키지 정보를 검색합니다"
++msgstr "지정된 문자열의 꾸러미 정보를 검색합니다"
+ 
+ #: dnf/cli/commands/search.py:51
+ msgid "search also package description and URL"
+-msgstr "패키지 설명 및 URL 검색"
++msgstr "꾸러미 설명 및 URL 검색"
+ 
+ #: dnf/cli/commands/search.py:52
+ msgid "KEYWORD"
+@@ -2004,22 +1991,22 @@ msgstr "KEYWORD"
+ msgid "Keyword to search for"
+ msgstr "검색 키워드"
+ 
+-#: dnf/cli/commands/search.py:61 dnf/cli/output.py:506
++#: dnf/cli/commands/search.py:61 dnf/cli/output.py:460
+ msgctxt "long"
+ msgid "Name"
+ msgstr "이름"
+ 
+-#: dnf/cli/commands/search.py:62 dnf/cli/output.py:559
++#: dnf/cli/commands/search.py:62 dnf/cli/output.py:513
+ msgctxt "long"
+ msgid "Summary"
+ msgstr "요약"
+ 
+-#: dnf/cli/commands/search.py:63 dnf/cli/output.py:569
++#: dnf/cli/commands/search.py:63 dnf/cli/output.py:523
+ msgctxt "long"
+ msgid "Description"
+ msgstr "설명"
+ 
+-#: dnf/cli/commands/search.py:64 dnf/cli/output.py:562
++#: dnf/cli/commands/search.py:64 dnf/cli/output.py:516
+ msgid "URL"
+ msgstr "URL"
+ 
+@@ -2034,18 +2021,18 @@ msgstr " & "
+ #: dnf/cli/commands/search.py:80
+ #, python-format
+ msgid "%s Exactly Matched: %%s"
+-msgstr "%s 정확히 일치하는 항목: %%s"
++msgstr "%s과 정확히 일치하는 항목: %%s"
+ 
+ #. TRANSLATORS: %s  - translated package attributes,
+ #. %%s - found keys (in listed attributes)
+ #: dnf/cli/commands/search.py:84
+ #, python-format
+ msgid "%s Matched: %%s"
+-msgstr "%s 일치하는 항목: %%s"
++msgstr "%s과 일치하는 항목: %%s"
+ 
+ #: dnf/cli/commands/search.py:134
+ msgid "No matches found."
+-msgstr "일치하는 항목이 없습니다."
++msgstr "일치 항목이 없습니다."
+ 
+ #: dnf/cli/commands/shell.py:47
+ #, python-brace-format
+@@ -2110,7 +2097,7 @@ msgid ""
+ "    resolve the transaction set"
+ msgstr ""
+ "{}\n"
+-"    트랜잭션 집합을 분석합니다"
++" 연결 집합을 분석합니다"
+ 
+ #: dnf/cli/commands/shell.py:195
+ msgid ""
+@@ -2120,9 +2107,9 @@ msgid ""
+ "  run: run the transaction"
+ msgstr ""
+ "{} arg\n"
+-"  list : 트랜잭션 내용을 나열합니다\n"
+-"  reset : 트랜잭션을 재설정합니다 (zero-out)\n"
+-"  run: 트랜잭션을 실행합니다"
++"  list : 연결 내용을 나열합니다\n"
++"  reset : 연결을 재설정합니다 (zero-out)\n"
++"  run: 연결을 실행합니다"
+ 
+ #: dnf/cli/commands/shell.py:201
+ msgid ""
+@@ -2130,7 +2117,7 @@ msgid ""
+ "    run the transaction"
+ msgstr ""
+ "{}\n"
+-"    트랜잭션을 실행합니다."
++"연결을 실행합니다"
+ 
+ #: dnf/cli/commands/shell.py:205
+ msgid ""
+@@ -2154,24 +2141,24 @@ msgid ""
+ msgstr ""
+ "쉘 관련 인수:\n"
+ "\n"
+-"config                   설정 옵션 설정\n"
+-"help                     도움말 인쇄\n"
+-"repository (or repo)     리포지토리 활성화,비활성화 또는 나열\n"
+-"resolvedep               트랜잭션 세트 분석\n"
+-"transaction (or ts)      트랜잭션 세트 목록,재설정 또는 실행\n"
+-"run                      트랜잭션 세트 분석 및 실행\n"
+-"exit (or quit)           쉘 종료"
++"config  설정 옵션 설정\n"
++"help  도움말 인쇄\n"
++"repository (or repo)  저장소 활성화,비활성화 또는 나열\n"
++"resolvedep  연결 구성 분석\n"
++"transaction (or ts)  연결 구성 목록,재설정 또는 실행\n"
++"run  연결 구성 분석 및 실행\n"
++"exit (or quit)  쉘 종료"
+ 
+-#: dnf/cli/commands/shell.py:259
++#: dnf/cli/commands/shell.py:262
+ #, python-format
+ msgid "Error: Cannot open %s for reading"
+ msgstr "오류: 읽기 전용 %s를 열 수 없습니다"
+ 
+-#: dnf/cli/commands/shell.py:281 dnf/cli/main.py:187
++#: dnf/cli/commands/shell.py:284 dnf/cli/main.py:187
+ msgid "Complete!"
+ msgstr "완료되었습니다!"
+ 
+-#: dnf/cli/commands/shell.py:291
++#: dnf/cli/commands/shell.py:294
+ msgid "Leaving Shell"
+ msgstr "쉘 나가기"
+ 
+@@ -2202,45 +2189,45 @@ msgstr "보안"
+ 
+ #: dnf/cli/commands/updateinfo.py:48
+ msgid "newpackage"
+-msgstr "새 패키지"
++msgstr "새 꾸러미"
+ 
+ #: dnf/cli/commands/updateinfo.py:50
+ msgid "Critical/Sec."
+-msgstr "심각/보안 취약점"
++msgstr "심각/보안."
+ 
+ #: dnf/cli/commands/updateinfo.py:51
+ msgid "Important/Sec."
+-msgstr "중요/보안 취약점"
++msgstr "중요/보안."
+ 
+ #: dnf/cli/commands/updateinfo.py:52
+ msgid "Moderate/Sec."
+-msgstr "보통/보안 취약점"
++msgstr "보통/보안."
+ 
+ #: dnf/cli/commands/updateinfo.py:53
+ msgid "Low/Sec."
+-msgstr "낮음/보안 취약점"
++msgstr "낮음/보안."
+ 
+ #: dnf/cli/commands/updateinfo.py:63
+ msgid "display advisories about packages"
+-msgstr "패키지관련 권고 표시"
++msgstr "꾸러미관련 권고 표시"
+ 
+ #: dnf/cli/commands/updateinfo.py:77
+ msgid "advisories about newer versions of installed packages (default)"
+-msgstr "설치된 최신 버전의 패키지에 대한 권고 (기본값)"
++msgstr "설치된 최신 버전의 꾸러미에 대한 권고 (기본값)"
+ 
+ #: dnf/cli/commands/updateinfo.py:80
+ msgid "advisories about equal and older versions of installed packages"
+-msgstr "설치된 패키지의 동일한 버전 및 이전 버전에 대한 권고"
++msgstr "설치된 꾸러미의 동일한 버전 및 이전 버전에 대한 권고"
+ 
+ #: dnf/cli/commands/updateinfo.py:83
+ msgid ""
+ "advisories about newer versions of those installed packages for which a "
+ "newer version is available"
+-msgstr "최신 버전을 사용할 수있는 설치된 패키지의 최신 버전에 대한 권고"
++msgstr "최신 버전를 사용할 수 있는 설치된 꾸러미의 최신 버전에 대한 권고"
+ 
+ #: dnf/cli/commands/updateinfo.py:87
+ msgid "advisories about any versions of installed packages"
+-msgstr "설치된 패키지 모든 버전에 대한 권고"
++msgstr "설치된 꾸러미 모든 버전에 대한 권고"
+ 
+ #: dnf/cli/commands/updateinfo.py:92
+ msgid "show summary of advisories (default)"
+@@ -2264,11 +2251,11 @@ msgstr "bugzilla 참조가 있는 권고 만 표시"
+ 
+ #: dnf/cli/commands/updateinfo.py:168
+ msgid "installed"
+-msgstr "설치됨"
++msgstr "설치되었습니다"
+ 
+ #: dnf/cli/commands/updateinfo.py:171
+ msgid "updates"
+-msgstr "업데이트"
++msgstr "최신화"
+ 
+ #: dnf/cli/commands/updateinfo.py:174
+ msgid "all"
+@@ -2280,11 +2267,11 @@ msgstr "사용 가능"
+ 
+ #: dnf/cli/commands/updateinfo.py:278
+ msgid "Updates Information Summary: "
+-msgstr "업데이트 정보 요약 "
++msgstr "최신화 정보 요약: "
+ 
+ #: dnf/cli/commands/updateinfo.py:281
+ msgid "New Package notice(s)"
+-msgstr "새 패키지 알림"
++msgstr "새 꾸러미 알림"
+ 
+ #: dnf/cli/commands/updateinfo.py:282
+ msgid "Security notice(s)"
+@@ -2324,11 +2311,11 @@ msgstr "기타 다른 공지"
+ 
+ #: dnf/cli/commands/updateinfo.py:316
+ msgid "Unknown/Sec."
+-msgstr "알 수 없음 /보안 취약점"
++msgstr "알 수 없음/보안."
+ 
+ #: dnf/cli/commands/updateinfo.py:357
+ msgid "Bugs"
+-msgstr "버그"
++msgstr "결점"
+ 
+ #: dnf/cli/commands/updateinfo.py:357
+ msgid "Type"
+@@ -2336,11 +2323,11 @@ msgstr "유형"
+ 
+ #: dnf/cli/commands/updateinfo.py:357
+ msgid "Update ID"
+-msgstr "ID 업데이트"
++msgstr "ID 최신화"
+ 
+ #: dnf/cli/commands/updateinfo.py:357
+ msgid "Updated"
+-msgstr "업데이트됨"
++msgstr "최신화됨"
+ 
+ #: dnf/cli/commands/updateinfo.py:358
+ msgid "CVEs"
+@@ -2364,10 +2351,10 @@ msgstr "파일"
+ 
+ # translation auto-copied from project subscription-manager, version 1.11.X,
+ # document keys
+-#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1499
+-#: dnf/cli/output.py:1772 dnf/cli/output.py:1774
++#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1654
++#: dnf/cli/output.py:1656 dnf/util.py:617
+ msgid "Installed"
+-msgstr "설치됨"
++msgstr "설치되었습니다"
+ 
+ #: dnf/cli/commands/updateinfo.py:385
+ msgid "false"
+@@ -2379,17 +2366,17 @@ msgstr "true"
+ 
+ #: dnf/cli/commands/upgrade.py:40
+ msgid "upgrade a package or packages on your system"
+-msgstr "시스템에서 패키지를 업그레이드하십시오."
++msgstr "시스템에서 꾸러미를 최신화하세요"
+ 
+ #: dnf/cli/commands/upgrade.py:44
+ msgid "Package to upgrade"
+-msgstr "업그레이드할 패키지"
++msgstr "최신화 할 꾸러미"
+ 
+ #: dnf/cli/commands/upgrademinimal.py:31
+ msgid ""
+ "upgrade, but only 'newest' package match which fixes a problem that affects "
+ "your system"
+-msgstr "업그레이드하지만 ‘최신' 패키지에만 시스템에 영향을 줄 수 있는 수정된 문제가 있습니다"
++msgstr "최신화 하지만 ‘최신' 꾸러미에만 시스템에 영향을 줄 수 있는 수정된 문제가 있습니다"
+ 
+ #: dnf/cli/main.py:88
+ msgid "Terminated."
+@@ -2401,23 +2388,23 @@ msgstr "현재 디렉토리에서 읽기 / 실행 액세스가 없습니다. /
+ 
+ #: dnf/cli/main.py:135
+ msgid "try to add '{}' to command line to replace conflicting packages"
+-msgstr "충돌하는 패키지를 바꾸려면 명령 줄에 '{}'을 (를) 추가하십시오."
++msgstr "충돌하는 꾸러미를 교체하려면 명령줄에 '{}'을 추가하세요"
+ 
+ #: dnf/cli/main.py:139
+ msgid "try to add '{}' to skip uninstallable packages"
+-msgstr "설치할 수 없는 패키지를 건너 뛰려면 '{}'을 (를) 추가하십시오."
++msgstr "설치 할 수 없는 꾸러미를 건너 뛰려면 '{}'을 (를) 추가하십시오"
+ 
+ #: dnf/cli/main.py:142
+ msgid " or '{}' to skip uninstallable packages"
+-msgstr " 또는 '{}'은/는 설치할 수 없는 패키지를 건너 뜁니다"
++msgstr " 또는 '{}'는 설치 할 수 없는 꾸러미를 건너 뜁니다"
+ 
+ #: dnf/cli/main.py:147
+ msgid "try to add '{}' to use not only best candidate packages"
+-msgstr "최적 후보의 패키지만을 사용하려면 '{}'을 (를) 추가하십시오."
++msgstr "최적 후보의 꾸러미만을 사용하려면 '{}'를 추가하세요"
+ 
+ #: dnf/cli/main.py:150
+ msgid " or '{}' to use not only best candidate packages"
+-msgstr " 또는 '{}'은/는 최적 후보의 패키지만 사용합니다"
++msgstr " 또는 '{}'는 최적 후보의 꾸러미만 사용합니다"
+ 
+ #: dnf/cli/main.py:167
+ msgid "Dependencies resolved."
+@@ -2497,7 +2484,7 @@ msgstr "임의의 설정 옵션 및 리포지토리 옵션 설정"
+ 
+ #: dnf/cli/option_parser.py:210
+ msgid "resolve depsolve problems by skipping packages"
+-msgstr "패키지를 건너 뛰어 종속성 문제 해결"
++msgstr "꾸러미를 건너 뛰어 종속성 문제 해결"
+ 
+ #: dnf/cli/option_parser.py:213
+ msgid "show command help"
+@@ -2505,19 +2492,19 @@ msgstr "명령 도움말 표시"
+ 
+ #: dnf/cli/option_parser.py:217
+ msgid "allow erasing of installed packages to resolve dependencies"
+-msgstr "종속성을 해결하기 위해 설치된 패키지 지우기 허용"
++msgstr "종속성을 해결하기 위해 설치된 꾸러미 지우기 허용"
+ 
+ #: dnf/cli/option_parser.py:221
+ msgid "try the best available package versions in transactions."
+-msgstr "트랜잭션에서 사용 가능한 최상의 패키지 버전을 사용해보십시오."
++msgstr "연결에서 사용 가능한 최상의 꾸러미 버전을 사용해보십시오."
+ 
+ #: dnf/cli/option_parser.py:223
+ msgid "do not limit the transaction to the best candidate"
+-msgstr "트랜잭션을 최상의 선택 옵션으로 제한하지 마십시오"
++msgstr "연결를 최상의 선택 옵션으로 제한하지 마십시오"
+ 
+ #: dnf/cli/option_parser.py:226
+ msgid "run entirely from system cache, don't update cache"
+-msgstr "시스템 캐시에서 완전히 실행하고, 캐시를 업데이트하지 않습니다."
++msgstr "시스템 캐쉬에서 완전히 실행하고, 캐쉬를 최신화하지 않습니다"
+ 
+ #: dnf/cli/option_parser.py:230
+ msgid "maximum command wait time"
+@@ -2529,11 +2516,11 @@ msgstr "디버깅 출력 레벨"
+ 
+ #: dnf/cli/option_parser.py:236
+ msgid "dumps detailed solving results into files"
+-msgstr "자세한 해결 결과를 파일로 덤프합니다."
++msgstr "자세한 해결 결과를 파일로 덤프합니다"
+ 
+ #: dnf/cli/option_parser.py:240
+ msgid "show duplicates, in repos, in list/search commands"
+-msgstr "repos에 있는 중복 목록을 목록/검색 명령에 표시합니다."
++msgstr "repos에 있는 중복 목록을 목록/검색 명령에 표시합니다"
+ 
+ #: dnf/cli/option_parser.py:243
+ msgid "error output level"
+@@ -2545,8 +2532,8 @@ msgid ""
+ "enables {prog}'s obsoletes processing logic for upgrade or display "
+ "capabilities that the package obsoletes for info, list and repoquery"
+ msgstr ""
+-"패키지가 info, list, repoquery에 더 이상 사용하지 않는 업그레이드 또는 표시 기능을 위해 {prog}의 더 이상 "
+-"사용되지 않는 처리 로직을 활성화합니다."
++"꾸러미가 info, list, repoquery에 더 이상 사용하지 않는 최신화 또는 표시 기능을 위해 {prog}의 더 이상 사용되지 "
++"않는 처리 로직을 활성화합니다"
+ 
+ #: dnf/cli/option_parser.py:251
+ msgid "debugging output level for rpm"
+@@ -2588,7 +2575,7 @@ msgstr "config-manager 명령으로 repos를 비활성화합니다 (자동 저
+ 
+ #: dnf/cli/option_parser.py:283
+ msgid "exclude packages by name or glob"
+-msgstr "이름이나 glob로 패키지를 제거합니다"
++msgstr "이름이나 glob로 꾸러미를 제거합니다"
+ 
+ #: dnf/cli/option_parser.py:288
+ msgid "disable excludepkgs"
+@@ -2598,7 +2585,7 @@ msgstr "excludepkgs 비활성화"
+ msgid ""
+ "label and path to an additional repository to use (same path as in a "
+ "baseurl), can be specified multiple times."
+-msgstr "사용할 추가 리포지터리에 대한 레이블 및 경로 (baseurl과 동일한 경로)를 여러 번 지정할 수 있습니다."
++msgstr "사용 할 추가 레포지터리에 대한 이름표와 경로 (baseurl과 동일한 경로)를 여러 번 지정와 할 수 있습니다."
+ 
+ #: dnf/cli/option_parser.py:297
+ msgid "disable removal of dependencies that are no longer used"
+@@ -2626,51 +2613,51 @@ msgstr "IPv6 주소 만 확인"
+ 
+ #: dnf/cli/option_parser.py:314
+ msgid "set directory to copy packages to"
+-msgstr "패키지를 복사할 디렉토리를 설정하십시오"
++msgstr "꾸러미를 복사할 디렉토리를 설정하십시오"
+ 
+ #: dnf/cli/option_parser.py:317
+ msgid "only download packages"
+-msgstr "패키지 만 다운로드"
++msgstr "꾸러미만 내려받기"
+ 
+ #: dnf/cli/option_parser.py:319
+ msgid "add a comment to transaction"
+-msgstr "트랜잭션에 의견을 추가하십시오"
++msgstr "연결에 의견을 추가하십시오"
+ 
+ #: dnf/cli/option_parser.py:322
+ msgid "Include bugfix relevant packages, in updates"
+-msgstr "버그 수정 관련 패키지를 업데이트에 포함"
++msgstr "결점(bug) 수정 관련 꾸러미 최신화에 포함"
+ 
+ #: dnf/cli/option_parser.py:325
+ msgid "Include enhancement relevant packages, in updates"
+-msgstr "개선된 기능과 관련된 패키지를 업데이트에 포함"
++msgstr "개선된 기능과 관련된 꾸러미를 초신화에 포함"
+ 
+ #: dnf/cli/option_parser.py:328
+ msgid "Include newpackage relevant packages, in updates"
+-msgstr "새 패키지 관련 패키지를 업데이트에 포함"
++msgstr "새 꾸러미 관련 꾸러미 최신화에 포함"
+ 
+ #: dnf/cli/option_parser.py:331
+ msgid "Include security relevant packages, in updates"
+-msgstr "보안 관련 패키지 업데이트에 포함"
++msgstr "보안 관련 꾸러미 최신화에 포함"
+ 
+ #: dnf/cli/option_parser.py:335
+ msgid "Include packages needed to fix the given advisory, in updates"
+-msgstr "주어진 권고를 수정하는 데 필요한 패키지를 업데이트에 포함"
++msgstr "주어진 권고를 수정하는 데 필요한 꾸러미를 최신화에 포함"
+ 
+ #: dnf/cli/option_parser.py:339
+ msgid "Include packages needed to fix the given BZ, in updates"
+-msgstr "주어진 BZ를 수정하는 데 필요한 패키지를 업데이트에 포함"
++msgstr "주어진 BZ를 수정하는 데 필요한 꾸러미를 최신화에 포함"
+ 
+ #: dnf/cli/option_parser.py:342
+ msgid "Include packages needed to fix the given CVE, in updates"
+-msgstr "주어진 CVE를 수정하는 데 필요한 패키지를 업데이트에 포함"
++msgstr "주어진 CVE를 수정하는 데 필요한 꾸러미를 최신화에 포함"
+ 
+ #: dnf/cli/option_parser.py:347
+ msgid "Include security relevant packages matching the severity, in updates"
+-msgstr "심각도와 일치하는 보안 관련 패키지를 업데이트에 포함"
++msgstr "심각도와 일치하는 보안 관련 꾸러미를 최신화에 포함"
+ 
+ #: dnf/cli/option_parser.py:353
+ msgid "Force the use of an architecture"
+-msgstr "아키텍처의 사용을 강제합니다"
++msgstr "구조의 사용을 강제합니다"
+ 
+ #: dnf/cli/option_parser.py:375
+ msgid "List of Main Commands:"
+@@ -2688,13 +2675,13 @@ msgstr "‘%s' 인수를 인코딩할 수 없습니다: %s"
+ #. Translators: This is abbreviated 'Name'. Should be no longer
+ #. than 12 characters. You can use the full version if it is short
+ #. enough in your language.
+-#: dnf/cli/output.py:505
++#: dnf/cli/output.py:459
+ msgctxt "short"
+ msgid "Name"
+ msgstr "이름"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:511
++#: dnf/cli/output.py:465
+ msgid "Epoch"
+ msgstr "기간"
+ 
+@@ -2702,38 +2689,38 @@ msgstr "기간"
+ #. use the full (unabbreviated) term 'Version' if you think that
+ #. the translation to your language is not too long and will
+ #. always fit to limited space.
+-#: dnf/cli/output.py:512 dnf/cli/output.py:1335
++#: dnf/cli/output.py:466 dnf/cli/output.py:1248
+ msgctxt "short"
+ msgid "Version"
+ msgstr "버전"
+ 
+ #. Translators: This is the full (unabbreviated) term 'Version'.
+-#: dnf/cli/output.py:513 dnf/cli/output.py:1337
++#: dnf/cli/output.py:467 dnf/cli/output.py:1250
+ msgctxt "long"
+ msgid "Version"
+ msgstr "버전"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:516
++#: dnf/cli/output.py:470
+ msgid "Release"
+ msgstr "릴리즈"
+ 
+ #. Translators: This is abbreviated 'Architecture', used when
+ #. we have not enough space to display the full word.
+-#: dnf/cli/output.py:517 dnf/cli/output.py:1326
++#: dnf/cli/output.py:471 dnf/cli/output.py:1239
+ msgctxt "short"
+ msgid "Arch"
+-msgstr "아키텍처"
++msgstr "구조"
+ 
+ #. Translators: This is the full word 'Architecture', used when
+ #. we have enough space.
+-#: dnf/cli/output.py:518 dnf/cli/output.py:1329
++#: dnf/cli/output.py:472 dnf/cli/output.py:1242
+ msgctxt "long"
+ msgid "Architecture"
+-msgstr "아키텍처"
++msgstr "구조"
+ 
+ #. Translators: This is the full (unabbreviated) term 'Size'.
+-#: dnf/cli/output.py:520 dnf/cli/output.py:1352
++#: dnf/cli/output.py:474 dnf/cli/output.py:1265
+ msgctxt "long"
+ msgid "Size"
+ msgstr "크기"
+@@ -2742,361 +2729,357 @@ msgstr "크기"
+ #. not be longer than 5 characters. If the term 'Size' in your
+ #. language is not longer than 5 characters then you can use it
+ #. unabbreviated.
+-#: dnf/cli/output.py:520 dnf/cli/output.py:1350
++#: dnf/cli/output.py:474 dnf/cli/output.py:1263
+ msgctxt "short"
+ msgid "Size"
+ msgstr "크기"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:524
++#: dnf/cli/output.py:478
+ msgid "Source"
+ msgstr "소스"
+ 
+ #. Translators: This is abbreviated 'Repository', used when
+ #. we have not enough space to display the full word.
+-#: dnf/cli/output.py:525 dnf/cli/output.py:1341
++#: dnf/cli/output.py:479 dnf/cli/output.py:1254
+ msgctxt "short"
+ msgid "Repo"
+-msgstr "리포지터리"
++msgstr "레포지터리"
+ 
+ #. Translators: This is the full word 'Repository', used when
+ #. we have enough space.
+-#: dnf/cli/output.py:526 dnf/cli/output.py:1344
++#: dnf/cli/output.py:480 dnf/cli/output.py:1257
+ msgctxt "long"
+ msgid "Repository"
+-msgstr "리포지터리"
++msgstr "레포지터리"
+ 
+ #. Translators: This message should be no longer than 12 chars.
+-#: dnf/cli/output.py:533
++#: dnf/cli/output.py:487
+ msgid "From repo"
+-msgstr "리포지터리에서"
++msgstr "레포지터리에서"
+ 
+ #. :hawkey does not support changelog information
+ #. print(_("Committer   : %s") % ucd(pkg.committer))
+ #. print(_("Committime  : %s") % time.ctime(pkg.committime))
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:539
++#: dnf/cli/output.py:493
+ msgid "Packager"
+-msgstr "패키지 프로그램"
++msgstr "꾸러미 생성자"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:541
++#: dnf/cli/output.py:495
+ msgid "Buildtime"
+ msgstr "빌드 시간"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:545
++#: dnf/cli/output.py:499
+ msgid "Install time"
+ msgstr "설치 시간"
+ 
+ #. Translators: This message should be no longer than 12 chars.
+-#: dnf/cli/output.py:554
++#: dnf/cli/output.py:508
+ msgid "Installed by"
+ msgstr "설치자"
+ 
+ #. Translators: This is abbreviated 'Summary'. Should be no longer
+ #. than 12 characters. You can use the full version if it is short
+ #. enough in your language.
+-#: dnf/cli/output.py:558
++#: dnf/cli/output.py:512
+ msgctxt "short"
+ msgid "Summary"
+ msgstr "요약"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:564
++#: dnf/cli/output.py:518
+ msgid "License"
+-msgstr "라이센스"
++msgstr "저작권"
+ 
+ #. Translators: This is abbreviated 'Description'. Should be no longer
+ #. than 12 characters. You can use the full version if it is short
+ #. enough in your language.
+-#: dnf/cli/output.py:568
++#: dnf/cli/output.py:522
+ msgctxt "short"
+ msgid "Description"
+ msgstr "설명"
+ 
+-#: dnf/cli/output.py:695
+-msgid "No packages to list"
+-msgstr "목록에 패키지가 없습니다"
+-
+-#: dnf/cli/output.py:706
++#: dnf/cli/output.py:650
+ msgid "y"
+ msgstr "y"
+ 
+-#: dnf/cli/output.py:706
++#: dnf/cli/output.py:650
+ msgid "yes"
+ msgstr "예"
+ 
+-#: dnf/cli/output.py:707
++#: dnf/cli/output.py:651
+ msgid "n"
+ msgstr "n"
+ 
+-#: dnf/cli/output.py:707
++#: dnf/cli/output.py:651
+ msgid "no"
+-msgstr "아니요"
++msgstr "아니"
+ 
+-#: dnf/cli/output.py:711
++#: dnf/cli/output.py:655
+ msgid "Is this ok [y/N]: "
+-msgstr "정말입니까 [y/N]: "
++msgstr "진행 할 까요? [y/N]: "
+ 
+-#: dnf/cli/output.py:715
++#: dnf/cli/output.py:659
+ msgid "Is this ok [Y/n]: "
+-msgstr "정말입니까 [Y/n]: "
++msgstr "진행 할 까요? [Y/n]: "
+ 
+-#: dnf/cli/output.py:795
++#: dnf/cli/output.py:739
+ #, python-format
+ msgid "Group: %s"
+ msgstr "그룹 %s"
+ 
+-#: dnf/cli/output.py:799
++#: dnf/cli/output.py:743
+ #, python-format
+ msgid " Group-Id: %s"
+ msgstr " 그룹 ID: %s"
+ 
+-#: dnf/cli/output.py:801 dnf/cli/output.py:840
++#: dnf/cli/output.py:745 dnf/cli/output.py:784
+ #, python-format
+ msgid " Description: %s"
+ msgstr " 설명: %s"
+ 
+-#: dnf/cli/output.py:803
++#: dnf/cli/output.py:747
+ #, python-format
+ msgid " Language: %s"
+ msgstr " 언어: %s"
+ 
+-#: dnf/cli/output.py:806
++#: dnf/cli/output.py:750
+ msgid " Mandatory Packages:"
+-msgstr " 필수 패키지 :"
++msgstr " 필수 꾸러미 :"
+ 
+-#: dnf/cli/output.py:807
++#: dnf/cli/output.py:751
+ msgid " Default Packages:"
+-msgstr " 기본 패키지 :"
++msgstr " 기본 꾸러미 :"
+ 
+-#: dnf/cli/output.py:808
++#: dnf/cli/output.py:752
+ msgid " Optional Packages:"
+-msgstr " 선택적인 패키지 :"
++msgstr " 선택적인 꾸러미 :"
+ 
+-#: dnf/cli/output.py:809
++#: dnf/cli/output.py:753
+ msgid " Conditional Packages:"
+-msgstr " 추가 가능 패키지 :"
++msgstr " 추가 가능 꾸러미 :"
+ 
+-#: dnf/cli/output.py:834
++#: dnf/cli/output.py:778
+ #, python-format
+ msgid "Environment Group: %s"
+ msgstr "환경 그룹 : %s"
+ 
+-#: dnf/cli/output.py:837
++#: dnf/cli/output.py:781
+ #, python-format
+ msgid " Environment-Id: %s"
+ msgstr " 환경 -ID : %s"
+ 
+-#: dnf/cli/output.py:843
++#: dnf/cli/output.py:787
+ msgid " Mandatory Groups:"
+ msgstr " 필수 그룹 :"
+ 
+-#: dnf/cli/output.py:844
++#: dnf/cli/output.py:788
+ msgid " Optional Groups:"
+ msgstr " 선택적인 그룹 :"
+ 
+-#: dnf/cli/output.py:865
++#: dnf/cli/output.py:809
+ msgid "Matched from:"
+ msgstr "일치하는 항목 :"
+ 
+-#: dnf/cli/output.py:879
++#: dnf/cli/output.py:823
+ #, python-format
+ msgid "Filename    : %s"
+ msgstr "파일 이름 : %s"
+ 
+-#: dnf/cli/output.py:904
++#: dnf/cli/output.py:848
+ #, python-format
+ msgid "Repo        : %s"
+ msgstr "리포지토리      : %s"
+ 
+-#: dnf/cli/output.py:913
++#: dnf/cli/output.py:857
+ msgid "Description : "
+ msgstr "설명 : "
+ 
+-#: dnf/cli/output.py:917
++#: dnf/cli/output.py:861
+ #, python-format
+ msgid "URL         : %s"
+ msgstr "URL         : %s"
+ 
+-#: dnf/cli/output.py:921
++#: dnf/cli/output.py:865
+ #, python-format
+ msgid "License     : %s"
+-msgstr "라이센스    : %s"
++msgstr "저작권 : %s"
+ 
+-#: dnf/cli/output.py:927
++#: dnf/cli/output.py:871
+ #, python-format
+ msgid "Provide    : %s"
+ msgstr "제공        : %s"
+ 
+-#: dnf/cli/output.py:947
++#: dnf/cli/output.py:891
+ #, python-format
+ msgid "Other       : %s"
+ msgstr "기타       : %s"
+ 
+-#: dnf/cli/output.py:996
++#: dnf/cli/output.py:940
+ msgid "There was an error calculating total download size"
+-msgstr "총 다운로드 크기를 계산하는 중에 오류가 발생했습니다"
++msgstr "총 내려받기 크기를 계산하는 중에 오류가 발생했습니다"
+ 
+-#: dnf/cli/output.py:1002
++#: dnf/cli/output.py:946
+ #, python-format
+ msgid "Total size: %s"
+ msgstr "전체 크기: %s"
+ 
+-#: dnf/cli/output.py:1005
++#: dnf/cli/output.py:949
+ #, python-format
+ msgid "Total download size: %s"
+-msgstr "총 다운로드 크기 : %s"
++msgstr "총계 내려받기 크기: %s"
+ 
+-#: dnf/cli/output.py:1008
++#: dnf/cli/output.py:952
+ #, python-format
+ msgid "Installed size: %s"
+ msgstr "설치된 크기 : %s"
+ 
+-#: dnf/cli/output.py:1026
++#: dnf/cli/output.py:970
+ msgid "There was an error calculating installed size"
+ msgstr "설치된 크기를 계산하는 동안 오류가 발생했습니다"
+ 
+-#: dnf/cli/output.py:1030
++#: dnf/cli/output.py:974
+ #, python-format
+ msgid "Freed space: %s"
+ msgstr "사용 가능한 공간 : %s"
+ 
+-#: dnf/cli/output.py:1039
++#: dnf/cli/output.py:983
+ msgid "Marking packages as installed by the group:"
+-msgstr "그룹에 설치된 패키지 표시:"
++msgstr "그룹에 설치된 꾸러미 표시:"
+ 
+-#: dnf/cli/output.py:1046
++#: dnf/cli/output.py:990
+ msgid "Marking packages as removed by the group:"
+-msgstr "그룹에 의해 제거된 패키지 표시:"
++msgstr "그룹에 의해 제거된 꾸러미 표시:"
+ 
+-#: dnf/cli/output.py:1056
++#: dnf/cli/output.py:1000
+ msgid "Group"
+ msgstr "그룹"
+ 
+-#: dnf/cli/output.py:1056
++#: dnf/cli/output.py:1000
+ msgid "Packages"
+-msgstr "패키지"
++msgstr "꾸러미"
+ 
+-#: dnf/cli/output.py:1133
++#: dnf/cli/output.py:1046
+ msgid "Installing group/module packages"
+-msgstr "그룹 / 모듈 패키지 설치"
++msgstr "그룹/모듈 꾸러미 설치"
+ 
+-#: dnf/cli/output.py:1134
++#: dnf/cli/output.py:1047
+ msgid "Installing group packages"
+-msgstr "그룹 패키지 설치"
++msgstr "그룹 꾸러미 설치"
+ 
+ #. TRANSLATORS: This is for a list of packages to be installed.
+-#: dnf/cli/output.py:1138
++#: dnf/cli/output.py:1051
+ msgctxt "summary"
+ msgid "Installing"
+ msgstr "설치 중"
+ 
+ #. TRANSLATORS: This is for a list of packages to be upgraded.
+-#: dnf/cli/output.py:1140
++#: dnf/cli/output.py:1053
+ msgctxt "summary"
+ msgid "Upgrading"
+-msgstr "업그레이드 중"
++msgstr "향상 중"
+ 
+ #. TRANSLATORS: This is for a list of packages to be reinstalled.
+-#: dnf/cli/output.py:1142
++#: dnf/cli/output.py:1055
+ msgctxt "summary"
+ msgid "Reinstalling"
+ msgstr "재설치 중"
+ 
+-#: dnf/cli/output.py:1144
++#: dnf/cli/output.py:1057
+ msgid "Installing dependencies"
+-msgstr "종속 패키지 설치 중"
++msgstr "종속 꾸러미 설치 중"
+ 
+-#: dnf/cli/output.py:1145
++#: dnf/cli/output.py:1058
+ msgid "Installing weak dependencies"
+-msgstr "취약한 종속 패키지 설치 중"
++msgstr "취약한 종속 꾸러미 설치 중"
+ 
+ #. TRANSLATORS: This is for a list of packages to be removed.
+ # translation auto-copied from project subscription-manager, version 1.11.X,
+ # document keys
+-#: dnf/cli/output.py:1147
++#: dnf/cli/output.py:1060
+ msgid "Removing"
+ msgstr "삭제 중"
+ 
+-#: dnf/cli/output.py:1148
++#: dnf/cli/output.py:1061
+ msgid "Removing dependent packages"
+-msgstr "종속 패키지 제거"
++msgstr "종속 꾸러미지 제거"
+ 
+-#: dnf/cli/output.py:1149
++#: dnf/cli/output.py:1062
+ msgid "Removing unused dependencies"
+-msgstr "사용하지 않는 종속 패키지 제거"
++msgstr "사용하지 않는 종속 꾸러미 제거"
+ 
+ #. TRANSLATORS: This is for a list of packages to be downgraded.
+-#: dnf/cli/output.py:1151
++#: dnf/cli/output.py:1064
+ msgctxt "summary"
+ msgid "Downgrading"
+-msgstr "다운그레이드 중"
++msgstr "하향설치 중"
+ 
+-#: dnf/cli/output.py:1176
++#: dnf/cli/output.py:1089
+ msgid "Installing module profiles"
+ msgstr "모듈 프로파일 설치"
+ 
+-#: dnf/cli/output.py:1185
++#: dnf/cli/output.py:1098
+ msgid "Disabling module profiles"
+ msgstr "모듈 프로파일 비활성화"
+ 
+-#: dnf/cli/output.py:1194
++#: dnf/cli/output.py:1107
+ msgid "Enabling module streams"
+ msgstr "모듈 스트림 활성화"
+ 
+-#: dnf/cli/output.py:1202
++#: dnf/cli/output.py:1115
+ msgid "Switching module streams"
+ msgstr "모듈 스트림 전환"
+ 
+-#: dnf/cli/output.py:1210
++#: dnf/cli/output.py:1123
+ msgid "Disabling modules"
+ msgstr "모듈 비활성화"
+ 
+-#: dnf/cli/output.py:1218
++#: dnf/cli/output.py:1131
+ msgid "Resetting modules"
+ msgstr "모듈 재설정"
+ 
+-#: dnf/cli/output.py:1230
++#: dnf/cli/output.py:1143
+ msgid "Installing Environment Groups"
+-msgstr "환경 그룹 설치"
++msgstr "환경 그룹 설치 중"
+ 
+-#: dnf/cli/output.py:1237
++#: dnf/cli/output.py:1150
+ msgid "Upgrading Environment Groups"
+-msgstr "환경 그룹 업그레이드"
++msgstr "환경 그룹 향상"
+ 
+-#: dnf/cli/output.py:1244
++#: dnf/cli/output.py:1157
+ msgid "Removing Environment Groups"
+ msgstr "환경 그룹 제거"
+ 
+-#: dnf/cli/output.py:1251
++#: dnf/cli/output.py:1164
+ msgid "Installing Groups"
+ msgstr "그룹 설치"
+ 
+-#: dnf/cli/output.py:1258
++#: dnf/cli/output.py:1171
+ msgid "Upgrading Groups"
+-msgstr "그룹 업그레이드"
++msgstr "그룹 향상"
+ 
+-#: dnf/cli/output.py:1265
++#: dnf/cli/output.py:1178
+ msgid "Removing Groups"
+ msgstr "그룹 제거"
+ 
+-#: dnf/cli/output.py:1281
++#: dnf/cli/output.py:1194
+ #, python-format
+ msgid ""
+ "Skipping packages with conflicts:\n"
+ "(add '%s' to command line to force their upgrade)"
+ msgstr ""
+-"충돌 패키지 건너 뛰기 :\n"
+-"(업그레이드를 강제하려면 명령행에 '%s' 추가)"
++"충돌 꾸러미 건너 뛰기:\n"
++"(향상을 강제하려면 명령행에 '%s' 추가)"
+ 
+-#: dnf/cli/output.py:1291
++#: dnf/cli/output.py:1204
+ #, python-format
+ msgid "Skipping packages with broken dependencies%s"
+-msgstr "손상된 종속성이 있는 %s 패키지 건너 뛰기"
++msgstr "손상된 종속성이 있는 %s 꾸러미 건너 뛰기"
+ 
+-#: dnf/cli/output.py:1295
++#: dnf/cli/output.py:1208
+ msgid " or part of a group"
+ msgstr " 또는 그룹의 일부"
+ 
+@@ -3104,22 +3087,22 @@ msgstr " 또는 그룹의 일부"
+ #. use the full (unabbreviated) term 'Package' if you think that
+ #. the translation to your language is not too long and will
+ #. always fit to limited space.
+-#: dnf/cli/output.py:1320
++#: dnf/cli/output.py:1233
+ msgctxt "short"
+ msgid "Package"
+-msgstr "패키지"
++msgstr "꾸러미"
+ 
+ #. Translators: This is the full (unabbreviated) term 'Package'.
+-#: dnf/cli/output.py:1322
++#: dnf/cli/output.py:1235
+ msgctxt "long"
+ msgid "Package"
+-msgstr "패키지"
++msgstr "꾸러미"
+ 
+-#: dnf/cli/output.py:1371
++#: dnf/cli/output.py:1284
+ msgid "replacing"
+ msgstr "교체"
+ 
+-#: dnf/cli/output.py:1378
++#: dnf/cli/output.py:1291
+ #, python-format
+ msgid ""
+ "\n"
+@@ -3127,296 +3110,280 @@ msgid ""
+ "%s\n"
+ msgstr ""
+ "\n"
+-"트랜잭션 요약\n"
++"연결 요약\n"
+ "%s\n"
+ 
+ #. TODO: remove
+-#: dnf/cli/output.py:1383 dnf/cli/output.py:1932 dnf/cli/output.py:1933
++#: dnf/cli/output.py:1296 dnf/cli/output.py:1814 dnf/cli/output.py:1815
+ msgid "Install"
+ msgstr "설치"
+ 
+ # ctx::sourcefile::Navigation Menu
+-#: dnf/cli/output.py:1387 dnf/cli/output.py:1941
++#: dnf/cli/output.py:1300 dnf/cli/output.py:1823
+ msgid "Upgrade"
+-msgstr "업그레이드"
++msgstr "향상"
+ 
+-#: dnf/cli/output.py:1388
++#: dnf/cli/output.py:1301
+ msgid "Remove"
+ msgstr "삭제"
+ 
+-#: dnf/cli/output.py:1390 dnf/cli/output.py:1939
++#: dnf/cli/output.py:1303 dnf/cli/output.py:1821
+ msgid "Downgrade"
+-msgstr "다운 그레이드"
++msgstr "하향설치"
+ 
+-#: dnf/cli/output.py:1391
++#: dnf/cli/output.py:1304
+ msgid "Skip"
+ msgstr "건너뛰기"
+ 
+-#: dnf/cli/output.py:1400 dnf/cli/output.py:1416
++#: dnf/cli/output.py:1313 dnf/cli/output.py:1329
+ msgid "Package"
+ msgid_plural "Packages"
+-msgstr[0] "패키지"
++msgstr[0] "꾸러미"
+ 
+-#: dnf/cli/output.py:1418
++#: dnf/cli/output.py:1331
+ msgid "Dependent package"
+ msgid_plural "Dependent packages"
+-msgstr[0] "종속 패키지"
+-
+-#: dnf/cli/output.py:1497 dnf/cli/output.py:1773 dnf/cli/output.py:1942
+-msgid "Upgraded"
+-msgstr "업그레이드 됨"
+-
+-#: dnf/cli/output.py:1498 dnf/cli/output.py:1773 dnf/cli/output.py:1940
+-msgid "Downgraded"
+-msgstr "다운 그레이드"
+-
+-#: dnf/cli/output.py:1503
+-msgid "Reinstalled"
+-msgstr "다시 설치됨"
+-
+-#: dnf/cli/output.py:1504
+-msgid "Skipped"
+-msgstr "건너 뛰기됨"
+-
+-#: dnf/cli/output.py:1505
+-msgid "Removed"
+-msgstr "제거됨"
+-
+-#: dnf/cli/output.py:1508
+-msgid "Failed"
+-msgstr "실패하였습니다"
++msgstr[0] "종속 꾸러미"
+ 
+ # auto translated by TM merge from project: RHOSP Director Installation and
+ # Usage , version: 11-Korean, DocId: master
+-#: dnf/cli/output.py:1559
++#: dnf/cli/output.py:1439
+ msgid "Total"
+ msgstr "합계"
+ 
+-#: dnf/cli/output.py:1587
++#: dnf/cli/output.py:1467
+ msgid "<unset>"
+ msgstr "<unset>"
+ 
+-#: dnf/cli/output.py:1588
++#: dnf/cli/output.py:1468
+ msgid "System"
+ msgstr "시스템"
+ 
+-#: dnf/cli/output.py:1638
++#: dnf/cli/output.py:1518
+ msgid "Command line"
+ msgstr "명령행"
+ 
+ #. TRANSLATORS: user names who executed transaction in history command output
+-#: dnf/cli/output.py:1649
++#: dnf/cli/output.py:1531
+ msgid "User name"
+ msgstr "사용자 이름"
+ 
+ # translation auto-copied from project subscription-manager, version 1.11.X,
+ # document keys
+-#: dnf/cli/output.py:1651
++#: dnf/cli/output.py:1533
+ msgid "ID"
+ msgstr "ID"
+ 
+-#: dnf/cli/output.py:1653
++#: dnf/cli/output.py:1535
+ msgid "Date and time"
+ msgstr "날짜와 시간"
+ 
+-#: dnf/cli/output.py:1654
++#: dnf/cli/output.py:1536
+ msgid "Action(s)"
+ msgstr "작업"
+ 
+-#: dnf/cli/output.py:1655
++#: dnf/cli/output.py:1537
+ msgid "Altered"
+ msgstr "변경됨"
+ 
+-#: dnf/cli/output.py:1698
++#: dnf/cli/output.py:1580
+ msgid "No transactions"
+-msgstr "트랜잭션 없음"
++msgstr "연결 없음"
+ 
+-#: dnf/cli/output.py:1699 dnf/cli/output.py:1715
++#: dnf/cli/output.py:1581 dnf/cli/output.py:1597
+ msgid "Failed history info"
+ msgstr "실패 기록 정보"
+ 
+-#: dnf/cli/output.py:1714
++#: dnf/cli/output.py:1596
+ msgid "No transaction ID, or package, given"
+-msgstr "트랜잭션 ID 또는 패키지가 지정되지 않았습니다"
++msgstr "연결 ID 또는 꾸러미가 지정되지 않았습니다"
+ 
+-#: dnf/cli/output.py:1772
++#: dnf/cli/output.py:1654
+ msgid "Erased"
+-msgstr "삭제됨"
++msgstr "제거되었습니다"
++
++#: dnf/cli/output.py:1655 dnf/cli/output.py:1822 dnf/util.py:616
++msgid "Downgraded"
++msgstr "하향설치됨"
+ 
+-#: dnf/cli/output.py:1774
++#: dnf/cli/output.py:1655 dnf/cli/output.py:1824 dnf/util.py:615
++msgid "Upgraded"
++msgstr "향상되었습니다"
++
++#: dnf/cli/output.py:1656
+ msgid "Not installed"
+ msgstr "설치되지 않음"
+ 
+-#: dnf/cli/output.py:1775
++#: dnf/cli/output.py:1657
+ msgid "Newer"
+ msgstr "최신"
+ 
+-#: dnf/cli/output.py:1775
++#: dnf/cli/output.py:1657
+ msgid "Older"
+ msgstr "이전"
+ 
+-#: dnf/cli/output.py:1823 dnf/cli/output.py:1825
++#: dnf/cli/output.py:1705 dnf/cli/output.py:1707
+ msgid "Transaction ID :"
+-msgstr "트랜잭션 ID :"
++msgstr "연결 ID :"
+ 
+-#: dnf/cli/output.py:1828
++#: dnf/cli/output.py:1710
+ msgid "Begin time     :"
+ msgstr "시작 시간 :"
+ 
+-#: dnf/cli/output.py:1831 dnf/cli/output.py:1833
++#: dnf/cli/output.py:1713 dnf/cli/output.py:1715
+ msgid "Begin rpmdb    :"
+ msgstr "rpmdb 시작 :"
+ 
+-#: dnf/cli/output.py:1839
++#: dnf/cli/output.py:1721
+ #, python-format
+ msgid "(%u seconds)"
+ msgstr "(%u 초)"
+ 
+-#: dnf/cli/output.py:1841
++#: dnf/cli/output.py:1723
+ #, python-format
+ msgid "(%u minutes)"
+ msgstr "(%u 분)"
+ 
+-#: dnf/cli/output.py:1843
++#: dnf/cli/output.py:1725
+ #, python-format
+ msgid "(%u hours)"
+ msgstr "(%u 시간)"
+ 
+-#: dnf/cli/output.py:1845
++#: dnf/cli/output.py:1727
+ #, python-format
+ msgid "(%u days)"
+ msgstr "(%u 일)"
+ 
+-#: dnf/cli/output.py:1846
++#: dnf/cli/output.py:1728
+ msgid "End time       :"
+ msgstr "종료 시간 :"
+ 
+-#: dnf/cli/output.py:1849 dnf/cli/output.py:1851
++#: dnf/cli/output.py:1731 dnf/cli/output.py:1733
+ msgid "End rpmdb      :"
+ msgstr "rpmdb 종료:"
+ 
+-#: dnf/cli/output.py:1858 dnf/cli/output.py:1860
++#: dnf/cli/output.py:1740 dnf/cli/output.py:1742
+ msgid "User           :"
+ msgstr "사용자            :"
+ 
+-#: dnf/cli/output.py:1864 dnf/cli/output.py:1871
++#: dnf/cli/output.py:1746 dnf/cli/output.py:1753
+ msgid "Aborted"
+ msgstr "중지됨"
+ 
+-#: dnf/cli/output.py:1864 dnf/cli/output.py:1867 dnf/cli/output.py:1869
+-#: dnf/cli/output.py:1871 dnf/cli/output.py:1873 dnf/cli/output.py:1875
++#: dnf/cli/output.py:1746 dnf/cli/output.py:1749 dnf/cli/output.py:1751
++#: dnf/cli/output.py:1753 dnf/cli/output.py:1755 dnf/cli/output.py:1757
+ msgid "Return-Code    :"
+ msgstr "반환 코드 :"
+ 
+-#: dnf/cli/output.py:1867 dnf/cli/output.py:1875
++#: dnf/cli/output.py:1749 dnf/cli/output.py:1757
+ msgid "Success"
+ msgstr "성공"
+ 
+-#: dnf/cli/output.py:1869
++#: dnf/cli/output.py:1751
+ msgid "Failures:"
+ msgstr "실패 :"
+ 
+-#: dnf/cli/output.py:1873
++#: dnf/cli/output.py:1755
+ msgid "Failure:"
+ msgstr "실패:"
+ 
+-#: dnf/cli/output.py:1883 dnf/cli/output.py:1885
++#: dnf/cli/output.py:1765 dnf/cli/output.py:1767
+ msgid "Releasever     :"
+-msgstr "Releasever     :"
++msgstr "Releasever :"
+ 
+-#: dnf/cli/output.py:1890 dnf/cli/output.py:1892
++#: dnf/cli/output.py:1772 dnf/cli/output.py:1774
+ msgid "Command Line   :"
+ msgstr "명령 줄 :"
+ 
+-#: dnf/cli/output.py:1897 dnf/cli/output.py:1899
++#: dnf/cli/output.py:1779 dnf/cli/output.py:1781
+ msgid "Comment        :"
+ msgstr "댓글 :"
+ 
+-#: dnf/cli/output.py:1903
++#: dnf/cli/output.py:1785
+ msgid "Transaction performed with:"
+-msgstr "실행된 트랜잭션:"
++msgstr "실행된 연결:"
+ 
+-#: dnf/cli/output.py:1912
++#: dnf/cli/output.py:1794
+ msgid "Packages Altered:"
+-msgstr "변경된 패키지 :"
++msgstr "변경된 꾸러미 :"
+ 
+-#: dnf/cli/output.py:1918
++#: dnf/cli/output.py:1800
+ msgid "Scriptlet output:"
+-msgstr "Scriptlet 출력 :"
++msgstr "스크립트릿 출력 :"
+ 
+-#: dnf/cli/output.py:1925
++#: dnf/cli/output.py:1807
+ msgid "Errors:"
+ msgstr "오류 :"
+ 
+-#: dnf/cli/output.py:1934
++#: dnf/cli/output.py:1816
+ msgid "Dep-Install"
+-msgstr "Dep-Install"
++msgstr "설치-시작"
+ 
+-#: dnf/cli/output.py:1935
++#: dnf/cli/output.py:1817
+ msgid "Obsoleted"
+ msgstr "사용 중지됨"
+ 
+-#: dnf/cli/output.py:1936 dnf/transaction.py:84 dnf/transaction.py:85
++#: dnf/cli/output.py:1818 dnf/transaction.py:84 dnf/transaction.py:85
+ msgid "Obsoleting"
+ msgstr "사용 중지"
+ 
+-#: dnf/cli/output.py:1937
++#: dnf/cli/output.py:1819
+ msgid "Erase"
+ msgstr "삭제"
+ 
+-#: dnf/cli/output.py:1938
++#: dnf/cli/output.py:1820
+ msgid "Reinstall"
+ msgstr "재설치"
+ 
+-#: dnf/cli/output.py:2016
++#: dnf/cli/output.py:1894
+ #, python-format
+ msgid "---> Package %s.%s %s will be installed"
+-msgstr "---> 패키지 %s.%s %s이/가 설치됩니다"
++msgstr "---> 꾸러미 %s.%s %s가 설치됩니다"
+ 
+-#: dnf/cli/output.py:2018
++#: dnf/cli/output.py:1896
+ #, python-format
+ msgid "---> Package %s.%s %s will be an upgrade"
+-msgstr "---> 패키지 %s.%s %s이/가 업그레이드됩니다"
++msgstr "---> 꾸러미 %s.%s %s가 최신화됩니다"
+ 
+-#: dnf/cli/output.py:2020
++#: dnf/cli/output.py:1898
+ #, python-format
+ msgid "---> Package %s.%s %s will be erased"
+-msgstr "---> 패키지 %s.%s %s이/가 제거됩니다"
++msgstr "---> 꾸러미 %s.%s %s가 제거됩니다"
+ 
+-#: dnf/cli/output.py:2022
++#: dnf/cli/output.py:1900
+ #, python-format
+ msgid "---> Package %s.%s %s will be reinstalled"
+-msgstr "---> 패키지 %s.%s %s이/가 다시 설치됩니다"
++msgstr "---> 꾸러미 %s.%s %s가 다시 설치됩니다"
+ 
+-#: dnf/cli/output.py:2024
++#: dnf/cli/output.py:1902
+ #, python-format
+ msgid "---> Package %s.%s %s will be a downgrade"
+-msgstr "---> 패키지 %s.%s %s이/가 다운그레이드됩니다"
++msgstr "---> 꾸러미 %s.%s %s가 하향설치됩니다"
+ 
+-#: dnf/cli/output.py:2026
++#: dnf/cli/output.py:1904
+ #, python-format
+ msgid "---> Package %s.%s %s will be obsoleting"
+-msgstr "---> 패키지 %s.%s %s이/가 더 이상 사용되지 않습니다"
++msgstr "---> 꾸러미 %s.%s %s가 더 이상 사용되지 않습니다"
+ 
+-#: dnf/cli/output.py:2028
++#: dnf/cli/output.py:1906
+ #, python-format
+ msgid "---> Package %s.%s %s will be upgraded"
+-msgstr "---> 패키지 %s.%s %s이/가 업그레이드됩니다"
++msgstr "---> 꾸러미 %s.%s %s가 최신화됩니다"
+ 
+-#: dnf/cli/output.py:2030
++#: dnf/cli/output.py:1908
+ #, python-format
+ msgid "---> Package %s.%s %s will be obsoleted"
+-msgstr "---> 패키지 %s.%s %s이/가 더 이상 사용되지 않습니다"
++msgstr "---> 꾸러미 %s.%s %s가 더 이상 사용되지 않습니다"
+ 
+-#: dnf/cli/output.py:2039
++#: dnf/cli/output.py:1917
+ msgid "--> Starting dependency resolution"
+ msgstr "-> 종석성 해결 시작"
+ 
+-#: dnf/cli/output.py:2044
++#: dnf/cli/output.py:1921
+ msgid "--> Finished dependency resolution"
+ msgstr "-> 종속성 해결 완료"
+ 
+-#: dnf/cli/output.py:2058 dnf/crypto.py:132
++#: dnf/cli/output.py:1935 dnf/crypto.py:132
+ #, python-format
+ msgid ""
+ "Importing GPG key 0x%s:\n"
+@@ -3425,13 +3392,13 @@ msgid ""
+ " From       : %s"
+ msgstr ""
+ "GPG키 0x%s 가져오는 중:\n"
+-" 사용자 ID     : \"%s\"\n"
+-"  지문: %s\n"
+-" 출처        : %s"
++"사용자 ID : \"%s\"\n"
++"지문: %s\n"
++"출처 : %s"
+ 
+ #: dnf/cli/utils.py:98
+ msgid "Running"
+-msgstr "실행중"
++msgstr "실행 중"
+ 
+ #: dnf/cli/utils.py:99
+ msgid "Sleeping"
+@@ -3485,29 +3452,27 @@ msgstr "건너 뛰기."
+ #: dnf/comps.py:196 dnf/comps.py:692 dnf/comps.py:706
+ #, python-format
+ msgid "Module or Group '%s' is not installed."
+-msgstr "모듈 또는 그룹 '%s'이/가 설치되지 않았습니다."
++msgstr "모듈 또는 그룹 '%s'가 설치되지 않았습니다."
+ 
+ #: dnf/comps.py:198 dnf/comps.py:708
+ #, python-format
+ msgid "Module or Group '%s' is not available."
+-msgstr "모듈 또는 그룹 '%s'을/를 사용할 수 없습니다."
++msgstr "모듈 또는 그룹 '%s'을 사용 할 수 없습니다."
+ 
+ #: dnf/comps.py:200
+ #, python-format
+ msgid "Module or Group '%s' does not exist."
+-msgstr "모듈 또는 그룹 '%s'이/가 존재하지 않습니다."
++msgstr "모듈 또는 그룹 '%s'가 존재하지 않습니다."
+ 
+ #: dnf/comps.py:599
+-#, fuzzy, python-format
+-#| msgid "Environment '%s' is not installed."
++#, python-format
+ msgid "Environment id '%s' does not exist."
+-msgstr "환경 '%s'이 설치되지 않았습니다."
++msgstr "환경 id '%s' 가 존재하지 않습니다."
+ 
+-#: dnf/comps.py:622 dnf/transaction_sr.py:443 dnf/transaction_sr.py:453
+-#, fuzzy, python-format
+-#| msgid "Environment '%s' is not installed."
++#: dnf/comps.py:622 dnf/transaction_sr.py:477 dnf/transaction_sr.py:487
++#, python-format
+ msgid "Environment id '%s' is not installed."
+-msgstr "환경 '%s'이 설치되지 않았습니다."
++msgstr "환경id '%s'가 설치되지 않았습니다."
+ 
+ #: dnf/comps.py:639
+ #, python-format
+@@ -3517,19 +3482,23 @@ msgstr "환경 '%s'이 설치되지 않았습니다."
+ #: dnf/comps.py:641
+ #, python-format
+ msgid "Environment '%s' is not available."
+-msgstr "환경 '%s'을/를 사용할 수 없습니다."
++msgstr "환경 '%s'을 사용 할 수 없습니다."
+ 
+ #: dnf/comps.py:673
+-#, fuzzy, python-format
+-#| msgid "Group_id '%s' does not exist."
++#, python-format
+ msgid "Group id '%s' does not exist."
+-msgstr "Group_id '%s' 존재하지 않는다."
++msgstr "Group id '%s' 가 존재하지 않습니다."
+ 
+ #: dnf/conf/config.py:136
+ #, python-format
+ msgid "Error parsing '%s': %s"
+ msgstr "'%s' 구문 분석 중 오류 발생: %s"
+ 
++#: dnf/conf/config.py:151
++#, python-format
++msgid "Invalid configuration value: %s=%s in %s; %s"
++msgstr "잘못된 구성 값: %s=%s (%s; %s에서)"
++
+ #: dnf/conf/config.py:226
+ msgid "Could not set cachedir: {}"
+ msgstr "cachedir를 설정할 수 없습니다: {}"
+@@ -3539,7 +3508,7 @@ msgid ""
+ "Configuration file URL \"{}\" could not be downloaded:\n"
+ "  {}"
+ msgstr ""
+-"구성 파일 URL \"{}\"을 (를) 다운로드 할 수 없습니다:\n"
++"구성 파일 URL \"{}\"를 내려받기 할 수 없습니다:\n"
+ "  {}"
+ 
+ #: dnf/conf/config.py:355 dnf/conf/config.py:391
+@@ -3550,7 +3519,7 @@ msgstr "알 수 없는 설정 옵션 : %s = %s"
+ #: dnf/conf/config.py:372
+ #, python-format
+ msgid "Error parsing --setopt with key '%s', value '%s': %s"
+-msgstr "키 ‘%s', 값 '%s'을/를 사용하여 --setopt 구문 분석 중 오류 발생: %s"
++msgstr "키 ‘%s', 값 '%s'를 사용하여 --setopt 구문 분석 중 오류 발생: %s"
+ 
+ #: dnf/conf/config.py:380
+ #, python-format
+@@ -3564,75 +3533,88 @@ msgstr "잘못되었거나 알 수 없음 \"{}\": {}"
+ #: dnf/conf/config.py:501
+ #, python-format
+ msgid "Error parsing --setopt with key '%s.%s', value '%s': %s"
+-msgstr "키 %s.%s', 값 '%s'을/를 사용하여 --setopt 구문 분석 중 오류 발생: %s"
++msgstr "키 %s.%s', 값 '%s'를 사용하여 --setopt 구문 분석 중 오류 발생: %s"
+ 
+ #: dnf/conf/config.py:504
+ #, python-format
+ msgid "Repo %s did not have a %s attr. before setopt"
+ msgstr "Repo %s에 setopt 이전에 %s attr이 없습니다"
+ 
+-#: dnf/conf/read.py:51
++#: dnf/conf/read.py:60
+ #, python-format
+ msgid "Warning: failed loading '%s', skipping."
+-msgstr "경고: '%s'을/를 로드하지 못했습니다, 건너 뛰기."
++msgstr "경고: '%s'을 적재하지 못했습니다, 건너 뛰기."
+ 
+-#: dnf/conf/read.py:63
++#: dnf/conf/read.py:72
+ msgid "Bad id for repo: {} ({}), byte = {} {}"
+-msgstr "리포지터리의 ID가 잘못되었습니다. {} ({}), byte = {} {}"
++msgstr "레포지터리의 ID가 잘못되었습니다. {} ({}), byte = {} {}"
+ 
+-#: dnf/conf/read.py:67
++#: dnf/conf/read.py:76
+ msgid "Bad id for repo: {}, byte = {} {}"
+-msgstr "리포지터리의 ID가 잘못되었습니다. {}, byte = {} {}"
++msgstr "레포지터리의 ID가 잘못되었습니다. {}, byte = {} {}"
+ 
+-#: dnf/conf/read.py:75
++#: dnf/conf/read.py:84
+ msgid "Repository '{}' ({}): Error parsing config: {}"
+ msgstr "Repository '{}' ({}): 구문 분석 설정 오류: {}"
+ 
+-#: dnf/conf/read.py:78
++#: dnf/conf/read.py:87
+ msgid "Repository '{}': Error parsing config: {}"
+ msgstr "Repository '{}' : 구문 분석 설정 오류: {}"
+ 
+-#: dnf/conf/read.py:84
++#: dnf/conf/read.py:93
+ msgid "Repository '{}' ({}) is missing name in configuration, using id."
+ msgstr "Repository '{}' ({})의 설정에 이름이 누락되어 있습니다. id를 사용하십시오."
+ 
+-#: dnf/conf/read.py:87
++#: dnf/conf/read.py:96
+ msgid "Repository '{}' is missing name in configuration, using id."
+ msgstr "Repository '{}'의 설정에 이름이 누락되어 있습니다. id를 사용하십시오."
+ 
+-#: dnf/conf/read.py:104
++#: dnf/conf/read.py:113
+ msgid "Parsing file \"{}\" failed: {}"
+ msgstr "\"{}\" 파일을 구문 분석하지 못했습니다: {}"
+ 
+ #: dnf/crypto.py:108
+ #, python-format
+ msgid "repo %s: 0x%s already imported"
+-msgstr "repo %s: 0x%s을/를 이미 가져왔습니다"
++msgstr "repo %s: 0x%s를 이미 가져왔습니다"
+ 
+ #: dnf/crypto.py:115
+ #, python-format
+ msgid "repo %s: imported key 0x%s."
+ msgstr "repo %s: 0x%s 키를 가져왔습니다."
+ 
+-#: dnf/db/group.py:293
++#: dnf/crypto.py:145
++msgid "Verified using DNS record with DNSSEC signature."
++msgstr "DNSSEC 서명이 있는 DNS 레코드를 사용하여 확인됨."
++
++#: dnf/crypto.py:147
++msgid "NOT verified using DNS record."
++msgstr "DNS 레코드를 사용하여 확인되지 않음."
++
++#: dnf/crypto.py:184
++#, python-format
++msgid "retrieving repo key for %s unencrypted from %s"
++msgstr "%s에서 암호화 하지 않은 %s를 위한 저장소 키 검색"
++
++#: dnf/db/group.py:301
+ msgid ""
+ "No available modular metadata for modular package '{}', it cannot be "
+ "installed on the system"
+-msgstr "모듈 패키지 '{}'에 사용 가능한 메타 데이터가 없으며 시스템에 설치할 수 없습니다"
++msgstr "모듈 꾸러미 '{}'에 사용 가능한 메타 자료가 없으며 시스템에 설치 할 수 없습니다"
+ 
+-#: dnf/db/group.py:343
++#: dnf/db/group.py:351
+ msgid "No available modular metadata for modular package"
+-msgstr "모듈 패키지에 사용 가능한 모듈 메타 데이터가 없습니다"
++msgstr "모듈 꾸러미에 사용 가능한 모듈 메타 자료가 없습니다"
+ 
+-#: dnf/db/group.py:377
++#: dnf/db/group.py:385
+ #, python-format
+ msgid "Will not install a source rpm package (%s)."
+-msgstr "소스 RPM패키지를 설치하지 않습니다 (%s)."
++msgstr "소스 RPM 꾸러미를 설치하지 않습니다 (%s)."
+ 
+ #: dnf/dnssec.py:168
+ msgid ""
+-"Configuration option 'gpgkey_dns_verification' requires libunbound ({})"
+-msgstr "설정 옵션 'gpgkey_dns_verification'에는 libunbound ({})가 필요합니다"
++"Configuration option 'gpgkey_dns_verification' requires python3-unbound ({})"
++msgstr "구성 선택(옵션) 'gpgkey_dns_verification'에는 python3-unbound ({})가 필요합니다"
+ 
+ #: dnf/dnssec.py:239
+ msgid "DNSSEC extension: Key for user "
+@@ -3679,11 +3661,11 @@ msgstr "요청 중인 문제 :"
+ 
+ #: dnf/exceptions.py:115
+ msgid "missing packages: "
+-msgstr "누락된 패키지: "
++msgstr "누락된 꾸러미: "
+ 
+ #: dnf/exceptions.py:117
+ msgid "broken packages: "
+-msgstr "잘못된 패키지: "
++msgstr "잘못된 꾸러미: "
+ 
+ #: dnf/exceptions.py:119
+ msgid "missing groups or modules: "
+@@ -3698,7 +3680,7 @@ msgid "Modular dependency problem with Defaults:"
+ msgid_plural "Modular dependency problems with Defaults:"
+ msgstr[0] "기본값의 모듈 종속성 문제 :"
+ 
+-#: dnf/exceptions.py:131 dnf/module/module_base.py:686
++#: dnf/exceptions.py:131 dnf/module/module_base.py:854
+ msgid "Modular dependency problem:"
+ msgid_plural "Modular dependency problems:"
+ msgstr[0] "모듈 종속성 문제 :"
+@@ -3722,7 +3704,7 @@ msgstr "표시할 것이 없습니다."
+ 
+ #: dnf/module/__init__.py:28
+ msgid "Installing newer version of '{}' than specified. Reason: {}"
+-msgstr "지정된 버전보다 새 버전의 '{}'을/를 설치합니다. 이유 : {}"
++msgstr "지정된 버전 보다 새로운 버전의 '{}'를 설치합니다. 이유 : {}"
+ 
+ #: dnf/module/__init__.py:29
+ msgid "Enabled modules: {}."
+@@ -3732,7 +3714,47 @@ msgstr "사용 설정된 모듈 : {}."
+ msgid "No profile specified for '{}', please specify profile."
+ msgstr "'{}'에 지정된 프로필이 없습니다. 프로필을 지정하십시오."
+ 
+-#: dnf/module/module_base.py:33
++#: dnf/module/exceptions.py:27
++msgid "No such module: {}"
++msgstr "그런 모듈이 없습니다: {}"
++
++#: dnf/module/exceptions.py:33
++msgid "No such stream: {}"
++msgstr "그런 스트림이 없습니다: {}"
++
++#: dnf/module/exceptions.py:39
++msgid "No enabled stream for module: {}"
++msgstr "모듈에 대한 활성화된 스트림이 없습니다: {}"
++
++#: dnf/module/exceptions.py:46
++msgid "Cannot enable more streams from module '{}' at the same time"
++msgstr "동시에 모듈 '{}'에서 더 많은 스트림을 활성화 할 수 없습니다"
++
++#: dnf/module/exceptions.py:52
++msgid "Different stream enabled for module: {}"
++msgstr "모듈에 대해 활성화된 다른 스트림: {}"
++
++#: dnf/module/exceptions.py:58
++msgid "No such profile: {}"
++msgstr "그런 프로파일이 없습니다: {}"
++
++#: dnf/module/exceptions.py:64
++msgid "Specified profile not installed for {}"
++msgstr "{}를 위한 지정된 프로필이 설치되지 않았습니다"
++
++#: dnf/module/exceptions.py:70
++msgid "No stream specified for '{}', please specify stream"
++msgstr "'{}'을 위한 지정된 스트림이 없으며, 스트림을 지정해주세요"
++
++#: dnf/module/exceptions.py:82
++msgid "No such profile: {}. No profiles available"
++msgstr "그런 프로파일이 없습니다: {}. 사용 가능한 프로파일이 없습니다"
++
++#: dnf/module/exceptions.py:88
++msgid "No profile to remove for '{}'"
++msgstr "제거되는 프로파일이 없습니다('{}'를 위해 )"
++
++#: dnf/module/module_base.py:35
+ msgid ""
+ "\n"
+ "\n"
+@@ -3742,7 +3764,7 @@ msgstr ""
+ "\n"
+ "힌트 : [d] efault, [e] nabled, [x] disabled, [i] stalled"
+ 
+-#: dnf/module/module_base.py:34
++#: dnf/module/module_base.py:36
+ msgid ""
+ "\n"
+ "\n"
+@@ -3752,80 +3774,98 @@ msgstr ""
+ "\n"
+ "힌트 : [d] efault, [e] nabled, [x] disabled, [i] stalled, [a] ctive"
+ 
+-#: dnf/module/module_base.py:54 dnf/module/module_base.py:421
+-#: dnf/module/module_base.py:477 dnf/module/module_base.py:543
++#: dnf/module/module_base.py:56 dnf/module/module_base.py:556
++#: dnf/module/module_base.py:615 dnf/module/module_base.py:681
+ msgid "Ignoring unnecessary profile: '{}/{}'"
+ msgstr "불필요한 프로파일을 무시합니다: '{}/{}'"
+ 
+-#: dnf/module/module_base.py:84
++#: dnf/module/module_base.py:86
+ #, python-brace-format
+ msgid "All matches for argument '{0}' in module '{1}:{2}' are not active"
+ msgstr "모듈 '{1}:{2}'의 인수 '{0}'에 대한 모든 일치 항목이 활성화되지 않았습니다"
+ 
+-#: dnf/module/module_base.py:92
++#: dnf/module/module_base.py:94 dnf/module/module_base.py:204
+ #, python-brace-format
+ msgid "Installing module '{0}' from Fail-Safe repository {1} is not allowed"
+-msgstr "Fail-Safe 리포지토리 {1}에서 모듈 '{0}’을/를 설치할 수 없습니다"
++msgstr "실패 방지 저장소 {1}에서 모듈 '{0}’를 설치 할 수 없습니다"
+ 
+-#: dnf/module/module_base.py:102
++#: dnf/module/module_base.py:104 dnf/module/module_base.py:214
+ msgid ""
+ "Unable to match profile for argument {}. Available profiles for '{}:{}': {}"
+-msgstr "인수 {}의 프로파일을 찾을 수 없습니다. '{}:{}'에 사용 가능한 프로파일: {}"
++msgstr "인수 {}의 프로파일을 찾을 수 없습니다. '{}:{}': {} 에 사용 가능한 프로파일"
+ 
+-#: dnf/module/module_base.py:106
++#: dnf/module/module_base.py:108 dnf/module/module_base.py:218
+ msgid "Unable to match profile for argument {}"
+ msgstr "인수 {}의 프로파일을 찾을 수 없습니다"
+ 
+-#: dnf/module/module_base.py:118
++#: dnf/module/module_base.py:120
+ msgid "No default profiles for module {}:{}. Available profiles: {}"
+ msgstr "{} : {} 모듈에 대한 기본 프로파일이 없습니다. 사용 가능한 프로파일: {}"
+ 
+-#: dnf/module/module_base.py:122
++#: dnf/module/module_base.py:124
+ msgid "No profiles for module {}:{}"
+ msgstr "{} : {} 모듈에 대한 프로파일이 없습니다"
+ 
+-#: dnf/module/module_base.py:129
++#: dnf/module/module_base.py:131
+ msgid "Default profile {} not available in module {}:{}"
+ msgstr "{} 모듈에서 기본 프로필 {}을 (를) 사용할 수 없음 : {}"
+ 
+-#: dnf/module/module_base.py:142
++#: dnf/module/module_base.py:144 dnf/module/module_base.py:247
+ msgid "Installing module from Fail-Safe repository is not allowed"
+-msgstr "Fail-Safe 리포지토리에서 모듈을 설치할 수 없습니다"
++msgstr "실패-방지 저장소에서 설치된 모듈은 허용하지 않습니다"
+ 
+-#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
+-#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
+-#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
+-#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
++#: dnf/module/module_base.py:196
++#, python-brace-format
++msgid "No active matches for argument '{0}' in module '{1}:{2}'"
++msgstr "모듈 '{1}:{2}'의 인수 '{0}'에 대한 일치 항목 없음"
++
++#: dnf/module/module_base.py:228
++#, python-brace-format
++msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'"
++msgstr "설치 프로파일'{0}'은 모듈 '{1} 스트림 '{2}'에서 사용 할 수 없습니다"
++
++#: dnf/module/module_base.py:267
++msgid "No packages available to distrosync for package name '{}'"
++msgstr "꾸러미 이름 '{}'를 위하여 배포판에서 사용 할 수 있는 꾸러미가 없습니다"
++
++#: dnf/module/module_base.py:310 dnf/module/module_base.py:461
++#: dnf/module/module_base.py:486 dnf/module/module_base.py:505
++#: dnf/module/module_base.py:552 dnf/module/module_base.py:611
++#: dnf/module/module_base.py:677 dnf/module/module_base.py:840
+ msgid "Unable to resolve argument {}"
+ msgstr "인수 {}을 (를) 구문 분석할 수 없습니다"
+ 
+-#: dnf/module/module_base.py:160
+-msgid "No match for package {}"
+-msgstr "{} 패키지와 일치하지 않습니다"
+-
+-#: dnf/module/module_base.py:204
++#: dnf/module/module_base.py:321
+ #, python-brace-format
+ msgid "Upgrading module '{0}' from Fail-Safe repository {1} is not allowed"
+-msgstr "Fail-Safe 리포지토리 {1}에서 모듈 '{0}’을/를 업그레이드할 수 없습니다"
++msgstr "실패방지 저장소 {1}에서 모듈 '{0}’를 향상 할 수 없습니다"
+ 
+-#: dnf/module/module_base.py:223 dnf/module/module_base.py:251
++#: dnf/module/module_base.py:340 dnf/module/module_base.py:368
+ msgid "Unable to match profile in argument {}"
+ msgstr "인수 {}에서 프로파일이 일치하지 않습니다"
+ 
+-#: dnf/module/module_base.py:231
++#: dnf/module/module_base.py:348
+ msgid "Upgrading module from Fail-Safe repository is not allowed"
+-msgstr "Fail-Safe 리포지토리에서 모듈을 업그레이드할 수 없습니다"
++msgstr "실패-방지 저장소에서 모듈을 향상 할 수 없습니다"
+ 
+-#: dnf/module/module_base.py:367
++#: dnf/module/module_base.py:422
++#, python-brace-format
++msgid ""
++"Argument '{argument}' matches {stream_count} streams ('{streams}') of module"
++" '{module}', but none of the streams are enabled or default"
++msgstr ""
++"인수 '{argument}'는 {stream_count} 스트림 ('{streams}')과 일치합니다 (모듈의 '{module}'), "
++"하지만 활성화 되었거나 지정된 스트림이 없습니다"
++
++#: dnf/module/module_base.py:509
+ msgid ""
+ "Only module name is required. Ignoring unneeded information in argument: "
+ "'{}'"
+ msgstr "모듈 이름만 필요합니다. '{}'인수에서 불필요한 정보를 무시합니다"
+ 
+-#: dnf/package.py:298
+-#, python-format
+-msgid "%s: %s check failed: %s vs %s"
+-msgstr "%s: %s 확인 실패 : %s 대 %s"
++#: dnf/module/module_base.py:841
++msgid "No match for package {}"
++msgstr "{} 꾸러미와 일치하지 않습니다"
+ 
+ #. empty file is invalid json format
+ #: dnf/persistor.py:54
+@@ -3836,12 +3876,12 @@ msgstr "%s는 빈 파일입니다"
+ #: dnf/persistor.py:91
+ #, python-format
+ msgid "Failed to load expired repos cache: %s"
+-msgstr ""
++msgstr "만료된 저장소 cache:%s 를 적재하는데 실패하였습니다"
+ 
+ #: dnf/persistor.py:99
+ #, python-format
+ msgid "Failed to store expired repos cache: %s"
+-msgstr ""
++msgstr "만료된 저장소 캐쉬: %s 저장하는데 실패하였습니다"
+ 
+ #: dnf/persistor.py:106
+ msgid "Failed storing last makecache time."
+@@ -3861,27 +3901,27 @@ msgstr "구문 분석에 실패했습니다. %s"
+ msgid "Loaded plugins: %s"
+ msgstr "로드된 플러그인 : %s"
+ 
+-#: dnf/plugin.py:199
++#: dnf/plugin.py:211
+ #, python-format
+ msgid "Failed loading plugin \"%s\": %s"
+-msgstr "플러그인 \"%s\"을/를 불러오지 못했습니다: %s"
++msgstr "플러그인 \"%s\"를 불러오지 못했습니다: %s"
+ 
+-#: dnf/plugin.py:231
++#: dnf/plugin.py:243
+ msgid "No matches found for the following enable plugin patterns: {}"
+ msgstr "다음의 활성 플러그인 패턴과 일치하는 항목이 없습니다: {}"
+ 
+-#: dnf/plugin.py:235
++#: dnf/plugin.py:247
+ msgid "No matches found for the following disable plugin patterns: {}"
+ msgstr "다음의 비활성화 플러그인 패턴과 일치하는 항목이 없습니다: {}"
+ 
+ #: dnf/repo.py:84
+ #, python-format
+ msgid "no matching payload factory for %s"
+-msgstr "%s와 일치하는 payload factory가 없습니다."
++msgstr "%s와 일치하는 payload factory가 없습니다"
+ 
+ #: dnf/repo.py:111
+ msgid "Already downloaded"
+-msgstr "이미 다운로드 됨"
++msgstr "이미 내려받음"
+ 
+ #. pinging mirrors, this might take a while
+ #: dnf/repo.py:347
+@@ -3899,15 +3939,32 @@ msgstr "%s 리포지토리 활성화"
+ msgid "Added %s repo from %s"
+ msgstr "%s 에서 %s repo를 추가했습니다"
+ 
++#: dnf/rpm/miscutils.py:35
++#, python-brace-format
++msgid ""
++"Using rpmkeys executable from {path} to verify signature for package: "
++"{package}."
++msgstr "{path}에서 실행 할 수 있는 rpmkeys를 사용하여 꾸러미 서명 확인: {package}."
++
++#: dnf/rpm/miscutils.py:39
++msgid "Cannot find rpmkeys executable to verify signatures."
++msgstr "서명을 확인하기 위해 실행 할 수 있는 rpmkeys를 찾을 수 없습니다."
++
+ #: dnf/rpm/transaction.py:119
+ msgid "Errors occurred during test transaction."
+-msgstr "트랜잭션 테스트 중에 오류가 발생했습니다."
++msgstr "연결 시험 중에 오류가 발생했습니다."
++
++#: dnf/sack.py:47
++msgid ""
++"allow_vendor_change is disabled. This option is currently not supported for "
++"downgrade and distro-sync commands"
++msgstr "허용_공급업체_변화는 사용 할 수 없습니다. 이 선택은 현재 다운드레이드와 distro-sync 명령을 지원하지 않습니다"
+ 
+ #. TRANSLATORS: This is for a single package currently being downgraded.
+ #: dnf/transaction.py:80
+ msgctxt "currently"
+ msgid "Downgrading"
+-msgstr "다운그레이드 중"
++msgstr "하향 설치 중"
+ 
+ #: dnf/transaction.py:81 dnf/transaction.py:88 dnf/transaction.py:93
+ #: dnf/transaction.py:95
+@@ -3935,7 +3992,7 @@ msgstr "삭제 중"
+ #: dnf/transaction.py:92
+ msgctxt "currently"
+ msgid "Upgrading"
+-msgstr "업그레이드 중"
++msgstr "향상 중"
+ 
+ #: dnf/transaction.py:96
+ msgid "Verifying"
+@@ -3943,168 +4000,202 @@ msgstr "확인 중"
+ 
+ #: dnf/transaction.py:97
+ msgid "Running scriptlet"
+-msgstr "scriptlet 실행 중"
++msgstr "스크립트릿 실행 중"
+ 
+ #: dnf/transaction.py:99
+ msgid "Preparing"
+ msgstr "준비 중"
+ 
+-#: dnf/transaction_sr.py:60
++#: dnf/transaction_sr.py:66
+ #, python-brace-format
+-msgid "Errors in \"{filename}\":"
+-msgstr ""
++msgid ""
++"The following problems occurred while replaying the transaction from file "
++"\"{filename}\":"
++msgstr "다음 문제는 파일에서 연결 응답 할 때에 발생합니다 \"{filename}\":"
+ 
+-#: dnf/transaction_sr.py:70
+-#, python-brace-format
+-msgid "Error in \"{filename}\": {error}"
+-msgstr ""
++#: dnf/transaction_sr.py:68
++msgid "The following problems occurred while running a transaction:"
++msgstr "연결 중에 오류가 발생했습니다:"
+ 
+-#: dnf/transaction_sr.py:87
++#: dnf/transaction_sr.py:89
+ #, python-brace-format
+ msgid "Invalid major version \"{major}\", number expected."
+-msgstr ""
++msgstr "잘못된 주요 버전 \"{major}\", 번호가 예상됩니다."
+ 
+-#: dnf/transaction_sr.py:95
++#: dnf/transaction_sr.py:97
+ #, python-brace-format
+ msgid "Invalid minor version \"{minor}\", number expected."
+-msgstr ""
++msgstr "잘못된 하위 버전 \"{minor}\", 번호가 예상됩니다."
+ 
+-#: dnf/transaction_sr.py:101
++#: dnf/transaction_sr.py:103
+ #, python-brace-format
+ msgid ""
+ "Incompatible major version \"{major}\", supported major version is "
+ "\"{major_supp}\"."
+-msgstr ""
++msgstr "호환되지 않는 주요 버전 \"{major}\", 지원되는 주요 버전 \"{major_supp}\"."
+ 
+-#: dnf/transaction_sr.py:244
++#: dnf/transaction_sr.py:224
++msgid ""
++"Conflicting TransactionReplay arguments have been specified: filename, data"
++msgstr "연결 지연 인수의 충돌은 명시됩니다: 파일이름, 자료"
++
++#: dnf/transaction_sr.py:265
+ #, python-brace-format
+ msgid "Unexpected type of \"{id}\", {exp} expected."
+-msgstr ""
++msgstr "예상치 못한 유형 \"{id}\", {exp} 가 예상된다."
+ 
+-#: dnf/transaction_sr.py:250
++#: dnf/transaction_sr.py:271
+ #, python-brace-format
+ msgid "Missing key \"{key}\"."
+-msgstr ""
++msgstr "누락된 키 \"{key}\"."
+ 
+-#: dnf/transaction_sr.py:263
++#: dnf/transaction_sr.py:285
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in an rpm."
+-msgstr ""
++msgstr "rpm안에 누락된 객체 키 \"{key}\"."
+ 
+-#: dnf/transaction_sr.py:267
++#: dnf/transaction_sr.py:289
+ #, python-brace-format
+ msgid "Unexpected value of package reason \"{reason}\" for rpm nevra \"{nevra}\"."
+-msgstr ""
++msgstr "rpm nevra \"{nevra}\"를 위한 예상되지 않은 꾸러미 이유\"{reason}\" 의 값."
+ 
+-#: dnf/transaction_sr.py:275
++#: dnf/transaction_sr.py:297
+ #, python-brace-format
+ msgid "Cannot parse NEVRA for package \"{nevra}\"."
+-msgstr ""
++msgstr "꾸러미 \"{nevra}\"를 위해 NEVRA를 구문 분석 할 수 없습니다."
+ 
+-#: dnf/transaction_sr.py:286
++#: dnf/transaction_sr.py:321
+ #, python-brace-format
+ msgid "Cannot find rpm nevra \"{nevra}\"."
+-msgstr ""
++msgstr "rpm nevra \"{nevra}\"를 찾을 수 없습니다."
+ 
+-#: dnf/transaction_sr.py:301
++#: dnf/transaction_sr.py:336
+ #, python-brace-format
+ msgid "Package \"{na}\" is already installed for action \"{action}\"."
+-msgstr ""
++msgstr "꾸러미 \"{na}\"는 활동 \"{action}\"를 위해 이미 설치되어 있습니다."
+ 
+-#: dnf/transaction_sr.py:311
++#: dnf/transaction_sr.py:345
+ #, python-brace-format
+ msgid ""
+ "Package nevra \"{nevra}\" not available in repositories for action "
+ "\"{action}\"."
+-msgstr ""
++msgstr "꾸러미 nervra \"{nevra}\"는 실행 \"{action}\"을 위한 저장소에서 사용 할 수 없음."
+ 
+-#: dnf/transaction_sr.py:322
++#: dnf/transaction_sr.py:356
+ #, python-brace-format
+ msgid "Package nevra \"{nevra}\" not installed for action \"{action}\"."
+-msgstr ""
++msgstr "꾸러미 nevra\"{nevra}\"는 활동 \"{action}\"을 위해 설치되지 않음."
+ 
+-#: dnf/transaction_sr.py:336
++#: dnf/transaction_sr.py:370
+ #, python-brace-format
+ msgid "Unexpected value of package action \"{action}\" for rpm nevra \"{nevra}\"."
+-msgstr ""
++msgstr "rpm nevra \"{nevra}\"를 위해 기대하지 않는 꾸러미 활동 \"{action}\"의 값."
+ 
+-#: dnf/transaction_sr.py:343
+-#, fuzzy, python-format
+-#| msgid "Group_id '%s' does not exist."
++#: dnf/transaction_sr.py:377
++#, python-format
+ msgid "Group id '%s' is not available."
+-msgstr "Group_id '%s' 존재하지 않는다."
++msgstr "Group_id '%s'는 사용 할 수 없습니다."
+ 
+-#: dnf/transaction_sr.py:364
++#: dnf/transaction_sr.py:398
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in groups.packages."
+-msgstr ""
++msgstr "group.packages에 있는 객체 키 \"{key}\" 누락."
+ 
+-#: dnf/transaction_sr.py:377 dnf/transaction_sr.py:387
+-#, fuzzy, python-format
+-#| msgid "Environment '%s' is not installed."
++#: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421
++#, python-format
+ msgid "Group id '%s' is not installed."
+-msgstr "환경 '%s'이 설치되지 않았습니다."
++msgstr "그룹 '%s'는 설치되어 있지 않습니다."
+ 
+-#: dnf/transaction_sr.py:398
+-#, fuzzy, python-format
+-#| msgid "Environment '%s' is not installed."
++#: dnf/transaction_sr.py:432
++#, python-format
+ msgid "Environment id '%s' is not available."
+-msgstr "환경 '%s'이 설치되지 않았습니다."
++msgstr "환경 id '%s'는 사용 할 수 없습니다."
+ 
+-#: dnf/transaction_sr.py:422
++#: dnf/transaction_sr.py:456
+ #, python-brace-format
+ msgid ""
+ "Invalid value \"{group_type}\" of environments.groups.group_type, only "
+ "\"mandatory\" or \"optional\" is supported."
+-msgstr ""
++msgstr "잘못된 environments.groups.group_type의 값 \"{group_type}\", \"필 수\" 또는 \"선택\"만 지원합니다."
+ 
+-#: dnf/transaction_sr.py:430
++#: dnf/transaction_sr.py:464
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in environments.groups."
+-msgstr ""
++msgstr "환경 그룹에서 누락된 객체 키 \"{key}\"."
+ 
+-#: dnf/transaction_sr.py:508
++#: dnf/transaction_sr.py:542
+ #, python-brace-format
+ msgid "Unexpected value of group action \"{action}\" for group \"{group}\"."
+-msgstr ""
++msgstr "그룹 \"{group}\"을 위해 예상치 못한 그룹 활동 \"{action}\"의 값."
+ 
+-#: dnf/transaction_sr.py:513
++#: dnf/transaction_sr.py:547
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in a group."
+-msgstr ""
++msgstr "그룹 안에 누락된 객체 키 \"{key}\"."
+ 
+-#: dnf/transaction_sr.py:537
++#: dnf/transaction_sr.py:571
+ #, python-brace-format
+ msgid "Unexpected value of environment action \"{action}\" for environment \"{env}\"."
+-msgstr ""
++msgstr "환경 \"{env}\"를 위해 예상하지 못한 환경 활동 \"{action}\"의 값."
+ 
+-#: dnf/transaction_sr.py:542
++#: dnf/transaction_sr.py:576
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in an environment."
+-msgstr ""
++msgstr "환경에 누락된 객체 키 \"{key}\"."
+ 
+-#: dnf/transaction_sr.py:581
++#: dnf/transaction_sr.py:615
+ #, python-brace-format
+ msgid ""
+ "Package nevra \"{nevra}\", which is not present in the transaction file, was"
+ " pulled into the transaction."
+-msgstr ""
++msgstr "꾸러미 nevra \"{nevra}\", 연겨 파일에 존재하지 않는 것은 연결로 가져왔습니다."
+ 
+-#: dnf/util.py:391 dnf/util.py:393
++#: dnf/util.py:419 dnf/util.py:421
+ msgid "Problem"
+ msgstr "문제"
+ 
+-#: dnf/util.py:444
++#: dnf/util.py:472
+ msgid "TransactionItem not found for key: {}"
+ msgstr "{} 키에 대한 TransactionItem을 찾을 수 없습니다"
+ 
+-#: dnf/util.py:454
++#: dnf/util.py:482
+ msgid "TransactionSWDBItem not found for key: {}"
+ msgstr "{} 키에 대한 TransactionSWDBItem을 찾을 수 없습니다"
+ 
+-#: dnf/util.py:457
++#: dnf/util.py:485
+ msgid "Errors occurred during transaction."
+-msgstr "트랜잭션 중에 오류가 발생했습니다."
++msgstr "연결 중에 오류가 발생했습니다."
++
++#: dnf/util.py:621
++msgid "Reinstalled"
++msgstr "다시 설치되었습니다"
++
++#: dnf/util.py:622
++msgid "Skipped"
++msgstr "건너 뛰기됨"
++
++#: dnf/util.py:623
++msgid "Removed"
++msgstr "제거되었습니다"
++
++#: dnf/util.py:626
++msgid "Failed"
++msgstr "실패하였습니다"
++
++#~ msgid "%s: %s check failed: %s vs %s"
++#~ msgstr "%s: %s 확인 실패 : %s 대 %s"
++
++#~ msgid "Action not handled: {}"
++#~ msgstr "작업이 처리되지 않았습니다: {}"
++
++#~ msgid "no package matched"
++#~ msgstr "일치하는 패키지가 없습니다."
++
++#~ msgid "Not found given transaction ID"
++#~ msgstr "주어진 트랜잭션 ID를 찾을 수 없습니다"
++
++#~ msgid "Undoing transaction {}, from {}"
++#~ msgstr "{}에서 {} 트랜잭션 실행을 취소하고 있습니다"
+ 
+ #~ msgid "format for displaying found packages"
+ #~ msgstr "발견 된 패키지를 표시하기위한 형식"
+diff --git a/po/zh_CN.po b/po/zh_CN.po
+index 7ede4ed8..9f8da6a6 100644
+--- a/po/zh_CN.po
++++ b/po/zh_CN.po
+@@ -13,33 +13,34 @@
+ # Qi Fan <fun224@gmail.com>, 2016. #zanata
+ # Tommy He <lovenemesis@fedoraproject.org>, 2016. #zanata
+ # mosquito <sensor.wen@gmail.com>, 2016. #zanata
+-# Charles Lee <lchopn@gmail.com>, 2017. #zanata, 2020.
++# Charles Lee <lchopn@gmail.com>, 2017. #zanata, 2020, 2021.
+ # Pany <pany@fedoraproject.org>, 2017. #zanata
+ # cheng ye <18969068329@163.com>, 2017. #zanata
+ # lexuge <LEXUGEyky@outlook.com>, 2017. #zanata
+ # n0vad3v <jonasguo@fedoraproject.org>, 2017. #zanata
+ # zhouxiaobo <zhouxiaobo.500@gmail.com>, 2017. #zanata
+-# Ludek Janda <ljanda@redhat.com>, 2018. #zanata
++# Ludek Janda <ljanda@redhat.com>, 2018. #zanata, 2021.
+ # Pany <pany@fedoraproject.org>, 2018. #zanata
+ # Qiyu Yan <yanqiyu01@gmail.com>, 2018. #zanata
+ # Qiyu Yan <yanqiyu01@gmail.com>, 2019. #zanata
+ # Anonymous <noreply@weblate.org>, 2020.
+ # Hongqiao Chen <harrychen0314@gmail.com>, 2020.
+ # Harry Chen <harrychen0314@gmail.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-08-02 08:29+0000\n"
+-"Last-Translator: Charles Lee <lchopn@gmail.com>\n"
+-"Language-Team: Chinese (Simplified) <https://translate.fedoraproject.org/projects/dnf/dnf-master/zh_CN/>\n"
++"POT-Creation-Date: 2021-08-11 16:00+0200\n"
++"PO-Revision-Date: 2021-09-06 17:24+0000\n"
++"Last-Translator: Sundeep Anand <suanand@redhat.com>\n"
++"Language-Team: Chinese (Simplified) <https://translate.fedoraproject.org/projects/dnf/dnf-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.8\n"
+ 
+ #: dnf/automatic/emitter.py:32
+ #, python-format
+@@ -86,7 +87,7 @@ msgstr "使用 '%s' 发送邮件失败: %s"
+ msgid "Failed to execute command '%s': returned %d"
+ msgstr "无法执行命令 '%s' :返回 %d"
+ 
+-#: dnf/automatic/main.py:164 dnf/conf/config.py:151
++#: dnf/automatic/main.py:164
+ #, python-format
+ msgid "Unknown configuration value: %s=%s in %s; %s"
+ msgstr "未知配置值: %s=%s 在 %s 中; %s"
+@@ -96,7 +97,7 @@ msgstr "未知配置值: %s=%s 在 %s 中; %s"
+ msgid "Unknown configuration option: %s = %s in %s"
+ msgstr "未知配置选项:%s = %s 在 %s 中"
+ 
+-#: dnf/automatic/main.py:237 dnf/cli/cli.py:299
++#: dnf/automatic/main.py:237 dnf/cli/cli.py:305
+ msgid "GPG check FAILED"
+ msgstr "GPG 检查失败"
+ 
+@@ -109,9 +110,9 @@ msgid "Started dnf-automatic."
+ msgstr "启动的 dnf-automatic。"
+ 
+ #: dnf/automatic/main.py:308
+-#, python-format
+-msgid "Sleep for %s seconds"
+-msgstr "休眠 %s 秒"
++msgid "Sleep for {} second"
++msgid_plural "Sleep for {} seconds"
++msgstr[0] "休眠 {} 秒"
+ 
+ #: dnf/automatic/main.py:315
+ msgid "System is off-line."
+@@ -123,388 +124,374 @@ msgstr "系统离线。"
+ msgid "Error: %s"
+ msgstr "错误:%s"
+ 
+-#: dnf/base.py:146
++#: dnf/base.py:148 dnf/base.py:477 dnf/base.py:479
+ msgid "loading repo '{}' failure: {}"
+ msgstr "加载仓库 '{}' 失败:{}"
+ 
+-#: dnf/base.py:148
++#: dnf/base.py:150
+ msgid "Loading repository '{}' has failed"
+ msgstr "加载仓库 '{}' 失败"
+ 
+-#: dnf/base.py:320
++#: dnf/base.py:327
+ msgid "Metadata timer caching disabled when running on metered connection."
+ msgstr "在使用按流量计费的连接时禁用元数据计时缓存。"
+ 
+-#: dnf/base.py:325
++#: dnf/base.py:332
+ msgid "Metadata timer caching disabled when running on a battery."
+ msgstr "在使用电池时禁用元数据计时缓存。"
+ 
+-#: dnf/base.py:330
++#: dnf/base.py:337
+ msgid "Metadata timer caching disabled."
+ msgstr "元数据计时缓存已禁用。"
+ 
+-#: dnf/base.py:335
++#: dnf/base.py:342
+ msgid "Metadata cache refreshed recently."
+ msgstr "元数据缓存近期已刷新。"
+ 
+-#: dnf/base.py:341 dnf/cli/commands/__init__.py:91
++#: dnf/base.py:348 dnf/cli/commands/__init__.py:91
+ msgid "There are no enabled repositories in \"{}\"."
+ msgstr "在\"{}\"中没有被启用的仓库。"
+ 
+-#: dnf/base.py:348
++#: dnf/base.py:355
+ #, python-format
+ msgid "%s: will never be expired and will not be refreshed."
+ msgstr "%s: 永远不过期并不会被刷新。"
+ 
+-#: dnf/base.py:350
++#: dnf/base.py:357
+ #, python-format
+ msgid "%s: has expired and will be refreshed."
+ msgstr "%s: 已过期并不会被刷新。"
+ 
+ #. expires within the checking period:
+-#: dnf/base.py:354
++#: dnf/base.py:361
+ #, python-format
+ msgid "%s: metadata will expire after %d seconds and will be refreshed now"
+ msgstr "%s: 元数据将在 %d 秒后过期,现在将会被刷新"
+ 
+-#: dnf/base.py:358
++#: dnf/base.py:365
+ #, python-format
+ msgid "%s: will expire after %d seconds."
+ msgstr "%s: 将会在 %d 秒后过期。"
+ 
+ #. performs the md sync
+-#: dnf/base.py:364
++#: dnf/base.py:371
+ msgid "Metadata cache created."
+ msgstr "元数据缓存已建立。"
+ 
+-#: dnf/base.py:397
++#: dnf/base.py:404 dnf/base.py:471
+ #, python-format
+ msgid "%s: using metadata from %s."
+ msgstr "%s:正在使用截止于 %s 的元数据。"
+ 
+-#: dnf/base.py:409
++#: dnf/base.py:416 dnf/base.py:484
+ #, python-format
+ msgid "Ignoring repositories: %s"
+ msgstr "正在忽略仓库:%s"
+ 
+-#: dnf/base.py:412
++#: dnf/base.py:419
+ #, python-format
+ msgid "Last metadata expiration check: %s ago on %s."
+ msgstr "上次元数据过期检查:%s 前,执行于 %s。"
+ 
+-#: dnf/base.py:443
++#: dnf/base.py:512
+ msgid ""
+ "The downloaded packages were saved in cache until the next successful "
+ "transaction."
+ msgstr "下载的软件包保存在缓存中,直到下次成功执行事务。"
+ 
+-#: dnf/base.py:445
++#: dnf/base.py:514
+ #, python-format
+ msgid "You can remove cached packages by executing '%s'."
+ msgstr "您可以通过执行 '%s' 删除软件包缓存。"
+ 
+-#: dnf/base.py:535
++#: dnf/base.py:606
+ #, python-format
+ msgid "Invalid tsflag in config file: %s"
+ msgstr "配置文件 %s 中使用 tsflag 是错误的"
+ 
+-#: dnf/base.py:591
++#: dnf/base.py:662
+ #, python-format
+ msgid "Failed to add groups file for repository: %s - %s"
+ msgstr "为仓库 %s 添加组文件时失败:%s"
+ 
+-#: dnf/base.py:823
++#: dnf/base.py:904
+ msgid "Running transaction check"
+ msgstr "运行事务检查"
+ 
+-#: dnf/base.py:831
++#: dnf/base.py:912
+ msgid "Error: transaction check vs depsolve:"
+ msgstr "错误:事务检查与依赖解决错误:"
+ 
+-#: dnf/base.py:837
++#: dnf/base.py:918
+ msgid "Transaction check succeeded."
+ msgstr "事务检查成功。"
+ 
+-#: dnf/base.py:840
++#: dnf/base.py:921
+ msgid "Running transaction test"
+ msgstr "运行事务测试"
+ 
+-#: dnf/base.py:850 dnf/base.py:992
++#: dnf/base.py:931 dnf/base.py:1082
+ msgid "RPM: {}"
+ msgstr "RPM软件包: {}"
+ 
+-#: dnf/base.py:851
++#: dnf/base.py:932
+ msgid "Transaction test error:"
+ msgstr "事物测试失败:"
+ 
+-#: dnf/base.py:862
++#: dnf/base.py:943
+ msgid "Transaction test succeeded."
+ msgstr "事务测试成功。"
+ 
+-#: dnf/base.py:883
++#: dnf/base.py:964
+ msgid "Running transaction"
+ msgstr "运行事务"
+ 
+-#: dnf/base.py:911
++#: dnf/base.py:1001
+ msgid "Disk Requirements:"
+ msgstr "磁盘需求:"
+ 
+-#: dnf/base.py:914
++#: dnf/base.py:1004
+ #, python-brace-format
+ msgid "At least {0}MB more space needed on the {1} filesystem."
+ msgid_plural "At least {0}MB more space needed on the {1} filesystem."
+ msgstr[0] "在文件系统{1}上至少需要{0}MB的可用空间。"
+ 
+-#: dnf/base.py:921
++#: dnf/base.py:1011
+ msgid "Error Summary"
+ msgstr "错误汇总"
+ 
+-#: dnf/base.py:947
++#: dnf/base.py:1037
+ #, python-brace-format
+ msgid "RPMDB altered outside of {prog}."
+ msgstr "RPMDB 在 {prog} 外被改动了。"
+ 
+-#: dnf/base.py:993 dnf/base.py:1001
++#: dnf/base.py:1083 dnf/base.py:1091
+ msgid "Could not run transaction."
+ msgstr "不能执行事务。"
+ 
+-#: dnf/base.py:996
++#: dnf/base.py:1086
+ msgid "Transaction couldn't start:"
+ msgstr "事务无法启动:"
+ 
+-#: dnf/base.py:1010
++#: dnf/base.py:1100
+ #, python-format
+ msgid "Failed to remove transaction file %s"
+ msgstr "移除事务文件 %s 失败"
+ 
+-#: dnf/base.py:1092
++#: dnf/base.py:1182
+ msgid "Some packages were not downloaded. Retrying."
+ msgstr "某些软件包没有被下载。正在重试。"
+ 
+-#: dnf/base.py:1122
++#: dnf/base.py:1212
+ #, python-format
+ msgid "Delta RPMs reduced %.1f MB of updates to %.1f MB (%d.1%% saved)"
+ msgstr "增量 RPM 将 %.1f MB 的更新减少至 %.1f MB(已节省 %d.1%% )"
+ 
+-#: dnf/base.py:1125
++#: dnf/base.py:1215
+ #, python-format
+ msgid ""
+ "Failed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)"
+ msgstr "增量 RPM 未能将 %.1f MB 的更新减少至 %.1f MB(已浪费 %d.1%% )"
+ 
+-#: dnf/base.py:1167
++#: dnf/base.py:1257
+ msgid "Cannot add local packages, because transaction job already exists"
+ msgstr "由于事物已经存在,无法添加本地软件包"
+ 
+-#: dnf/base.py:1181
++#: dnf/base.py:1271
+ msgid "Could not open: {}"
+ msgstr "无法打开: {}"
+ 
+-#: dnf/base.py:1219
++#: dnf/base.py:1309
+ #, python-format
+ msgid "Public key for %s is not installed"
+ msgstr "%s 的公钥没有安装"
+ 
+-#: dnf/base.py:1223
++#: dnf/base.py:1313
+ #, python-format
+ msgid "Problem opening package %s"
+ msgstr "打开软件包 %s 出现问题"
+ 
+-#: dnf/base.py:1231
++#: dnf/base.py:1321
+ #, python-format
+ msgid "Public key for %s is not trusted"
+ msgstr "%s 的公钥不可信任"
+ 
+-#: dnf/base.py:1235
++#: dnf/base.py:1325
+ #, python-format
+ msgid "Package %s is not signed"
+ msgstr "软件包 %s 没有签名"
+ 
+-#: dnf/base.py:1265
++#: dnf/base.py:1355
+ #, python-format
+ msgid "Cannot remove %s"
+ msgstr "无法删除 %s"
+ 
+-#: dnf/base.py:1269
++#: dnf/base.py:1359
+ #, python-format
+ msgid "%s removed"
+ msgstr "%s 已删除"
+ 
+-#: dnf/base.py:1549
++#: dnf/base.py:1639
+ msgid "No match for group package \"{}\""
+ msgstr "没有和组 \"{}\" 匹配的"
+ 
+-#: dnf/base.py:1635
++#: dnf/base.py:1725
+ #, python-format
+ msgid "Adding packages from group '%s': %s"
+ msgstr "从组 '%s': %s 添加软件包"
+ 
+-#: dnf/base.py:1658 dnf/cli/cli.py:219 dnf/cli/commands/__init__.py:442
+-#: dnf/cli/commands/__init__.py:499 dnf/cli/commands/__init__.py:592
+-#: dnf/cli/commands/__init__.py:641 dnf/cli/commands/install.py:80
++#: dnf/base.py:1748 dnf/cli/cli.py:221 dnf/cli/commands/__init__.py:437
++#: dnf/cli/commands/__init__.py:494 dnf/cli/commands/__init__.py:587
++#: dnf/cli/commands/__init__.py:636 dnf/cli/commands/install.py:80
+ #: dnf/cli/commands/install.py:103 dnf/cli/commands/install.py:110
+ msgid "Nothing to do."
+ msgstr "无需任何处理。"
+ 
+-#: dnf/base.py:1676
++#: dnf/base.py:1766
+ msgid "No groups marked for removal."
+ msgstr "没有软件包组需要移除。"
+ 
+-#: dnf/base.py:1710
++#: dnf/base.py:1800
+ msgid "No group marked for upgrade."
+ msgstr "没有标记为要升级的组。"
+ 
+-#: dnf/base.py:1925
++#: dnf/base.py:2014
+ #, python-format
+ msgid "Package %s not installed, cannot downgrade it."
+ msgstr "软件包 %s 并没有能够安装,无法进行降级操作。"
+ 
+-#: dnf/base.py:1927 dnf/base.py:1946 dnf/base.py:1959 dnf/base.py:1980
+-#: dnf/base.py:2029 dnf/base.py:2037 dnf/base.py:2172 dnf/cli/cli.py:411
+-#: dnf/cli/commands/__init__.py:425 dnf/cli/commands/__init__.py:482
+-#: dnf/cli/commands/__init__.py:586 dnf/cli/commands/__init__.py:633
+-#: dnf/cli/commands/__init__.py:711 dnf/cli/commands/install.py:147
++#: dnf/base.py:2016 dnf/base.py:2035 dnf/base.py:2048 dnf/base.py:2075
++#: dnf/base.py:2128 dnf/base.py:2136 dnf/base.py:2270 dnf/cli/cli.py:417
++#: dnf/cli/commands/__init__.py:420 dnf/cli/commands/__init__.py:477
++#: dnf/cli/commands/__init__.py:581 dnf/cli/commands/__init__.py:628
++#: dnf/cli/commands/__init__.py:706 dnf/cli/commands/install.py:147
+ #: dnf/cli/commands/reinstall.py:70 dnf/cli/commands/reinstall.py:84
+-#: dnf/cli/commands/upgrade.py:110 dnf/cli/commands/upgrade.py:121
++#: dnf/cli/commands/upgrade.py:105 dnf/cli/commands/upgrade.py:116
+ #, python-format
+ msgid "No match for argument: %s"
+ msgstr "未找到匹配的参数: %s"
+ 
+-#: dnf/base.py:1934
++#: dnf/base.py:2023
+ #, python-format
+ msgid "Package %s of lower version already installed, cannot downgrade it."
+ msgstr "软件包 %s 的低版本已经安装,无法进行降级。"
+ 
+-#: dnf/base.py:1957
++#: dnf/base.py:2046
+ #, python-format
+ msgid "Package %s not installed, cannot reinstall it."
+ msgstr "软件包 %s 未能够安装成功,无法进行重新安装。"
+ 
+-#: dnf/base.py:1972
++#: dnf/base.py:2061
+ #, python-format
+ msgid "File %s is a source package and cannot be updated, ignoring."
+ msgstr "%s 文件无法被升级,已忽略。"
+ 
+-#: dnf/base.py:1978
++#: dnf/base.py:2072
+ #, python-format
+ msgid "Package %s not installed, cannot update it."
+ msgstr "软件包 %s 未安装,无法更新。"
+ 
+-#: dnf/base.py:1987
++#: dnf/base.py:2082
+ #, python-format
+ msgid ""
+ "The same or higher version of %s is already installed, cannot update it."
+ msgstr "已经安装了软件包%s的相同或更高版本,无法更新。"
+ 
+-#: dnf/base.py:2026 dnf/cli/commands/reinstall.py:81
++#: dnf/base.py:2125 dnf/cli/commands/reinstall.py:81
+ #, python-format
+ msgid "Package %s available, but not installed."
+ msgstr "软件包 %s 可用,但没有被安装。"
+ 
+-#: dnf/base.py:2032
++#: dnf/base.py:2131
+ #, python-format
+ msgid "Package %s available, but installed for different architecture."
+ msgstr "软件包 %s 可用,当是为其它架构安装。"
+ 
+-#: dnf/base.py:2057 dnf/base.py:2250 dnf/cli/cli.py:668 dnf/cli/cli.py:699
++#: dnf/base.py:2156
+ #, python-format
+ msgid "No package %s installed."
+ msgstr "没有软件包 %s 安装。"
+ 
+-#: dnf/base.py:2075 dnf/cli/commands/install.py:136
++#: dnf/base.py:2174 dnf/cli/commands/install.py:136
+ #: dnf/cli/commands/remove.py:133
+ #, python-format
+ msgid "Not a valid form: %s"
+ msgstr "无效: %s"
+ 
+-#: dnf/base.py:2091 dnf/cli/commands/__init__.py:681
+-#: dnf/cli/commands/remove.py:163
++#: dnf/base.py:2189 dnf/cli/commands/__init__.py:676
++#: dnf/cli/commands/remove.py:162
+ msgid "No packages marked for removal."
+ msgstr "没有软件包需要移除。"
+ 
+-#: dnf/base.py:2179 dnf/cli/cli.py:422
++#: dnf/base.py:2277 dnf/cli/cli.py:428
+ #, python-format
+ msgid "Packages for argument %s available, but not installed."
+ msgstr "针对于参数 %s 的软件包可用, 但是目前没有安装。"
+ 
+-#: dnf/base.py:2184
++#: dnf/base.py:2282
+ #, python-format
+ msgid "Package %s of lowest version already installed, cannot downgrade it."
+ msgstr "软件包 %s 的最低版本已经安装,无法再进行降级。"
+ 
+-#: dnf/base.py:2242
+-msgid "Action not handled: {}"
+-msgstr "操作没被处理:{}"
+-
+-#: dnf/base.py:2256 dnf/cli/cli.py:419 dnf/cli/cli.py:673 dnf/cli/cli.py:703
+-#: dnf/cli/commands/group.py:400 dnf/cli/commands/history.py:169
+-#, python-format
+-msgid "No package %s available."
+-msgstr "没有可用的软件包 %s。"
+-
+-#: dnf/base.py:2269
+-msgid "no package matched"
+-msgstr "没有能够与之匹配的软件包"
+-
+-#: dnf/base.py:2290
++#: dnf/base.py:2382
+ msgid "No security updates needed, but {} update available"
+ msgstr "没有必须的安全更新, 但是 {} 的更新可用"
+ 
+-#: dnf/base.py:2292
++#: dnf/base.py:2384
+ msgid "No security updates needed, but {} updates available"
+ msgstr "没有必须的安全更新, 但是 {} 的更新可用"
+ 
+-#: dnf/base.py:2296
++#: dnf/base.py:2388
+ msgid "No security updates needed for \"{}\", but {} update available"
+ msgstr "没有针对于\"{}\" 所必须的安全更新, 但是 {} 的更新可用"
+ 
+-#: dnf/base.py:2298
++#: dnf/base.py:2390
+ msgid "No security updates needed for \"{}\", but {} updates available"
+ msgstr "没有针对于\"{}\" 所必须的安全更新, 但是 {} 的更新可用"
+ 
+ #. raise an exception, because po.repoid is not in self.repos
+-#: dnf/base.py:2319
++#: dnf/base.py:2411
+ #, python-format
+ msgid "Unable to retrieve a key for a commandline package: %s"
+-msgstr ""
++msgstr "无法获取来自命令行的软件包的密钥:%s"
+ 
+-#: dnf/base.py:2327
++#: dnf/base.py:2419
+ #, python-format
+ msgid ". Failing package is: %s"
+ msgstr ". 失败的软件包是:%s"
+ 
+-#: dnf/base.py:2328
++#: dnf/base.py:2420
+ #, python-format
+ msgid "GPG Keys are configured as: %s"
+ msgstr "GPG密钥配置为:%s"
+ 
+-#: dnf/base.py:2340
++#: dnf/base.py:2432
+ #, python-format
+ msgid "GPG key at %s (0x%s) is already installed"
+ msgstr "%s 的 GPG 公钥(0x%s)已安装"
+ 
+-#: dnf/base.py:2373
++#: dnf/base.py:2468
+ msgid "The key has been approved."
+ msgstr "密钥已被确认。"
+ 
+-#: dnf/base.py:2376
++#: dnf/base.py:2471
+ msgid "The key has been rejected."
+ msgstr "密钥已被拒绝。"
+ 
+-#: dnf/base.py:2409
++#: dnf/base.py:2504
+ #, python-format
+ msgid "Key import failed (code %d)"
+ msgstr "导入公钥失败(代码 %d)"
+ 
+-#: dnf/base.py:2411
++#: dnf/base.py:2506
+ msgid "Key imported successfully"
+ msgstr "导入公钥成功"
+ 
+-#: dnf/base.py:2415
++#: dnf/base.py:2510
+ msgid "Didn't install any keys"
+ msgstr "没有安装任何公钥"
+ 
+-#: dnf/base.py:2418
++#: dnf/base.py:2513
+ #, python-format
+ msgid ""
+ "The GPG keys listed for the \"%s\" repository are already installed but they are not correct for this package.\n"
+@@ -513,49 +500,49 @@ msgstr ""
+ "仓库 \"%s\" 的 GPG 公钥已安装,但是不适用于此软件包。\n"
+ "请检查此仓库的公钥 URL 是否配置正确。"
+ 
+-#: dnf/base.py:2429
++#: dnf/base.py:2524
+ msgid "Import of key(s) didn't help, wrong key(s)?"
+ msgstr "导入的密钥没有公钥,错误的公钥?"
+ 
+-#: dnf/base.py:2482
++#: dnf/base.py:2577
+ msgid "  * Maybe you meant: {}"
+ msgstr "  * 可能您的意思是:{}"
+ 
+-#: dnf/base.py:2514
++#: dnf/base.py:2609
+ msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum"
+ msgstr "软件包 \"{}\"(来自于本地仓库 \"{}\")的 checksum 不正确"
+ 
+-#: dnf/base.py:2517
++#: dnf/base.py:2612
+ msgid "Some packages from local repository have incorrect checksum"
+ msgstr "本地仓库的一些软件包校验值(checksum)不正确,无法确定软件包完整"
+ 
+-#: dnf/base.py:2520
++#: dnf/base.py:2615
+ msgid "Package \"{}\" from repository \"{}\" has incorrect checksum"
+ msgstr "软件包 \"{}\"(来自仓库 \"{}\")的 checksum 不正确"
+ 
+-#: dnf/base.py:2523
++#: dnf/base.py:2618
+ msgid ""
+ "Some packages have invalid cache, but cannot be downloaded due to \"--"
+ "cacheonly\" option"
+ msgstr "以下软件包有无效缓存,因为使用了 \"--cacheonly\" 选项不能下载"
+ 
+-#: dnf/base.py:2541 dnf/base.py:2561
++#: dnf/base.py:2636 dnf/base.py:2656
+ msgid "No match for argument"
+ msgstr "未找到匹配的参数"
+ 
+-#: dnf/base.py:2549 dnf/base.py:2569
++#: dnf/base.py:2644 dnf/base.py:2664
+ msgid "All matches were filtered out by exclude filtering for argument"
+ msgstr "由于您的搜索参数,所有相关结果都已被滤掉"
+ 
+-#: dnf/base.py:2551
++#: dnf/base.py:2646
+ msgid "All matches were filtered out by modular filtering for argument"
+ msgstr "所有的匹配结果均已经被参数的模块化过滤条件筛除"
+ 
+-#: dnf/base.py:2567
++#: dnf/base.py:2662
+ msgid "All matches were installed from a different repository for argument"
+ msgstr "已从另一个仓库安装了参数的所有匹配"
+ 
+-#: dnf/base.py:2583
++#: dnf/base.py:2709
+ #, python-format
+ msgid "Package %s is already installed."
+ msgstr "软件包 %s 已安装。"
+@@ -575,8 +562,8 @@ msgstr "解析文件 \"%s\" 失败:%s"
+ msgid "Cannot read file \"%s\": %s"
+ msgstr "无法读取文件 \"%s\": %s"
+ 
+-#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:902
+-#: dnf/cli/cli.py:906 dnf/cli/commands/alias.py:108
++#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:804
++#: dnf/cli/cli.py:808 dnf/cli/commands/alias.py:108
+ #, python-format
+ msgid "Config error: %s"
+ msgstr "配置错误:%s"
+@@ -607,44 +594,44 @@ msgid ""
+ "stream '{2}'"
+ msgstr "这个操作会把模块 '{0}' 从流 '{1}' 切换到流 '{2}'"
+ 
+-#: dnf/cli/cli.py:172
++#: dnf/cli/cli.py:173
+ #, python-brace-format
+ 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 '{prog} module reset <module_name>' command. After you reset the module, you can install the other stream."
++"It is not possible to switch enabled streams of a module unless explicitly enabled via configuration option module_stream_switch.\n"
++"It is recommended to rather remove all installed content from the module, and reset the module using '{prog} module reset <module_name>' command. After you reset the module, you can install the other stream."
+ msgstr ""
+-"无法切换已启用模块的流。\n"
+-"推荐移除来自模块的所有已安装内容,然后通过 '{prog} module reset <module_name>' 命令重置模块。在您重置模块之后,就可以安装其他的流。"
++"无法切换已启用模块的流,除非显式的通过配置选项 module_stream_switch 启用。\n"
++"推荐直接移除来自模块的所有已安装内容,然后通过 '{prog} module reset <module_name>' 命令重置模块。在您重置模块之后,就可以安装其他的流。"
+ 
+-#: dnf/cli/cli.py:210
++#: dnf/cli/cli.py:212
+ #, python-brace-format
+ msgid "{prog} will only download packages for the transaction."
+ msgstr "{prog}将仅会从事务下载软件包。"
+ 
+-#: dnf/cli/cli.py:213
++#: dnf/cli/cli.py:215
+ #, python-brace-format
+ msgid ""
+ "{prog} will only download packages, install gpg keys, and check the "
+ "transaction."
+ msgstr "{prog}将仅会下载软件包,导入gpg密钥并检查事务。"
+ 
+-#: dnf/cli/cli.py:217
++#: dnf/cli/cli.py:219
+ msgid "Operation aborted."
+ msgstr "操作中止。"
+ 
+-#: dnf/cli/cli.py:224
++#: dnf/cli/cli.py:226
+ msgid "Downloading Packages:"
+ msgstr "下载软件包:"
+ 
+-#: dnf/cli/cli.py:230
++#: dnf/cli/cli.py:232
+ msgid "Error downloading packages:"
+ msgstr "下载软件包出错 :"
+ 
+-#: dnf/cli/cli.py:258
++#: dnf/cli/cli.py:264
+ msgid "Transaction failed"
+ msgstr "事务失败"
+ 
+-#: dnf/cli/cli.py:281
++#: dnf/cli/cli.py:287
+ msgid ""
+ "Refusing to automatically import keys when running unattended.\n"
+ "Use \"-y\" to override."
+@@ -652,116 +639,95 @@ msgstr ""
+ "如果不加干预,拒绝自动导入公钥。\n"
+ "指定 \"-y\" 改变这个行为。"
+ 
+-#: dnf/cli/cli.py:331
++#: dnf/cli/cli.py:337
+ msgid "Changelogs for {}"
+ msgstr "{}的变更记录"
+ 
+-#: dnf/cli/cli.py:364 dnf/cli/cli.py:505 dnf/cli/cli.py:511
++#: dnf/cli/cli.py:370 dnf/cli/cli.py:511 dnf/cli/cli.py:517
+ msgid "Obsoleting Packages"
+ msgstr "取代的软件包"
+ 
+-#: dnf/cli/cli.py:393
++#: dnf/cli/cli.py:399
+ msgid "No packages marked for distribution synchronization."
+ msgstr "没有软件包需要发行版同步。"
+ 
+-#: dnf/cli/cli.py:428
++#: dnf/cli/cli.py:425 dnf/cli/commands/group.py:395
++#, python-format
++msgid "No package %s available."
++msgstr "没有可用的软件包 %s。"
++
++#: dnf/cli/cli.py:434
+ msgid "No packages marked for downgrade."
+ msgstr "没有标记要降级的软件包。"
+ 
+-#: dnf/cli/cli.py:479
++#: dnf/cli/cli.py:485
+ msgid "Installed Packages"
+ msgstr "已安装的软件包"
+ 
+-#: dnf/cli/cli.py:487
++#: dnf/cli/cli.py:493
+ msgid "Available Packages"
+ msgstr "可安装的软件包"
+ 
+-#: dnf/cli/cli.py:491
++#: dnf/cli/cli.py:497
+ msgid "Autoremove Packages"
+ msgstr "自动移除软件包"
+ 
+-#: dnf/cli/cli.py:493
++#: dnf/cli/cli.py:499
+ msgid "Extra Packages"
+ msgstr "更多软件包"
+ 
+-#: dnf/cli/cli.py:497
++#: dnf/cli/cli.py:503
+ msgid "Available Upgrades"
+ msgstr "可用升级"
+ 
+-#: dnf/cli/cli.py:513
++#: dnf/cli/cli.py:519
+ msgid "Recently Added Packages"
+ msgstr "最近添加的软件包"
+ 
+-#: dnf/cli/cli.py:518
++#: dnf/cli/cli.py:523
+ msgid "No matching Packages to list"
+ msgstr "没有匹配的软件包可以列出"
+ 
+-#: dnf/cli/cli.py:599
++#: dnf/cli/cli.py:604
+ msgid "No Matches found"
+ msgstr "没有找到匹配的软件包"
+ 
+-#: dnf/cli/cli.py:609
+-msgid "No transaction ID given"
+-msgstr "没有事务 ID"
+-
+-#: dnf/cli/cli.py:614
+-msgid "Not found given transaction ID"
+-msgstr "未找到指定事务 ID"
+-
+-#: dnf/cli/cli.py:623
+-msgid "Found more than one transaction ID!"
+-msgstr "找到多个事务 ID!"
+-
+-#: dnf/cli/cli.py:640
+-#, python-format
+-msgid "Transaction history is incomplete, before %u."
+-msgstr "在 %u 之前,事务历史不完整。"
+-
+-#: dnf/cli/cli.py:642
+-#, python-format
+-msgid "Transaction history is incomplete, after %u."
+-msgstr "在 %u 之后,事务历史不完整。"
+-
+-#: dnf/cli/cli.py:689
+-msgid "Undoing transaction {}, from {}"
+-msgstr "撤销事务 {},从 {}"
+-
+-#: dnf/cli/cli.py:769 dnf/cli/commands/shell.py:237
++#: dnf/cli/cli.py:671 dnf/cli/commands/shell.py:237
+ #, python-format
+ msgid "Unknown repo: '%s'"
+ msgstr "未知仓库:'%s'"
+ 
+-#: dnf/cli/cli.py:783
++#: dnf/cli/cli.py:685
+ #, python-format
+ msgid "No repository match: %s"
+ msgstr "没有仓库匹配: %s"
+ 
+-#: dnf/cli/cli.py:817
++#: dnf/cli/cli.py:719
+ msgid ""
+ "This command has to be run with superuser privileges (under the root user on"
+ " most systems)."
+ msgstr "运行此命令需要管理员特权(多数系统下是root用户)。"
+ 
+-#: dnf/cli/cli.py:847
++#: dnf/cli/cli.py:749
+ #, python-format
+ msgid "No such command: %s. Please use %s --help"
+ msgstr "未找到命令: %s。请使用 %s --help"
+ 
+-#: dnf/cli/cli.py:850
++#: dnf/cli/cli.py:752
+ #, python-format, python-brace-format
+ msgid ""
+ "It could be a {PROG} plugin command, try: \"{prog} install 'dnf-"
+ "command(%s)'\""
+ msgstr "它可能是一个{PROG}插件命令,尝试:\"{prog} install 'dnf-command(%s)'\""
+ 
+-#: dnf/cli/cli.py:854
++#: dnf/cli/cli.py:756
+ #, python-brace-format
+ msgid ""
+ "It could be a {prog} plugin command, but loading of plugins is currently "
+ "disabled."
+ msgstr "这可能是一个 {prog} 插件的命令,但是插件的加载当前已经禁用。"
+ 
+-#: dnf/cli/cli.py:912
++#: dnf/cli/cli.py:814
+ msgid ""
+ "--destdir or --downloaddir must be used with --downloadonly or download or "
+ "system-upgrade command."
+@@ -769,51 +735,51 @@ msgstr ""
+ "--destdir 或 --downloaddir 必须和 --downloadonly 或 download 或 system-upgrade "
+ "命令一起使用。"
+ 
+-#: dnf/cli/cli.py:918
++#: dnf/cli/cli.py:820
+ msgid ""
+ "--enable, --set-enabled and --disable, --set-disabled must be used with "
+ "config-manager command."
+ msgstr ""
+ "--enable、--set-enabled 和 --disable、--set-disabled 必须和 config-manager 命令一起使用。"
+ 
+-#: dnf/cli/cli.py:1000
++#: dnf/cli/cli.py:902
+ msgid ""
+ "Warning: Enforcing GPG signature check globally as per active RPM security "
+ "policy (see 'gpgcheck' in dnf.conf(5) for how to squelch this message)"
+ msgstr "警告:由于活动的RPM安全策略,强制执行全局GPG签名检查 (请参照dnf.conf(5)中的'gpgcheck'以了解如何阻止这条信息)"
+ 
+-#: dnf/cli/cli.py:1020
++#: dnf/cli/cli.py:922
+ msgid "Config file \"{}\" does not exist"
+ msgstr "配置文件 \"{}\" 不存在"
+ 
+-#: dnf/cli/cli.py:1040
++#: dnf/cli/cli.py:942
+ msgid ""
+ "Unable to detect release version (use '--releasever' to specify release "
+ "version)"
+ msgstr "无法找到发布版本(可用 '--releasever' 指定版本)"
+ 
+-#: dnf/cli/cli.py:1127 dnf/cli/commands/repoquery.py:471
++#: dnf/cli/cli.py:1016 dnf/cli/commands/repoquery.py:471
+ msgid "argument {}: not allowed with argument {}"
+ msgstr "参数 {}:不允许与参数 {} 一起使用"
+ 
+-#: dnf/cli/cli.py:1134
++#: dnf/cli/cli.py:1023
+ #, python-format
+ msgid "Command \"%s\" already defined"
+ msgstr "命令 \"%s\" 已有定义"
+ 
+-#: dnf/cli/cli.py:1154
++#: dnf/cli/cli.py:1043
+ msgid "Excludes in dnf.conf: "
+ msgstr "在 dnf.conf 中排除: "
+ 
+-#: dnf/cli/cli.py:1157
++#: dnf/cli/cli.py:1046
+ msgid "Includes in dnf.conf: "
+ msgstr "在 dnf.conf 中包括: "
+ 
+-#: dnf/cli/cli.py:1160
++#: dnf/cli/cli.py:1049
+ msgid "Excludes in repo "
+ msgstr "在 repo 中排除 "
+ 
+-#: dnf/cli/cli.py:1163
++#: dnf/cli/cli.py:1052
+ msgid "Includes in repo "
+ msgstr "在 repo 中包括 "
+ 
+@@ -865,38 +831,38 @@ msgstr "问题仓库:%s"
+ msgid "display details about a package or group of packages"
+ msgstr "显示关于软件包或软件包组的详细信息"
+ 
+-#: dnf/cli/commands/__init__.py:168 dnf/cli/commands/__init__.py:740
++#: dnf/cli/commands/__init__.py:168 dnf/cli/commands/__init__.py:735
+ msgid "show all packages (default)"
+ msgstr "显示所有的软件包(默认)"
+ 
+-#: dnf/cli/commands/__init__.py:171 dnf/cli/commands/__init__.py:743
+-#: dnf/cli/commands/module.py:351
++#: dnf/cli/commands/__init__.py:171 dnf/cli/commands/__init__.py:738
++#: dnf/cli/commands/module.py:376
+ msgid "show only available packages"
+ msgstr "只显示可用的软件包"
+ 
+-#: dnf/cli/commands/__init__.py:174 dnf/cli/commands/__init__.py:746
++#: dnf/cli/commands/__init__.py:174 dnf/cli/commands/__init__.py:741
+ msgid "show only installed packages"
+ msgstr "只显示已安装的软件包"
+ 
+-#: dnf/cli/commands/__init__.py:177 dnf/cli/commands/__init__.py:749
++#: dnf/cli/commands/__init__.py:177 dnf/cli/commands/__init__.py:744
+ msgid "show only extras packages"
+ msgstr "只显示额外的软件包"
+ 
+ #: dnf/cli/commands/__init__.py:180 dnf/cli/commands/__init__.py:183
+-#: dnf/cli/commands/__init__.py:752 dnf/cli/commands/__init__.py:755
++#: dnf/cli/commands/__init__.py:747 dnf/cli/commands/__init__.py:750
+ msgid "show only upgrades packages"
+ msgstr "只显示需要被升级的软件包"
+ 
+-#: dnf/cli/commands/__init__.py:186 dnf/cli/commands/__init__.py:758
++#: dnf/cli/commands/__init__.py:186 dnf/cli/commands/__init__.py:753
+ msgid "show only autoremove packages"
+ msgstr "只显示需要被删除的软件包"
+ 
+-#: dnf/cli/commands/__init__.py:189 dnf/cli/commands/__init__.py:761
++#: dnf/cli/commands/__init__.py:189 dnf/cli/commands/__init__.py:756
+ msgid "show only recently changed packages"
+ msgstr "限制最近被改变的软件包"
+ 
+ #: dnf/cli/commands/__init__.py:190 dnf/cli/commands/__init__.py:265
+-#: dnf/cli/commands/__init__.py:774 dnf/cli/commands/autoremove.py:48
++#: dnf/cli/commands/__init__.py:769 dnf/cli/commands/autoremove.py:48
+ #: dnf/cli/commands/install.py:51 dnf/cli/commands/reinstall.py:44
+ #: dnf/cli/commands/remove.py:61 dnf/cli/commands/upgrade.py:46
+ msgid "PACKAGE"
+@@ -934,70 +900,70 @@ msgstr "检查是否有软件包升级"
+ msgid "show changelogs before update"
+ msgstr "在更新前显示Changelog"
+ 
+-#: dnf/cli/commands/__init__.py:361 dnf/cli/commands/__init__.py:414
+-#: dnf/cli/commands/__init__.py:470
++#: dnf/cli/commands/__init__.py:356 dnf/cli/commands/__init__.py:409
++#: dnf/cli/commands/__init__.py:465
+ msgid "No package available."
+ msgstr "没有可用软件包。"
+ 
+-#: dnf/cli/commands/__init__.py:376
++#: dnf/cli/commands/__init__.py:371
+ msgid "No packages marked for install."
+ msgstr "没有标记要安装的软件包。"
+ 
+-#: dnf/cli/commands/__init__.py:412
++#: dnf/cli/commands/__init__.py:407
+ msgid "No package installed."
+ msgstr "没有软件包安装。"
+ 
+-#: dnf/cli/commands/__init__.py:432 dnf/cli/commands/__init__.py:489
++#: dnf/cli/commands/__init__.py:427 dnf/cli/commands/__init__.py:484
+ #: dnf/cli/commands/reinstall.py:91
+ #, python-format
+ msgid " (from %s)"
+ msgstr " (来自 %s)"
+ 
+-#: dnf/cli/commands/__init__.py:433 dnf/cli/commands/__init__.py:490
++#: dnf/cli/commands/__init__.py:428 dnf/cli/commands/__init__.py:485
+ #: dnf/cli/commands/reinstall.py:92 dnf/cli/commands/remove.py:105
+ #, python-format
+ msgid "Installed package %s%s not available."
+ msgstr "已安装的软件包%s%s已不可用。"
+ 
+-#: dnf/cli/commands/__init__.py:467 dnf/cli/commands/__init__.py:576
+-#: dnf/cli/commands/__init__.py:619 dnf/cli/commands/__init__.py:666
++#: dnf/cli/commands/__init__.py:462 dnf/cli/commands/__init__.py:571
++#: dnf/cli/commands/__init__.py:614 dnf/cli/commands/__init__.py:661
+ msgid "No package installed from the repository."
+ msgstr "没有从仓库安装任何软件包。"
+ 
+-#: dnf/cli/commands/__init__.py:530 dnf/cli/commands/reinstall.py:101
++#: dnf/cli/commands/__init__.py:525 dnf/cli/commands/reinstall.py:101
+ msgid "No packages marked for reinstall."
+ msgstr "没有标记要重新安装的软件包。"
+ 
+-#: dnf/cli/commands/__init__.py:716 dnf/cli/commands/upgrade.py:89
++#: dnf/cli/commands/__init__.py:711 dnf/cli/commands/upgrade.py:84
+ msgid "No packages marked for upgrade."
+ msgstr "没有软件包需要升级。"
+ 
+-#: dnf/cli/commands/__init__.py:726
++#: dnf/cli/commands/__init__.py:721
+ msgid "run commands on top of all packages in given repository"
+ msgstr "对指定仓库中的所有软件包运行命令"
+ 
+-#: dnf/cli/commands/__init__.py:765
++#: dnf/cli/commands/__init__.py:760
+ msgid "REPOID"
+ msgstr "REPOID"
+ 
+-#: dnf/cli/commands/__init__.py:765
++#: dnf/cli/commands/__init__.py:760
+ msgid "Repository ID"
+ msgstr "仓库ID"
+ 
+-#: dnf/cli/commands/__init__.py:777 dnf/cli/commands/mark.py:48
++#: dnf/cli/commands/__init__.py:772 dnf/cli/commands/mark.py:48
+ #: dnf/cli/commands/updateinfo.py:108
+ msgid "Package specification"
+ msgstr "软件包规格"
+ 
+-#: dnf/cli/commands/__init__.py:801
++#: dnf/cli/commands/__init__.py:796
+ msgid "display a helpful usage message"
+ msgstr "显示一个有帮助的用法信息"
+ 
+-#: dnf/cli/commands/__init__.py:805
++#: dnf/cli/commands/__init__.py:800
+ msgid "COMMAND"
+ msgstr "命令"
+ 
+-#: dnf/cli/commands/__init__.py:806
++#: dnf/cli/commands/__init__.py:801
+ #, python-brace-format
+ msgid "{prog} command to get help for"
+ msgstr "要获得帮助的 {prog} 命令"
+@@ -1168,8 +1134,10 @@ msgid "Waiting for process with pid %d to finish."
+ msgstr "正在等待 pid 为%d的进程退出。"
+ 
+ #: dnf/cli/commands/deplist.py:32
+-msgid "List package's dependencies and what packages provide them"
+-msgstr "列出软件包的依赖关系和提供这些软件包的源"
++msgid ""
++"[deprecated, use repoquery --deplist] List package's dependencies and what "
++"packages provide them"
++msgstr "[已弃用,请使用 repoquery --deplist] 列出软件包的依赖关系和提供这些软件包的源"
+ 
+ #: dnf/cli/commands/distrosync.py:32
+ msgid "synchronize installed packages to the latest available versions"
+@@ -1195,78 +1163,78 @@ msgstr "显示或使用组信息"
+ msgid "No group data available for configured repositories."
+ msgstr "配置的软件源不包含组数据。"
+ 
+-#: dnf/cli/commands/group.py:129
++#: dnf/cli/commands/group.py:126
+ #, python-format
+ msgid "Warning: Group %s does not exist."
+ msgstr "警告:组 %s 不存在。"
+ 
+-#: dnf/cli/commands/group.py:170
++#: dnf/cli/commands/group.py:167
+ msgid "Warning: No groups match:"
+ msgstr "警告:没有匹配的组:"
+ 
+-#: dnf/cli/commands/group.py:182 dnf/cli/commands/group.py:193
+-#: dnf/cli/output.py:1226
++#: dnf/cli/commands/group.py:179 dnf/cli/commands/group.py:190
++#: dnf/cli/output.py:1139
+ msgid "<name-unset>"
+ msgstr "<名称-未设定>"
+ 
+-#: dnf/cli/commands/group.py:199
++#: dnf/cli/commands/group.py:196
+ msgid "Available Environment Groups:"
+ msgstr "可用环境组:"
+ 
+-#: dnf/cli/commands/group.py:201
++#: dnf/cli/commands/group.py:198
+ msgid "Installed Environment Groups:"
+ msgstr "已安装的环境组:"
+ 
+-#: dnf/cli/commands/group.py:208 dnf/cli/commands/group.py:294
++#: dnf/cli/commands/group.py:205 dnf/cli/commands/group.py:291
+ msgid "Installed Groups:"
+ msgstr "已安装组:"
+ 
+-#: dnf/cli/commands/group.py:215 dnf/cli/commands/group.py:301
++#: dnf/cli/commands/group.py:212 dnf/cli/commands/group.py:298
+ msgid "Installed Language Groups:"
+ msgstr "已安装语言组:"
+ 
+-#: dnf/cli/commands/group.py:225 dnf/cli/commands/group.py:308
++#: dnf/cli/commands/group.py:222 dnf/cli/commands/group.py:305
+ msgid "Available Groups:"
+ msgstr "可用组:"
+ 
+-#: dnf/cli/commands/group.py:232 dnf/cli/commands/group.py:315
++#: dnf/cli/commands/group.py:229 dnf/cli/commands/group.py:312
+ msgid "Available Language Groups:"
+ msgstr "可用语言组:"
+ 
+-#: dnf/cli/commands/group.py:322
++#: dnf/cli/commands/group.py:319
+ msgid "include optional packages from group"
+ msgstr "包含可选软件包"
+ 
+-#: dnf/cli/commands/group.py:325
++#: dnf/cli/commands/group.py:322
+ msgid "show also hidden groups"
+ msgstr "同时显示已隐藏的软件组"
+ 
+-#: dnf/cli/commands/group.py:327
++#: dnf/cli/commands/group.py:324
+ msgid "show only installed groups"
+ msgstr "只显示已安装的软件组"
+ 
+-#: dnf/cli/commands/group.py:329
++#: dnf/cli/commands/group.py:326
+ msgid "show only available groups"
+ msgstr "只显示可获得的团队"
+ 
+-#: dnf/cli/commands/group.py:331
++#: dnf/cli/commands/group.py:328
+ msgid "show also ID of groups"
+ msgstr "同时显示组的 ID"
+ 
+-#: dnf/cli/commands/group.py:333
++#: dnf/cli/commands/group.py:330
+ msgid "available subcommands: {} (default), {}"
+ msgstr "可用的子命令:{} (默认), {}"
+ 
+-#: dnf/cli/commands/group.py:337
++#: dnf/cli/commands/group.py:334
+ msgid "argument for group subcommand"
+ msgstr "组子命令的参数"
+ 
+-#: dnf/cli/commands/group.py:346
++#: dnf/cli/commands/group.py:343
+ #, python-format
+ msgid "Invalid groups sub-command, use: %s."
+ msgstr "无效的组子命令,请使用:%s 。"
+ 
+-#: dnf/cli/commands/group.py:403
++#: dnf/cli/commands/group.py:398
+ msgid "Unable to find a mandatory group package."
+ msgstr "无法找到一个必须的组软件包。"
+ 
+@@ -1276,25 +1244,25 @@ msgstr "显示或使用事务历史"
+ 
+ #: dnf/cli/commands/history.py:66
+ msgid "For the store command, file path to store the transaction to"
+-msgstr ""
++msgstr "对于 store 命令,要将事务保存到的文件路径"
+ 
+ #: dnf/cli/commands/history.py:68
+ msgid ""
+ "For the replay command, don't check for installed packages matching those in"
+ " transaction"
+-msgstr ""
++msgstr "对于 replay 命令,不要检查已安装的包是否与事务中符合"
+ 
+ #: dnf/cli/commands/history.py:71
+ msgid ""
+ "For the replay command, don't check for extra packages pulled into the "
+ "transaction"
+-msgstr ""
++msgstr "对于 replay 命令,不要检查被拉入事务的额外的包"
+ 
+ #: dnf/cli/commands/history.py:74
+ msgid ""
+ "For the replay command, skip packages that are not available or have missing"
+ " dependencies"
+-msgstr ""
++msgstr "对于 replay 命令,跳过不可用或者缺少依赖项的软件包"
+ 
+ #: dnf/cli/commands/history.py:94
+ msgid ""
+@@ -1305,41 +1273,64 @@ msgstr ""
+ "'{}' 需要一个事务 ID 或软件包名。"
+ 
+ #: dnf/cli/commands/history.py:101
+-#, fuzzy
+-#| msgid "No transaction ID or package name given."
+ msgid "No transaction file name given."
+-msgstr "没有提供事务 ID 或软件包名。"
++msgstr "没有指定事务文件名。"
+ 
+ #: dnf/cli/commands/history.py:103
+-#, fuzzy
+-#| msgid "Failed to remove transaction file %s"
+ msgid "More than one argument given as transaction file name."
+-msgstr "移除事务文件 %s 失败"
++msgstr "提供了多于一个的作为事务文件名的参数。"
+ 
+-#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:126
++#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:130
+ msgid "No transaction ID or package name given."
+ msgstr "没有提供事务 ID 或软件包名。"
+ 
+-#: dnf/cli/commands/history.py:138
++#: dnf/cli/commands/history.py:142
+ #, python-format
+ msgid "You don't have access to the history DB: %s"
+ msgstr "你没有权限访问历史数据库:%s"
+ 
+-#: dnf/cli/commands/history.py:147
++#: dnf/cli/commands/history.py:151
+ #, python-format
+ msgid ""
+ "Cannot undo transaction %s, doing so would result in an inconsistent package"
+ " database."
+ msgstr "无法撤销事务 %s,这样做将可能导致不一致的软件包数据库。"
+ 
+-#: dnf/cli/commands/history.py:152
++#: dnf/cli/commands/history.py:156
+ #, python-format
+ msgid ""
+ "Cannot rollback transaction %s, doing so would result in an inconsistent "
+ "package database."
+ msgstr "无法回滚事务 %s,这样做将可能导致不一致的软件包数据库。"
+ 
+-#: dnf/cli/commands/history.py:222
++#: dnf/cli/commands/history.py:175
++msgid "No transaction ID given"
++msgstr "没有事务 ID"
++
++#: dnf/cli/commands/history.py:179
++#, python-brace-format
++msgid "Transaction ID \"{0}\" not found."
++msgstr "事务 ID \"{0}\" 未找到。"
++
++#: dnf/cli/commands/history.py:185
++msgid "Found more than one transaction ID!"
++msgstr "找到多个事务 ID!"
++
++#: dnf/cli/commands/history.py:203
++#, python-format
++msgid "Transaction history is incomplete, before %u."
++msgstr "在 %u 之前,事务历史不完整。"
++
++#: dnf/cli/commands/history.py:205
++#, python-format
++msgid "Transaction history is incomplete, after %u."
++msgstr "在 %u 之后,事务历史不完整。"
++
++#: dnf/cli/commands/history.py:256
++msgid "No packages to list"
++msgstr "没有可以列出的软件包"
++
++#: dnf/cli/commands/history.py:279
+ msgid ""
+ "Invalid transaction ID range definition '{}'.\n"
+ "Use '<transaction-id>..<transaction-id>'."
+@@ -1347,7 +1338,7 @@ msgstr ""
+ "无效的事务 ID 范围定义 '{}'。\n"
+ "使用 '<transaction-id>..<transaction-id>'。"
+ 
+-#: dnf/cli/commands/history.py:226
++#: dnf/cli/commands/history.py:283
+ msgid ""
+ "Can't convert '{}' to transaction ID.\n"
+ "Use '<number>', 'last', 'last-<number>'."
+@@ -1355,40 +1346,29 @@ msgstr ""
+ "无法将 '{}' 转换为事务 ID。\n"
+ "请使用 '<number>'、'last'、'last-<number>'。"
+ 
+-#: dnf/cli/commands/history.py:255
++#: dnf/cli/commands/history.py:312
+ msgid "No transaction which manipulates package '{}' was found."
+ msgstr "没有找到操作软件包 '{}' 的事务。"
+ 
+-#: dnf/cli/commands/history.py:305
+-#, fuzzy, python-brace-format
+-#| msgid "TransactionItem not found for key: {}"
+-msgid "Transaction ID \"{id}\" not found."
+-msgstr "找不到键的 TransactionItem: {}"
+-
+-#: dnf/cli/commands/history.py:313
++#: dnf/cli/commands/history.py:357
+ msgid "{} exists, overwrite?"
+-msgstr ""
++msgstr "{} 已存在,是否覆盖?"
+ 
+-#: dnf/cli/commands/history.py:316
++#: dnf/cli/commands/history.py:360
+ msgid "Not overwriting {}, exiting."
+-msgstr ""
++msgstr "不覆盖 {},退出。"
+ 
+-#: dnf/cli/commands/history.py:323
+-#, fuzzy
+-#| msgid "Transaction failed"
++#: dnf/cli/commands/history.py:367
+ msgid "Transaction saved to {}."
+-msgstr "事务失败"
++msgstr "事务已保存至 {}。"
+ 
+-#: dnf/cli/commands/history.py:326
+-#, fuzzy
+-#| msgid "Errors occurred during transaction."
++#: dnf/cli/commands/history.py:370
+ msgid "Error storing transaction: {}"
+-msgstr "事务过程中出现错误。"
++msgstr "存储事务时出现错误:{}"
+ 
+-#: dnf/cli/commands/history.py:350
+-msgid ""
+-"Warning, the following problems occurred while replaying the transaction:"
+-msgstr ""
++#: dnf/cli/commands/history.py:386
++msgid "Warning, the following problems occurred while running a transaction:"
++msgstr "警告,在运行事务时出现了下列问题:"
+ 
+ #: dnf/cli/commands/install.py:47
+ msgid "install a package or packages on your system"
+@@ -1407,7 +1387,7 @@ msgstr "没有任何匹配"
+ msgid "Not a valid rpm file path: %s"
+ msgstr "RPM文件路径错误:%s"
+ 
+-#: dnf/cli/commands/install.py:167
++#: dnf/cli/commands/install.py:166
+ #, python-brace-format
+ msgid "There are following alternatives for \"{0}\": {1}"
+ msgstr "以下是 \"{0}\" 的替代 : {1}"
+@@ -1450,7 +1430,7 @@ msgid "%s marked as group installed."
+ msgstr "%s 已标记为已安装软件组。"
+ 
+ #: dnf/cli/commands/mark.py:85 dnf/cli/commands/shell.py:129
+-#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:279
++#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:282
+ msgid "Error:"
+ msgstr "错误:"
+ 
+@@ -1459,89 +1439,93 @@ msgstr "错误:"
+ msgid "Package %s is not installed."
+ msgstr "软件包 %s 尚未安装。"
+ 
+-#: dnf/cli/commands/module.py:51
++#: dnf/cli/commands/module.py:54
+ msgid ""
+ "Only module name, stream, architecture or profile is used. Ignoring unneeded"
+ " information in argument: '{}'"
+ msgstr "仅使用模块名称、流、架构或者配置文件。忽略参数中不需要的信息:'{}'"
+ 
+-#: dnf/cli/commands/module.py:77
++#: dnf/cli/commands/module.py:80
+ msgid "list all module streams, profiles and states"
+ msgstr "列出所有模块流、配置文件以及状态"
+ 
+-#: dnf/cli/commands/module.py:105 dnf/cli/commands/module.py:128
++#: dnf/cli/commands/module.py:108 dnf/cli/commands/module.py:131
+ msgid "No matching Modules to list"
+ msgstr "没有匹配的模块可以列出"
+ 
+-#: dnf/cli/commands/module.py:111
++#: dnf/cli/commands/module.py:114
+ msgid "print detailed information about a module"
+ msgstr "打印关于一个模块的详细信息"
+ 
+-#: dnf/cli/commands/module.py:133
++#: dnf/cli/commands/module.py:136
+ msgid "enable a module stream"
+ msgstr "启用一个模块流"
+ 
+-#: dnf/cli/commands/module.py:157
++#: dnf/cli/commands/module.py:160
+ msgid "disable a module with all its streams"
+ msgstr "停用一个模块及其所有的流"
+ 
+-#: dnf/cli/commands/module.py:181
++#: dnf/cli/commands/module.py:184
+ msgid "reset a module"
+ msgstr "重置一个模块"
+ 
+-#: dnf/cli/commands/module.py:202
++#: dnf/cli/commands/module.py:205
+ msgid "install a module profile including its packages"
+ msgstr "安装一个包含其软件包的模块配置文件"
+ 
+-#: dnf/cli/commands/module.py:223
++#: dnf/cli/commands/module.py:226
+ msgid "update packages associated with an active stream"
+ msgstr "升级与一个已激活的流相关联的软件包"
+ 
+-#: dnf/cli/commands/module.py:240
++#: dnf/cli/commands/module.py:243
+ msgid "remove installed module profiles and their packages"
+ msgstr "移除已经安装的模块配置文件及其软件包"
+ 
+-#: dnf/cli/commands/module.py:264
++#: dnf/cli/commands/module.py:267
+ msgid "Package {} belongs to multiple modules, skipping"
+ msgstr "软件包 {} 属于多个模块,正在跳过"
+ 
+-#: dnf/cli/commands/module.py:277
++#: dnf/cli/commands/module.py:280
++msgid "switch a module to a stream and distrosync rpm packages"
++msgstr "切换一个模块到某个流并且对 rpm 软件包进行 distrosync"
++
++#: dnf/cli/commands/module.py:302
+ msgid "list modular packages"
+ msgstr "列出模块包"
+ 
+-#: dnf/cli/commands/module.py:292
++#: dnf/cli/commands/module.py:317
+ msgid "list packages belonging to a module"
+ msgstr "列出属于一个模块的软件包"
+ 
+-#: dnf/cli/commands/module.py:327
++#: dnf/cli/commands/module.py:352
+ msgid "Interact with Modules."
+ msgstr "与模块交互。"
+ 
+-#: dnf/cli/commands/module.py:340
++#: dnf/cli/commands/module.py:365
+ msgid "show only enabled modules"
+ msgstr "只显示启用的模块"
+ 
+-#: dnf/cli/commands/module.py:343
++#: dnf/cli/commands/module.py:368
+ msgid "show only disabled modules"
+ msgstr "只显示禁用的模块"
+ 
+-#: dnf/cli/commands/module.py:346
++#: dnf/cli/commands/module.py:371
+ msgid "show only installed modules or packages"
+ msgstr "只显示已安装的模块或者软件包"
+ 
+-#: dnf/cli/commands/module.py:349
++#: dnf/cli/commands/module.py:374
+ msgid "show profile content"
+ msgstr "显示档案内容"
+ 
+-#: dnf/cli/commands/module.py:354
++#: dnf/cli/commands/module.py:379
+ msgid "remove all modular packages"
+ msgstr "移除所有模块包"
+ 
+-#: dnf/cli/commands/module.py:364
++#: dnf/cli/commands/module.py:389
+ msgid "Module specification"
+ msgstr "模块规格"
+ 
+-#: dnf/cli/commands/module.py:386
++#: dnf/cli/commands/module.py:411
+ msgid "{} {} {}: too few arguments"
+ msgstr "{} {} {}: 参数太少"
+ 
+@@ -2026,22 +2010,22 @@ msgstr "KEYWORD"
+ msgid "Keyword to search for"
+ msgstr "要搜索的关键字"
+ 
+-#: dnf/cli/commands/search.py:61 dnf/cli/output.py:506
++#: dnf/cli/commands/search.py:61 dnf/cli/output.py:460
+ msgctxt "long"
+ msgid "Name"
+ msgstr "名称"
+ 
+-#: dnf/cli/commands/search.py:62 dnf/cli/output.py:559
++#: dnf/cli/commands/search.py:62 dnf/cli/output.py:513
+ msgctxt "long"
+ msgid "Summary"
+ msgstr "概况"
+ 
+-#: dnf/cli/commands/search.py:63 dnf/cli/output.py:569
++#: dnf/cli/commands/search.py:63 dnf/cli/output.py:523
+ msgctxt "long"
+ msgid "Description"
+ msgstr "描述"
+ 
+-#: dnf/cli/commands/search.py:64 dnf/cli/output.py:562
++#: dnf/cli/commands/search.py:64 dnf/cli/output.py:516
+ msgid "URL"
+ msgstr "URL"
+ 
+@@ -2184,16 +2168,16 @@ msgstr ""
+ "run                      解析以及运行事务集\n"
+ "exit (或 quit)           退出 shell"
+ 
+-#: dnf/cli/commands/shell.py:259
++#: dnf/cli/commands/shell.py:262
+ #, python-format
+ msgid "Error: Cannot open %s for reading"
+ msgstr "错误:无法打开%s来读取"
+ 
+-#: dnf/cli/commands/shell.py:281 dnf/cli/main.py:187
++#: dnf/cli/commands/shell.py:284 dnf/cli/main.py:187
+ msgid "Complete!"
+ msgstr "完毕!"
+ 
+-#: dnf/cli/commands/shell.py:291
++#: dnf/cli/commands/shell.py:294
+ msgid "Leaving Shell"
+ msgstr "离开终端"
+ 
+@@ -2384,8 +2368,8 @@ msgstr "严重性"
+ msgid "Files"
+ msgstr "文件"
+ 
+-#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1499
+-#: dnf/cli/output.py:1772 dnf/cli/output.py:1774
++#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1654
++#: dnf/cli/output.py:1656 dnf/util.py:617
+ msgid "Installed"
+ msgstr "已安装"
+ 
+@@ -2706,13 +2690,13 @@ msgstr "无法编码参数 '%s': %s"
+ #. Translators: This is abbreviated 'Name'. Should be no longer
+ #. than 12 characters. You can use the full version if it is short
+ #. enough in your language.
+-#: dnf/cli/output.py:505
++#: dnf/cli/output.py:459
+ msgctxt "short"
+ msgid "Name"
+ msgstr "名称"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:511
++#: dnf/cli/output.py:465
+ msgid "Epoch"
+ msgstr "时期"
+ 
+@@ -2720,38 +2704,38 @@ msgstr "时期"
+ #. use the full (unabbreviated) term 'Version' if you think that
+ #. the translation to your language is not too long and will
+ #. always fit to limited space.
+-#: dnf/cli/output.py:512 dnf/cli/output.py:1335
++#: dnf/cli/output.py:466 dnf/cli/output.py:1248
+ msgctxt "short"
+ msgid "Version"
+ msgstr "版本"
+ 
+ #. Translators: This is the full (unabbreviated) term 'Version'.
+-#: dnf/cli/output.py:513 dnf/cli/output.py:1337
++#: dnf/cli/output.py:467 dnf/cli/output.py:1250
+ msgctxt "long"
+ msgid "Version"
+ msgstr "版本"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:516
++#: dnf/cli/output.py:470
+ msgid "Release"
+ msgstr "发布"
+ 
+ #. Translators: This is abbreviated 'Architecture', used when
+ #. we have not enough space to display the full word.
+-#: dnf/cli/output.py:517 dnf/cli/output.py:1326
++#: dnf/cli/output.py:471 dnf/cli/output.py:1239
+ msgctxt "short"
+ msgid "Arch"
+ msgstr "架构"
+ 
+ #. Translators: This is the full word 'Architecture', used when
+ #. we have enough space.
+-#: dnf/cli/output.py:518 dnf/cli/output.py:1329
++#: dnf/cli/output.py:472 dnf/cli/output.py:1242
+ msgctxt "long"
+ msgid "Architecture"
+ msgstr "架构"
+ 
+ #. Translators: This is the full (unabbreviated) term 'Size'.
+-#: dnf/cli/output.py:520 dnf/cli/output.py:1352
++#: dnf/cli/output.py:474 dnf/cli/output.py:1265
+ msgctxt "long"
+ msgid "Size"
+ msgstr "大小"
+@@ -2760,32 +2744,32 @@ msgstr "大小"
+ #. not be longer than 5 characters. If the term 'Size' in your
+ #. language is not longer than 5 characters then you can use it
+ #. unabbreviated.
+-#: dnf/cli/output.py:520 dnf/cli/output.py:1350
++#: dnf/cli/output.py:474 dnf/cli/output.py:1263
+ msgctxt "short"
+ msgid "Size"
+ msgstr "大小"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:524
++#: dnf/cli/output.py:478
+ msgid "Source"
+ msgstr "源"
+ 
+ #. Translators: This is abbreviated 'Repository', used when
+ #. we have not enough space to display the full word.
+-#: dnf/cli/output.py:525 dnf/cli/output.py:1341
++#: dnf/cli/output.py:479 dnf/cli/output.py:1254
+ msgctxt "short"
+ msgid "Repo"
+ msgstr "仓库"
+ 
+ #. Translators: This is the full word 'Repository', used when
+ #. we have enough space.
+-#: dnf/cli/output.py:526 dnf/cli/output.py:1344
++#: dnf/cli/output.py:480 dnf/cli/output.py:1257
+ msgctxt "long"
+ msgid "Repository"
+ msgstr "仓库"
+ 
+ #. Translators: This message should be no longer than 12 chars.
+-#: dnf/cli/output.py:533
++#: dnf/cli/output.py:487
+ msgid "From repo"
+ msgstr "来自仓库"
+ 
+@@ -2793,312 +2777,308 @@ msgstr "来自仓库"
+ #. print(_("Committer   : %s") % ucd(pkg.committer))
+ #. print(_("Committime  : %s") % time.ctime(pkg.committime))
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:539
++#: dnf/cli/output.py:493
+ msgid "Packager"
+ msgstr "打包者"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:541
++#: dnf/cli/output.py:495
+ msgid "Buildtime"
+ msgstr "构建时间"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:545
++#: dnf/cli/output.py:499
+ msgid "Install time"
+ msgstr "安装时间"
+ 
+ #. Translators: This message should be no longer than 12 chars.
+-#: dnf/cli/output.py:554
++#: dnf/cli/output.py:508
+ msgid "Installed by"
+ msgstr "安装者"
+ 
+ #. Translators: This is abbreviated 'Summary'. Should be no longer
+ #. than 12 characters. You can use the full version if it is short
+ #. enough in your language.
+-#: dnf/cli/output.py:558
++#: dnf/cli/output.py:512
+ msgctxt "short"
+ msgid "Summary"
+ msgstr "概况"
+ 
+ #. Translators: This message should be no longer than 12 characters.
+-#: dnf/cli/output.py:564
++#: dnf/cli/output.py:518
+ msgid "License"
+ msgstr "协议"
+ 
+ #. Translators: This is abbreviated 'Description'. Should be no longer
+ #. than 12 characters. You can use the full version if it is short
+ #. enough in your language.
+-#: dnf/cli/output.py:568
++#: dnf/cli/output.py:522
+ msgctxt "short"
+ msgid "Description"
+ msgstr "描述"
+ 
+-#: dnf/cli/output.py:695
+-msgid "No packages to list"
+-msgstr "没有可以列出的软件包"
+-
+-#: dnf/cli/output.py:706
++#: dnf/cli/output.py:650
+ msgid "y"
+ msgstr "y"
+ 
+-#: dnf/cli/output.py:706
++#: dnf/cli/output.py:650
+ msgid "yes"
+ msgstr "是"
+ 
+-#: dnf/cli/output.py:707
++#: dnf/cli/output.py:651
+ msgid "n"
+ msgstr "n"
+ 
+-#: dnf/cli/output.py:707
++#: dnf/cli/output.py:651
+ msgid "no"
+ msgstr "否"
+ 
+-#: dnf/cli/output.py:711
++#: dnf/cli/output.py:655
+ msgid "Is this ok [y/N]: "
+ msgstr "确定吗?[y/N]: "
+ 
+-#: dnf/cli/output.py:715
++#: dnf/cli/output.py:659
+ msgid "Is this ok [Y/n]: "
+ msgstr "确定吗?[Y/n]: "
+ 
+-#: dnf/cli/output.py:795
++#: dnf/cli/output.py:739
+ #, python-format
+ msgid "Group: %s"
+ msgstr "组:%s"
+ 
+-#: dnf/cli/output.py:799
++#: dnf/cli/output.py:743
+ #, python-format
+ msgid " Group-Id: %s"
+ msgstr " 组编号:%s"
+ 
+-#: dnf/cli/output.py:801 dnf/cli/output.py:840
++#: dnf/cli/output.py:745 dnf/cli/output.py:784
+ #, python-format
+ msgid " Description: %s"
+ msgstr " 描述:%s"
+ 
+-#: dnf/cli/output.py:803
++#: dnf/cli/output.py:747
+ #, python-format
+ msgid " Language: %s"
+ msgstr " 语言:%s"
+ 
+-#: dnf/cli/output.py:806
++#: dnf/cli/output.py:750
+ msgid " Mandatory Packages:"
+ msgstr " 必要的软件包:"
+ 
+-#: dnf/cli/output.py:807
++#: dnf/cli/output.py:751
+ msgid " Default Packages:"
+ msgstr " 默认的软件包:"
+ 
+-#: dnf/cli/output.py:808
++#: dnf/cli/output.py:752
+ msgid " Optional Packages:"
+ msgstr " 可选的软件包:"
+ 
+-#: dnf/cli/output.py:809
++#: dnf/cli/output.py:753
+ msgid " Conditional Packages:"
+ msgstr " 可能的软件包:"
+ 
+-#: dnf/cli/output.py:834
++#: dnf/cli/output.py:778
+ #, python-format
+ msgid "Environment Group: %s"
+ msgstr "环境组:%s"
+ 
+-#: dnf/cli/output.py:837
++#: dnf/cli/output.py:781
+ #, python-format
+ msgid " Environment-Id: %s"
+ msgstr " 环境-Id:%s"
+ 
+-#: dnf/cli/output.py:843
++#: dnf/cli/output.py:787
+ msgid " Mandatory Groups:"
+ msgstr " 必选软件包组:"
+ 
+-#: dnf/cli/output.py:844
++#: dnf/cli/output.py:788
+ msgid " Optional Groups:"
+ msgstr " 可选软件包组:"
+ 
+-#: dnf/cli/output.py:865
++#: dnf/cli/output.py:809
+ msgid "Matched from:"
+ msgstr "匹配来源:"
+ 
+-#: dnf/cli/output.py:879
++#: dnf/cli/output.py:823
+ #, python-format
+ msgid "Filename    : %s"
+ msgstr "文件名    :%s"
+ 
+-#: dnf/cli/output.py:904
++#: dnf/cli/output.py:848
+ #, python-format
+ msgid "Repo        : %s"
+ msgstr "仓库        :%s"
+ 
+-#: dnf/cli/output.py:913
++#: dnf/cli/output.py:857
+ msgid "Description : "
+ msgstr "描述: "
+ 
+-#: dnf/cli/output.py:917
++#: dnf/cli/output.py:861
+ #, python-format
+ msgid "URL         : %s"
+ msgstr "网址         :%s"
+ 
+-#: dnf/cli/output.py:921
++#: dnf/cli/output.py:865
+ #, python-format
+ msgid "License     : %s"
+ msgstr "协议     :%s"
+ 
+-#: dnf/cli/output.py:927
++#: dnf/cli/output.py:871
+ #, python-format
+ msgid "Provide    : %s"
+ msgstr "提供    : %s"
+ 
+-#: dnf/cli/output.py:947
++#: dnf/cli/output.py:891
+ #, python-format
+ msgid "Other       : %s"
+ msgstr "其它       : %s"
+ 
+-#: dnf/cli/output.py:996
++#: dnf/cli/output.py:940
+ msgid "There was an error calculating total download size"
+ msgstr "计算总下载量时出错"
+ 
+-#: dnf/cli/output.py:1002
++#: dnf/cli/output.py:946
+ #, python-format
+ msgid "Total size: %s"
+ msgstr "总计:%s"
+ 
+-#: dnf/cli/output.py:1005
++#: dnf/cli/output.py:949
+ #, python-format
+ msgid "Total download size: %s"
+ msgstr "总下载:%s"
+ 
+-#: dnf/cli/output.py:1008
++#: dnf/cli/output.py:952
+ #, python-format
+ msgid "Installed size: %s"
+ msgstr "安装大小:%s"
+ 
+-#: dnf/cli/output.py:1026
++#: dnf/cli/output.py:970
+ msgid "There was an error calculating installed size"
+ msgstr "计算安装大小时出错"
+ 
+-#: dnf/cli/output.py:1030
++#: dnf/cli/output.py:974
+ #, python-format
+ msgid "Freed space: %s"
+ msgstr "将会释放空间:%s"
+ 
+-#: dnf/cli/output.py:1039
++#: dnf/cli/output.py:983
+ msgid "Marking packages as installed by the group:"
+ msgstr "标记软件包为遵循软件包组安装的:"
+ 
+-#: dnf/cli/output.py:1046
++#: dnf/cli/output.py:990
+ msgid "Marking packages as removed by the group:"
+ msgstr "标记软件包为遵循软件包组移除的:"
+ 
+-#: dnf/cli/output.py:1056
++#: dnf/cli/output.py:1000
+ msgid "Group"
+ msgstr "组"
+ 
+-#: dnf/cli/output.py:1056
++#: dnf/cli/output.py:1000
+ msgid "Packages"
+ msgstr "软件包"
+ 
+-#: dnf/cli/output.py:1133
++#: dnf/cli/output.py:1046
+ msgid "Installing group/module packages"
+ msgstr "安装组/模块包"
+ 
+-#: dnf/cli/output.py:1134
++#: dnf/cli/output.py:1047
+ msgid "Installing group packages"
+ msgstr "安装软件包组"
+ 
+ #. TRANSLATORS: This is for a list of packages to be installed.
+-#: dnf/cli/output.py:1138
++#: dnf/cli/output.py:1051
+ msgctxt "summary"
+ msgid "Installing"
+ msgstr "安装"
+ 
+ #. TRANSLATORS: This is for a list of packages to be upgraded.
+-#: dnf/cli/output.py:1140
++#: dnf/cli/output.py:1053
+ msgctxt "summary"
+ msgid "Upgrading"
+ msgstr "升级"
+ 
+ #. TRANSLATORS: This is for a list of packages to be reinstalled.
+-#: dnf/cli/output.py:1142
++#: dnf/cli/output.py:1055
+ msgctxt "summary"
+ msgid "Reinstalling"
+ msgstr "重新安装"
+ 
+-#: dnf/cli/output.py:1144
++#: dnf/cli/output.py:1057
+ msgid "Installing dependencies"
+ msgstr "安装依赖关系"
+ 
+-#: dnf/cli/output.py:1145
++#: dnf/cli/output.py:1058
+ msgid "Installing weak dependencies"
+ msgstr "安装弱的依赖"
+ 
+ #. TRANSLATORS: This is for a list of packages to be removed.
+-#: dnf/cli/output.py:1147
++#: dnf/cli/output.py:1060
+ msgid "Removing"
+ msgstr "移除"
+ 
+-#: dnf/cli/output.py:1148
++#: dnf/cli/output.py:1061
+ msgid "Removing dependent packages"
+ msgstr "移除依赖的软件包"
+ 
+-#: dnf/cli/output.py:1149
++#: dnf/cli/output.py:1062
+ msgid "Removing unused dependencies"
+ msgstr "清除未被使用的依赖关系"
+ 
+ #. TRANSLATORS: This is for a list of packages to be downgraded.
+-#: dnf/cli/output.py:1151
++#: dnf/cli/output.py:1064
+ msgctxt "summary"
+ msgid "Downgrading"
+ msgstr "降级"
+ 
+-#: dnf/cli/output.py:1176
++#: dnf/cli/output.py:1089
+ msgid "Installing module profiles"
+ msgstr "安装模块配置档案"
+ 
+-#: dnf/cli/output.py:1185
++#: dnf/cli/output.py:1098
+ msgid "Disabling module profiles"
+ msgstr "禁用模块配置档案"
+ 
+-#: dnf/cli/output.py:1194
++#: dnf/cli/output.py:1107
+ msgid "Enabling module streams"
+ msgstr "启用模块流"
+ 
+-#: dnf/cli/output.py:1202
++#: dnf/cli/output.py:1115
+ msgid "Switching module streams"
+ msgstr "切换模块流"
+ 
+-#: dnf/cli/output.py:1210
++#: dnf/cli/output.py:1123
+ msgid "Disabling modules"
+ msgstr "禁用模块"
+ 
+-#: dnf/cli/output.py:1218
++#: dnf/cli/output.py:1131
+ msgid "Resetting modules"
+ msgstr "重置模块"
+ 
+-#: dnf/cli/output.py:1230
++#: dnf/cli/output.py:1143
+ msgid "Installing Environment Groups"
+ msgstr "安装环境组"
+ 
+-#: dnf/cli/output.py:1237
++#: dnf/cli/output.py:1150
+ msgid "Upgrading Environment Groups"
+ msgstr "升级环境组"
+ 
+-#: dnf/cli/output.py:1244
++#: dnf/cli/output.py:1157
+ msgid "Removing Environment Groups"
+ msgstr "删除环境组"
+ 
+-#: dnf/cli/output.py:1251
++#: dnf/cli/output.py:1164
+ msgid "Installing Groups"
+ msgstr "安装组"
+ 
+-#: dnf/cli/output.py:1258
++#: dnf/cli/output.py:1171
+ msgid "Upgrading Groups"
+ msgstr "升级组"
+ 
+-#: dnf/cli/output.py:1265
++#: dnf/cli/output.py:1178
+ msgid "Removing Groups"
+ msgstr "删除组"
+ 
+-#: dnf/cli/output.py:1281
++#: dnf/cli/output.py:1194
+ #, python-format
+ msgid ""
+ "Skipping packages with conflicts:\n"
+@@ -3107,12 +3087,12 @@ msgstr ""
+ "跳过有冲突的软件包:\n"
+ "(添加 '%s' 至命令行来强制升级)"
+ 
+-#: dnf/cli/output.py:1291
++#: dnf/cli/output.py:1204
+ #, python-format
+ msgid "Skipping packages with broken dependencies%s"
+ msgstr "跳过存在损坏依赖关系的软件包 %s"
+ 
+-#: dnf/cli/output.py:1295
++#: dnf/cli/output.py:1208
+ msgid " or part of a group"
+ msgstr " 或一个组的一部分"
+ 
+@@ -3120,22 +3100,22 @@ msgstr " 或一个组的一部分"
+ #. use the full (unabbreviated) term 'Package' if you think that
+ #. the translation to your language is not too long and will
+ #. always fit to limited space.
+-#: dnf/cli/output.py:1320
++#: dnf/cli/output.py:1233
+ msgctxt "short"
+ msgid "Package"
+ msgstr "软件包"
+ 
+ #. Translators: This is the full (unabbreviated) term 'Package'.
+-#: dnf/cli/output.py:1322
++#: dnf/cli/output.py:1235
+ msgctxt "long"
+ msgid "Package"
+ msgstr "软件包"
+ 
+-#: dnf/cli/output.py:1371
++#: dnf/cli/output.py:1284
+ msgid "replacing"
+ msgstr "替换"
+ 
+-#: dnf/cli/output.py:1378
++#: dnf/cli/output.py:1291
+ #, python-format
+ msgid ""
+ "\n"
+@@ -3147,287 +3127,271 @@ msgstr ""
+ "%s\n"
+ 
+ #. TODO: remove
+-#: dnf/cli/output.py:1383 dnf/cli/output.py:1932 dnf/cli/output.py:1933
++#: dnf/cli/output.py:1296 dnf/cli/output.py:1814 dnf/cli/output.py:1815
+ msgid "Install"
+ msgstr "安装"
+ 
+-#: dnf/cli/output.py:1387 dnf/cli/output.py:1941
++#: dnf/cli/output.py:1300 dnf/cli/output.py:1823
+ msgid "Upgrade"
+ msgstr "升级"
+ 
+-#: dnf/cli/output.py:1388
++#: dnf/cli/output.py:1301
+ msgid "Remove"
+ msgstr "移除"
+ 
+-#: dnf/cli/output.py:1390 dnf/cli/output.py:1939
++#: dnf/cli/output.py:1303 dnf/cli/output.py:1821
+ msgid "Downgrade"
+ msgstr "降级"
+ 
+-#: dnf/cli/output.py:1391
++#: dnf/cli/output.py:1304
+ msgid "Skip"
+ msgstr "跳过"
+ 
+-#: dnf/cli/output.py:1400 dnf/cli/output.py:1416
++#: dnf/cli/output.py:1313 dnf/cli/output.py:1329
+ msgid "Package"
+ msgid_plural "Packages"
+ msgstr[0] "软件包"
+ 
+-#: dnf/cli/output.py:1418
++#: dnf/cli/output.py:1331
+ msgid "Dependent package"
+ msgid_plural "Dependent packages"
+ msgstr[0] "依赖软件包"
+ 
+-#: dnf/cli/output.py:1497 dnf/cli/output.py:1773 dnf/cli/output.py:1942
+-msgid "Upgraded"
+-msgstr "已升级"
+-
+-#: dnf/cli/output.py:1498 dnf/cli/output.py:1773 dnf/cli/output.py:1940
+-msgid "Downgraded"
+-msgstr "已降级"
+-
+-#: dnf/cli/output.py:1503
+-msgid "Reinstalled"
+-msgstr "已重装"
+-
+-#: dnf/cli/output.py:1504
+-msgid "Skipped"
+-msgstr "已跳过"
+-
+-#: dnf/cli/output.py:1505
+-msgid "Removed"
+-msgstr "已移除"
+-
+-#: dnf/cli/output.py:1508
+-msgid "Failed"
+-msgstr "失败"
+-
+-#: dnf/cli/output.py:1559
++#: dnf/cli/output.py:1439
+ msgid "Total"
+ msgstr "总计"
+ 
+-#: dnf/cli/output.py:1587
++#: dnf/cli/output.py:1467
+ msgid "<unset>"
+ msgstr "<空>"
+ 
+-#: dnf/cli/output.py:1588
++#: dnf/cli/output.py:1468
+ msgid "System"
+ msgstr "系统"
+ 
+-#: dnf/cli/output.py:1638
++#: dnf/cli/output.py:1518
+ msgid "Command line"
+ msgstr "命令行"
+ 
+ #. TRANSLATORS: user names who executed transaction in history command output
+-#: dnf/cli/output.py:1649
++#: dnf/cli/output.py:1531
+ msgid "User name"
+ msgstr "用户名"
+ 
+-#: dnf/cli/output.py:1651
++#: dnf/cli/output.py:1533
+ msgid "ID"
+ msgstr "ID"
+ 
+-#: dnf/cli/output.py:1653
++#: dnf/cli/output.py:1535
+ msgid "Date and time"
+ msgstr "日期和时间"
+ 
+-#: dnf/cli/output.py:1654
++#: dnf/cli/output.py:1536
+ msgid "Action(s)"
+ msgstr "操作"
+ 
+-#: dnf/cli/output.py:1655
++#: dnf/cli/output.py:1537
+ msgid "Altered"
+ msgstr "更改"
+ 
+-#: dnf/cli/output.py:1698
++#: dnf/cli/output.py:1580
+ msgid "No transactions"
+ msgstr "没有事务"
+ 
+-#: dnf/cli/output.py:1699 dnf/cli/output.py:1715
++#: dnf/cli/output.py:1581 dnf/cli/output.py:1597
+ msgid "Failed history info"
+ msgstr "失败的历史信息"
+ 
+-#: dnf/cli/output.py:1714
++#: dnf/cli/output.py:1596
+ msgid "No transaction ID, or package, given"
+ msgstr "未指定事务 ID、或者软件包"
+ 
+-#: dnf/cli/output.py:1772
++#: dnf/cli/output.py:1654
+ msgid "Erased"
+ msgstr "已删除"
+ 
+-#: dnf/cli/output.py:1774
++#: dnf/cli/output.py:1655 dnf/cli/output.py:1822 dnf/util.py:616
++msgid "Downgraded"
++msgstr "已降级"
++
++#: dnf/cli/output.py:1655 dnf/cli/output.py:1824 dnf/util.py:615
++msgid "Upgraded"
++msgstr "已升级"
++
++#: dnf/cli/output.py:1656
+ msgid "Not installed"
+ msgstr "未安装"
+ 
+-#: dnf/cli/output.py:1775
++#: dnf/cli/output.py:1657
+ msgid "Newer"
+ msgstr "较早的"
+ 
+-#: dnf/cli/output.py:1775
++#: dnf/cli/output.py:1657
+ msgid "Older"
+ msgstr "较老的"
+ 
+-#: dnf/cli/output.py:1823 dnf/cli/output.py:1825
++#: dnf/cli/output.py:1705 dnf/cli/output.py:1707
+ msgid "Transaction ID :"
+ msgstr "事务 ID:"
+ 
+-#: dnf/cli/output.py:1828
++#: dnf/cli/output.py:1710
+ msgid "Begin time     :"
+ msgstr "起始时间    :"
+ 
+-#: dnf/cli/output.py:1831 dnf/cli/output.py:1833
++#: dnf/cli/output.py:1713 dnf/cli/output.py:1715
+ msgid "Begin rpmdb    :"
+ msgstr "起始 RPM 数据库     :"
+ 
+-#: dnf/cli/output.py:1839
++#: dnf/cli/output.py:1721
+ #, python-format
+ msgid "(%u seconds)"
+ msgstr "(%u 秒)"
+ 
+-#: dnf/cli/output.py:1841
++#: dnf/cli/output.py:1723
+ #, python-format
+ msgid "(%u minutes)"
+ msgstr "(%u 分钟)"
+ 
+-#: dnf/cli/output.py:1843
++#: dnf/cli/output.py:1725
+ #, python-format
+ msgid "(%u hours)"
+ msgstr "(%u 小时)"
+ 
+-#: dnf/cli/output.py:1845
++#: dnf/cli/output.py:1727
+ #, python-format
+ msgid "(%u days)"
+ msgstr "(%u 天)"
+ 
+-#: dnf/cli/output.py:1846
++#: dnf/cli/output.py:1728
+ msgid "End time       :"
+ msgstr "结束时间       :"
+ 
+-#: dnf/cli/output.py:1849 dnf/cli/output.py:1851
++#: dnf/cli/output.py:1731 dnf/cli/output.py:1733
+ msgid "End rpmdb      :"
+ msgstr "结束 RPM 数据库      :"
+ 
+-#: dnf/cli/output.py:1858 dnf/cli/output.py:1860
++#: dnf/cli/output.py:1740 dnf/cli/output.py:1742
+ msgid "User           :"
+ msgstr "用户           :"
+ 
+-#: dnf/cli/output.py:1864 dnf/cli/output.py:1871
++#: dnf/cli/output.py:1746 dnf/cli/output.py:1753
+ msgid "Aborted"
+ msgstr "已终止"
+ 
+-#: dnf/cli/output.py:1864 dnf/cli/output.py:1867 dnf/cli/output.py:1869
+-#: dnf/cli/output.py:1871 dnf/cli/output.py:1873 dnf/cli/output.py:1875
++#: dnf/cli/output.py:1746 dnf/cli/output.py:1749 dnf/cli/output.py:1751
++#: dnf/cli/output.py:1753 dnf/cli/output.py:1755 dnf/cli/output.py:1757
+ msgid "Return-Code    :"
+ msgstr "返回码    :"
+ 
+-#: dnf/cli/output.py:1867 dnf/cli/output.py:1875
++#: dnf/cli/output.py:1749 dnf/cli/output.py:1757
+ msgid "Success"
+ msgstr "成功"
+ 
+-#: dnf/cli/output.py:1869
++#: dnf/cli/output.py:1751
+ msgid "Failures:"
+ msgstr "失败:"
+ 
+-#: dnf/cli/output.py:1873
++#: dnf/cli/output.py:1755
+ msgid "Failure:"
+ msgstr "失败:"
+ 
+-#: dnf/cli/output.py:1883 dnf/cli/output.py:1885
++#: dnf/cli/output.py:1765 dnf/cli/output.py:1767
+ msgid "Releasever     :"
+ msgstr "Releasever     :"
+ 
+-#: dnf/cli/output.py:1890 dnf/cli/output.py:1892
++#: dnf/cli/output.py:1772 dnf/cli/output.py:1774
+ msgid "Command Line   :"
+ msgstr "命令行   :"
+ 
+-#: dnf/cli/output.py:1897 dnf/cli/output.py:1899
++#: dnf/cli/output.py:1779 dnf/cli/output.py:1781
+ msgid "Comment        :"
+ msgstr "注释        :"
+ 
+-#: dnf/cli/output.py:1903
++#: dnf/cli/output.py:1785
+ msgid "Transaction performed with:"
+ msgstr "事务完成由:"
+ 
+-#: dnf/cli/output.py:1912
++#: dnf/cli/output.py:1794
+ msgid "Packages Altered:"
+ msgstr "已改变的包:"
+ 
+-#: dnf/cli/output.py:1918
++#: dnf/cli/output.py:1800
+ msgid "Scriptlet output:"
+ msgstr "Scriptlet 输出:"
+ 
+-#: dnf/cli/output.py:1925
++#: dnf/cli/output.py:1807
+ msgid "Errors:"
+ msgstr "错误:"
+ 
+-#: dnf/cli/output.py:1934
++#: dnf/cli/output.py:1816
+ msgid "Dep-Install"
+ msgstr "依赖安装"
+ 
+-#: dnf/cli/output.py:1935
++#: dnf/cli/output.py:1817
+ msgid "Obsoleted"
+ msgstr "已废弃"
+ 
+-#: dnf/cli/output.py:1936 dnf/transaction.py:84 dnf/transaction.py:85
++#: dnf/cli/output.py:1818 dnf/transaction.py:84 dnf/transaction.py:85
+ msgid "Obsoleting"
+ msgstr "废弃"
+ 
+-#: dnf/cli/output.py:1937
++#: dnf/cli/output.py:1819
+ msgid "Erase"
+ msgstr "删除"
+ 
+-#: dnf/cli/output.py:1938
++#: dnf/cli/output.py:1820
+ msgid "Reinstall"
+ msgstr "重装"
+ 
+-#: dnf/cli/output.py:2016
++#: dnf/cli/output.py:1894
+ #, python-format
+ msgid "---> Package %s.%s %s will be installed"
+ msgstr "---> 软件包 %s.%s %s 将会被安装"
+ 
+-#: dnf/cli/output.py:2018
++#: dnf/cli/output.py:1896
+ #, python-format
+ msgid "---> Package %s.%s %s will be an upgrade"
+ msgstr "---> 软件包 %s.%s %s 将作为一个更新"
+ 
+-#: dnf/cli/output.py:2020
++#: dnf/cli/output.py:1898
+ #, python-format
+ msgid "---> Package %s.%s %s will be erased"
+ msgstr "---> 软件包 %s.%s %s 将会被清除"
+ 
+-#: dnf/cli/output.py:2022
++#: dnf/cli/output.py:1900
+ #, python-format
+ msgid "---> Package %s.%s %s will be reinstalled"
+ msgstr "---> 软件包 %s.%s %s 将会被重新安装"
+ 
+-#: dnf/cli/output.py:2024
++#: dnf/cli/output.py:1902
+ #, python-format
+ msgid "---> Package %s.%s %s will be a downgrade"
+ msgstr "---> 软件包 %s.%s %s 将会被降级"
+ 
+-#: dnf/cli/output.py:2026
++#: dnf/cli/output.py:1904
+ #, python-format
+ msgid "---> Package %s.%s %s will be obsoleting"
+ msgstr "---> 软件包 %s.%s %s 将会废弃"
+ 
+-#: dnf/cli/output.py:2028
++#: dnf/cli/output.py:1906
+ #, python-format
+ msgid "---> Package %s.%s %s will be upgraded"
+ msgstr "---> 软件包 %s.%s %s 将会被升级"
+ 
+-#: dnf/cli/output.py:2030
++#: dnf/cli/output.py:1908
+ #, python-format
+ msgid "---> Package %s.%s %s will be obsoleted"
+ msgstr "---> 软件包 %s.%s %s 将会被废弃"
+ 
+-#: dnf/cli/output.py:2039
++#: dnf/cli/output.py:1917
+ msgid "--> Starting dependency resolution"
+ msgstr "--> 开始解决依赖关系"
+ 
+-#: dnf/cli/output.py:2044
++#: dnf/cli/output.py:1921
+ msgid "--> Finished dependency resolution"
+ msgstr "--> 依赖关系解决完成"
+ 
+-#: dnf/cli/output.py:2058 dnf/crypto.py:132
++#: dnf/cli/output.py:1935 dnf/crypto.py:132
+ #, python-format
+ msgid ""
+ "Importing GPG key 0x%s:\n"
+@@ -3509,16 +3473,14 @@ msgid "Module or Group '%s' does not exist."
+ msgstr "模块或者组 '%s' 不存在。"
+ 
+ #: dnf/comps.py:599
+-#, fuzzy, python-format
+-#| msgid "Environment '%s' is not installed."
++#, python-format
+ msgid "Environment id '%s' does not exist."
+-msgstr "环境组 '%s' 没有安装。"
++msgstr "环境 id '%s' 不存在。"
+ 
+-#: dnf/comps.py:622 dnf/transaction_sr.py:443 dnf/transaction_sr.py:453
+-#, fuzzy, python-format
+-#| msgid "Environment '%s' is not installed."
++#: dnf/comps.py:622 dnf/transaction_sr.py:477 dnf/transaction_sr.py:487
++#, python-format
+ msgid "Environment id '%s' is not installed."
+-msgstr "环境组 '%s' 没有安装。"
++msgstr "环境 id '%s' 没有安装。"
+ 
+ #: dnf/comps.py:639
+ #, python-format
+@@ -3531,16 +3493,20 @@ msgid "Environment '%s' is not available."
+ msgstr "环境 '%s' 不可用。"
+ 
+ #: dnf/comps.py:673
+-#, fuzzy, python-format
+-#| msgid "Group_id '%s' does not exist."
++#, python-format
+ msgid "Group id '%s' does not exist."
+-msgstr "Group_id '%s' 不存在。"
++msgstr "组 id '%s' 不存在。"
+ 
+ #: dnf/conf/config.py:136
+ #, python-format
+ msgid "Error parsing '%s': %s"
+ msgstr "解析 “%s” 时错误: %s"
+ 
++#: dnf/conf/config.py:151
++#, python-format
++msgid "Invalid configuration value: %s=%s in %s; %s"
++msgstr "无效配置值: %s=%s 在 %s 中; %s"
++
+ #: dnf/conf/config.py:226
+ msgid "Could not set cachedir: {}"
+ msgstr "不能设置 cachedir: {}"
+@@ -3582,36 +3548,36 @@ msgstr "解析 --setopt 时出现错误,键为 '%s.%s', 值是 '%s': %s"
+ msgid "Repo %s did not have a %s attr. before setopt"
+ msgstr "Repo %s 在 setopt 前没有一个 %s 属性"
+ 
+-#: dnf/conf/read.py:51
++#: dnf/conf/read.py:60
+ #, python-format
+ msgid "Warning: failed loading '%s', skipping."
+ msgstr "警告:加载 '%s' 失败,跳过。"
+ 
+-#: dnf/conf/read.py:63
++#: dnf/conf/read.py:72
+ msgid "Bad id for repo: {} ({}), byte = {} {}"
+ msgstr "repo 的 id 无效: {} ({}), byte = {} {}"
+ 
+-#: dnf/conf/read.py:67
++#: dnf/conf/read.py:76
+ msgid "Bad id for repo: {}, byte = {} {}"
+-msgstr "repo 的 id 无效: %s, byte = %s %d"
++msgstr "repo 的 id 无效: {}, byte = {} {}"
+ 
+-#: dnf/conf/read.py:75
++#: dnf/conf/read.py:84
+ msgid "Repository '{}' ({}): Error parsing config: {}"
+ msgstr "仓库 '{}' ({}): 配置解析时出错: {}"
+ 
+-#: dnf/conf/read.py:78
++#: dnf/conf/read.py:87
+ msgid "Repository '{}': Error parsing config: {}"
+ msgstr "仓库 '{}': 配置解析时出错: {}"
+ 
+-#: dnf/conf/read.py:84
++#: dnf/conf/read.py:93
+ msgid "Repository '{}' ({}) is missing name in configuration, using id."
+ msgstr "仓库 '{}' ({}) 在配置中缺少名称,将使用 id。"
+ 
+-#: dnf/conf/read.py:87
++#: dnf/conf/read.py:96
+ msgid "Repository '{}' is missing name in configuration, using id."
+ msgstr "仓库 '{}' 在配置中缺少名称,将使用 id。"
+ 
+-#: dnf/conf/read.py:104
++#: dnf/conf/read.py:113
+ msgid "Parsing file \"{}\" failed: {}"
+ msgstr "解析文件 \"{}\" 失败:{}"
+ 
+@@ -3625,25 +3591,38 @@ msgstr "repo %s: 0x%s 已被导入"
+ msgid "repo %s: imported key 0x%s."
+ msgstr "repo %s: 已导入密钥 0x%s。"
+ 
+-#: dnf/db/group.py:293
++#: dnf/crypto.py:145
++msgid "Verified using DNS record with DNSSEC signature."
++msgstr "已经通过被 DNSSEC 签名的 DNS 记录验证。"
++
++#: dnf/crypto.py:147
++msgid "NOT verified using DNS record."
++msgstr "并未被 DNS 记录验证。"
++
++#: dnf/crypto.py:184
++#, python-format
++msgid "retrieving repo key for %s unencrypted from %s"
++msgstr "为 %s 从 %s 获取的 repo 密钥未加密"
++
++#: dnf/db/group.py:301
+ msgid ""
+ "No available modular metadata for modular package '{}', it cannot be "
+ "installed on the system"
+ msgstr "对于模块软件包 '{}' 没有可用的模块元数据,它将不能被安装至此系统上"
+ 
+-#: dnf/db/group.py:343
++#: dnf/db/group.py:351
+ msgid "No available modular metadata for modular package"
+ msgstr "对于模块软件包没有可用的模块元数据"
+ 
+-#: dnf/db/group.py:377
++#: dnf/db/group.py:385
+ #, python-format
+ msgid "Will not install a source rpm package (%s)."
+ msgstr "将不安装一个源码 RPM 软件包 (%s)。"
+ 
+ #: dnf/dnssec.py:168
+ msgid ""
+-"Configuration option 'gpgkey_dns_verification' requires libunbound ({})"
+-msgstr "配置文件选项 'gpgkey_dns_verification' 要求 libunbound ({})"
++"Configuration option 'gpgkey_dns_verification' requires python3-unbound ({})"
++msgstr "配置文件选项 'gpgkey_dns_verification' 要求 python3-unbound ({})"
+ 
+ #: dnf/dnssec.py:239
+ msgid "DNSSEC extension: Key for user "
+@@ -3707,7 +3686,7 @@ msgid "Modular dependency problem with Defaults:"
+ msgid_plural "Modular dependency problems with Defaults:"
+ msgstr[0] "默认设置中的模块依赖问题 :"
+ 
+-#: dnf/exceptions.py:131 dnf/module/module_base.py:686
++#: dnf/exceptions.py:131 dnf/module/module_base.py:854
+ msgid "Modular dependency problem:"
+ msgid_plural "Modular dependency problems:"
+ msgstr[0] "模块依赖问题:"
+@@ -3741,7 +3720,47 @@ msgstr "启用的模板:{}。"
+ msgid "No profile specified for '{}', please specify profile."
+ msgstr "没有为 '{}' 指定档案。请指定档案。"
+ 
+-#: dnf/module/module_base.py:33
++#: dnf/module/exceptions.py:27
++msgid "No such module: {}"
++msgstr "不存在模块:{}"
++
++#: dnf/module/exceptions.py:33
++msgid "No such stream: {}"
++msgstr "没有对应的流:{}"
++
++#: dnf/module/exceptions.py:39
++msgid "No enabled stream for module: {}"
++msgstr "该模块没有已启用的流: {}"
++
++#: dnf/module/exceptions.py:46
++msgid "Cannot enable more streams from module '{}' at the same time"
++msgstr "不能同时启用模块:{} 中的多个流"
++
++#: dnf/module/exceptions.py:52
++msgid "Different stream enabled for module: {}"
++msgstr "模块中已启用的其他流:{}"
++
++#: dnf/module/exceptions.py:58
++msgid "No such profile: {}"
++msgstr "没有这个配置:{}"
++
++#: dnf/module/exceptions.py:64
++msgid "Specified profile not installed for {}"
++msgstr "指定的配置没有为 {} 安装"
++
++#: dnf/module/exceptions.py:70
++msgid "No stream specified for '{}', please specify stream"
++msgstr "没有为 '{}' 指定流。请指定流"
++
++#: dnf/module/exceptions.py:82
++msgid "No such profile: {}. No profiles available"
++msgstr "没有这个配置:{}。无配置可用"
++
++#: dnf/module/exceptions.py:88
++msgid "No profile to remove for '{}'"
++msgstr "'{}' 没有可以移除的配置"
++
++#: dnf/module/module_base.py:35
+ msgid ""
+ "\n"
+ "\n"
+@@ -3751,7 +3770,7 @@ msgstr ""
+ "\n"
+ "提示:[d]默认,[e]已启用,[x]已禁用,[i]已安装"
+ 
+-#: dnf/module/module_base.py:34
++#: dnf/module/module_base.py:36
+ msgid ""
+ "\n"
+ "\n"
+@@ -3761,80 +3780,98 @@ msgstr ""
+ "\n"
+ "提示 : [d]默认, [e]启用, [x]禁用, [i]已安装的, [a]活跃的"
+ 
+-#: dnf/module/module_base.py:54 dnf/module/module_base.py:421
+-#: dnf/module/module_base.py:477 dnf/module/module_base.py:543
++#: dnf/module/module_base.py:56 dnf/module/module_base.py:556
++#: dnf/module/module_base.py:615 dnf/module/module_base.py:681
+ msgid "Ignoring unnecessary profile: '{}/{}'"
+ msgstr "正在忽略无用的配置文件'{}/{}'"
+ 
+-#: dnf/module/module_base.py:84
++#: dnf/module/module_base.py:86
+ #, python-brace-format
+ msgid "All matches for argument '{0}' in module '{1}:{2}' are not active"
+ msgstr "模块 '{1}:{2}' 中参数 '{0}' 的所有匹配项目都未激活"
+ 
+-#: dnf/module/module_base.py:92
++#: dnf/module/module_base.py:94 dnf/module/module_base.py:204
+ #, python-brace-format
+ msgid "Installing module '{0}' from Fail-Safe repository {1} is not allowed"
+ msgstr "不允许从失效保险仓库 {1} 安装模块 '{0}'"
+ 
+-#: dnf/module/module_base.py:102
++#: dnf/module/module_base.py:104 dnf/module/module_base.py:214
+ msgid ""
+ "Unable to match profile for argument {}. Available profiles for '{}:{}': {}"
+ msgstr "不能为参数 {} 匹配配置文件。'{}:{}' 可用的配置文件为 : {}"
+ 
+-#: dnf/module/module_base.py:106
++#: dnf/module/module_base.py:108 dnf/module/module_base.py:218
+ msgid "Unable to match profile for argument {}"
+ msgstr "无法配置参数 {} 中的配置档案"
+ 
+-#: dnf/module/module_base.py:118
++#: dnf/module/module_base.py:120
+ msgid "No default profiles for module {}:{}. Available profiles: {}"
+ msgstr "模块 {}:{} 没有默认的配置文件。可用的配置为 : {}"
+ 
+-#: dnf/module/module_base.py:122
++#: dnf/module/module_base.py:124
+ msgid "No profiles for module {}:{}"
+ msgstr "没有模块 {}:{} 的配置文件"
+ 
+-#: dnf/module/module_base.py:129
++#: dnf/module/module_base.py:131
+ msgid "Default profile {} not available in module {}:{}"
+ msgstr "默认配置文件 {} 在模块 {}:{} 中不可用"
+ 
+-#: dnf/module/module_base.py:142
++#: dnf/module/module_base.py:144 dnf/module/module_base.py:247
+ msgid "Installing module from Fail-Safe repository is not allowed"
+ msgstr "不允许从失效保险仓库中安装模块"
+ 
+-#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
+-#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
+-#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
+-#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
++#: dnf/module/module_base.py:196
++#, python-brace-format
++msgid "No active matches for argument '{0}' in module '{1}:{2}'"
++msgstr "模块 '{1}:{2}' 中的参数 '{0}' 没有已激活的匹配项目"
++
++#: dnf/module/module_base.py:228
++#, python-brace-format
++msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'"
++msgstr "在模块 '{1}' 流 '{2}' 中没有安装的配置文件 '{0}'"
++
++#: dnf/module/module_base.py:267
++msgid "No packages available to distrosync for package name '{}'"
++msgstr "软件包名称 '{}' 没有可用的软件包用于 distrosync"
++
++#: dnf/module/module_base.py:310 dnf/module/module_base.py:461
++#: dnf/module/module_base.py:486 dnf/module/module_base.py:505
++#: dnf/module/module_base.py:552 dnf/module/module_base.py:611
++#: dnf/module/module_base.py:677 dnf/module/module_base.py:840
+ msgid "Unable to resolve argument {}"
+ msgstr "无法解析参数 {}"
+ 
+-#: dnf/module/module_base.py:160
+-msgid "No match for package {}"
+-msgstr "没有和{}匹配的软件包"
+-
+-#: dnf/module/module_base.py:204
++#: dnf/module/module_base.py:321
+ #, python-brace-format
+ msgid "Upgrading module '{0}' from Fail-Safe repository {1} is not allowed"
+ msgstr "不允许从失效保险仓库 {1} 中升级模块 '{0}'"
+ 
+-#: dnf/module/module_base.py:223 dnf/module/module_base.py:251
++#: dnf/module/module_base.py:340 dnf/module/module_base.py:368
+ msgid "Unable to match profile in argument {}"
+ msgstr "无法匹配参数 {} 中的配置档案"
+ 
+-#: dnf/module/module_base.py:231
++#: dnf/module/module_base.py:348
+ msgid "Upgrading module from Fail-Safe repository is not allowed"
+ msgstr "不允许从失效保险仓库中升级模块"
+ 
+-#: dnf/module/module_base.py:367
++#: dnf/module/module_base.py:422
++#, python-brace-format
++msgid ""
++"Argument '{argument}' matches {stream_count} streams ('{streams}') of module"
++" '{module}', but none of the streams are enabled or default"
++msgstr ""
++"参数 '{argument}' 可以匹配模块 '{module}' 的 {stream_count} "
++"个流('{streams}'),但是这些流都未被启用或非默认"
++
++#: dnf/module/module_base.py:509
+ msgid ""
+ "Only module name is required. Ignoring unneeded information in argument: "
+ "'{}'"
+ msgstr "只需要模块名。正在忽略'{}'中的无用信息"
+ 
+-#: dnf/package.py:298
+-#, python-format
+-msgid "%s: %s check failed: %s vs %s"
+-msgstr "%s: %s 检查失败:%s vs %s"
++#: dnf/module/module_base.py:841
++msgid "No match for package {}"
++msgstr "没有和{}匹配的软件包"
+ 
+ #. empty file is invalid json format
+ #: dnf/persistor.py:54
+@@ -3845,12 +3882,12 @@ msgstr "%s 为空文件"
+ #: dnf/persistor.py:91
+ #, python-format
+ msgid "Failed to load expired repos cache: %s"
+-msgstr ""
++msgstr "加载过期的仓库缓存失败: %s"
+ 
+ #: dnf/persistor.py:99
+ #, python-format
+ msgid "Failed to store expired repos cache: %s"
+-msgstr ""
++msgstr "存储已过期的仓库缓存失败: %s"
+ 
+ #: dnf/persistor.py:106
+ msgid "Failed storing last makecache time."
+@@ -3870,16 +3907,16 @@ msgstr "解析文件失败:%s"
+ msgid "Loaded plugins: %s"
+ msgstr "加载插件:%s"
+ 
+-#: dnf/plugin.py:199
++#: dnf/plugin.py:211
+ #, python-format
+ msgid "Failed loading plugin \"%s\": %s"
+ msgstr "加载插件 \"%s\" 失败 : %s"
+ 
+-#: dnf/plugin.py:231
++#: dnf/plugin.py:243
+ msgid "No matches found for the following enable plugin patterns: {}"
+ msgstr "没有以下已启用插件模式的匹配项 : {}"
+ 
+-#: dnf/plugin.py:235
++#: dnf/plugin.py:247
+ msgid "No matches found for the following disable plugin patterns: {}"
+ msgstr "没有以下已停用插件模式的匹配项 : {}"
+ 
+@@ -3908,10 +3945,27 @@ msgstr "正在启用 %s 仓库"
+ msgid "Added %s repo from %s"
+ msgstr "已添加 %s 仓库来自 %s"
+ 
++#: dnf/rpm/miscutils.py:35
++#, python-brace-format
++msgid ""
++"Using rpmkeys executable from {path} to verify signature for package: "
++"{package}."
++msgstr "使用来自 {path} 的 rpmkeys 可执行代码验证软件包的签名:{package}。"
++
++#: dnf/rpm/miscutils.py:39
++msgid "Cannot find rpmkeys executable to verify signatures."
++msgstr "无法找到 rpmkeys 的可执行文件以验证签名。"
++
+ #: dnf/rpm/transaction.py:119
+ msgid "Errors occurred during test transaction."
+ msgstr "测试事务过程中出现错误。"
+ 
++#: dnf/sack.py:47
++msgid ""
++"allow_vendor_change is disabled. This option is currently not supported for "
++"downgrade and distro-sync commands"
++msgstr "allow_vendor_change 被禁用。此选项目前不支持 downgrade 和 distro-sync 命令"
++
+ #. TRANSLATORS: This is for a single package currently being downgraded.
+ #: dnf/transaction.py:80
+ msgctxt "currently"
+@@ -3958,164 +4012,199 @@ msgstr "运行脚本"
+ msgid "Preparing"
+ msgstr "准备中"
+ 
+-#: dnf/transaction_sr.py:60
++#: dnf/transaction_sr.py:66
+ #, python-brace-format
+-msgid "Errors in \"{filename}\":"
+-msgstr ""
++msgid ""
++"The following problems occurred while replaying the transaction from file "
++"\"{filename}\":"
++msgstr "在重放来自文件 \"{filename}\" 的事务时出现了下列问题:"
+ 
+-#: dnf/transaction_sr.py:70
+-#, python-brace-format
+-msgid "Error in \"{filename}\": {error}"
+-msgstr ""
++#: dnf/transaction_sr.py:68
++msgid "The following problems occurred while running a transaction:"
++msgstr "运行事务时发生以下问题:"
+ 
+-#: dnf/transaction_sr.py:87
++#: dnf/transaction_sr.py:89
+ #, python-brace-format
+ msgid "Invalid major version \"{major}\", number expected."
+-msgstr ""
++msgstr "无效的主版本 \"{major}\",需要是数字。"
+ 
+-#: dnf/transaction_sr.py:95
++#: dnf/transaction_sr.py:97
+ #, python-brace-format
+ msgid "Invalid minor version \"{minor}\", number expected."
+-msgstr ""
++msgstr "无效的次版本 \"{minor}\",需要是数字。"
+ 
+-#: dnf/transaction_sr.py:101
++#: dnf/transaction_sr.py:103
+ #, python-brace-format
+ msgid ""
+ "Incompatible major version \"{major}\", supported major version is "
+ "\"{major_supp}\"."
+-msgstr ""
++msgstr "不兼容的主版本 \"{major}\",支持的主版本是 \"{major_supp}\"。"
++
++#: dnf/transaction_sr.py:224
++msgid ""
++"Conflicting TransactionReplay arguments have been specified: filename, data"
++msgstr "指定了有冲突的 TransactionReplay 参数: filename、data"
+ 
+-#: dnf/transaction_sr.py:244
++#: dnf/transaction_sr.py:265
+ #, python-brace-format
+ msgid "Unexpected type of \"{id}\", {exp} expected."
+-msgstr ""
++msgstr "意外类型 \"{id}\",需要是 {exp}。"
+ 
+-#: dnf/transaction_sr.py:250
++#: dnf/transaction_sr.py:271
+ #, python-brace-format
+ msgid "Missing key \"{key}\"."
+-msgstr ""
++msgstr "缺少键 \"{key}\"。"
+ 
+-#: dnf/transaction_sr.py:263
++#: dnf/transaction_sr.py:285
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in an rpm."
+-msgstr ""
++msgstr "在 rpm 中缺少对象键 \"{key}\"。"
+ 
+-#: dnf/transaction_sr.py:267
++#: dnf/transaction_sr.py:289
+ #, python-brace-format
+ msgid "Unexpected value of package reason \"{reason}\" for rpm nevra \"{nevra}\"."
+-msgstr ""
++msgstr "rpm nevra \"{nevra}\" 的软件包原因 \"{reason}\" 的值无效。"
+ 
+-#: dnf/transaction_sr.py:275
++#: dnf/transaction_sr.py:297
+ #, python-brace-format
+ msgid "Cannot parse NEVRA for package \"{nevra}\"."
+-msgstr ""
++msgstr "无法为软件包 \"{nevra}\" 解析 NEVRA。"
+ 
+-#: dnf/transaction_sr.py:286
++#: dnf/transaction_sr.py:321
+ #, python-brace-format
+ msgid "Cannot find rpm nevra \"{nevra}\"."
+-msgstr ""
++msgstr "无法找到 rpm nevra \"{nevra}\"。"
+ 
+-#: dnf/transaction_sr.py:301
+-#, fuzzy, python-brace-format
+-#| msgid "Package %s is already installed."
++#: dnf/transaction_sr.py:336
++#, python-brace-format
+ msgid "Package \"{na}\" is already installed for action \"{action}\"."
+-msgstr "软件包 %s 已安装。"
++msgstr "已为操作 \"{action}\" 安装了软件包 \"{na}\"。"
+ 
+-#: dnf/transaction_sr.py:311
++#: dnf/transaction_sr.py:345
+ #, python-brace-format
+ msgid ""
+ "Package nevra \"{nevra}\" not available in repositories for action "
+ "\"{action}\"."
+-msgstr ""
++msgstr "对于操作 \"{action}\",软件包 nevra \"{nevra}\" 没有包括在仓库中。"
+ 
+-#: dnf/transaction_sr.py:322
++#: dnf/transaction_sr.py:356
+ #, python-brace-format
+ msgid "Package nevra \"{nevra}\" not installed for action \"{action}\"."
+-msgstr ""
++msgstr "软件包 nevra \"{nevra}\" 没有为操作 \"{action}\" 安装。"
+ 
+-#: dnf/transaction_sr.py:336
++#: dnf/transaction_sr.py:370
+ #, python-brace-format
+ msgid "Unexpected value of package action \"{action}\" for rpm nevra \"{nevra}\"."
+-msgstr ""
++msgstr "rpm nevra \"{nevra}\" 的软件包操作 \"{action}\" 无效。"
+ 
+-#: dnf/transaction_sr.py:343
+-#, fuzzy, python-format
+-#| msgid "Module or Group '%s' is not available."
++#: dnf/transaction_sr.py:377
++#, python-format
+ msgid "Group id '%s' is not available."
+-msgstr "模块或者组 '%s' 不可用。"
++msgstr "组 id '%s' 不可用。"
+ 
+-#: dnf/transaction_sr.py:364
++#: dnf/transaction_sr.py:398
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in groups.packages."
+-msgstr ""
++msgstr "在 groups.packages 中缺少对象键 \"{key}\"。"
+ 
+-#: dnf/transaction_sr.py:377 dnf/transaction_sr.py:387
+-#, fuzzy, python-format
+-#| msgid "Module or Group '%s' is not installed."
++#: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421
++#, python-format
+ msgid "Group id '%s' is not installed."
+-msgstr "模块或者组 '%s' 未安装。"
++msgstr "组 id '%s' 未安装。"
+ 
+-#: dnf/transaction_sr.py:398
+-#, fuzzy, python-format
+-#| msgid "Environment '%s' is not available."
++#: dnf/transaction_sr.py:432
++#, python-format
+ msgid "Environment id '%s' is not available."
+-msgstr "环境 '%s' 不可用。"
++msgstr "环境 id '%s' 不可用。"
+ 
+-#: dnf/transaction_sr.py:422
++#: dnf/transaction_sr.py:456
+ #, python-brace-format
+ msgid ""
+ "Invalid value \"{group_type}\" of environments.groups.group_type, only "
+ "\"mandatory\" or \"optional\" is supported."
+ msgstr ""
++"environments.groups.group_type 的值 \"{group_type}\" 无效,仅支持 \"mandatory\" 或者 "
++"\"optional\"。"
+ 
+-#: dnf/transaction_sr.py:430
++#: dnf/transaction_sr.py:464
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in environments.groups."
+-msgstr ""
++msgstr "在 environment.groups 中缺少对象键 \"{key}\"。"
+ 
+-#: dnf/transaction_sr.py:508
++#: dnf/transaction_sr.py:542
+ #, python-brace-format
+ msgid "Unexpected value of group action \"{action}\" for group \"{group}\"."
+-msgstr ""
++msgstr "组 \"{group}\" 的组操作 \"{action}\" 的值无效。"
+ 
+-#: dnf/transaction_sr.py:513
++#: dnf/transaction_sr.py:547
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in a group."
+-msgstr ""
++msgstr "在一个组中缺少对象键 \"{key}\"。"
+ 
+-#: dnf/transaction_sr.py:537
++#: dnf/transaction_sr.py:571
+ #, python-brace-format
+ msgid "Unexpected value of environment action \"{action}\" for environment \"{env}\"."
+-msgstr ""
++msgstr "环境 \"{env}\" 的环境操作 \"{action}\" 的值无效。"
+ 
+-#: dnf/transaction_sr.py:542
++#: dnf/transaction_sr.py:576
+ #, python-brace-format
+ msgid "Missing object key \"{key}\" in an environment."
+-msgstr ""
++msgstr "在环境中缺少对象键 \"{key}\"。"
+ 
+-#: dnf/transaction_sr.py:581
++#: dnf/transaction_sr.py:615
+ #, python-brace-format
+ msgid ""
+ "Package nevra \"{nevra}\", which is not present in the transaction file, was"
+ " pulled into the transaction."
+-msgstr ""
++msgstr "软件包 nevra \"{nevra}\" 没有包括在事务文件中,但它被拉取到事务中。"
+ 
+-#: dnf/util.py:391 dnf/util.py:393
++#: dnf/util.py:419 dnf/util.py:421
+ msgid "Problem"
+ msgstr "问题"
+ 
+-#: dnf/util.py:444
++#: dnf/util.py:472
+ msgid "TransactionItem not found for key: {}"
+ msgstr "找不到键的 TransactionItem: {}"
+ 
+-#: dnf/util.py:454
++#: dnf/util.py:482
+ msgid "TransactionSWDBItem not found for key: {}"
+ msgstr "找不到键的 TransactionSWDBItem: {}"
+ 
+-#: dnf/util.py:457
++#: dnf/util.py:485
+ msgid "Errors occurred during transaction."
+ msgstr "事务过程中出现错误。"
+ 
++#: dnf/util.py:621
++msgid "Reinstalled"
++msgstr "已重装"
++
++#: dnf/util.py:622
++msgid "Skipped"
++msgstr "已跳过"
++
++#: dnf/util.py:623
++msgid "Removed"
++msgstr "已移除"
++
++#: dnf/util.py:626
++msgid "Failed"
++msgstr "失败"
++
++#~ msgid "%s: %s check failed: %s vs %s"
++#~ msgstr "%s: %s 检查失败:%s vs %s"
++
++#~ msgid "Action not handled: {}"
++#~ msgstr "操作没被处理:{}"
++
++#~ msgid "no package matched"
++#~ msgstr "没有能够与之匹配的软件包"
++
++#~ msgid "Not found given transaction ID"
++#~ msgstr "未找到指定事务 ID"
++
++#~ msgid "Undoing transaction {}, from {}"
++#~ msgstr "撤销事务 {},从 {}"
++
+ #~ msgid "format for displaying found packages"
+ #~ msgstr "用于显示已查找到软件包的格式"
+ 
+-- 
+2.31.1
+
diff --git a/SOURCES/0007-Fix-documentation-of-globs-not-supporting-curly-brackets.patch b/SOURCES/0007-Fix-documentation-of-globs-not-supporting-curly-brackets.patch
deleted file mode 100644
index 2daa3b2..0000000
--- a/SOURCES/0007-Fix-documentation-of-globs-not-supporting-curly-brackets.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From f3c254581bcb0591a543aee0c7e031c3c9d0a9a1 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: Mon, 11 Jan 2021 16:43:25 +0100
-Subject: [PATCH] Fix documentation of globs not supporting curly brackets
-
-= changelog =
-msg: Fix documentation of globs not supporting curly brackets
-type: bugfix
-resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1913418
----
- doc/command_ref.rst | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/doc/command_ref.rst b/doc/command_ref.rst
-index bbce3ddcf4..d11e8dd502 100644
---- a/doc/command_ref.rst
-+++ b/doc/command_ref.rst
-@@ -1763,8 +1763,10 @@ The following patterns are supported:
-     those two characters, inclusive, is matched. If the first character
-     following the ``[`` is a ``!`` or a ``^`` then any character not enclosed
-     is matched.
--``{}``
--    Matches any of the comma separated list of enclosed strings.
-+
-+Note: Curly brackets (``{}``) are not supported. You can still use them in
-+shells that support them and let the shell do the expansion, but if quoted or
-+escaped, dnf will not expand them.
- 
- --------------
- NEVRA Matching
diff --git a/SOURCES/0008-Module-switch-command.patch b/SOURCES/0008-Module-switch-command.patch
deleted file mode 100644
index f464e15..0000000
--- a/SOURCES/0008-Module-switch-command.patch
+++ /dev/null
@@ -1,507 +0,0 @@
-From 6ed0458744090ab307da9d9118690372b2e66ca8 Mon Sep 17 00:00:00 2001
-From: Jaroslav Mracek <jmracek@redhat.com>
-Date: Wed, 11 Nov 2020 12:47:21 +0100
-Subject: [PATCH 1/5] Make module_base better industrialized for method reuse
-
-It will allow to use internal for module switch command.
----
- dnf/module/module_base.py | 29 ++++++++++++++++++++---------
- 1 file changed, 20 insertions(+), 9 deletions(-)
-
-diff --git a/dnf/module/module_base.py b/dnf/module/module_base.py
-index 49c871c4..0da4fab1 100644
---- a/dnf/module/module_base.py
-+++ b/dnf/module/module_base.py
-@@ -323,7 +323,7 @@ class ModuleBase(object):
-             assert len(streamDict) == 1
-         return moduleDict
- 
--    def _resolve_specs_enable_update_sack(self, module_specs):
-+    def _resolve_specs_enable(self, module_specs):
-         no_match_specs = []
-         error_spec = []
-         module_dicts = {}
-@@ -339,6 +339,9 @@ class ModuleBase(object):
-                 error_spec.append(spec)
-                 logger.error(ucd(e))
-                 logger.error(_("Unable to resolve argument {}").format(spec))
-+        return no_match_specs, error_spec, module_dicts
-+
-+    def _update_sack(self):
-         hot_fix_repos = [i.id for i in self.base.repos.iter_enabled() if i.module_hotfixes]
-         try:
-             solver_errors = self.base.sack.filter_modules(
-@@ -347,6 +350,10 @@ class ModuleBase(object):
-                 debugsolver=self.base.conf.debug_solver)
-         except hawkey.Exception as e:
-             raise dnf.exceptions.Error(ucd(e))
-+        return solver_errors
-+
-+    def _enable_dependencies(self, module_dicts):
-+        error_spec = []
-         for spec, (nsvcap, moduleDict) in module_dicts.items():
-             for streamDict in moduleDict.values():
-                 for modules in streamDict.values():
-@@ -357,6 +364,17 @@ class ModuleBase(object):
-                         error_spec.append(spec)
-                         logger.error(ucd(e))
-                         logger.error(_("Unable to resolve argument {}").format(spec))
-+        return error_spec
-+
-+    def _resolve_specs_enable_update_sack(self, module_specs):
-+        no_match_specs, error_spec, module_dicts = self._resolve_specs_enable(module_specs)
-+
-+        solver_errors = self._update_sack()
-+
-+        dependency_error_spec = self._enable_dependencies(module_dicts)
-+        if dependency_error_spec:
-+            error_spec.extend(dependency_error_spec)
-+
-         return no_match_specs, error_spec, solver_errors, module_dicts
- 
-     def _modules_reset_or_disable(self, module_specs, to_state):
-@@ -379,14 +397,7 @@ class ModuleBase(object):
-                 if to_state == STATE_DISABLED:
-                     self.base._moduleContainer.disable(name)
- 
--        hot_fix_repos = [i.id for i in self.base.repos.iter_enabled() if i.module_hotfixes]
--        try:
--            solver_errors = self.base.sack.filter_modules(
--                self.base._moduleContainer, hot_fix_repos, self.base.conf.installroot,
--                self.base.conf.module_platform_id, update_only=True,
--                debugsolver=self.base.conf.debug_solver)
--        except hawkey.Exception as e:
--            raise dnf.exceptions.Error(ucd(e))
-+        solver_errors = self._update_sack()
-         return no_match_specs, solver_errors
- 
-     def _get_package_name_set_and_remove_profiles(self, module_list, nsvcap, remove=False):
--- 
-2.26.2
-
-
-From e6473f4e6f17bb635e023b8905f29b318b8795bf Mon Sep 17 00:00:00 2001
-From: Jaroslav Mracek <jmracek@redhat.com>
-Date: Wed, 11 Nov 2020 17:09:16 +0100
-Subject: [PATCH 2/5] Add module switch-to support (RhBug:1792020)
-
-It is a combination of module rpm distrosync, module profile switch and
-module stream switch.
-
-= changelog =
-msg:           Add new `module switch-to` command for switching content
-of module streams
-type:          enhancement
-resolves:      https://bugzilla.redhat.com/show_bug.cgi?id=1792020
----
- VERSION.cmake              |   2 +-
- dnf.spec                   |   2 +-
- dnf/cli/commands/module.py |  24 ++++-
- dnf/module/module_base.py  | 182 ++++++++++++++++++++++++++++++++-----
- 4 files changed, 185 insertions(+), 25 deletions(-)
-
-diff --git a/dnf/cli/commands/module.py b/dnf/cli/commands/module.py
-index 5a6c0069..4cdc915e 100644
---- a/dnf/cli/commands/module.py
-+++ b/dnf/cli/commands/module.py
-@@ -271,6 +271,28 @@ class ModuleCommand(commands.Command):
- 
-             logger.error(dnf.exceptions.MarkingErrors(no_match_group_specs=skipped_groups))
- 
-+    class SwitchToSubCommand(SubCommand):
-+
-+        aliases = ('switch-to',)
-+        summary = _('switch a module to a stream and distrosync rpm packages')
-+
-+        def configure(self):
-+            demands = self.cli.demands
-+            demands.available_repos = True
-+            demands.sack_activation = True
-+            demands.resolving = True
-+            demands.root_user = True
-+            self.base.conf.module_stream_switch = True
-+
-+        def run_on_module(self):
-+            try:
-+                self.module_base.switch_to(self.opts.module_spec, strict=self.base.conf.strict)
-+            except dnf.exceptions.MarkingErrors as e:
-+                if self.base.conf.strict:
-+                    if e.no_match_group_specs or e.error_group_specs:
-+                        raise e
-+                logger.error(str(e))
-+
-     class ProvidesSubCommand(SubCommand):
- 
-         aliases = ("provides", )
-@@ -319,7 +341,7 @@ class ModuleCommand(commands.Command):
- 
-     SUBCMDS = {ListSubCommand, InfoSubCommand, EnableSubCommand,
-                DisableSubCommand, ResetSubCommand, InstallSubCommand, UpdateSubCommand,
--               RemoveSubCommand, ProvidesSubCommand, RepoquerySubCommand}
-+               RemoveSubCommand, SwitchToSubCommand, ProvidesSubCommand, RepoquerySubCommand}
- 
-     SUBCMDS_NOT_REQUIRED_ARG = {ListSubCommand}
- 
-diff --git a/dnf/module/module_base.py b/dnf/module/module_base.py
-index 0da4fab1..03d54f72 100644
---- a/dnf/module/module_base.py
-+++ b/dnf/module/module_base.py
-@@ -140,31 +140,140 @@ class ModuleBase(object):
-         if fail_safe_repo_used:
-             raise dnf.exceptions.Error(_(
-                 "Installing module from Fail-Safe repository is not allowed"))
--        #  Remove source packages they cannot be installed or upgraded
--        base_no_source_query = self.base.sack.query().filterm(arch__neq=['src', 'nosrc']).apply()
--        install_base_query = base_no_source_query.filter(nevra_strict=install_set_artefacts)
-+        __, profiles_errors = self._install_profiles_internal(
-+            install_set_artefacts, install_dict, strict)
-+        if profiles_errors:
-+            error_specs.extend(profiles_errors)
- 
--        # add hot-fix packages
--        hot_fix_repos = [i.id for i in self.base.repos.iter_enabled() if i.module_hotfixes]
--        hotfix_packages = base_no_source_query.filter(
--            reponame=hot_fix_repos, name=install_dict.keys())
--        install_base_query = install_base_query.union(hotfix_packages)
-+        if no_match_specs or error_specs or solver_errors:
-+            raise dnf.exceptions.MarkingErrors(no_match_group_specs=no_match_specs,
-+                                               error_group_specs=error_specs,
-+                                               module_depsolv_errors=solver_errors)
- 
--        for pkg_name, set_specs in install_dict.items():
--            query = install_base_query.filter(name=pkg_name)
--            if not query:
--                # package can also be non-modular or part of another stream
--                query = base_no_source_query.filter(name=pkg_name)
--                if not query:
--                    for spec in set_specs:
--                        logger.error(_("Unable to resolve argument {}").format(spec))
--                    logger.error(_("No match for package {}").format(pkg_name))
--                    error_specs.extend(set_specs)
--                    continue
--            self.base._goal.group_members.add(pkg_name)
-+    def switch_to(self, module_specs, strict=True):
-+        # :api
-+        no_match_specs, error_specs, module_dicts = self._resolve_specs_enable(module_specs)
-+        # collect name of artifacts from new modules for distrosync
-+        new_artifacts_names = set()
-+        # collect name of artifacts from active modules for distrosync before sack update
-+        active_artifacts_names = set()
-+        src_arches = {"nosrc", "src"}
-+        for spec, (nsvcap, moduledict) in module_dicts.items():
-+            for name in moduledict.keys():
-+                for module in self.base._moduleContainer.query(name, "", "", "", ""):
-+                    if self.base._moduleContainer.isModuleActive(module):
-+                        for artifact in module.getArtifacts():
-+                            arch = artifact.rsplit(".", 1)[1]
-+                            if arch in src_arches:
-+                                continue
-+                            pkg_name = artifact.rsplit("-", 2)[0]
-+                            active_artifacts_names.add(pkg_name)
-+
-+        solver_errors = self._update_sack()
-+
-+        dependency_error_spec = self._enable_dependencies(module_dicts)
-+        if dependency_error_spec:
-+            error_specs.extend(dependency_error_spec)
-+
-+        # <package_name, set_of_spec>
-+        fail_safe_repo = hawkey.MODULE_FAIL_SAFE_REPO_NAME
-+        install_dict = {}
-+        install_set_artifacts = set()
-+        fail_safe_repo_used = False
-+
-+        # list of name: [profiles] for module profiles being removed
-+        removed_profiles = self.base._moduleContainer.getRemovedProfiles()
-+
-+        for spec, (nsvcap, moduledict) in module_dicts.items():
-+            for name, streamdict in moduledict.items():
-+                for stream, module_list in streamdict.items():
-+                    install_module_list = [x for x in module_list
-+                                           if self.base._moduleContainer.isModuleActive(x.getId())]
-+                    if not install_module_list:
-+                        "No active matches for argument '{0}' in module '{1}:{2}'"
-+                        logger.error(_("No active matches for argument '{0}' in module "
-+                                       "'{1}:{2}'").format(spec, name, stream))
-+                        error_specs.append(spec)
-+                        continue
-+                    profiles = []
-+                    latest_module = self._get_latest(install_module_list)
-+                    if latest_module.getRepoID() == fail_safe_repo:
-+                        msg = _(
-+                            "Installing module '{0}' from Fail-Safe repository {1} is not allowed")
-+                        logger.critical(msg.format(latest_module.getNameStream(), fail_safe_repo))
-+                        fail_safe_repo_used = True
-+                    if nsvcap.profile:
-+                        profiles.extend(latest_module.getProfiles(nsvcap.profile))
-+                        if not profiles:
-+                            available_profiles = latest_module.getProfiles()
-+                            if available_profiles:
-+                                profile_names = ", ".join(sorted(
-+                                    [profile.getName() for profile in available_profiles]))
-+                                msg = _("Unable to match profile for argument {}. Available "
-+                                        "profiles for '{}:{}': {}").format(
-+                                    spec, name, stream, profile_names)
-+                            else:
-+                                msg = _("Unable to match profile for argument {}").format(spec)
-+                            logger.error(msg)
-+                            no_match_specs.append(spec)
-+                            continue
-+                    elif name in removed_profiles:
-+
-+                        for profile in removed_profiles[name]:
-+                            module_profiles = latest_module.getProfiles(profile)
-+                            if not module_profiles:
-+                                logger.warning(
-+                                    _("Installed profile '{0}' is not available in module "
-+                                      "'{1}' stream '{2}'").format(profile, name, stream))
-+                                continue
-+                            profiles.extend(module_profiles)
-+                    for profile in profiles:
-+                        self.base._moduleContainer.install(latest_module, profile.getName())
-+                        for pkg_name in profile.getContent():
-+                            install_dict.setdefault(pkg_name, set()).add(spec)
-+                    for module in install_module_list:
-+                        artifacts = module.getArtifacts()
-+                        install_set_artifacts.update(artifacts)
-+                        for artifact in artifacts:
-+                            arch = artifact.rsplit(".", 1)[1]
-+                            if arch in src_arches:
-+                                continue
-+                            pkg_name = artifact.rsplit("-", 2)[0]
-+                            new_artifacts_names.add(pkg_name)
-+        if fail_safe_repo_used:
-+            raise dnf.exceptions.Error(_(
-+                "Installing module from Fail-Safe repository is not allowed"))
-+        install_base_query, profiles_errors = self._install_profiles_internal(
-+            install_set_artifacts, install_dict, strict)
-+        if profiles_errors:
-+            error_specs.extend(profiles_errors)
-+
-+        # distrosync module name
-+        all_names = set()
-+        all_names.update(new_artifacts_names)
-+        all_names.update(active_artifacts_names)
-+        remove_query = self.base.sack.query().filterm(empty=True)
-+        for pkg_name in all_names:
-+            query = self.base.sack.query().filterm(name=pkg_name)
-+            installed = query.installed()
-+            if not installed:
-+                continue
-+            available = query.available()
-+            if not available:
-+                logger.warning(_("No packages available to distrosync for package name "
-+                                 "'{}'").format(pkg_name))
-+                if pkg_name not in new_artifacts_names:
-+                    remove_query = remove_query.union(query)
-+                continue
-+
-+            only_new_module = query.intersection(install_base_query)
-+            if only_new_module:
-+                query = only_new_module
-             sltr = dnf.selector.Selector(self.base.sack)
-             sltr.set(pkg=query)
--            self.base._goal.install(select=sltr, optional=(not strict))
-+            self.base._goal.distupgrade(select=sltr)
-+        self.base._remove_if_unneeded(remove_query)
-+
-         if no_match_specs or error_specs or solver_errors:
-             raise dnf.exceptions.MarkingErrors(no_match_group_specs=no_match_specs,
-                                                error_group_specs=error_specs,
-@@ -183,7 +292,7 @@ class ModuleBase(object):
-         fail_safe_repo = hawkey.MODULE_FAIL_SAFE_REPO_NAME
-         fail_safe_repo_used = False
- 
--        #  Remove source packages they cannot be installed or upgraded
-+        #  Remove source packages because they cannot be installed or upgraded
-         base_no_source_query = self.base.sack.query().filterm(arch__neq=['src', 'nosrc']).apply()
- 
-         for spec in module_specs:
-@@ -694,6 +803,35 @@ class ModuleBase(object):
-     def _format_repoid(self, repo_name):
-         return "{}\n".format(self.base.output.term.bold(repo_name))
- 
-+    def _install_profiles_internal(self, install_set_artifacts, install_dict, strict):
-+        #  Remove source packages because they cannot be installed or upgraded
-+        base_no_source_query = self.base.sack.query().filterm(arch__neq=['src', 'nosrc']).apply()
-+        install_base_query = base_no_source_query.filter(nevra_strict=install_set_artifacts)
-+        error_specs = []
-+
-+        # add hot-fix packages
-+        hot_fix_repos = [i.id for i in self.base.repos.iter_enabled() if i.module_hotfixes]
-+        hotfix_packages = base_no_source_query.filter(
-+            reponame=hot_fix_repos, name=install_dict.keys())
-+        install_base_query = install_base_query.union(hotfix_packages)
-+
-+        for pkg_name, set_specs in install_dict.items():
-+            query = install_base_query.filter(name=pkg_name)
-+            if not query:
-+                # package can also be non-modular or part of another stream
-+                query = base_no_source_query.filter(name=pkg_name)
-+                if not query:
-+                    for spec in set_specs:
-+                        logger.error(_("Unable to resolve argument {}").format(spec))
-+                    logger.error(_("No match for package {}").format(pkg_name))
-+                    error_specs.extend(set_specs)
-+                    continue
-+            self.base._goal.group_members.add(pkg_name)
-+            sltr = dnf.selector.Selector(self.base.sack)
-+            sltr.set(pkg=query)
-+            self.base._goal.install(select=sltr, optional=(not strict))
-+        return install_base_query, error_specs
-+
- 
- def format_modular_solver_errors(errors):
-     msg = dnf.util._format_resolve_problems(errors)
--- 
-2.26.2
-
-
-From df8c74679193bf27db584b3ad225997b2f5f4b87 Mon Sep 17 00:00:00 2001
-From: Jaroslav Mracek <jmracek@redhat.com>
-Date: Thu, 12 Nov 2020 13:51:02 +0100
-Subject: [PATCH 3/5] [minor] Rename all variables with artefact to artifact
-
----
- dnf/module/module_base.py | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/dnf/module/module_base.py b/dnf/module/module_base.py
-index 03d54f72..7298c9a3 100644
---- a/dnf/module/module_base.py
-+++ b/dnf/module/module_base.py
-@@ -73,7 +73,7 @@ class ModuleBase(object):
-         # <package_name, set_of_spec>
-         fail_safe_repo = hawkey.MODULE_FAIL_SAFE_REPO_NAME
-         install_dict = {}
--        install_set_artefacts = set()
-+        install_set_artifacts = set()
-         fail_safe_repo_used = False
-         for spec, (nsvcap, moduledict) in module_dicts.items():
-             for name, streamdict in moduledict.items():
-@@ -136,12 +136,12 @@ class ModuleBase(object):
-                         for pkg_name in profile.getContent():
-                             install_dict.setdefault(pkg_name, set()).add(spec)
-                     for module in install_module_list:
--                        install_set_artefacts.update(module.getArtifacts())
-+                        install_set_artifacts.update(module.getArtifacts())
-         if fail_safe_repo_used:
-             raise dnf.exceptions.Error(_(
-                 "Installing module from Fail-Safe repository is not allowed"))
-         __, profiles_errors = self._install_profiles_internal(
--            install_set_artefacts, install_dict, strict)
-+            install_set_artifacts, install_dict, strict)
-         if profiles_errors:
-             error_specs.extend(profiles_errors)
- 
-@@ -326,8 +326,8 @@ class ModuleBase(object):
-                     else:
-                         for profile in latest_module.getProfiles():
-                             upgrade_package_set.update(profile.getContent())
--                        for artefact in latest_module.getArtifacts():
--                            subj = hawkey.Subject(artefact)
-+                        for artifact in latest_module.getArtifacts():
-+                            subj = hawkey.Subject(artifact)
-                             for nevra_obj in subj.get_nevra_possibilities(
-                                     forms=[hawkey.FORM_NEVRA]):
-                                 upgrade_package_set.add(nevra_obj.name)
--- 
-2.26.2
-
-
-From 0818bb80fc0846f602f338a2119671be97c47217 Mon Sep 17 00:00:00 2001
-From: Jaroslav Mracek <jmracek@redhat.com>
-Date: Thu, 12 Nov 2020 15:11:29 +0100
-Subject: [PATCH 4/5] [doc] Add description of dnf module switch-to
-
----
- doc/command_ref.rst | 30 ++++++++++++++++++++++--------
- 1 file changed, 22 insertions(+), 8 deletions(-)
-
-diff --git a/doc/command_ref.rst b/doc/command_ref.rst
-index 83879013..c12837ea 100644
---- a/doc/command_ref.rst
-+++ b/doc/command_ref.rst
-@@ -979,15 +979,31 @@ Module subcommands take :ref:`\<module-spec>\ <specifying_modules-label>`... arg
-     In case no profile was provided, all default profiles get installed.
-     Module streams get enabled accordingly.
- 
--    This command cannot be used for switching module streams. It is recommended to remove all
--    installed content from the module and reset the module using the
--    :ref:`reset <module_reset_command-label>` command. After you reset the module, you can install
--    the other stream.
-+    This command cannot be used for switching module streams. Use the
-+    :ref:`dnf module switch-to <module_switch_to_command-label>` command for that.
- 
- ``dnf [options] module update <module-spec>...``
-     Update packages associated with an active module stream, optionally restricted to a profile.
-     If the `profile_name` is provided, only the packages referenced by that profile will be updated.
- 
-+.. _module_switch_to_command-label:
-+
-+``dnf [options] module switch-to <module-spec>...``
-+    Switch to or enable a module stream, change versions of installed packages to versions provided
-+    by the new stream, and remove packages from the old stream that are no longer available. It also
-+    updates installed profiles if they are available for the new stream. When a profile was
-+    provided, it installs that profile and does not update any already installed profiles.
-+
-+    This command can be used as a stronger version of the
-+    :ref:`dnf module enable <module_enable_command-label>` command, which not only enables modules,
-+    but also does a `distrosync` to all modular packages in the enabled modules.
-+
-+    It can also be used as a stronger version of the
-+    :ref:`dnf module install <module_install_command-label>` command, but it requires to specify
-+    profiles that are supposed to be installed, because `switch-to` command does not use `default
-+    profiles`. The `switch-to` command doesn't only install profiles, it also makes a `distrosync`
-+    to all modular packages in the installed module.
-+
- ``dnf [options] module remove <module-spec>...``
-     Remove installed module profiles, including packages that were installed with the
-     :ref:`dnf module install <module_install_command-label>` command. Will not remove packages
-@@ -1010,10 +1026,8 @@ Module subcommands take :ref:`\<module-spec>\ <specifying_modules-label>`... arg
-     of modular dependency issue the operation will be rejected. To perform the action anyway please use
-     \-\ :ref:`-skip-broken <skip-broken_option-label>` option.
- 
--    This command cannot be used for switching module streams. It is recommended to remove all
--    installed content from the module, and reset the module using the
--    :ref:`reset <module_reset_command-label>` command. After you reset the module, you can enable
--    the other stream.
-+    This command cannot be used for switching module streams. Use the
-+    :ref:`dnf module switch-to <module_switch_to_command-label>` command for that.
- 
- .. _module_disable_command-label:
- 
--- 
-2.26.2
-
-
-From 6b0b2b99e40c20706145e774626658825f5bc55d Mon Sep 17 00:00:00 2001
-From: Jaroslav Mracek <jmracek@redhat.com>
-Date: Wed, 25 Nov 2020 12:34:30 +0100
-Subject: [PATCH 5/5] Do not use source rpms for module switch
-
-It prevents misleading message from libsolv that it tries to install
-source rpm.
----
- dnf/module/module_base.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/dnf/module/module_base.py b/dnf/module/module_base.py
-index 7298c9a3..02d5d5a3 100644
---- a/dnf/module/module_base.py
-+++ b/dnf/module/module_base.py
-@@ -253,8 +253,10 @@ class ModuleBase(object):
-         all_names.update(new_artifacts_names)
-         all_names.update(active_artifacts_names)
-         remove_query = self.base.sack.query().filterm(empty=True)
-+        base_no_source_query = self.base.sack.query().filterm(arch__neq=['src', 'nosrc']).apply()
-+
-         for pkg_name in all_names:
--            query = self.base.sack.query().filterm(name=pkg_name)
-+            query = base_no_source_query.filter(name=pkg_name)
-             installed = query.installed()
-             if not installed:
-                 continue
--- 
-2.26.2
-
diff --git a/SOURCES/0009-yum.misc.decompress-to-handle-uncompressed-files-RhBug-1895059.patch b/SOURCES/0009-yum.misc.decompress-to-handle-uncompressed-files-RhBug-1895059.patch
deleted file mode 100644
index 240495d..0000000
--- a/SOURCES/0009-yum.misc.decompress-to-handle-uncompressed-files-RhBug-1895059.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-From de8bbccc4e035a9a9b5baa3aeb0dbf0cb12f1fe2 Mon Sep 17 00:00:00 2001
-From: Marek Blaha <mblaha@redhat.com>
-Date: Wed, 9 Dec 2020 13:45:46 +0100
-Subject: [PATCH 1/1] yum.misc.decompress() to handle uncompressed files
- (RhBug:1895059)
-
-The underlying libdnf function is capable to handle even uncompressed
-files - so now uncompressed files are just copied to the destination.
-Also unused fn_only parameter of the function was removed.
-
-This fixes issue with "reposync -m" command when the group metadata file
-in the repository is a plain xml file (not compressed).
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1895059
----
- dnf/yum/misc.py | 60 +++++++++++++++++++++++++++----------------------
- 1 file changed, 33 insertions(+), 27 deletions(-)
-
-diff --git a/dnf/yum/misc.py b/dnf/yum/misc.py
-index 0f922350..3e3905fe 100644
---- a/dnf/yum/misc.py
-+++ b/dnf/yum/misc.py
-@@ -386,34 +386,39 @@ def getloginuid():
-         _cached_getloginuid = _getloginuid()
-     return _cached_getloginuid
- 
--def decompress(filename, dest=None, fn_only=False, check_timestamps=False):
--    """take a filename and decompress it into the same relative location.
--       if the file is not compressed just return the file"""
--
--    ztype = None
--    out = filename  # If the file is not compressed, it returns the same file
- 
--    dot_pos = filename.rfind('.')
--    if dot_pos > 0:
--        ext = filename[dot_pos:]
--        if ext in ('.zck', '.xz', '.bz2', '.gz'):
--            ztype = ext
--            out = dest if dest else filename[:dot_pos]
--
--    if ztype and not fn_only:
--        if check_timestamps:
--            fi = stat_f(filename)
--            fo = stat_f(out)
--            if fi and fo and fo.st_mtime == fi.st_mtime:
--                return out
-+def decompress(filename, dest=None, check_timestamps=False):
-+    """take a filename and decompress it into the same relative location.
-+       When the compression type is not recognized (or file is not compressed),
-+       the content of the file is copied to the destination"""
-+
-+    if dest:
-+        out = dest
-+    else:
-+        out = None
-+        dot_pos = filename.rfind('.')
-+        if dot_pos > 0:
-+            ext = filename[dot_pos:]
-+            if ext in ('.zck', '.xz', '.bz2', '.gz', '.lzma', '.zst'):
-+                out = filename[:dot_pos]
-+        if out is None:
-+            raise dnf.exceptions.MiscError("Could not determine destination filename")
-+
-+    if check_timestamps:
-+        fi = stat_f(filename)
-+        fo = stat_f(out)
-+        if fi and fo and fo.st_mtime == fi.st_mtime:
-+            return out
- 
--        try:
--            libdnf.utils.decompress(filename, out, 0o644, ztype)
--        except RuntimeError as e:
--            raise dnf.exceptions.MiscError(str(e))
-+    try:
-+        # libdnf.utils.decompress either decompress file to the destination or
-+        # copy the content if the compression type is not recognized
-+        libdnf.utils.decompress(filename, out, 0o644)
-+    except RuntimeError as e:
-+        raise dnf.exceptions.MiscError(str(e))
- 
--        if check_timestamps and fi:
--            os.utime(out, (fi.st_mtime, fi.st_mtime))
-+    if check_timestamps and fi:
-+        os.utime(out, (fi.st_mtime, fi.st_mtime))
- 
-     return out
- 
-@@ -424,13 +429,14 @@ def calculate_repo_gen_dest(filename, generated_name):
-         os.makedirs(dest, mode=0o755)
-     return dest + '/' + generated_name
- 
--def repo_gen_decompress(filename, generated_name, cached=False):
-+
-+def repo_gen_decompress(filename, generated_name):
-     """ This is a wrapper around decompress, where we work out a cached
-         generated name, and use check_timestamps. filename _must_ be from
-         a repo. and generated_name is the type of the file. """
- 
-     dest = calculate_repo_gen_dest(filename, generated_name)
--    return decompress(filename, dest=dest, check_timestamps=True, fn_only=cached)
-+    return decompress(filename, dest=dest, check_timestamps=True)
- 
- def read_in_items_from_dot_dir(thisglob, line_as_list=True):
-     """ Takes a glob of a dir (like /etc/foo.d/\\*.foo) returns a list of all
--- 
-2.26.2
-
diff --git a/SOURCES/0010-Make-log-rotated-permissions-match-initial-log-permissions-RhBug-1894344.patch b/SOURCES/0010-Make-log-rotated-permissions-match-initial-log-permissions-RhBug-1894344.patch
deleted file mode 100644
index 3bfdafb..0000000
--- a/SOURCES/0010-Make-log-rotated-permissions-match-initial-log-permissions-RhBug-1894344.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From 04b1a90bb24b7e98d4e001c44f8b3f563ad5f0f6 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
-Date: Tue, 24 Nov 2020 14:31:21 +0100
-Subject: [PATCH] Make rotated log file (mode, owner, group) match previous log
- settings (RhBug:1894344)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1894344
----
- etc/logrotate.d/dnf | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/etc/logrotate.d/dnf b/etc/logrotate.d/dnf
-index b96c6ff9b4..0ce2629f1b 100644
---- a/etc/logrotate.d/dnf
-+++ b/etc/logrotate.d/dnf
-@@ -3,5 +3,5 @@
-     notifempty
-     rotate 4
-     weekly
--    create 0600 root root
-+    create
- }
diff --git a/SOURCES/0011-Add-new-attribute-for-Package--from-repo.patch b/SOURCES/0011-Add-new-attribute-for-Package--from-repo.patch
deleted file mode 100644
index 49c2a1a..0000000
--- a/SOURCES/0011-Add-new-attribute-for-Package--from-repo.patch
+++ /dev/null
@@ -1,117 +0,0 @@
-From eb2aa8c14208da7a567a0d79a8baa9f5201640cd Mon Sep 17 00:00:00 2001
-From: Jaroslav Mracek <jmracek@redhat.com>
-Date: Tue, 24 Nov 2020 09:17:41 +0100
-Subject: [PATCH 1/3] Add `from_repo` attribute for Package class
- (RhBug:1898968,1879168)
-
-It as an alias for private attribute _from_repo.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1898968
-https://bugzilla.redhat.com/show_bug.cgi?id=1879168
----
- dnf/cli/commands/repoquery.py | 2 +-
- dnf/package.py                | 7 +++++--
- doc/api_package.rst           | 6 ++++++
- 3 files changed, 12 insertions(+), 3 deletions(-)
-
-diff --git a/dnf/cli/commands/repoquery.py b/dnf/cli/commands/repoquery.py
-index 099a9312d9..a11b440525 100644
---- a/dnf/cli/commands/repoquery.py
-+++ b/dnf/cli/commands/repoquery.py
-@@ -44,7 +44,7 @@
- QFORMAT_MATCH = re.compile(r'%(-?\d*?){([:.\w]+?)}')
- 
- QUERY_TAGS = """\
--name, arch, epoch, version, release, reponame (repoid), evr,
-+name, arch, epoch, version, release, reponame (repoid), from_repo, evr,
- debug_name, source_name, source_debug_name,
- installtime, buildtime, size, downloadsize, installsize,
- provides, requires, obsoletes, conflicts, sourcerpm,
-diff --git a/dnf/package.py b/dnf/package.py
-index d44ce6706c..f647df6bff 100644
---- a/dnf/package.py
-+++ b/dnf/package.py
-@@ -76,12 +76,15 @@ def _from_repo(self):
-         pkgrepo = None
-         if self._from_system:
-             pkgrepo = self.base.history.repo(self)
--        else:
--            pkgrepo = {}
-         if pkgrepo:
-             return '@' + pkgrepo
-         return self.reponame
- 
-+    @property
-+    def from_repo(self):
-+        # :api
-+        return self._from_repo
-+
-     @property
-     def _header(self):
-         return dnf.rpm._header(self.localPkg())
-diff --git a/doc/api_package.rst b/doc/api_package.rst
-index 95df5d4b23..48ef8f1d22 100644
---- a/doc/api_package.rst
-+++ b/doc/api_package.rst
-@@ -74,6 +74,12 @@
- 
-     Files the package provides (list of strings).
- 
-+  .. attribute:: from_repo
-+
-+    For installed packages returns id of repository from which the package was installed prefixed
-+    with '@' (if such information is available in the history database). Otherwise returns id of
-+    repository the package belongs to (@System for installed packages of unknown origin) (string).
-+
-   .. attribute:: group
- 
-     Group of the package (string).
-
-From 1a933f8e036cd704fa6e7f77a8448263e93e540f Mon Sep 17 00:00:00 2001
-From: Jaroslav Mracek <jmracek@redhat.com>
-Date: Tue, 24 Nov 2020 09:19:42 +0100
-Subject: [PATCH 2/3] Correct description of Package().reponane attribute
-
----
- doc/api_package.rst | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/doc/api_package.rst b/doc/api_package.rst
-index 48ef8f1d22..a78897babe 100644
---- a/doc/api_package.rst
-+++ b/doc/api_package.rst
-@@ -138,7 +138,7 @@
- 
-   .. attribute:: reponame
- 
--    Id of repository the package was installed from (string).
-+    Id of repository the package belongs to (@System for installed packages) (string).
- 
-   .. attribute:: requires
- 
-
-From 24cdb68776507fdae25bed0e82d80df3018aecfc Mon Sep 17 00:00:00 2001
-From: Jaroslav Mracek <jmracek@redhat.com>
-Date: Tue, 24 Nov 2020 09:22:07 +0100
-Subject: [PATCH 3/3] Add unittest for new API
-
----
- tests/api/test_dnf_package.py | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/tests/api/test_dnf_package.py b/tests/api/test_dnf_package.py
-index 04cddc7ecc..5952352bb5 100644
---- a/tests/api/test_dnf_package.py
-+++ b/tests/api/test_dnf_package.py
-@@ -163,6 +163,11 @@ def test_reponame(self):
-         self.assertHasAttr(self.package, "reponame")
-         self.assertHasType(self.package.reponame, str)
- 
-+    def test_from_repo(self):
-+        # Package.reponame
-+        self.assertHasAttr(self.package, "from_repo")
-+        self.assertHasType(self.package.from_repo, str)
-+
-     def test_requires(self):
-         # Package.requires
-         self.assertHasAttr(self.package, "requires")
diff --git a/SOURCES/0012-Change-behaviour-of-Package-.from-repo.patch b/SOURCES/0012-Change-behaviour-of-Package-.from-repo.patch
deleted file mode 100644
index b81646b..0000000
--- a/SOURCES/0012-Change-behaviour-of-Package-.from-repo.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From ca06d200d738fd6b23cb05b9776c9fd29288665f Mon Sep 17 00:00:00 2001
-From: Jaroslav Mracek <jmracek@redhat.com>
-Date: Wed, 25 Nov 2020 13:00:22 +0100
-Subject: [PATCH 1/2] Change behaviour of Package().from_repo
-
-The change makes a difference between private attribute _from_repo and
-API attribute. _from_repo is required for `dnf info` and we have to keep
-it, but for API the magic handling behind could be confusing.
----
- dnf/package.py      | 8 +++++++-
- doc/api_package.rst | 5 ++---
- 2 files changed, 9 insertions(+), 4 deletions(-)
-
-diff --git a/dnf/package.py b/dnf/package.py
-index f647df6bff..28ca5ef760 100644
---- a/dnf/package.py
-+++ b/dnf/package.py
-@@ -73,6 +73,12 @@ def _from_system(self):
- 
-     @property
-     def _from_repo(self):
-+        """
-+        For installed packages returns id of repository from which the package was installed
-+        prefixed with '@' (if such information is available in the history database). Otherwise
-+        returns id of repository the package belongs to (@System for installed packages of unknown
-+        origin)
-+        """
-         pkgrepo = None
-         if self._from_system:
-             pkgrepo = self.base.history.repo(self)
-@@ -83,7 +89,7 @@ def _from_repo(self):
-     @property
-     def from_repo(self):
-         # :api
--        return self._from_repo
-+        return self.base.history.repo(self)
- 
-     @property
-     def _header(self):
-diff --git a/doc/api_package.rst b/doc/api_package.rst
-index a78897babe..634f504ca6 100644
---- a/doc/api_package.rst
-+++ b/doc/api_package.rst
-@@ -76,9 +76,8 @@
- 
-   .. attribute:: from_repo
- 
--    For installed packages returns id of repository from which the package was installed prefixed
--    with '@' (if such information is available in the history database). Otherwise returns id of
--    repository the package belongs to (@System for installed packages of unknown origin) (string).
-+    For installed packages returns id of repository from which the package was installed if such
-+    information is available in the history database. Otherwise returns an empty string (string).
- 
-   .. attribute:: group
- 
-
-From 895e61a1281db753dd28f01c20816e83c5316cdd Mon Sep 17 00:00:00 2001
-From: Jaroslav Mracek <jmracek@redhat.com>
-Date: Thu, 26 Nov 2020 10:02:08 +0100
-Subject: [PATCH 2/2] fixup! Change behaviour of Package().from_repo
-
----
- dnf/package.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/dnf/package.py b/dnf/package.py
-index 28ca5ef760..baef04fa5b 100644
---- a/dnf/package.py
-+++ b/dnf/package.py
-@@ -89,7 +89,9 @@ def _from_repo(self):
-     @property
-     def from_repo(self):
-         # :api
--        return self.base.history.repo(self)
-+        if self._from_system:
-+            return self.base.history.repo(self)
-+        return ""
- 
-     @property
-     def _header(self):
diff --git a/SOURCES/0013-Package-add-a-get-header--method.patch b/SOURCES/0013-Package-add-a-get-header--method.patch
deleted file mode 100644
index a5f8478..0000000
--- a/SOURCES/0013-Package-add-a-get-header--method.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From 38cc67385fb1b36aa0881bc5982bc58d75dac464 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: Wed, 11 Nov 2020 18:45:11 +0100
-Subject: [PATCH] Package: add a get_header() method (RhBug:1876606)
-
-Adds get_header() method to the Package class, which returns the rpm
-header of an installed package.
-
-= changelog =
-msg: Add get_header() method to the Package class
-type: enhancement
-resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1876606
----
- dnf/package.py        | 24 ++++++++++++++++++++++++
- tests/test_package.py | 12 ++++++++++++
- 2 files changed, 36 insertions(+)
-
-diff --git a/dnf/package.py b/dnf/package.py
-index baef04fa5b..836e0e4989 100644
---- a/dnf/package.py
-+++ b/dnf/package.py
-@@ -26,11 +26,13 @@
- from dnf.i18n import _
- 
- import binascii
-+import dnf.exceptions
- import dnf.rpm
- import dnf.yum.misc
- import hawkey
- import logging
- import os
-+import rpm
- 
- logger = logging.getLogger("dnf")
- 
-@@ -95,6 +97,11 @@ def from_repo(self):
- 
-     @property
-     def _header(self):
-+        """
-+        Returns the header of a locally present rpm package file. As opposed to
-+        self.get_header(), which retrieves the header of an installed package
-+        from rpmdb.
-+        """
-         return dnf.rpm._header(self.localPkg())
- 
-     @property
-@@ -164,6 +171,23 @@ def debugsource_name(self):
-         src_name = self.source_name if self.source_name is not None else self.name
-         return src_name + self.DEBUGSOURCE_SUFFIX
- 
-+    def get_header(self):
-+        """
-+        Returns the rpm header of the package if it is installed. If not
-+        installed, returns None. The header is not cached, it is retrieved from
-+        rpmdb on every call. In case of a failure (e.g. when the rpmdb changes
-+        between loading the data and calling this method), raises an instance
-+        of PackageNotFoundError.
-+        """
-+        if not self._from_system:
-+            return None
-+
-+        try:
-+            # RPMDBI_PACKAGES stands for the header of the package
-+            return next(self.base._ts.dbMatch(rpm.RPMDBI_PACKAGES, self.rpmdbid))
-+        except StopIteration:
-+            raise dnf.exceptions.PackageNotFoundError("Package not found when attempting to retrieve header", str(self))
-+
-     @property
-     def source_debug_name(self):
-         # :api
-diff --git a/tests/test_package.py b/tests/test_package.py
-index cd4872e631..514e5bf099 100644
---- a/tests/test_package.py
-+++ b/tests/test_package.py
-@@ -68,6 +68,18 @@ def fn_getter():
-             with self.assertRaises(IOError):
-                 pkg._header
- 
-+    # rpm.hdr() is not easy to construct with custom data, we just return a string
-+    # instead, as we don't actually need an instance of rpm.hdr for the test
-+    @mock.patch("rpm.TransactionSet.dbMatch", lambda self, a, b: iter(["package_header_test_data"]))
-+    def test_get_header(self):
-+        pkg = self.sack.query().installed().filter(name="pepper")[0]
-+        header = pkg.get_header()
-+        self.assertEqual(header, "package_header_test_data")
-+
-+        pkg = self.sack.query().available().filter(name="pepper")[0]
-+        header = pkg.get_header()
-+        self.assertEqual(header, None)
-+
-     @mock.patch("dnf.package.Package.rpmdbid", long(3))
-     def test_idx(self):
-         """ pkg.idx is an int. """
diff --git a/SOURCES/0014-Add-api-function-fill-sack-from-repos-in-cache-RhBug-1865803.patch b/SOURCES/0014-Add-api-function-fill-sack-from-repos-in-cache-RhBug-1865803.patch
deleted file mode 100644
index d912d69..0000000
--- a/SOURCES/0014-Add-api-function-fill-sack-from-repos-in-cache-RhBug-1865803.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From b3542a96c6f77e5cc0b5217e586fcc56fde074d8 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
-Date: Wed, 2 Dec 2020 15:27:13 +0100
-Subject: [PATCH 1/2] Add api function: fill_sack_from_repos_in_cache
- (RhBug:1865803)
-
-= changelog =
-msg: Add api function fill_sack_from_repos_in_cache to allow loading a repo cache with repomd and (solv file or primary xml) only
-type: enhancement
-resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1865803
----
- dnf.spec    |  2 +-
- dnf/base.py | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 63 insertions(+), 1 deletion(-)
-
-diff --git a/dnf/base.py b/dnf/base.py
-index 075e74265a..a10b837340 100644
---- a/dnf/base.py
-+++ b/dnf/base.py
-@@ -425,6 +425,68 @@ def fill_sack(self, load_system_repo=True, load_available_repos=True):
-         self._plugins.run_sack()
-         return self._sack
- 
-+    def fill_sack_from_repos_in_cache(self, load_system_repo=True):
-+        # :api
-+        """
-+        Prepare Sack and Goal objects and also load all enabled repositories from cache only,
-+        it doesn't download anything and it doesn't check if metadata are expired.
-+        If there is not enough metadata present (repond.xml or both primary.xml and solv file
-+        are missing) given repo is either skipped or it throws a RepoError exception depending
-+        on skip_if_unavailable configuration.
-+        """
-+        timer = dnf.logging.Timer('sack setup')
-+        self.reset(sack=True, goal=True)
-+        self._sack = dnf.sack._build_sack(self)
-+        lock = dnf.lock.build_metadata_lock(self.conf.cachedir, self.conf.exit_on_lock)
-+        with lock:
-+            if load_system_repo is not False:
-+                try:
-+                    # FIXME: If build_cache=True, @System.solv is incorrectly updated in install-
-+                    # remove loops
-+                    self._sack.load_system_repo(build_cache=False)
-+                except IOError:
-+                    if load_system_repo != 'auto':
-+                        raise
-+
-+            error_repos = []
-+            # Iterate over installed GPG keys and check their validity using DNSSEC
-+            if self.conf.gpgkey_dns_verification:
-+                dnf.dnssec.RpmImportedKeys.check_imported_keys_validity()
-+            for repo in self.repos.iter_enabled():
-+                try:
-+                    repo._repo.loadCache(throwExcept=True, ignoreMissing=True)
-+                    mdload_flags = dict(load_filelists=True,
-+                                        load_presto=repo.deltarpm,
-+                                        load_updateinfo=True)
-+                    if repo.load_metadata_other:
-+                        mdload_flags["load_other"] = True
-+
-+                    self._sack.load_repo(repo._repo, **mdload_flags)
-+
-+                    logger.debug(_("%s: using metadata from %s."), repo.id,
-+                                 dnf.util.normalize_time(
-+                                     repo._repo.getMaxTimestamp()))
-+                except (RuntimeError, hawkey.Exception) as e:
-+                    if repo.skip_if_unavailable is False:
-+                        raise dnf.exceptions.RepoError(
-+                            _("loading repo '{}' failure: {}").format(repo.id, e))
-+                    else:
-+                        logger.debug(_("loading repo '{}' failure: {}").format(repo.id, e))
-+                    error_repos.append(repo.id)
-+                    repo.disable()
-+            if error_repos:
-+                logger.warning(
-+                    _("Ignoring repositories: %s"), ', '.join(error_repos))
-+
-+        conf = self.conf
-+        self._sack._configure(conf.installonlypkgs, conf.installonly_limit, conf.allow_vendor_change)
-+        self._setup_excludes_includes()
-+        timer()
-+        self._goal = dnf.goal.Goal(self._sack)
-+        self._goal.protect_running_kernel = conf.protect_running_kernel
-+        self._plugins.run_sack()
-+        return self._sack
-+
-     def _finalize_base(self):
-         self._tempfile_persistor = dnf.persistor.TempfilePersistor(
-             self.conf.cachedir)
-
-From 29ae53918d4a0b65a917aca2f8f43416fee15dfd Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
-Date: Thu, 10 Dec 2020 14:54:16 +0100
-Subject: [PATCH 2/2] Add api test for new fill_sack_from_repos_in_cache
-
----
- tests/api/test_dnf_base.py | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/tests/api/test_dnf_base.py b/tests/api/test_dnf_base.py
-index 656bd22584..335981897e 100644
---- a/tests/api/test_dnf_base.py
-+++ b/tests/api/test_dnf_base.py
-@@ -107,6 +107,12 @@ def test_fill_sack(self):
- 
-         self.base.fill_sack(load_system_repo=False, load_available_repos=False)
- 
-+    def test_fill_sack_from_repos_in_cache(self):
-+        # Base.fill_sack_from_repos_in_cache(self, load_system_repo=True):
-+        self.assertHasAttr(self.base, "fill_sack_from_repos_in_cache")
-+
-+        self.base.fill_sack_from_repos_in_cache(load_system_repo=False)
-+
-     def test_close(self):
-         # Base.close()
-         self.assertHasAttr(self.base, "close")
diff --git a/SOURCES/0015-Add-tests-and-docs-for-fill-sack-from-repos-in-cache-RhBug-1865803.patch b/SOURCES/0015-Add-tests-and-docs-for-fill-sack-from-repos-in-cache-RhBug-1865803.patch
deleted file mode 100644
index 30dbab6..0000000
--- a/SOURCES/0015-Add-tests-and-docs-for-fill-sack-from-repos-in-cache-RhBug-1865803.patch
+++ /dev/null
@@ -1,366 +0,0 @@
-From a777ff01c79d5e0e2cf3ae7b0652795577253bc3 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
-Date: Thu, 14 Jan 2021 09:58:30 +0100
-Subject: [PATCH 1/3] Fix recreate script
-
----
- tests/repos/rpm/recreate | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/tests/repos/rpm/recreate b/tests/repos/rpm/recreate
-index da348d9799..0fbb9396bd 100755
---- a/tests/repos/rpm/recreate
-+++ b/tests/repos/rpm/recreate
-@@ -1,6 +1,6 @@
- #!/bin/bash
- 
--THISDIR="$( readlink -f "$( dirname "$0 )" )"
-+THISDIR="$( readlink -f "$( dirname "$0" )" )"
- cd "$THISDIR"
- git rm -rf repodata/
- createrepo --no-database -o . ..
-
-From 5d4c0266f6967c7cd5f0e675b13fa3e9b395e4dd Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
-Date: Thu, 14 Jan 2021 10:28:53 +0100
-Subject: [PATCH 2/3] Add unit test for fill_sack_from_repos_in_cache
- (RhBug:1865803)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1865803
----
- tests/test_fill_sack_from_repos_in_cache.py | 262 ++++++++++++++++++++
- 1 file changed, 262 insertions(+)
- create mode 100644 tests/test_fill_sack_from_repos_in_cache.py
-
-diff --git a/tests/test_fill_sack_from_repos_in_cache.py b/tests/test_fill_sack_from_repos_in_cache.py
-new file mode 100644
-index 0000000000..24b0d4598d
---- /dev/null
-+++ b/tests/test_fill_sack_from_repos_in_cache.py
-@@ -0,0 +1,262 @@
-+# -*- coding: utf-8 -*-
-+
-+# Copyright (C) 2012-2021 Red Hat, Inc.
-+#
-+# This copyrighted material is made available to anyone wishing to use,
-+# modify, copy, or redistribute it subject to the terms and conditions of
-+# the GNU General Public License v.2, or (at your option) any later version.
-+# This program is distributed in the hope that it will be useful, but WITHOUT
-+# ANY WARRANTY expressed or implied, including the implied warranties of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
-+# Public License for more details.  You should have received a copy of the
-+# GNU General Public License along with this program; if not, write to the
-+# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-+# 02110-1301, USA.  Any Red Hat trademarks that are incorporated in the
-+# source code or documentation are not subject to the GNU General Public
-+# License and may only be used or replicated with the express permission of
-+# Red Hat, Inc.
-+#
-+
-+from __future__ import absolute_import
-+from __future__ import unicode_literals
-+
-+import os
-+import tempfile
-+import glob
-+import shutil
-+import unittest
-+
-+import dnf.exceptions
-+import dnf.repo
-+import dnf.sack
-+
-+import hawkey
-+
-+import tests.support
-+from tests.support import mock
-+
-+TEST_REPO_NAME = "test-repo"
-+
-+
-+class FillSackFromReposInCacheTest(unittest.TestCase):
-+    def _create_cache_for_repo(self, repopath, tmpdir):
-+        conf = dnf.conf.MainConf()
-+        conf.cachedir = os.path.join(tmpdir, "cache")
-+
-+        base = dnf.Base(conf=conf)
-+
-+        repoconf = dnf.repo.Repo(TEST_REPO_NAME, base.conf)
-+        repoconf.baseurl = repopath
-+        repoconf.enable()
-+
-+        base.repos.add(repoconf)
-+
-+        base.fill_sack(load_system_repo=False)
-+        base.close()
-+
-+    def _setUp_from_repo_path(self, original_repo_path):
-+        self.tmpdir = tempfile.mkdtemp(prefix="dnf_test_")
-+
-+        self.repo_copy_path = os.path.join(self.tmpdir, "repo")
-+        shutil.copytree(original_repo_path, self.repo_copy_path)
-+
-+        self._create_cache_for_repo(self.repo_copy_path, self.tmpdir)
-+
-+        # Just to be sure remove repo (it shouldn't be used)
-+        shutil.rmtree(self.repo_copy_path)
-+
-+        # Prepare base for the actual test
-+        conf = dnf.conf.MainConf()
-+        conf.cachedir = os.path.join(self.tmpdir, "cache")
-+        self.test_base = dnf.Base(conf=conf)
-+        repoconf = dnf.repo.Repo(TEST_REPO_NAME, conf)
-+        repoconf.baseurl = self.repo_copy_path
-+        repoconf.enable()
-+        self.test_base.repos.add(repoconf)
-+
-+    def tearDown(self):
-+        self.test_base.close()
-+        shutil.rmtree(self.tmpdir)
-+
-+    def test_with_solv_solvx_repomd(self):
-+        self._setUp_from_repo_path(os.path.join(os.path.abspath(os.path.dirname(__file__)), "repos/rpm"))
-+
-+        # Remove xml metadata except repomd
-+        # repomd.xml is not compressed and doesn't end with .gz
-+        repodata_without_repomd = glob.glob(os.path.join(self.tmpdir, "cache/test-repo-*/repodata/*.gz"))
-+        for f in repodata_without_repomd:
-+            os.remove(f)
-+
-+        # Now we only have cache with just solv, solvx files and repomd.xml
-+
-+        self.test_base.fill_sack_from_repos_in_cache(load_system_repo=False)
-+
-+        q = self.test_base.sack.query()
-+        packages = q.run()
-+        self.assertEqual(len(packages), 9)
-+        self.assertEqual(packages[0].evr, "4-4")
-+
-+        # Use *-updateinfo.solvx
-+        adv_pkgs = q.get_advisory_pkgs(hawkey.LT | hawkey.EQ | hawkey.GT)
-+        adv_titles = set()
-+        for pkg in adv_pkgs:
-+            adv_titles.add(pkg.get_advisory(self.test_base.sack).title)
-+        self.assertEqual(len(adv_titles), 3)
-+
-+    def test_with_just_solv_repomd(self):
-+        self._setUp_from_repo_path(os.path.join(os.path.abspath(os.path.dirname(__file__)), "repos/rpm"))
-+
-+        # Remove xml metadata except repomd
-+        # repomd.xml is not compressed and doesn't end with .gz
-+        repodata_without_repomd = glob.glob(os.path.join(self.tmpdir, "cache/test-repo-*/repodata/*.gz"))
-+        for f in repodata_without_repomd:
-+            os.remove(f)
-+
-+        # Remove solvx files
-+        solvx = glob.glob(os.path.join(self.tmpdir, "cache/*.solvx"))
-+        for f in solvx:
-+            os.remove(f)
-+
-+        # Now we only have cache with just solv files and repomd.xml
-+
-+        self.test_base.fill_sack_from_repos_in_cache(load_system_repo=False)
-+
-+        q = self.test_base.sack.query()
-+        packages = q.run()
-+        self.assertEqual(len(packages), 9)
-+        self.assertEqual(packages[0].evr, "4-4")
-+
-+        # No *-updateinfo.solvx -> we get no advisory packages
-+        adv_pkgs = q.get_advisory_pkgs(hawkey.LT | hawkey.EQ | hawkey.GT)
-+        self.assertEqual(len(adv_pkgs), 0)
-+
-+    def test_with_xml_metadata(self):
-+        self._setUp_from_repo_path(os.path.join(os.path.abspath(os.path.dirname(__file__)), "repos/rpm"))
-+
-+        # Remove all solv and solvx files
-+        solvx = glob.glob(os.path.join(self.tmpdir, "cache/*.solv*"))
-+        for f in solvx:
-+            os.remove(f)
-+
-+        # Now we only have cache with just xml metadata
-+
-+        self.test_base.fill_sack_from_repos_in_cache(load_system_repo=False)
-+
-+        q = self.test_base.sack.query()
-+        packages = q.run()
-+        self.assertEqual(len(packages), 9)
-+        self.assertEqual(packages[0].evr, "4-4")
-+
-+    def test_exception_without_repomd(self):
-+        self._setUp_from_repo_path(os.path.join(os.path.abspath(os.path.dirname(__file__)), "repos/rpm"))
-+
-+        # Remove xml metadata
-+        repodata_without_repomd = glob.glob(os.path.join(self.tmpdir, "cache/test-repo-*/repodata/*"))
-+        for f in repodata_without_repomd:
-+            os.remove(f)
-+
-+        # Now we only have cache with just solv and solvx files
-+        # Since we don't have repomd we cannot verify checksums -> fail (exception)
-+
-+        self.assertRaises(dnf.exceptions.RepoError,
-+                          self.test_base.fill_sack_from_repos_in_cache, load_system_repo=False)
-+
-+    def test_exception_with_just_repomd(self):
-+        self._setUp_from_repo_path(os.path.join(os.path.abspath(os.path.dirname(__file__)), "repos/rpm"))
-+
-+        # Remove xml metadata except repomd
-+        # repomd.xml is not compressed and doesn't end with .gz
-+        repodata_without_repomd = glob.glob(os.path.join(self.tmpdir, "cache/test-repo-*/repodata/*.gz"))
-+        for f in repodata_without_repomd:
-+            os.remove(f)
-+
-+        # Remove all solv and solvx files
-+        solvx = glob.glob(os.path.join(self.tmpdir, "cache/*.solv*"))
-+        for f in solvx:
-+            os.remove(f)
-+
-+        # Now we only have cache with just repomd
-+        # repomd is not enough, it doesn't contain the metadata it self -> fail (exception)
-+
-+        self.assertRaises(dnf.exceptions.RepoError,
-+                          self.test_base.fill_sack_from_repos_in_cache, load_system_repo=False)
-+
-+    def test_exception_with_checksum_mismatch_and_only_repomd(self):
-+        self._setUp_from_repo_path(os.path.join(os.path.abspath(os.path.dirname(__file__)), "repos/rpm"))
-+
-+        # Remove xml metadata except repomd
-+        # repomd.xml is not compressed and doesn't end with .gz
-+        repodata_without_repomd = glob.glob(os.path.join(self.tmpdir, "cache/test-repo-*/repodata/*.gz"))
-+        for f in repodata_without_repomd:
-+            os.remove(f)
-+
-+        # Modify checksum of solv file so it doesn't match with repomd
-+        solv = glob.glob(os.path.join(self.tmpdir, "cache/*.solv"))[0]
-+        with open(solv, "a") as opensolv:
-+            opensolv.write("appended text to change checksum")
-+
-+        # Now we only have cache with solvx, modified solv file and just repomd
-+        # Since we don't have original xml metadata we cannot regenerate solv -> fail (exception)
-+
-+        self.assertRaises(dnf.exceptions.RepoError,
-+                          self.test_base.fill_sack_from_repos_in_cache, load_system_repo=False)
-+
-+    def test_checksum_mistmatch_regenerates_solv(self):
-+        self._setUp_from_repo_path(os.path.join(os.path.abspath(os.path.dirname(__file__)), "repos/rpm"))
-+
-+        # Modify checksum of solv file so it doesn't match with repomd
-+        solv = glob.glob(os.path.join(self.tmpdir, "cache/*.solv"))[0]
-+        with open(solv, "a") as opensolv:
-+            opensolv.write("appended text to change checksum")
-+
-+        # Now we only have cache with solvx, modified solv file and xml metadata.
-+        # Checksum mistmatch causes regeneration of solv file and repo works.
-+
-+        self.test_base.fill_sack_from_repos_in_cache(load_system_repo=False)
-+
-+        q = self.test_base.sack.query()
-+        packages = q.run()
-+        self.assertEqual(len(packages), 9)
-+        self.assertEqual(packages[0].evr, "4-4")
-+
-+    def test_with_modules_yaml(self):
-+        self._setUp_from_repo_path(os.path.join(os.path.abspath(os.path.dirname(__file__)),
-+                                                "modules/modules/_all/x86_64"))
-+
-+        # Now we have full cache (also with modules.yaml)
-+
-+        self.test_base.fill_sack_from_repos_in_cache(load_system_repo=False)
-+
-+        q = self.test_base.sack.query()
-+        packages = q.run()
-+        self.assertEqual(len(packages), 8)
-+        self.assertEqual(packages[0].evr, "2.02-0.40")
-+
-+        self.module_base = dnf.module.module_base.ModuleBase(self.test_base)
-+        modules, _ = self.module_base._get_modules("base-runtime*")
-+        self.assertEqual(len(modules), 3)
-+        self.assertEqual(modules[0].getFullIdentifier(), "base-runtime:f26:1::")
-+
-+    def test_with_modular_repo_without_modules_yaml(self):
-+        self._setUp_from_repo_path(os.path.join(os.path.abspath(os.path.dirname(__file__)),
-+                                                "modules/modules/_all/x86_64"))
-+
-+        # Remove xml and yaml metadata except repomd
-+        # repomd.xml is not compressed and doesn't end with .gz
-+        repodata_without_repomd = glob.glob(os.path.join(self.tmpdir, "cache/test-repo-*/repodata/*.gz"))
-+        for f in repodata_without_repomd:
-+            os.remove(f)
-+
-+        # Now we have just solv, *-filenames.solvx and repomd.xml (modules.yaml are not processed into *-modules.solvx)
-+
-+        self.test_base.fill_sack_from_repos_in_cache(load_system_repo=False)
-+
-+        q = self.test_base.sack.query()
-+        packages = q.run()
-+        # We have many more packages because they are not hidden by modules
-+        self.assertEqual(len(packages), 44)
-+        self.assertEqual(packages[0].evr, "10.0-7")
-+
-+        self.module_base = dnf.module.module_base.ModuleBase(self.test_base)
-+        modules, _ = self.module_base._get_modules("base-runtime*")
-+        self.assertEqual(len(modules), 0)
-
-From de6177dba3dc20191e275eec14672570a0c4f4a8 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
-Date: Thu, 14 Jan 2021 12:29:06 +0100
-Subject: [PATCH 3/3] Add docs and examples for fill_sack_from_repos_in_cache
- (RhBug:1865803)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1865803
----
- doc/api_base.rst | 41 +++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 41 insertions(+)
-
-diff --git a/doc/api_base.rst b/doc/api_base.rst
-index 24ecb50e43..f0b1992e88 100644
---- a/doc/api_base.rst
-+++ b/doc/api_base.rst
-@@ -111,6 +111,47 @@
-             print("id: {}".format(repo.id))
-             print("baseurl: {}".format(repo.baseurl))
- 
-+  .. method:: fill_sack_from_repos_in_cache(load_system_repo=True)
-+
-+    Prepare Sack and Goal objects and load all enabled repositories from cache only, it doesn't download anything and it doesn't check if metadata are expired.
-+    To successfully load a repository cache it requires repond.xml plus metadata (xml, yaml) or repond.xml plus generated cache files (solv, solvx).
-+    If there is not enough metadata given repo is either skipped or it throws a :exc:`dnf.exceptions.RepoError` exception depending on :attr:`dnf.conf.Conf.skip_if_unavailable` configuration.
-+
-+    All additional metadata are loaded if present but are not generally required. Note that some metadata like updateinfo.xml get processed into a solvx cache file and its sufficient to have either xml or solvx. Module metadata represented by modules.yaml are not processed therefore they are needed when they are defined in repomd.xml.
-+
-+    Example of loading all configured repositories from cache and printing available packages' names::
-+
-+        #!/usr/bin/python3
-+        import dnf
-+
-+        with dnf.Base() as base:
-+            base.read_all_repos()
-+
-+            base.fill_sack_from_repos_in_cache(load_system_repo=False)
-+
-+            query = base.sack.query().available()
-+            for pkg in query.run():
-+                print(pkg.name)
-+
-+    Example of loading a single repository and printing available packages' names without reading repository configuration::
-+
-+        #!/usr/bin/python3
-+        import dnf
-+
-+        with dnf.Base() as base:
-+            repo = dnf.repo.Repo("rawhide", base.conf)
-+
-+            # Repository cache is also identified by its source therefore to find it you need to
-+            # set metalink, mirrorlist or baseurl to the same value from which it was created.
-+            repo.metalink = "https://mirrors.fedoraproject.org/metalink?repo=rawhide&arch=x86_64"
-+
-+            base.repos.add(repo)
-+
-+            base.fill_sack_from_repos_in_cache(load_system_repo=False)
-+
-+            query = base.sack.query().available()
-+            for pkg in query.run():
-+                print(pkg.name)
- 
-   .. method:: do_transaction([display])
- 
diff --git a/SOURCES/0016-Run-tests-for-fill-sack-from-repos-in-cache-in-installroot..patch b/SOURCES/0016-Run-tests-for-fill-sack-from-repos-in-cache-in-installroot..patch
deleted file mode 100644
index 2c8f13b..0000000
--- a/SOURCES/0016-Run-tests-for-fill-sack-from-repos-in-cache-in-installroot..patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 291071a937a1de398641f02002413678398e473c Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
-Date: Mon, 8 Feb 2021 08:25:46 +0100
-Subject: [PATCH] Run tests for fill_sack_from_repos_in_cache in installroot
- (RhBug:1865803)
-
-This prevents loading data (like failsafe) from host.
-
-It also allows testing that there are no modules in the installroot not just
-no base-runtime* in test_with_modular_repo_without_modules_yaml.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1865803
----
- tests/test_fill_sack_from_repos_in_cache.py | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/tests/test_fill_sack_from_repos_in_cache.py b/tests/test_fill_sack_from_repos_in_cache.py
-index 24b0d4598d..f27235bf84 100644
---- a/tests/test_fill_sack_from_repos_in_cache.py
-+++ b/tests/test_fill_sack_from_repos_in_cache.py
-@@ -42,6 +42,7 @@ class FillSackFromReposInCacheTest(unittest.TestCase):
-     def _create_cache_for_repo(self, repopath, tmpdir):
-         conf = dnf.conf.MainConf()
-         conf.cachedir = os.path.join(tmpdir, "cache")
-+        conf.installroot = os.path.join(tmpdir)
- 
-         base = dnf.Base(conf=conf)
- 
-@@ -68,6 +69,7 @@ def _setUp_from_repo_path(self, original_repo_path):
-         # Prepare base for the actual test
-         conf = dnf.conf.MainConf()
-         conf.cachedir = os.path.join(self.tmpdir, "cache")
-+        conf.installroot = os.path.join(self.tmpdir)
-         self.test_base = dnf.Base(conf=conf)
-         repoconf = dnf.repo.Repo(TEST_REPO_NAME, conf)
-         repoconf.baseurl = self.repo_copy_path
-@@ -258,5 +260,5 @@ def test_with_modular_repo_without_modules_yaml(self):
-         self.assertEqual(packages[0].evr, "10.0-7")
- 
-         self.module_base = dnf.module.module_base.ModuleBase(self.test_base)
--        modules, _ = self.module_base._get_modules("base-runtime*")
-+        modules, _ = self.module_base._get_modules("*")
-         self.assertEqual(len(modules), 0)
diff --git a/SOURCES/0017-Set-persistdir-for-fill-sack-from-repos-in-cache-tests-RhBug-1865803.patch b/SOURCES/0017-Set-persistdir-for-fill-sack-from-repos-in-cache-tests-RhBug-1865803.patch
deleted file mode 100644
index b6dee78..0000000
--- a/SOURCES/0017-Set-persistdir-for-fill-sack-from-repos-in-cache-tests-RhBug-1865803.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From 40e762da5cd2d876b6424f4c25b77e8dc2422a0f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
-Date: Mon, 8 Feb 2021 08:25:46 +0100
-Subject: [PATCH] Set persistdir and substitutions for
- fill_sack_from_repos_in_cache tests (RhBug:1865803)
-
-Setting just installroot is not enough because persistdir is not
-automatically prepended with installroot if set via API.
-
-Also assert exact package names which is more useful output in case the
-test fails.
-
-https://bugzilla.redhat.com/show_bug.cgi?id=1865803
----
- tests/test_fill_sack_from_repos_in_cache.py | 19 +++++++++++++++----
- 1 file changed, 15 insertions(+), 4 deletions(-)
-
-diff --git a/tests/test_fill_sack_from_repos_in_cache.py b/tests/test_fill_sack_from_repos_in_cache.py
-index f27235bf84..23fd2a4337 100644
---- a/tests/test_fill_sack_from_repos_in_cache.py
-+++ b/tests/test_fill_sack_from_repos_in_cache.py
-@@ -42,7 +42,10 @@ class FillSackFromReposInCacheTest(unittest.TestCase):
-     def _create_cache_for_repo(self, repopath, tmpdir):
-         conf = dnf.conf.MainConf()
-         conf.cachedir = os.path.join(tmpdir, "cache")
--        conf.installroot = os.path.join(tmpdir)
-+        conf.installroot = tmpdir
-+        conf.persistdir = os.path.join(conf.installroot, conf.persistdir.lstrip("/"))
-+        conf.substitutions["arch"] = "x86_64"
-+        conf.substitutions["basearch"] = dnf.rpm.basearch(conf.substitutions["arch"])
- 
-         base = dnf.Base(conf=conf)
- 
-@@ -69,7 +72,10 @@ def _setUp_from_repo_path(self, original_repo_path):
-         # Prepare base for the actual test
-         conf = dnf.conf.MainConf()
-         conf.cachedir = os.path.join(self.tmpdir, "cache")
--        conf.installroot = os.path.join(self.tmpdir)
-+        conf.installroot = self.tmpdir
-+        conf.persistdir = os.path.join(conf.installroot, conf.persistdir.lstrip("/"))
-+        conf.substitutions["arch"] = "x86_64"
-+        conf.substitutions["basearch"] = dnf.rpm.basearch(conf.substitutions["arch"])
-         self.test_base = dnf.Base(conf=conf)
-         repoconf = dnf.repo.Repo(TEST_REPO_NAME, conf)
-         repoconf.baseurl = self.repo_copy_path
-@@ -231,8 +237,13 @@ def test_with_modules_yaml(self):
- 
-         q = self.test_base.sack.query()
-         packages = q.run()
--        self.assertEqual(len(packages), 8)
--        self.assertEqual(packages[0].evr, "2.02-0.40")
-+
-+        pkg_names = []
-+        for pkg in packages:
-+            pkg_names.append(pkg.name)
-+
-+        self.assertEqual(pkg_names, ['grub2', 'httpd', 'httpd', 'httpd-doc', 'httpd-doc', 'httpd-provides-name-doc',
-+                                     'httpd-provides-name-version-release-doc', 'libnghttp2'])
- 
-         self.module_base = dnf.module.module_base.ModuleBase(self.test_base)
-         modules, _ = self.module_base._get_modules("base-runtime*")
diff --git a/SOURCES/0018-Allow-stream-switching-if-option-enabled.patch b/SOURCES/0018-Allow-stream-switching-if-option-enabled.patch
deleted file mode 100644
index 0fd4828..0000000
--- a/SOURCES/0018-Allow-stream-switching-if-option-enabled.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 9ceb74f77479910f7844a9a87d4b7623687076be Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
-Date: Fri, 24 Jul 2020 07:59:38 +0200
-Subject: [PATCH] Allow stream switching if option enabled
-
-= changelog =
-msg: New config option module_allow_stream_switch allows switching enabled streams
-type: enhancement
----
- dnf.spec       |  2 +-
- dnf/cli/cli.py | 19 ++++++++++---------
- 2 files changed, 11 insertions(+), 10 deletions(-)
-
-diff --git a/dnf.spec b/dnf.spec
-index 0e63b2b422..04f6f104c7 100644
---- a/dnf.spec
-+++ b/dnf.spec
-@@ -2,7 +2,7 @@
- %undefine __cmake_in_source_build
- 
- # default dependencies
--%global hawkey_version 0.54.4
-+%global hawkey_version 0.55.0
- %global libcomps_version 0.1.8
- %global libmodulemd_version 1.4.0
- %global rpm_version 4.14.0
-diff --git a/dnf/cli/cli.py b/dnf/cli/cli.py
-index be737ed3b7..29d7373fa3 100644
---- a/dnf/cli/cli.py
-+++ b/dnf/cli/cli.py
-@@ -166,15 +166,16 @@ def do_transaction(self, display=()):
-         :return: history database transaction ID or None
-         """
-         if dnf.base.WITH_MODULES:
--            switchedModules = dict(self._moduleContainer.getSwitchedStreams())
--            if switchedModules:
--                report_module_switch(switchedModules)
--                msg = _("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 '{prog} module reset <module_name>' command. After "
--                        "you reset the module, you can install the other stream.").format(
--                    prog=dnf.util.MAIN_PROG)
--                raise dnf.exceptions.Error(msg)
-+            if not self.conf.module_stream_switch:
-+                switchedModules = dict(self._moduleContainer.getSwitchedStreams())
-+                if switchedModules:
-+                    report_module_switch(switchedModules)
-+                    msg = _("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 '{prog} module reset <module_name>' command. After "
-+                            "you reset the module, you can install the other stream.").format(
-+                        prog=dnf.util.MAIN_PROG)
-+                    raise dnf.exceptions.Error(msg)
- 
-         trans = self.transaction
-         pkg_str = self.output.list_transaction(trans)
diff --git a/SOURCES/0019-Update-translations.patch b/SOURCES/0019-Update-translations.patch
deleted file mode 100644
index f6d9c68..0000000
--- a/SOURCES/0019-Update-translations.patch
+++ /dev/null
@@ -1,12740 +0,0 @@
-From c01dc4f6a6cdc7297b9ffacc6fe96142f02e4d54 Mon Sep 17 00:00:00 2001
-From: Marek Blaha <mblaha@redhat.com>
-Date: Mon, 8 Mar 2021 16:22:58 +0100
-Subject: [PATCH] Update translations
-
----
- po/CMakeLists.txt |    1 +
- po/dnf.pot        |  943 +++++++++++++++++++-------------------
- po/fr.po          | 1042 ++++++++++++++++++++++--------------------
- po/ja.po          | 1112 +++++++++++++++++++++++----------------------
- po/ko.po          |  965 ++++++++++++++++++++-------------------
- po/zh_CN.po       | 1086 +++++++++++++++++++++----------------------
- 6 files changed, 2649 insertions(+), 2500 deletions(-)
-
-diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt
-index 1e17f342..40d020dd 100644
---- a/po/CMakeLists.txt
-+++ b/po/CMakeLists.txt
-@@ -15,6 +15,7 @@ if (GIT_FOUND)
-         OUTPUT_VARIABLE CURRENT_BRANCH
-         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-         )
-+    set(CURRENT_BRANCH "rhel-8")
- 
-     # output _weblate-clone is never created so the clonning of weblate repo is always processed
-     # and fresh *.po files are used
-diff --git a/po/dnf.pot b/po/dnf.pot
-index f7101537..18d8c5ba 100644
---- a/po/dnf.pot
-+++ b/po/dnf.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: 2021-02-22 09:22+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"
-@@ -73,7 +73,7 @@ msgstr ""
- msgid "Unknown configuration option: %s = %s in %s"
- msgstr ""
- 
--#: dnf/automatic/main.py:237 dnf/cli/cli.py:299
-+#: dnf/automatic/main.py:237 dnf/cli/cli.py:304
- msgid "GPG check FAILED"
- msgstr ""
- 
-@@ -86,9 +86,10 @@ msgid "Started dnf-automatic."
- msgstr ""
- 
- #: dnf/automatic/main.py:308
--#, python-format
--msgid "Sleep for %s seconds"
--msgstr ""
-+msgid "Sleep for {} second"
-+msgid_plural "Sleep for {} seconds"
-+msgstr[0] ""
-+msgstr[1] ""
- 
- #: dnf/automatic/main.py:315
- msgid "System is off-line."
-@@ -100,7 +101,7 @@ msgstr ""
- msgid "Error: %s"
- msgstr ""
- 
--#: dnf/base.py:146
-+#: dnf/base.py:146 dnf/base.py:472 dnf/base.py:474
- msgid "loading repo '{}' failure: {}"
- msgstr ""
- 
-@@ -108,237 +109,237 @@ msgstr ""
- msgid "Loading repository '{}' has failed"
- msgstr ""
- 
--#: dnf/base.py:320
-+#: dnf/base.py:322
- msgid "Metadata timer caching disabled when running on metered connection."
- msgstr ""
- 
--#: dnf/base.py:325
-+#: dnf/base.py:327
- msgid "Metadata timer caching disabled when running on a battery."
- msgstr ""
- 
--#: dnf/base.py:330
-+#: dnf/base.py:332
- msgid "Metadata timer caching disabled."
- msgstr ""
- 
--#: dnf/base.py:335
-+#: dnf/base.py:337
- msgid "Metadata cache refreshed recently."
- msgstr ""
- 
--#: dnf/base.py:341 dnf/cli/commands/__init__.py:91
-+#: dnf/base.py:343 dnf/cli/commands/__init__.py:91
- msgid "There are no enabled repositories in \"{}\"."
- msgstr ""
- 
--#: dnf/base.py:348
-+#: dnf/base.py:350
- #, python-format
- msgid "%s: will never be expired and will not be refreshed."
- msgstr ""
- 
--#: dnf/base.py:350
-+#: dnf/base.py:352
- #, python-format
- msgid "%s: has expired and will be refreshed."
- msgstr ""
- 
- #. expires within the checking period:
--#: dnf/base.py:354
-+#: dnf/base.py:356
- #, python-format
- msgid "%s: metadata will expire after %d seconds and will be refreshed now"
- msgstr ""
- 
--#: dnf/base.py:358
-+#: dnf/base.py:360
- #, python-format
- msgid "%s: will expire after %d seconds."
- msgstr ""
- 
- #. performs the md sync
--#: dnf/base.py:364
-+#: dnf/base.py:366
- msgid "Metadata cache created."
- msgstr ""
- 
--#: dnf/base.py:397
-+#: dnf/base.py:399 dnf/base.py:466
- #, python-format
- msgid "%s: using metadata from %s."
- msgstr ""
- 
--#: dnf/base.py:409
-+#: dnf/base.py:411 dnf/base.py:479
- #, python-format
- msgid "Ignoring repositories: %s"
- msgstr ""
- 
--#: dnf/base.py:412
-+#: dnf/base.py:414
- #, python-format
- msgid "Last metadata expiration check: %s ago on %s."
- msgstr ""
- 
--#: dnf/base.py:443
-+#: dnf/base.py:507
- msgid ""
- "The downloaded packages were saved in cache until the next successful "
- "transaction."
- msgstr ""
- 
--#: dnf/base.py:445
-+#: dnf/base.py:509
- #, python-format
- msgid "You can remove cached packages by executing '%s'."
- msgstr ""
- 
--#: dnf/base.py:535
-+#: dnf/base.py:599
- #, python-format
- msgid "Invalid tsflag in config file: %s"
- msgstr ""
- 
--#: dnf/base.py:591
-+#: dnf/base.py:655
- #, python-format
- msgid "Failed to add groups file for repository: %s - %s"
- msgstr ""
- 
--#: dnf/base.py:823
-+#: dnf/base.py:887
- msgid "Running transaction check"
- msgstr ""
- 
--#: dnf/base.py:831
-+#: dnf/base.py:895
- msgid "Error: transaction check vs depsolve:"
- msgstr ""
- 
--#: dnf/base.py:837
-+#: dnf/base.py:901
- msgid "Transaction check succeeded."
- msgstr ""
- 
--#: dnf/base.py:840
-+#: dnf/base.py:904
- msgid "Running transaction test"
- msgstr ""
- 
--#: dnf/base.py:850 dnf/base.py:992
-+#: dnf/base.py:914 dnf/base.py:1065
- msgid "RPM: {}"
- msgstr ""
- 
--#: dnf/base.py:851
-+#: dnf/base.py:915
- msgid "Transaction test error:"
- msgstr ""
- 
--#: dnf/base.py:862
-+#: dnf/base.py:926
- msgid "Transaction test succeeded."
- msgstr ""
- 
--#: dnf/base.py:883
-+#: dnf/base.py:947
- msgid "Running transaction"
- msgstr ""
- 
--#: dnf/base.py:911
-+#: dnf/base.py:984
- msgid "Disk Requirements:"
- msgstr ""
- 
--#: dnf/base.py:914
-+#: dnf/base.py:987
- #, python-brace-format
- msgid "At least {0}MB more space needed on the {1} filesystem."
- msgid_plural "At least {0}MB more space needed on the {1} filesystem."
- msgstr[0] ""
- msgstr[1] ""
- 
--#: dnf/base.py:921
-+#: dnf/base.py:994
- msgid "Error Summary"
- msgstr ""
- 
--#: dnf/base.py:947
-+#: dnf/base.py:1020
- #, python-brace-format
- msgid "RPMDB altered outside of {prog}."
- msgstr ""
- 
--#: dnf/base.py:993 dnf/base.py:1001
-+#: dnf/base.py:1066 dnf/base.py:1074
- msgid "Could not run transaction."
- msgstr ""
- 
--#: dnf/base.py:996
-+#: dnf/base.py:1069
- msgid "Transaction couldn't start:"
- msgstr ""
- 
--#: dnf/base.py:1010
-+#: dnf/base.py:1083
- #, python-format
- msgid "Failed to remove transaction file %s"
- msgstr ""
- 
--#: dnf/base.py:1092
-+#: dnf/base.py:1165
- msgid "Some packages were not downloaded. Retrying."
- msgstr ""
- 
--#: dnf/base.py:1122
-+#: dnf/base.py:1195
- #, python-format
- msgid "Delta RPMs reduced %.1f MB of updates to %.1f MB (%d.1%% saved)"
- msgstr ""
- 
--#: dnf/base.py:1125
-+#: dnf/base.py:1198
- #, python-format
- msgid ""
- "Failed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)"
- msgstr ""
- 
--#: dnf/base.py:1167
-+#: dnf/base.py:1240
- msgid "Cannot add local packages, because transaction job already exists"
- msgstr ""
- 
--#: dnf/base.py:1181
-+#: dnf/base.py:1254
- msgid "Could not open: {}"
- msgstr ""
- 
--#: dnf/base.py:1219
-+#: dnf/base.py:1292
- #, python-format
- msgid "Public key for %s is not installed"
- msgstr ""
- 
--#: dnf/base.py:1223
-+#: dnf/base.py:1296
- #, python-format
- msgid "Problem opening package %s"
- msgstr ""
- 
--#: dnf/base.py:1231
-+#: dnf/base.py:1304
- #, python-format
- msgid "Public key for %s is not trusted"
- msgstr ""
- 
--#: dnf/base.py:1235
-+#: dnf/base.py:1308
- #, python-format
- msgid "Package %s is not signed"
- msgstr ""
- 
--#: dnf/base.py:1265
-+#: dnf/base.py:1338
- #, python-format
- msgid "Cannot remove %s"
- msgstr ""
- 
--#: dnf/base.py:1269
-+#: dnf/base.py:1342
- #, python-format
- msgid "%s removed"
- msgstr ""
- 
--#: dnf/base.py:1549
-+#: dnf/base.py:1622
- msgid "No match for group package \"{}\""
- msgstr ""
- 
--#: dnf/base.py:1635
-+#: dnf/base.py:1708
- #, python-format
- msgid "Adding packages from group '%s': %s"
- msgstr ""
- 
--#: dnf/base.py:1658 dnf/cli/cli.py:219 dnf/cli/commands/__init__.py:442
-+#: dnf/base.py:1731 dnf/cli/cli.py:220 dnf/cli/commands/__init__.py:442
- #: dnf/cli/commands/__init__.py:499 dnf/cli/commands/__init__.py:592
- #: dnf/cli/commands/__init__.py:641 dnf/cli/commands/install.py:80
- #: dnf/cli/commands/install.py:103 dnf/cli/commands/install.py:110
- msgid "Nothing to do."
- msgstr ""
- 
--#: dnf/base.py:1676
-+#: dnf/base.py:1749
- msgid "No groups marked for removal."
- msgstr ""
- 
--#: dnf/base.py:1710
-+#: dnf/base.py:1783
- msgid "No group marked for upgrade."
- msgstr ""
- 
--#: dnf/base.py:1925
-+#: dnf/base.py:1997
- #, python-format
- msgid "Package %s not installed, cannot downgrade it."
- msgstr ""
- 
--#: dnf/base.py:1927 dnf/base.py:1946 dnf/base.py:1959 dnf/base.py:1980
--#: dnf/base.py:2029 dnf/base.py:2037 dnf/base.py:2172 dnf/cli/cli.py:411
-+#: dnf/base.py:1999 dnf/base.py:2018 dnf/base.py:2031 dnf/base.py:2052
-+#: dnf/base.py:2101 dnf/base.py:2109 dnf/base.py:2243 dnf/cli/cli.py:416
- #: dnf/cli/commands/__init__.py:425 dnf/cli/commands/__init__.py:482
- #: dnf/cli/commands/__init__.py:586 dnf/cli/commands/__init__.py:633
- #: dnf/cli/commands/__init__.py:711 dnf/cli/commands/install.py:147
-@@ -348,141 +349,127 @@ msgstr ""
- msgid "No match for argument: %s"
- msgstr ""
- 
--#: dnf/base.py:1934
-+#: dnf/base.py:2006
- #, python-format
- msgid "Package %s of lower version already installed, cannot downgrade it."
- msgstr ""
- 
--#: dnf/base.py:1957
-+#: dnf/base.py:2029
- #, python-format
- msgid "Package %s not installed, cannot reinstall it."
- msgstr ""
- 
--#: dnf/base.py:1972
-+#: dnf/base.py:2044
- #, python-format
- msgid "File %s is a source package and cannot be updated, ignoring."
- msgstr ""
- 
--#: dnf/base.py:1978
-+#: dnf/base.py:2050
- #, python-format
- msgid "Package %s not installed, cannot update it."
- msgstr ""
- 
--#: dnf/base.py:1987
-+#: dnf/base.py:2059
- #, python-format
- msgid ""
- "The same or higher version of %s is already installed, cannot update it."
- msgstr ""
- 
--#: dnf/base.py:2026 dnf/cli/commands/reinstall.py:81
-+#: dnf/base.py:2098 dnf/cli/commands/reinstall.py:81
- #, python-format
- msgid "Package %s available, but not installed."
- msgstr ""
- 
--#: dnf/base.py:2032
-+#: dnf/base.py:2104
- #, python-format
- msgid "Package %s available, but installed for different architecture."
- msgstr ""
- 
--#: dnf/base.py:2057 dnf/base.py:2250 dnf/cli/cli.py:668 dnf/cli/cli.py:699
-+#: dnf/base.py:2129
- #, python-format
- msgid "No package %s installed."
- msgstr ""
- 
--#: dnf/base.py:2075 dnf/cli/commands/install.py:136
-+#: dnf/base.py:2147 dnf/cli/commands/install.py:136
- #: dnf/cli/commands/remove.py:133
- #, python-format
- msgid "Not a valid form: %s"
- msgstr ""
- 
--#: dnf/base.py:2091 dnf/cli/commands/__init__.py:681
--#: dnf/cli/commands/remove.py:163
-+#: dnf/base.py:2162 dnf/cli/commands/__init__.py:681
-+#: dnf/cli/commands/remove.py:162
- msgid "No packages marked for removal."
- msgstr ""
- 
--#: dnf/base.py:2179 dnf/cli/cli.py:422
-+#: dnf/base.py:2250 dnf/cli/cli.py:427
- #, python-format
- msgid "Packages for argument %s available, but not installed."
- msgstr ""
- 
--#: dnf/base.py:2184
-+#: dnf/base.py:2255
- #, python-format
- msgid "Package %s of lowest version already installed, cannot downgrade it."
- msgstr ""
- 
--#: dnf/base.py:2242
--msgid "Action not handled: {}"
--msgstr ""
--
--#: dnf/base.py:2256 dnf/cli/cli.py:419 dnf/cli/cli.py:673 dnf/cli/cli.py:703
--#: dnf/cli/commands/group.py:400 dnf/cli/commands/history.py:169
--#, python-format
--msgid "No package %s available."
--msgstr ""
--
--#: dnf/base.py:2269
--msgid "no package matched"
--msgstr ""
--
--#: dnf/base.py:2290
-+#: dnf/base.py:2302
- msgid "No security updates needed, but {} update available"
- msgstr ""
- 
--#: dnf/base.py:2292
-+#: dnf/base.py:2304
- msgid "No security updates needed, but {} updates available"
- msgstr ""
- 
--#: dnf/base.py:2296
-+#: dnf/base.py:2308
- msgid "No security updates needed for \"{}\", but {} update available"
- msgstr ""
- 
--#: dnf/base.py:2298
-+#: dnf/base.py:2310
- msgid "No security updates needed for \"{}\", but {} updates available"
- msgstr ""
- 
- #. raise an exception, because po.repoid is not in self.repos
--#: dnf/base.py:2319
-+#: dnf/base.py:2331
- #, python-format
- msgid "Unable to retrieve a key for a commandline package: %s"
- msgstr ""
- 
--#: dnf/base.py:2327
-+#: dnf/base.py:2339
- #, python-format
- msgid ". Failing package is: %s"
- msgstr ""
- 
--#: dnf/base.py:2328
-+#: dnf/base.py:2340
- #, python-format
- msgid "GPG Keys are configured as: %s"
- msgstr ""
- 
--#: dnf/base.py:2340
-+#: dnf/base.py:2352
- #, python-format
- msgid "GPG key at %s (0x%s) is already installed"
- msgstr ""
- 
--#: dnf/base.py:2373
-+#: dnf/base.py:2385
- msgid "The key has been approved."
- msgstr ""
- 
--#: dnf/base.py:2376
-+#: dnf/base.py:2388
- msgid "The key has been rejected."
- msgstr ""
- 
--#: dnf/base.py:2409
-+#: dnf/base.py:2421
- #, python-format
- msgid "Key import failed (code %d)"
- msgstr ""
- 
--#: dnf/base.py:2411
-+#: dnf/base.py:2423
- msgid "Key imported successfully"
- msgstr ""
- 
--#: dnf/base.py:2415
-+#: dnf/base.py:2427
- msgid "Didn't install any keys"
- msgstr ""
- 
--#: dnf/base.py:2418
-+#: dnf/base.py:2430
- #, python-format
- msgid ""
- "The GPG keys listed for the \"%s\" repository are already installed but they "
-@@ -490,49 +477,49 @@ msgid ""
- "Check that the correct key URLs are configured for this repository."
- msgstr ""
- 
--#: dnf/base.py:2429
-+#: dnf/base.py:2441
- msgid "Import of key(s) didn't help, wrong key(s)?"
- msgstr ""
- 
--#: dnf/base.py:2482
-+#: dnf/base.py:2494
- msgid "  * Maybe you meant: {}"
- msgstr ""
- 
--#: dnf/base.py:2514
-+#: dnf/base.py:2526
- msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum"
- msgstr ""
- 
--#: dnf/base.py:2517
-+#: dnf/base.py:2529
- msgid "Some packages from local repository have incorrect checksum"
- msgstr ""
- 
--#: dnf/base.py:2520
-+#: dnf/base.py:2532
- msgid "Package \"{}\" from repository \"{}\" has incorrect checksum"
- msgstr ""
- 
--#: dnf/base.py:2523
-+#: dnf/base.py:2535
- msgid ""
- "Some packages have invalid cache, but cannot be downloaded due to \"--"
- "cacheonly\" option"
- msgstr ""
- 
--#: dnf/base.py:2541 dnf/base.py:2561
-+#: dnf/base.py:2553 dnf/base.py:2573
- msgid "No match for argument"
- msgstr ""
- 
--#: dnf/base.py:2549 dnf/base.py:2569
-+#: dnf/base.py:2561 dnf/base.py:2581
- msgid "All matches were filtered out by exclude filtering for argument"
- msgstr ""
- 
--#: dnf/base.py:2551
-+#: dnf/base.py:2563
- msgid "All matches were filtered out by modular filtering for argument"
- msgstr ""
- 
--#: dnf/base.py:2567
-+#: dnf/base.py:2579
- msgid "All matches were installed from a different repository for argument"
- msgstr ""
- 
--#: dnf/base.py:2583
-+#: dnf/base.py:2626
- #, python-format
- msgid "Package %s is already installed."
- msgstr ""
-@@ -552,8 +539,8 @@ msgstr ""
- msgid "Cannot read file \"%s\": %s"
- msgstr ""
- 
--#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:902
--#: dnf/cli/cli.py:906 dnf/cli/commands/alias.py:108
-+#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:803
-+#: dnf/cli/cli.py:807 dnf/cli/commands/alias.py:108
- #, python-format
- msgid "Config error: %s"
- msgstr ""
-@@ -584,7 +571,7 @@ msgid ""
- "stream '{2}'"
- msgstr ""
- 
--#: dnf/cli/cli.py:172
-+#: dnf/cli/cli.py:173
- #, python-brace-format
- msgid ""
- "It is not possible to switch enabled streams of a module.\n"
-@@ -593,199 +580,178 @@ msgid ""
- "reset the module, you can install the other stream."
- msgstr ""
- 
--#: dnf/cli/cli.py:210
-+#: dnf/cli/cli.py:211
- #, python-brace-format
- msgid "{prog} will only download packages for the transaction."
- msgstr ""
- 
--#: dnf/cli/cli.py:213
-+#: dnf/cli/cli.py:214
- #, python-brace-format
- msgid ""
- "{prog} will only download packages, install gpg keys, and check the "
- "transaction."
- msgstr ""
- 
--#: dnf/cli/cli.py:217
-+#: dnf/cli/cli.py:218
- msgid "Operation aborted."
- msgstr ""
- 
--#: dnf/cli/cli.py:224
-+#: dnf/cli/cli.py:225
- msgid "Downloading Packages:"
- msgstr ""
- 
--#: dnf/cli/cli.py:230
-+#: dnf/cli/cli.py:231
- msgid "Error downloading packages:"
- msgstr ""
- 
--#: dnf/cli/cli.py:258
-+#: dnf/cli/cli.py:263
- msgid "Transaction failed"
- msgstr ""
- 
--#: dnf/cli/cli.py:281
-+#: dnf/cli/cli.py:286
- msgid ""
- "Refusing to automatically import keys when running unattended.\n"
- "Use \"-y\" to override."
- msgstr ""
- 
--#: dnf/cli/cli.py:331
-+#: dnf/cli/cli.py:336
- msgid "Changelogs for {}"
- msgstr ""
- 
--#: dnf/cli/cli.py:364 dnf/cli/cli.py:505 dnf/cli/cli.py:511
-+#: dnf/cli/cli.py:369 dnf/cli/cli.py:510 dnf/cli/cli.py:516
- msgid "Obsoleting Packages"
- msgstr ""
- 
--#: dnf/cli/cli.py:393
-+#: dnf/cli/cli.py:398
- msgid "No packages marked for distribution synchronization."
- msgstr ""
- 
--#: dnf/cli/cli.py:428
-+#: dnf/cli/cli.py:424 dnf/cli/commands/group.py:395
-+#, python-format
-+msgid "No package %s available."
-+msgstr ""
-+
-+#: dnf/cli/cli.py:433
- msgid "No packages marked for downgrade."
- msgstr ""
- 
--#: dnf/cli/cli.py:479
-+#: dnf/cli/cli.py:484
- msgid "Installed Packages"
- msgstr ""
- 
--#: dnf/cli/cli.py:487
-+#: dnf/cli/cli.py:492
- msgid "Available Packages"
- msgstr ""
- 
--#: dnf/cli/cli.py:491
-+#: dnf/cli/cli.py:496
- msgid "Autoremove Packages"
- msgstr ""
- 
--#: dnf/cli/cli.py:493
-+#: dnf/cli/cli.py:498
- msgid "Extra Packages"
- msgstr ""
- 
--#: dnf/cli/cli.py:497
-+#: dnf/cli/cli.py:502
- msgid "Available Upgrades"
- msgstr ""
- 
--#: dnf/cli/cli.py:513
-+#: dnf/cli/cli.py:518
- msgid "Recently Added Packages"
- msgstr ""
- 
--#: dnf/cli/cli.py:518
-+#: dnf/cli/cli.py:522
- msgid "No matching Packages to list"
- msgstr ""
- 
--#: dnf/cli/cli.py:599
-+#: dnf/cli/cli.py:603
- msgid "No Matches found"
- msgstr ""
- 
--#: dnf/cli/cli.py:609
--msgid "No transaction ID given"
--msgstr ""
--
--#: dnf/cli/cli.py:614
--msgid "Not found given transaction ID"
--msgstr ""
--
--#: dnf/cli/cli.py:623
--msgid "Found more than one transaction ID!"
--msgstr ""
--
--#: dnf/cli/cli.py:640
--#, python-format
--msgid "Transaction history is incomplete, before %u."
--msgstr ""
--
--#: dnf/cli/cli.py:642
--#, python-format
--msgid "Transaction history is incomplete, after %u."
--msgstr ""
--
--#: dnf/cli/cli.py:689
--msgid "Undoing transaction {}, from {}"
--msgstr ""
--
--#: dnf/cli/cli.py:769 dnf/cli/commands/shell.py:237
-+#: dnf/cli/cli.py:670 dnf/cli/commands/shell.py:237
- #, python-format
- msgid "Unknown repo: '%s'"
- msgstr ""
- 
--#: dnf/cli/cli.py:783
-+#: dnf/cli/cli.py:684
- #, python-format
- msgid "No repository match: %s"
- msgstr ""
- 
--#: dnf/cli/cli.py:817
-+#: dnf/cli/cli.py:718
- msgid ""
- "This command has to be run with superuser privileges (under the root user on "
- "most systems)."
- msgstr ""
- 
--#: dnf/cli/cli.py:847
-+#: dnf/cli/cli.py:748
- #, python-format
- msgid "No such command: %s. Please use %s --help"
- msgstr ""
- 
--#: dnf/cli/cli.py:850
-+#: dnf/cli/cli.py:751
- #, python-format, python-brace-format
- msgid ""
- "It could be a {PROG} plugin command, try: \"{prog} install 'dnf-"
- "command(%s)'\""
- msgstr ""
- 
--#: dnf/cli/cli.py:854
-+#: dnf/cli/cli.py:755
- #, python-brace-format
- msgid ""
- "It could be a {prog} plugin command, but loading of plugins is currently "
- "disabled."
- msgstr ""
- 
--#: dnf/cli/cli.py:912
-+#: dnf/cli/cli.py:813
- msgid ""
- "--destdir or --downloaddir must be used with --downloadonly or download or "
- "system-upgrade command."
- msgstr ""
- 
--#: dnf/cli/cli.py:918
-+#: dnf/cli/cli.py:819
- msgid ""
- "--enable, --set-enabled and --disable, --set-disabled must be used with "
- "config-manager command."
- msgstr ""
- 
--#: dnf/cli/cli.py:1000
-+#: dnf/cli/cli.py:901
- msgid ""
- "Warning: Enforcing GPG signature check globally as per active RPM security "
- "policy (see 'gpgcheck' in dnf.conf(5) for how to squelch this message)"
- msgstr ""
- 
--#: dnf/cli/cli.py:1020
-+#: dnf/cli/cli.py:921
- msgid "Config file \"{}\" does not exist"
- msgstr ""
- 
--#: dnf/cli/cli.py:1040
-+#: dnf/cli/cli.py:941
- msgid ""
- "Unable to detect release version (use '--releasever' to specify release "
- "version)"
- msgstr ""
- 
--#: dnf/cli/cli.py:1127 dnf/cli/commands/repoquery.py:471
-+#: dnf/cli/cli.py:1028 dnf/cli/commands/repoquery.py:471
- msgid "argument {}: not allowed with argument {}"
- msgstr ""
- 
--#: dnf/cli/cli.py:1134
-+#: dnf/cli/cli.py:1035
- #, python-format
- msgid "Command \"%s\" already defined"
- msgstr ""
- 
--#: dnf/cli/cli.py:1154
-+#: dnf/cli/cli.py:1055
- msgid "Excludes in dnf.conf: "
- msgstr ""
- 
--#: dnf/cli/cli.py:1157
-+#: dnf/cli/cli.py:1058
- msgid "Includes in dnf.conf: "
- msgstr ""
- 
--#: dnf/cli/cli.py:1160
-+#: dnf/cli/cli.py:1061
- msgid "Excludes in repo "
- msgstr ""
- 
--#: dnf/cli/cli.py:1163
-+#: dnf/cli/cli.py:1064
- msgid "Includes in repo "
- msgstr ""
- 
-@@ -831,7 +797,7 @@ msgid "show all packages (default)"
- msgstr ""
- 
- #: dnf/cli/commands/__init__.py:171 dnf/cli/commands/__init__.py:743
--#: dnf/cli/commands/module.py:351
-+#: dnf/cli/commands/module.py:373
- msgid "show only available packages"
- msgstr ""
- 
-@@ -1157,78 +1123,78 @@ msgstr ""
- msgid "No group data available for configured repositories."
- msgstr ""
- 
--#: dnf/cli/commands/group.py:129
-+#: dnf/cli/commands/group.py:126
- #, python-format
- msgid "Warning: Group %s does not exist."
- msgstr ""
- 
--#: dnf/cli/commands/group.py:170
-+#: dnf/cli/commands/group.py:167
- msgid "Warning: No groups match:"
- msgstr ""
- 
--#: dnf/cli/commands/group.py:182 dnf/cli/commands/group.py:193
--#: dnf/cli/output.py:1226
-+#: dnf/cli/commands/group.py:179 dnf/cli/commands/group.py:190
-+#: dnf/cli/output.py:1139
- msgid "<name-unset>"
- msgstr ""
- 
--#: dnf/cli/commands/group.py:199
-+#: dnf/cli/commands/group.py:196
- msgid "Available Environment Groups:"
- msgstr ""
- 
--#: dnf/cli/commands/group.py:201
-+#: dnf/cli/commands/group.py:198
- msgid "Installed Environment Groups:"
- msgstr ""
- 
--#: dnf/cli/commands/group.py:208 dnf/cli/commands/group.py:294
-+#: dnf/cli/commands/group.py:205 dnf/cli/commands/group.py:291
- msgid "Installed Groups:"
- msgstr ""
- 
--#: dnf/cli/commands/group.py:215 dnf/cli/commands/group.py:301
-+#: dnf/cli/commands/group.py:212 dnf/cli/commands/group.py:298
- msgid "Installed Language Groups:"
- msgstr ""
- 
--#: dnf/cli/commands/group.py:225 dnf/cli/commands/group.py:308
-+#: dnf/cli/commands/group.py:222 dnf/cli/commands/group.py:305
- msgid "Available Groups:"
- msgstr ""
- 
--#: dnf/cli/commands/group.py:232 dnf/cli/commands/group.py:315
-+#: dnf/cli/commands/group.py:229 dnf/cli/commands/group.py:312
- msgid "Available Language Groups:"
- msgstr ""
- 
--#: dnf/cli/commands/group.py:322
-+#: dnf/cli/commands/group.py:319
- msgid "include optional packages from group"
- msgstr ""
- 
--#: dnf/cli/commands/group.py:325
-+#: dnf/cli/commands/group.py:322
- msgid "show also hidden groups"
- msgstr ""
- 
--#: dnf/cli/commands/group.py:327
-+#: dnf/cli/commands/group.py:324
- msgid "show only installed groups"
- msgstr ""
- 
--#: dnf/cli/commands/group.py:329
-+#: dnf/cli/commands/group.py:326
- msgid "show only available groups"
- msgstr ""
- 
--#: dnf/cli/commands/group.py:331
-+#: dnf/cli/commands/group.py:328
- msgid "show also ID of groups"
- msgstr ""
- 
--#: dnf/cli/commands/group.py:333
-+#: dnf/cli/commands/group.py:330
- msgid "available subcommands: {} (default), {}"
- msgstr ""
- 
--#: dnf/cli/commands/group.py:337
-+#: dnf/cli/commands/group.py:334
- msgid "argument for group subcommand"
- msgstr ""
- 
--#: dnf/cli/commands/group.py:346
-+#: dnf/cli/commands/group.py:343
- #, python-format
- msgid "Invalid groups sub-command, use: %s."
- msgstr ""
- 
--#: dnf/cli/commands/group.py:403
-+#: dnf/cli/commands/group.py:398
- msgid "Unable to find a mandatory group package."
- msgstr ""
- 
-@@ -1272,69 +1238,90 @@ msgstr ""
- msgid "More than one argument given as transaction file name."
- msgstr ""
- 
--#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:126
-+#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:130
- msgid "No transaction ID or package name given."
- msgstr ""
- 
--#: dnf/cli/commands/history.py:138
-+#: dnf/cli/commands/history.py:142
- #, python-format
- msgid "You don't have access to the history DB: %s"
- msgstr ""
- 
--#: dnf/cli/commands/history.py:147
-+#: dnf/cli/commands/history.py:151
- #, python-format
- msgid ""
- "Cannot undo transaction %s, doing so would result in an inconsistent package "
- "database."
- msgstr ""
- 
--#: dnf/cli/commands/history.py:152
-+#: dnf/cli/commands/history.py:156
- #, python-format
- msgid ""
- "Cannot rollback transaction %s, doing so would result in an inconsistent "
- "package database."
- msgstr ""
- 
--#: dnf/cli/commands/history.py:222
-+#: dnf/cli/commands/history.py:175
-+msgid "No transaction ID given"
-+msgstr ""
-+
-+#: dnf/cli/commands/history.py:179
-+#, python-brace-format
-+msgid "Transaction ID \"{0}\" not found."
-+msgstr ""
-+
-+#: dnf/cli/commands/history.py:185
-+msgid "Found more than one transaction ID!"
-+msgstr ""
-+
-+#: dnf/cli/commands/history.py:203
-+#, python-format
-+msgid "Transaction history is incomplete, before %u."
-+msgstr ""
-+
-+#: dnf/cli/commands/history.py:205
-+#, python-format
-+msgid "Transaction history is incomplete, after %u."
-+msgstr ""
-+
-+#: dnf/cli/commands/history.py:256
-+msgid "No packages to list"
-+msgstr ""
-+
-+#: dnf/cli/commands/history.py:279
- msgid ""
- "Invalid transaction ID range definition '{}'.\n"
- "Use '<transaction-id>..<transaction-id>'."
- msgstr ""
- 
--#: dnf/cli/commands/history.py:226
-+#: dnf/cli/commands/history.py:283
- msgid ""
- "Can't convert '{}' to transaction ID.\n"
- "Use '<number>', 'last', 'last-<number>'."
- msgstr ""
- 
--#: dnf/cli/commands/history.py:255
-+#: dnf/cli/commands/history.py:312
- msgid "No transaction which manipulates package '{}' was found."
- msgstr ""
- 
--#: dnf/cli/commands/history.py:305
--#, python-brace-format
--msgid "Transaction ID \"{id}\" not found."
--msgstr ""
--
--#: dnf/cli/commands/history.py:313
-+#: dnf/cli/commands/history.py:357
- msgid "{} exists, overwrite?"
- msgstr ""
- 
--#: dnf/cli/commands/history.py:316
-+#: dnf/cli/commands/history.py:360
- msgid "Not overwriting {}, exiting."
- msgstr ""
- 
--#: dnf/cli/commands/history.py:323
-+#: dnf/cli/commands/history.py:367
- msgid "Transaction saved to {}."
- msgstr ""
- 
--#: dnf/cli/commands/history.py:326
-+#: dnf/cli/commands/history.py:370
- msgid "Error storing transaction: {}"
- msgstr ""
- 
--#: dnf/cli/commands/history.py:350
--msgid ""
--"Warning, the following problems occurred while replaying the transaction:"
-+#: dnf/cli/commands/history.py:386
-+msgid "Warning, the following problems occurred while running a transaction:"
- msgstr ""
- 
- #: dnf/cli/commands/install.py:47
-@@ -1354,7 +1341,7 @@ msgstr ""
- msgid "Not a valid rpm file path: %s"
- msgstr ""
- 
--#: dnf/cli/commands/install.py:167
-+#: dnf/cli/commands/install.py:166
- #, python-brace-format
- msgid "There are following alternatives for \"{0}\": {1}"
- msgstr ""
-@@ -1394,7 +1381,7 @@ msgid "%s marked as group installed."
- msgstr ""
- 
- #: dnf/cli/commands/mark.py:85 dnf/cli/commands/shell.py:129
--#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:279
-+#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:282
- msgid "Error:"
- msgstr ""
- 
-@@ -1450,42 +1437,46 @@ msgid "Package {} belongs to multiple modules, skipping"
- msgstr ""
- 
- #: dnf/cli/commands/module.py:277
-+msgid "switch a module to a stream and distrosync rpm packages"
-+msgstr ""
-+
-+#: dnf/cli/commands/module.py:299
- msgid "list modular packages"
- msgstr ""
- 
--#: dnf/cli/commands/module.py:292
-+#: dnf/cli/commands/module.py:314
- msgid "list packages belonging to a module"
- msgstr ""
- 
--#: dnf/cli/commands/module.py:327
-+#: dnf/cli/commands/module.py:349
- msgid "Interact with Modules."
- msgstr ""
- 
--#: dnf/cli/commands/module.py:340
-+#: dnf/cli/commands/module.py:362
- msgid "show only enabled modules"
- msgstr ""
- 
--#: dnf/cli/commands/module.py:343
-+#: dnf/cli/commands/module.py:365
- msgid "show only disabled modules"
- msgstr ""
- 
--#: dnf/cli/commands/module.py:346
-+#: dnf/cli/commands/module.py:368
- msgid "show only installed modules or packages"
- msgstr ""
- 
--#: dnf/cli/commands/module.py:349
-+#: dnf/cli/commands/module.py:371
- msgid "show profile content"
- msgstr ""
- 
--#: dnf/cli/commands/module.py:354
-+#: dnf/cli/commands/module.py:376
- msgid "remove all modular packages"
- msgstr ""
- 
--#: dnf/cli/commands/module.py:364
-+#: dnf/cli/commands/module.py:386
- msgid "Module specification"
- msgstr ""
- 
--#: dnf/cli/commands/module.py:386
-+#: dnf/cli/commands/module.py:408
- msgid "{} {} {}: too few arguments"
- msgstr ""
- 
-@@ -1960,22 +1951,22 @@ msgstr ""
- msgid "Keyword to search for"
- msgstr ""
- 
--#: dnf/cli/commands/search.py:61 dnf/cli/output.py:506
-+#: dnf/cli/commands/search.py:61 dnf/cli/output.py:460
- msgctxt "long"
- msgid "Name"
- msgstr ""
- 
--#: dnf/cli/commands/search.py:62 dnf/cli/output.py:559
-+#: dnf/cli/commands/search.py:62 dnf/cli/output.py:513
- msgctxt "long"
- msgid "Summary"
- msgstr ""
- 
--#: dnf/cli/commands/search.py:63 dnf/cli/output.py:569
-+#: dnf/cli/commands/search.py:63 dnf/cli/output.py:523
- msgctxt "long"
- msgid "Description"
- msgstr ""
- 
--#: dnf/cli/commands/search.py:64 dnf/cli/output.py:562
-+#: dnf/cli/commands/search.py:64 dnf/cli/output.py:516
- msgid "URL"
- msgstr ""
- 
-@@ -2087,16 +2078,16 @@ msgid ""
- "exit (or quit)           exit the shell"
- msgstr ""
- 
--#: dnf/cli/commands/shell.py:259
-+#: dnf/cli/commands/shell.py:262
- #, python-format
- msgid "Error: Cannot open %s for reading"
- msgstr ""
- 
--#: dnf/cli/commands/shell.py:281 dnf/cli/main.py:187
-+#: dnf/cli/commands/shell.py:284 dnf/cli/main.py:187
- msgid "Complete!"
- msgstr ""
- 
--#: dnf/cli/commands/shell.py:291
-+#: dnf/cli/commands/shell.py:294
- msgid "Leaving Shell"
- msgstr ""
- 
-@@ -2287,8 +2278,8 @@ msgstr ""
- msgid "Files"
- msgstr ""
- 
--#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1499
--#: dnf/cli/output.py:1772 dnf/cli/output.py:1774
-+#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1652
-+#: dnf/cli/output.py:1654 dnf/util.py:591
- msgid "Installed"
- msgstr ""
- 
-@@ -2609,13 +2600,13 @@ msgstr ""
- #. Translators: This is abbreviated 'Name'. Should be no longer
- #. than 12 characters. You can use the full version if it is short
- #. enough in your language.
--#: dnf/cli/output.py:505
-+#: dnf/cli/output.py:459
- msgctxt "short"
- msgid "Name"
- msgstr ""
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:511
-+#: dnf/cli/output.py:465
- msgid "Epoch"
- msgstr ""
- 
-@@ -2623,38 +2614,38 @@ msgstr ""
- #. use the full (unabbreviated) term 'Version' if you think that
- #. the translation to your language is not too long and will
- #. always fit to limited space.
--#: dnf/cli/output.py:512 dnf/cli/output.py:1335
-+#: dnf/cli/output.py:466 dnf/cli/output.py:1248
- msgctxt "short"
- msgid "Version"
- msgstr ""
- 
- #. Translators: This is the full (unabbreviated) term 'Version'.
--#: dnf/cli/output.py:513 dnf/cli/output.py:1337
-+#: dnf/cli/output.py:467 dnf/cli/output.py:1250
- msgctxt "long"
- msgid "Version"
- msgstr ""
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:516
-+#: dnf/cli/output.py:470
- msgid "Release"
- msgstr ""
- 
- #. Translators: This is abbreviated 'Architecture', used when
- #. we have not enough space to display the full word.
--#: dnf/cli/output.py:517 dnf/cli/output.py:1326
-+#: dnf/cli/output.py:471 dnf/cli/output.py:1239
- msgctxt "short"
- msgid "Arch"
- msgstr ""
- 
- #. Translators: This is the full word 'Architecture', used when
- #. we have enough space.
--#: dnf/cli/output.py:518 dnf/cli/output.py:1329
-+#: dnf/cli/output.py:472 dnf/cli/output.py:1242
- msgctxt "long"
- msgid "Architecture"
- msgstr ""
- 
- #. Translators: This is the full (unabbreviated) term 'Size'.
--#: dnf/cli/output.py:520 dnf/cli/output.py:1352
-+#: dnf/cli/output.py:474 dnf/cli/output.py:1265
- msgctxt "long"
- msgid "Size"
- msgstr ""
-@@ -2663,32 +2654,32 @@ msgstr ""
- #. not be longer than 5 characters. If the term 'Size' in your
- #. language is not longer than 5 characters then you can use it
- #. unabbreviated.
--#: dnf/cli/output.py:520 dnf/cli/output.py:1350
-+#: dnf/cli/output.py:474 dnf/cli/output.py:1263
- msgctxt "short"
- msgid "Size"
- msgstr ""
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:524
-+#: dnf/cli/output.py:478
- msgid "Source"
- msgstr ""
- 
- #. Translators: This is abbreviated 'Repository', used when
- #. we have not enough space to display the full word.
--#: dnf/cli/output.py:525 dnf/cli/output.py:1341
-+#: dnf/cli/output.py:479 dnf/cli/output.py:1254
- msgctxt "short"
- msgid "Repo"
- msgstr ""
- 
- #. Translators: This is the full word 'Repository', used when
- #. we have enough space.
--#: dnf/cli/output.py:526 dnf/cli/output.py:1344
-+#: dnf/cli/output.py:480 dnf/cli/output.py:1257
- msgctxt "long"
- msgid "Repository"
- msgstr ""
- 
- #. Translators: This message should be no longer than 12 chars.
--#: dnf/cli/output.py:533
-+#: dnf/cli/output.py:487
- msgid "From repo"
- msgstr ""
- 
-@@ -2696,324 +2687,320 @@ msgstr ""
- #. print(_("Committer   : %s") % ucd(pkg.committer))
- #. print(_("Committime  : %s") % time.ctime(pkg.committime))
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:539
-+#: dnf/cli/output.py:493
- msgid "Packager"
- msgstr ""
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:541
-+#: dnf/cli/output.py:495
- msgid "Buildtime"
- msgstr ""
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:545
-+#: dnf/cli/output.py:499
- msgid "Install time"
- msgstr ""
- 
- #. Translators: This message should be no longer than 12 chars.
--#: dnf/cli/output.py:554
-+#: dnf/cli/output.py:508
- msgid "Installed by"
- msgstr ""
- 
- #. Translators: This is abbreviated 'Summary'. Should be no longer
- #. than 12 characters. You can use the full version if it is short
- #. enough in your language.
--#: dnf/cli/output.py:558
-+#: dnf/cli/output.py:512
- msgctxt "short"
- msgid "Summary"
- msgstr ""
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:564
-+#: dnf/cli/output.py:518
- msgid "License"
- msgstr ""
- 
- #. Translators: This is abbreviated 'Description'. Should be no longer
- #. than 12 characters. You can use the full version if it is short
- #. enough in your language.
--#: dnf/cli/output.py:568
-+#: dnf/cli/output.py:522
- msgctxt "short"
- msgid "Description"
- msgstr ""
- 
--#: dnf/cli/output.py:695
--msgid "No packages to list"
--msgstr ""
--
--#: dnf/cli/output.py:706
-+#: dnf/cli/output.py:650
- msgid "y"
- msgstr ""
- 
--#: dnf/cli/output.py:706
-+#: dnf/cli/output.py:650
- msgid "yes"
- msgstr ""
- 
--#: dnf/cli/output.py:707
-+#: dnf/cli/output.py:651
- msgid "n"
- msgstr ""
- 
--#: dnf/cli/output.py:707
-+#: dnf/cli/output.py:651
- msgid "no"
- msgstr ""
- 
--#: dnf/cli/output.py:711
-+#: dnf/cli/output.py:655
- msgid "Is this ok [y/N]: "
- msgstr ""
- 
--#: dnf/cli/output.py:715
-+#: dnf/cli/output.py:659
- msgid "Is this ok [Y/n]: "
- msgstr ""
- 
--#: dnf/cli/output.py:795
-+#: dnf/cli/output.py:739
- #, python-format
- msgid "Group: %s"
- msgstr ""
- 
--#: dnf/cli/output.py:799
-+#: dnf/cli/output.py:743
- #, python-format
- msgid " Group-Id: %s"
- msgstr ""
- 
--#: dnf/cli/output.py:801 dnf/cli/output.py:840
-+#: dnf/cli/output.py:745 dnf/cli/output.py:784
- #, python-format
- msgid " Description: %s"
- msgstr ""
- 
--#: dnf/cli/output.py:803
-+#: dnf/cli/output.py:747
- #, python-format
- msgid " Language: %s"
- msgstr ""
- 
--#: dnf/cli/output.py:806
-+#: dnf/cli/output.py:750
- msgid " Mandatory Packages:"
- msgstr ""
- 
--#: dnf/cli/output.py:807
-+#: dnf/cli/output.py:751
- msgid " Default Packages:"
- msgstr ""
- 
--#: dnf/cli/output.py:808
-+#: dnf/cli/output.py:752
- msgid " Optional Packages:"
- msgstr ""
- 
--#: dnf/cli/output.py:809
-+#: dnf/cli/output.py:753
- msgid " Conditional Packages:"
- msgstr ""
- 
--#: dnf/cli/output.py:834
-+#: dnf/cli/output.py:778
- #, python-format
- msgid "Environment Group: %s"
- msgstr ""
- 
--#: dnf/cli/output.py:837
-+#: dnf/cli/output.py:781
- #, python-format
- msgid " Environment-Id: %s"
- msgstr ""
- 
--#: dnf/cli/output.py:843
-+#: dnf/cli/output.py:787
- msgid " Mandatory Groups:"
- msgstr ""
- 
--#: dnf/cli/output.py:844
-+#: dnf/cli/output.py:788
- msgid " Optional Groups:"
- msgstr ""
- 
--#: dnf/cli/output.py:865
-+#: dnf/cli/output.py:809
- msgid "Matched from:"
- msgstr ""
- 
--#: dnf/cli/output.py:879
-+#: dnf/cli/output.py:823
- #, python-format
- msgid "Filename    : %s"
- msgstr ""
- 
--#: dnf/cli/output.py:904
-+#: dnf/cli/output.py:848
- #, python-format
- msgid "Repo        : %s"
- msgstr ""
- 
--#: dnf/cli/output.py:913
-+#: dnf/cli/output.py:857
- msgid "Description : "
- msgstr ""
- 
--#: dnf/cli/output.py:917
-+#: dnf/cli/output.py:861
- #, python-format
- msgid "URL         : %s"
- msgstr ""
- 
--#: dnf/cli/output.py:921
-+#: dnf/cli/output.py:865
- #, python-format
- msgid "License     : %s"
- msgstr ""
- 
--#: dnf/cli/output.py:927
-+#: dnf/cli/output.py:871
- #, python-format
- msgid "Provide    : %s"
- msgstr ""
- 
--#: dnf/cli/output.py:947
-+#: dnf/cli/output.py:891
- #, python-format
- msgid "Other       : %s"
- msgstr ""
- 
--#: dnf/cli/output.py:996
-+#: dnf/cli/output.py:940
- msgid "There was an error calculating total download size"
- msgstr ""
- 
--#: dnf/cli/output.py:1002
-+#: dnf/cli/output.py:946
- #, python-format
- msgid "Total size: %s"
- msgstr ""
- 
--#: dnf/cli/output.py:1005
-+#: dnf/cli/output.py:949
- #, python-format
- msgid "Total download size: %s"
- msgstr ""
- 
--#: dnf/cli/output.py:1008
-+#: dnf/cli/output.py:952
- #, python-format
- msgid "Installed size: %s"
- msgstr ""
- 
--#: dnf/cli/output.py:1026
-+#: dnf/cli/output.py:970
- msgid "There was an error calculating installed size"
- msgstr ""
- 
--#: dnf/cli/output.py:1030
-+#: dnf/cli/output.py:974
- #, python-format
- msgid "Freed space: %s"
- msgstr ""
- 
--#: dnf/cli/output.py:1039
-+#: dnf/cli/output.py:983
- msgid "Marking packages as installed by the group:"
- msgstr ""
- 
--#: dnf/cli/output.py:1046
-+#: dnf/cli/output.py:990
- msgid "Marking packages as removed by the group:"
- msgstr ""
- 
--#: dnf/cli/output.py:1056
-+#: dnf/cli/output.py:1000
- msgid "Group"
- msgstr ""
- 
--#: dnf/cli/output.py:1056
-+#: dnf/cli/output.py:1000
- msgid "Packages"
- msgstr ""
- 
--#: dnf/cli/output.py:1133
-+#: dnf/cli/output.py:1046
- msgid "Installing group/module packages"
- msgstr ""
- 
--#: dnf/cli/output.py:1134
-+#: dnf/cli/output.py:1047
- msgid "Installing group packages"
- msgstr ""
- 
- #. TRANSLATORS: This is for a list of packages to be installed.
--#: dnf/cli/output.py:1138
-+#: dnf/cli/output.py:1051
- msgctxt "summary"
- msgid "Installing"
- msgstr ""
- 
- #. TRANSLATORS: This is for a list of packages to be upgraded.
--#: dnf/cli/output.py:1140
-+#: dnf/cli/output.py:1053
- msgctxt "summary"
- msgid "Upgrading"
- msgstr ""
- 
- #. TRANSLATORS: This is for a list of packages to be reinstalled.
--#: dnf/cli/output.py:1142
-+#: dnf/cli/output.py:1055
- msgctxt "summary"
- msgid "Reinstalling"
- msgstr ""
- 
--#: dnf/cli/output.py:1144
-+#: dnf/cli/output.py:1057
- msgid "Installing dependencies"
- msgstr ""
- 
--#: dnf/cli/output.py:1145
-+#: dnf/cli/output.py:1058
- msgid "Installing weak dependencies"
- msgstr ""
- 
- #. TRANSLATORS: This is for a list of packages to be removed.
--#: dnf/cli/output.py:1147
-+#: dnf/cli/output.py:1060
- msgid "Removing"
- msgstr ""
- 
--#: dnf/cli/output.py:1148
-+#: dnf/cli/output.py:1061
- msgid "Removing dependent packages"
- msgstr ""
- 
--#: dnf/cli/output.py:1149
-+#: dnf/cli/output.py:1062
- msgid "Removing unused dependencies"
- msgstr ""
- 
- #. TRANSLATORS: This is for a list of packages to be downgraded.
--#: dnf/cli/output.py:1151
-+#: dnf/cli/output.py:1064
- msgctxt "summary"
- msgid "Downgrading"
- msgstr ""
- 
--#: dnf/cli/output.py:1176
-+#: dnf/cli/output.py:1089
- msgid "Installing module profiles"
- msgstr ""
- 
--#: dnf/cli/output.py:1185
-+#: dnf/cli/output.py:1098
- msgid "Disabling module profiles"
- msgstr ""
- 
--#: dnf/cli/output.py:1194
-+#: dnf/cli/output.py:1107
- msgid "Enabling module streams"
- msgstr ""
- 
--#: dnf/cli/output.py:1202
-+#: dnf/cli/output.py:1115
- msgid "Switching module streams"
- msgstr ""
- 
--#: dnf/cli/output.py:1210
-+#: dnf/cli/output.py:1123
- msgid "Disabling modules"
- msgstr ""
- 
--#: dnf/cli/output.py:1218
-+#: dnf/cli/output.py:1131
- msgid "Resetting modules"
- msgstr ""
- 
--#: dnf/cli/output.py:1230
-+#: dnf/cli/output.py:1143
- msgid "Installing Environment Groups"
- msgstr ""
- 
--#: dnf/cli/output.py:1237
-+#: dnf/cli/output.py:1150
- msgid "Upgrading Environment Groups"
- msgstr ""
- 
--#: dnf/cli/output.py:1244
-+#: dnf/cli/output.py:1157
- msgid "Removing Environment Groups"
- msgstr ""
- 
--#: dnf/cli/output.py:1251
-+#: dnf/cli/output.py:1164
- msgid "Installing Groups"
- msgstr ""
- 
--#: dnf/cli/output.py:1258
-+#: dnf/cli/output.py:1171
- msgid "Upgrading Groups"
- msgstr ""
- 
--#: dnf/cli/output.py:1265
-+#: dnf/cli/output.py:1178
- msgid "Removing Groups"
- msgstr ""
- 
--#: dnf/cli/output.py:1281
-+#: dnf/cli/output.py:1194
- #, python-format
- msgid ""
- "Skipping packages with conflicts:\n"
- "(add '%s' to command line to force their upgrade)"
- msgstr ""
- 
--#: dnf/cli/output.py:1291
-+#: dnf/cli/output.py:1204
- #, python-format
- msgid "Skipping packages with broken dependencies%s"
- msgstr ""
- 
--#: dnf/cli/output.py:1295
-+#: dnf/cli/output.py:1208
- msgid " or part of a group"
- msgstr ""
- 
-@@ -3021,22 +3008,22 @@ msgstr ""
- #. use the full (unabbreviated) term 'Package' if you think that
- #. the translation to your language is not too long and will
- #. always fit to limited space.
--#: dnf/cli/output.py:1320
-+#: dnf/cli/output.py:1233
- msgctxt "short"
- msgid "Package"
- msgstr ""
- 
- #. Translators: This is the full (unabbreviated) term 'Package'.
--#: dnf/cli/output.py:1322
-+#: dnf/cli/output.py:1235
- msgctxt "long"
- msgid "Package"
- msgstr ""
- 
--#: dnf/cli/output.py:1371
-+#: dnf/cli/output.py:1284
- msgid "replacing"
- msgstr ""
- 
--#: dnf/cli/output.py:1378
-+#: dnf/cli/output.py:1291
- #, python-format
- msgid ""
- "\n"
-@@ -3045,289 +3032,273 @@ msgid ""
- msgstr ""
- 
- #. TODO: remove
--#: dnf/cli/output.py:1383 dnf/cli/output.py:1932 dnf/cli/output.py:1933
-+#: dnf/cli/output.py:1296 dnf/cli/output.py:1812 dnf/cli/output.py:1813
- msgid "Install"
- msgstr ""
- 
--#: dnf/cli/output.py:1387 dnf/cli/output.py:1941
-+#: dnf/cli/output.py:1300 dnf/cli/output.py:1821
- msgid "Upgrade"
- msgstr ""
- 
--#: dnf/cli/output.py:1388
-+#: dnf/cli/output.py:1301
- msgid "Remove"
- msgstr ""
- 
--#: dnf/cli/output.py:1390 dnf/cli/output.py:1939
-+#: dnf/cli/output.py:1303 dnf/cli/output.py:1819
- msgid "Downgrade"
- msgstr ""
- 
--#: dnf/cli/output.py:1391
-+#: dnf/cli/output.py:1304
- msgid "Skip"
- msgstr ""
- 
--#: dnf/cli/output.py:1400 dnf/cli/output.py:1416
-+#: dnf/cli/output.py:1313 dnf/cli/output.py:1329
- msgid "Package"
- msgid_plural "Packages"
- msgstr[0] ""
- msgstr[1] ""
- 
--#: dnf/cli/output.py:1418
-+#: dnf/cli/output.py:1331
- msgid "Dependent package"
- msgid_plural "Dependent packages"
- msgstr[0] ""
- msgstr[1] ""
- 
--#: dnf/cli/output.py:1497 dnf/cli/output.py:1773 dnf/cli/output.py:1942
--msgid "Upgraded"
--msgstr ""
--
--#: dnf/cli/output.py:1498 dnf/cli/output.py:1773 dnf/cli/output.py:1940
--msgid "Downgraded"
--msgstr ""
--
--#: dnf/cli/output.py:1503
--msgid "Reinstalled"
--msgstr ""
--
--#: dnf/cli/output.py:1504
--msgid "Skipped"
--msgstr ""
--
--#: dnf/cli/output.py:1505
--msgid "Removed"
--msgstr ""
--
--#: dnf/cli/output.py:1508
--msgid "Failed"
--msgstr ""
--
--#: dnf/cli/output.py:1559
-+#: dnf/cli/output.py:1439
- msgid "Total"
- msgstr ""
- 
--#: dnf/cli/output.py:1587
-+#: dnf/cli/output.py:1467
- msgid "<unset>"
- msgstr ""
- 
--#: dnf/cli/output.py:1588
-+#: dnf/cli/output.py:1468
- msgid "System"
- msgstr ""
- 
--#: dnf/cli/output.py:1638
-+#: dnf/cli/output.py:1518
- msgid "Command line"
- msgstr ""
- 
- #. TRANSLATORS: user names who executed transaction in history command output
--#: dnf/cli/output.py:1649
-+#: dnf/cli/output.py:1529
- msgid "User name"
- msgstr ""
- 
--#: dnf/cli/output.py:1651
-+#: dnf/cli/output.py:1531
- msgid "ID"
- msgstr ""
- 
--#: dnf/cli/output.py:1653
-+#: dnf/cli/output.py:1533
- msgid "Date and time"
- msgstr ""
- 
--#: dnf/cli/output.py:1654
-+#: dnf/cli/output.py:1534
- msgid "Action(s)"
- msgstr ""
- 
--#: dnf/cli/output.py:1655
-+#: dnf/cli/output.py:1535
- msgid "Altered"
- msgstr ""
- 
--#: dnf/cli/output.py:1698
-+#: dnf/cli/output.py:1578
- msgid "No transactions"
- msgstr ""
- 
--#: dnf/cli/output.py:1699 dnf/cli/output.py:1715
-+#: dnf/cli/output.py:1579 dnf/cli/output.py:1595
- msgid "Failed history info"
- msgstr ""
- 
--#: dnf/cli/output.py:1714
-+#: dnf/cli/output.py:1594
- msgid "No transaction ID, or package, given"
- msgstr ""
- 
--#: dnf/cli/output.py:1772
-+#: dnf/cli/output.py:1652
- msgid "Erased"
- msgstr ""
- 
--#: dnf/cli/output.py:1774
-+#: dnf/cli/output.py:1653 dnf/cli/output.py:1820 dnf/util.py:590
-+msgid "Downgraded"
-+msgstr ""
-+
-+#: dnf/cli/output.py:1653 dnf/cli/output.py:1822 dnf/util.py:589
-+msgid "Upgraded"
-+msgstr ""
-+
-+#: dnf/cli/output.py:1654
- msgid "Not installed"
- msgstr ""
- 
--#: dnf/cli/output.py:1775
-+#: dnf/cli/output.py:1655
- msgid "Newer"
- msgstr ""
- 
--#: dnf/cli/output.py:1775
-+#: dnf/cli/output.py:1655
- msgid "Older"
- msgstr ""
- 
--#: dnf/cli/output.py:1823 dnf/cli/output.py:1825
-+#: dnf/cli/output.py:1703 dnf/cli/output.py:1705
- msgid "Transaction ID :"
- msgstr ""
- 
--#: dnf/cli/output.py:1828
-+#: dnf/cli/output.py:1708
- msgid "Begin time     :"
- msgstr ""
- 
--#: dnf/cli/output.py:1831 dnf/cli/output.py:1833
-+#: dnf/cli/output.py:1711 dnf/cli/output.py:1713
- msgid "Begin rpmdb    :"
- msgstr ""
- 
--#: dnf/cli/output.py:1839
-+#: dnf/cli/output.py:1719
- #, python-format
- msgid "(%u seconds)"
- msgstr ""
- 
--#: dnf/cli/output.py:1841
-+#: dnf/cli/output.py:1721
- #, python-format
- msgid "(%u minutes)"
- msgstr ""
- 
--#: dnf/cli/output.py:1843
-+#: dnf/cli/output.py:1723
- #, python-format
- msgid "(%u hours)"
- msgstr ""
- 
--#: dnf/cli/output.py:1845
-+#: dnf/cli/output.py:1725
- #, python-format
- msgid "(%u days)"
- msgstr ""
- 
--#: dnf/cli/output.py:1846
-+#: dnf/cli/output.py:1726
- msgid "End time       :"
- msgstr ""
- 
--#: dnf/cli/output.py:1849 dnf/cli/output.py:1851
-+#: dnf/cli/output.py:1729 dnf/cli/output.py:1731
- msgid "End rpmdb      :"
- msgstr ""
- 
--#: dnf/cli/output.py:1858 dnf/cli/output.py:1860
-+#: dnf/cli/output.py:1738 dnf/cli/output.py:1740
- msgid "User           :"
- msgstr ""
- 
--#: dnf/cli/output.py:1864 dnf/cli/output.py:1871
-+#: dnf/cli/output.py:1744 dnf/cli/output.py:1751
- msgid "Aborted"
- msgstr ""
- 
--#: dnf/cli/output.py:1864 dnf/cli/output.py:1867 dnf/cli/output.py:1869
--#: dnf/cli/output.py:1871 dnf/cli/output.py:1873 dnf/cli/output.py:1875
-+#: dnf/cli/output.py:1744 dnf/cli/output.py:1747 dnf/cli/output.py:1749
-+#: dnf/cli/output.py:1751 dnf/cli/output.py:1753 dnf/cli/output.py:1755
- msgid "Return-Code    :"
- msgstr ""
- 
--#: dnf/cli/output.py:1867 dnf/cli/output.py:1875
-+#: dnf/cli/output.py:1747 dnf/cli/output.py:1755
- msgid "Success"
- msgstr ""
- 
--#: dnf/cli/output.py:1869
-+#: dnf/cli/output.py:1749
- msgid "Failures:"
- msgstr ""
- 
--#: dnf/cli/output.py:1873
-+#: dnf/cli/output.py:1753
- msgid "Failure:"
- msgstr ""
- 
--#: dnf/cli/output.py:1883 dnf/cli/output.py:1885
-+#: dnf/cli/output.py:1763 dnf/cli/output.py:1765
- msgid "Releasever     :"
- msgstr ""
- 
--#: dnf/cli/output.py:1890 dnf/cli/output.py:1892
-+#: dnf/cli/output.py:1770 dnf/cli/output.py:1772
- msgid "Command Line   :"
- msgstr ""
- 
--#: dnf/cli/output.py:1897 dnf/cli/output.py:1899
-+#: dnf/cli/output.py:1777 dnf/cli/output.py:1779
- msgid "Comment        :"
- msgstr ""
- 
--#: dnf/cli/output.py:1903
-+#: dnf/cli/output.py:1783
- msgid "Transaction performed with:"
- msgstr ""
- 
--#: dnf/cli/output.py:1912
-+#: dnf/cli/output.py:1792
- msgid "Packages Altered:"
- msgstr ""
- 
--#: dnf/cli/output.py:1918
-+#: dnf/cli/output.py:1798
- msgid "Scriptlet output:"
- msgstr ""
- 
--#: dnf/cli/output.py:1925
-+#: dnf/cli/output.py:1805
- msgid "Errors:"
- msgstr ""
- 
--#: dnf/cli/output.py:1934
-+#: dnf/cli/output.py:1814
- msgid "Dep-Install"
- msgstr ""
- 
--#: dnf/cli/output.py:1935
-+#: dnf/cli/output.py:1815
- msgid "Obsoleted"
- msgstr ""
- 
--#: dnf/cli/output.py:1936 dnf/transaction.py:84 dnf/transaction.py:85
-+#: dnf/cli/output.py:1816 dnf/transaction.py:84 dnf/transaction.py:85
- msgid "Obsoleting"
- msgstr ""
- 
--#: dnf/cli/output.py:1937
-+#: dnf/cli/output.py:1817
- msgid "Erase"
- msgstr ""
- 
--#: dnf/cli/output.py:1938
-+#: dnf/cli/output.py:1818
- msgid "Reinstall"
- msgstr ""
- 
--#: dnf/cli/output.py:2016
-+#: dnf/cli/output.py:1892
- #, python-format
- msgid "---> Package %s.%s %s will be installed"
- msgstr ""
- 
--#: dnf/cli/output.py:2018
-+#: dnf/cli/output.py:1894
- #, python-format
- msgid "---> Package %s.%s %s will be an upgrade"
- msgstr ""
- 
--#: dnf/cli/output.py:2020
-+#: dnf/cli/output.py:1896
- #, python-format
- msgid "---> Package %s.%s %s will be erased"
- msgstr ""
- 
--#: dnf/cli/output.py:2022
-+#: dnf/cli/output.py:1898
- #, python-format
- msgid "---> Package %s.%s %s will be reinstalled"
- msgstr ""
- 
--#: dnf/cli/output.py:2024
-+#: dnf/cli/output.py:1900
- #, python-format
- msgid "---> Package %s.%s %s will be a downgrade"
- msgstr ""
- 
--#: dnf/cli/output.py:2026
-+#: dnf/cli/output.py:1902
- #, python-format
- msgid "---> Package %s.%s %s will be obsoleting"
- msgstr ""
- 
--#: dnf/cli/output.py:2028
-+#: dnf/cli/output.py:1904
- #, python-format
- msgid "---> Package %s.%s %s will be upgraded"
- msgstr ""
- 
--#: dnf/cli/output.py:2030
-+#: dnf/cli/output.py:1906
- #, python-format
- msgid "---> Package %s.%s %s will be obsoleted"
- msgstr ""
- 
--#: dnf/cli/output.py:2039
-+#: dnf/cli/output.py:1915
- msgid "--> Starting dependency resolution"
- msgstr ""
- 
--#: dnf/cli/output.py:2044
-+#: dnf/cli/output.py:1919
- msgid "--> Finished dependency resolution"
- msgstr ""
- 
--#: dnf/cli/output.py:2058 dnf/crypto.py:132
-+#: dnf/cli/output.py:1933 dnf/crypto.py:132
- #, python-format
- msgid ""
- "Importing GPG key 0x%s:\n"
-@@ -3409,7 +3380,7 @@ msgstr ""
- msgid "Environment id '%s' does not exist."
- msgstr ""
- 
--#: dnf/comps.py:622 dnf/transaction_sr.py:443 dnf/transaction_sr.py:453
-+#: dnf/comps.py:622 dnf/transaction_sr.py:477 dnf/transaction_sr.py:487
- #, python-format
- msgid "Environment id '%s' is not installed."
- msgstr ""
-@@ -3516,6 +3487,11 @@ msgstr ""
- msgid "repo %s: imported key 0x%s."
- msgstr ""
- 
-+#: dnf/crypto.py:177
-+#, python-format
-+msgid "retrieving repo key for %s unencrypted from %s"
-+msgstr ""
-+
- #: dnf/db/group.py:293
- msgid ""
- "No available modular metadata for modular package '{}', it cannot be "
-@@ -3598,7 +3574,7 @@ msgid_plural "Modular dependency problems with Defaults:"
- msgstr[0] ""
- msgstr[1] ""
- 
--#: dnf/exceptions.py:131 dnf/module/module_base.py:686
-+#: dnf/exceptions.py:131 dnf/module/module_base.py:841
- msgid "Modular dependency problem:"
- msgid_plural "Modular dependency problems:"
- msgstr[0] ""
-@@ -3646,8 +3622,8 @@ msgid ""
- "Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled, [a]ctive"
- msgstr ""
- 
--#: dnf/module/module_base.py:54 dnf/module/module_base.py:421
--#: dnf/module/module_base.py:477 dnf/module/module_base.py:543
-+#: dnf/module/module_base.py:54 dnf/module/module_base.py:547
-+#: dnf/module/module_base.py:603 dnf/module/module_base.py:669
- msgid "Ignoring unnecessary profile: '{}/{}'"
- msgstr ""
- 
-@@ -3656,17 +3632,17 @@ msgstr ""
- msgid "All matches for argument '{0}' in module '{1}:{2}' are not active"
- msgstr ""
- 
--#: dnf/module/module_base.py:92
-+#: dnf/module/module_base.py:92 dnf/module/module_base.py:202
- #, python-brace-format
- msgid "Installing module '{0}' from Fail-Safe repository {1} is not allowed"
- msgstr ""
- 
--#: dnf/module/module_base.py:102
-+#: dnf/module/module_base.py:102 dnf/module/module_base.py:212
- msgid ""
- "Unable to match profile for argument {}. Available profiles for '{}:{}': {}"
- msgstr ""
- 
--#: dnf/module/module_base.py:106
-+#: dnf/module/module_base.py:106 dnf/module/module_base.py:216
- msgid "Unable to match profile for argument {}"
- msgstr ""
- 
-@@ -3682,40 +3658,54 @@ msgstr ""
- msgid "Default profile {} not available in module {}:{}"
- msgstr ""
- 
--#: dnf/module/module_base.py:142
-+#: dnf/module/module_base.py:142 dnf/module/module_base.py:245
- msgid "Installing module from Fail-Safe repository is not allowed"
- msgstr ""
- 
--#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
--#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
--#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
--#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
--msgid "Unable to resolve argument {}"
-+#: dnf/module/module_base.py:194
-+#, python-brace-format
-+msgid "No active matches for argument '{0}' in module '{1}:{2}'"
- msgstr ""
- 
--#: dnf/module/module_base.py:160
--msgid "No match for package {}"
-+#: dnf/module/module_base.py:226
-+#, python-brace-format
-+msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'"
-+msgstr ""
-+
-+#: dnf/module/module_base.py:265
-+msgid "No packages available to distrosync for package name '{}'"
- msgstr ""
- 
--#: dnf/module/module_base.py:204
-+#: dnf/module/module_base.py:308 dnf/module/module_base.py:452
-+#: dnf/module/module_base.py:477 dnf/module/module_base.py:496
-+#: dnf/module/module_base.py:543 dnf/module/module_base.py:599
-+#: dnf/module/module_base.py:665 dnf/module/module_base.py:827
-+msgid "Unable to resolve argument {}"
-+msgstr ""
-+
-+#: dnf/module/module_base.py:319
- #, python-brace-format
- msgid "Upgrading module '{0}' from Fail-Safe repository {1} is not allowed"
- msgstr ""
- 
--#: dnf/module/module_base.py:223 dnf/module/module_base.py:251
-+#: dnf/module/module_base.py:338 dnf/module/module_base.py:366
- msgid "Unable to match profile in argument {}"
- msgstr ""
- 
--#: dnf/module/module_base.py:231
-+#: dnf/module/module_base.py:346
- msgid "Upgrading module from Fail-Safe repository is not allowed"
- msgstr ""
- 
--#: dnf/module/module_base.py:367
-+#: dnf/module/module_base.py:500
- msgid ""
- "Only module name is required. Ignoring unneeded information in argument: '{}'"
- msgstr ""
- 
--#: dnf/package.py:298
-+#: dnf/module/module_base.py:828
-+msgid "No match for package {}"
-+msgstr ""
-+
-+#: dnf/package.py:333
- #, python-format
- msgid "%s: %s check failed: %s vs %s"
- msgstr ""
-@@ -3796,6 +3786,12 @@ msgstr ""
- msgid "Errors occurred during test transaction."
- msgstr ""
- 
-+#: dnf/sack.py:47
-+msgid ""
-+"allow_vendor_change is disabled. This option is currently not supported for "
-+"downgrade and distro-sync commands"
-+msgstr ""
-+
- #. TRANSLATORS: This is for a single package currently being downgraded.
- #: dnf/transaction.py:80
- msgctxt "currently"
-@@ -3842,160 +3838,183 @@ msgstr ""
- msgid "Preparing"
- msgstr ""
- 
--#: dnf/transaction_sr.py:60
-+#: dnf/transaction_sr.py:66
- #, python-brace-format
--msgid "Errors in \"{filename}\":"
-+msgid ""
-+"The following problems occurred while replaying the transaction from file "
-+"\"{filename}\":"
- msgstr ""
- 
--#: dnf/transaction_sr.py:70
--#, python-brace-format
--msgid "Error in \"{filename}\": {error}"
-+#: dnf/transaction_sr.py:68
-+msgid "The following problems occurred while running a transaction:"
- msgstr ""
- 
--#: dnf/transaction_sr.py:87
-+#: dnf/transaction_sr.py:89
- #, python-brace-format
- msgid "Invalid major version \"{major}\", number expected."
- msgstr ""
- 
--#: dnf/transaction_sr.py:95
-+#: dnf/transaction_sr.py:97
- #, python-brace-format
- msgid "Invalid minor version \"{minor}\", number expected."
- msgstr ""
- 
--#: dnf/transaction_sr.py:101
-+#: dnf/transaction_sr.py:103
- #, python-brace-format
- msgid ""
- "Incompatible major version \"{major}\", supported major version is "
- "\"{major_supp}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:244
-+#: dnf/transaction_sr.py:224
-+msgid ""
-+"Conflicting TransactionReplay arguments have been specified: filename, data"
-+msgstr ""
-+
-+#: dnf/transaction_sr.py:265
- #, python-brace-format
- msgid "Unexpected type of \"{id}\", {exp} expected."
- msgstr ""
- 
--#: dnf/transaction_sr.py:250
-+#: dnf/transaction_sr.py:271
- #, python-brace-format
- msgid "Missing key \"{key}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:263
-+#: dnf/transaction_sr.py:285
- #, python-brace-format
- msgid "Missing object key \"{key}\" in an rpm."
- msgstr ""
- 
--#: dnf/transaction_sr.py:267
-+#: dnf/transaction_sr.py:289
- #, python-brace-format
- msgid ""
- "Unexpected value of package reason \"{reason}\" for rpm nevra \"{nevra}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:275
-+#: dnf/transaction_sr.py:297
- #, python-brace-format
- msgid "Cannot parse NEVRA for package \"{nevra}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:286
-+#: dnf/transaction_sr.py:321
- #, python-brace-format
- msgid "Cannot find rpm nevra \"{nevra}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:301
-+#: dnf/transaction_sr.py:336
- #, python-brace-format
- msgid "Package \"{na}\" is already installed for action \"{action}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:311
-+#: dnf/transaction_sr.py:345
- #, python-brace-format
- msgid ""
- "Package nevra \"{nevra}\" not available in repositories for action "
- "\"{action}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:322
-+#: dnf/transaction_sr.py:356
- #, python-brace-format
- msgid "Package nevra \"{nevra}\" not installed for action \"{action}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:336
-+#: dnf/transaction_sr.py:370
- #, python-brace-format
- msgid ""
- "Unexpected value of package action \"{action}\" for rpm nevra \"{nevra}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:343
-+#: dnf/transaction_sr.py:377
- #, python-format
- msgid "Group id '%s' is not available."
- msgstr ""
- 
--#: dnf/transaction_sr.py:364
-+#: dnf/transaction_sr.py:398
- #, python-brace-format
- msgid "Missing object key \"{key}\" in groups.packages."
- msgstr ""
- 
--#: dnf/transaction_sr.py:377 dnf/transaction_sr.py:387
-+#: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421
- #, python-format
- msgid "Group id '%s' is not installed."
- msgstr ""
- 
--#: dnf/transaction_sr.py:398
-+#: dnf/transaction_sr.py:432
- #, python-format
- msgid "Environment id '%s' is not available."
- msgstr ""
- 
--#: dnf/transaction_sr.py:422
-+#: dnf/transaction_sr.py:456
- #, python-brace-format
- msgid ""
- "Invalid value \"{group_type}\" of environments.groups.group_type, only "
- "\"mandatory\" or \"optional\" is supported."
- msgstr ""
- 
--#: dnf/transaction_sr.py:430
-+#: dnf/transaction_sr.py:464
- #, python-brace-format
- msgid "Missing object key \"{key}\" in environments.groups."
- msgstr ""
- 
--#: dnf/transaction_sr.py:508
-+#: dnf/transaction_sr.py:542
- #, python-brace-format
- msgid "Unexpected value of group action \"{action}\" for group \"{group}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:513
-+#: dnf/transaction_sr.py:547
- #, python-brace-format
- msgid "Missing object key \"{key}\" in a group."
- msgstr ""
- 
--#: dnf/transaction_sr.py:537
-+#: dnf/transaction_sr.py:571
- #, python-brace-format
- msgid ""
- "Unexpected value of environment action \"{action}\" for environment "
- "\"{env}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:542
-+#: dnf/transaction_sr.py:576
- #, python-brace-format
- msgid "Missing object key \"{key}\" in an environment."
- msgstr ""
- 
--#: dnf/transaction_sr.py:581
-+#: dnf/transaction_sr.py:615
- #, python-brace-format
- msgid ""
- "Package nevra \"{nevra}\", which is not present in the transaction file, was "
- "pulled into the transaction."
- msgstr ""
- 
--#: dnf/util.py:391 dnf/util.py:393
-+#: dnf/util.py:393 dnf/util.py:395
- msgid "Problem"
- msgstr ""
- 
--#: dnf/util.py:444
-+#: dnf/util.py:446
- msgid "TransactionItem not found for key: {}"
- msgstr ""
- 
--#: dnf/util.py:454
-+#: dnf/util.py:456
- msgid "TransactionSWDBItem not found for key: {}"
- msgstr ""
- 
--#: dnf/util.py:457
-+#: dnf/util.py:459
- msgid "Errors occurred during transaction."
- msgstr ""
-+
-+#: dnf/util.py:595
-+msgid "Reinstalled"
-+msgstr ""
-+
-+#: dnf/util.py:596
-+msgid "Skipped"
-+msgstr ""
-+
-+#: dnf/util.py:597
-+msgid "Removed"
-+msgstr ""
-+
-+#: dnf/util.py:600
-+msgid "Failed"
-+msgstr ""
-+
-diff --git a/po/fr.po b/po/fr.po
-index 4e883335..bf1ccb6a 100644
---- a/po/fr.po
-+++ b/po/fr.po
-@@ -18,20 +18,21 @@
- # Ludek Janda <ljanda@redhat.com>, 2018. #zanata
- # Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>, 2019. #zanata, 2020.
- # Julien Humbert <julroy67@gmail.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-09-12 11:29+0000\n"
--"Last-Translator: Julien Humbert <julroy67@gmail.com>\n"
--"Language-Team: French <https://translate.fedoraproject.org/projects/dnf/dnf-master/fr/>\n"
-+"POT-Creation-Date: 2021-02-22 09:22+0100\n"
-+"PO-Revision-Date: 2021-03-08 10:29+0000\n"
-+"Last-Translator: Sundeep Anand <suanand@redhat.com>\n"
-+"Language-Team: French <https://translate.fedoraproject.org/projects/dnf/dnf-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.2.2\n"
-+"X-Generator: Weblate 4.5.1\n"
- 
- #: dnf/automatic/emitter.py:32
- #, python-format
-@@ -88,7 +89,7 @@ msgstr "Valeur de configuration inconnue : %s=%s dans %s ; %s"
- msgid "Unknown configuration option: %s = %s in %s"
- msgstr "Option de configuration inconnue : %s=%s dans %s"
- 
--#: dnf/automatic/main.py:237 dnf/cli/cli.py:299
-+#: dnf/automatic/main.py:237 dnf/cli/cli.py:304
- msgid "GPG check FAILED"
- msgstr "La vérification GPG a ÉCHOUÉ"
- 
-@@ -101,9 +102,10 @@ msgid "Started dnf-automatic."
- msgstr "dnf-automatic démarré."
- 
- #: dnf/automatic/main.py:308
--#, python-format
--msgid "Sleep for %s seconds"
--msgstr "Mise en sommeil pendant %s secondes"
-+msgid "Sleep for {} second"
-+msgid_plural "Sleep for {} seconds"
-+msgstr[0] "Mise en sommeil pendant {} seconde"
-+msgstr[1] "Mise en sommeil pendant {} secondes"
- 
- #: dnf/automatic/main.py:315
- msgid "System is off-line."
-@@ -115,7 +117,7 @@ msgstr "Le système est hors-ligne."
- msgid "Error: %s"
- msgstr "Erreur : %s"
- 
--#: dnf/base.py:146
-+#: dnf/base.py:146 dnf/base.py:472 dnf/base.py:474
- msgid "loading repo '{}' failure: {}"
- msgstr "Erreur lors du chargement du dépôt « {} » : {}"
- 
-@@ -123,76 +125,76 @@ msgstr "Erreur lors du chargement du dépôt « {} » : {}"
- msgid "Loading repository '{}' has failed"
- msgstr "Échec du chargement du dépôt « {} »"
- 
--#: dnf/base.py:320
-+#: dnf/base.py:322
- msgid "Metadata timer caching disabled when running on metered connection."
- msgstr ""
- "Mise en cache temporisée des métadonnées désactivée lors du fonctionnement "
- "sur connexion limitée."
- 
--#: dnf/base.py:325
-+#: dnf/base.py:327
- msgid "Metadata timer caching disabled when running on a battery."
- msgstr ""
- "Mise en cache temporisée des métadonnées désactivée lors du fonctionnement "
- "sur batterie."
- 
--#: dnf/base.py:330
-+#: dnf/base.py:332
- msgid "Metadata timer caching disabled."
- msgstr "Mise en cache temporisée des métadonnées désactivée."
- 
--#: dnf/base.py:335
-+#: dnf/base.py:337
- msgid "Metadata cache refreshed recently."
- msgstr "Cache des métadonnées mis à jour récemment."
- 
--#: dnf/base.py:341 dnf/cli/commands/__init__.py:91
-+#: dnf/base.py:343 dnf/cli/commands/__init__.py:91
- msgid "There are no enabled repositories in \"{}\"."
- msgstr "Il n’y a pas de dépôts activés dans « {} »."
- 
--#: dnf/base.py:348
-+#: dnf/base.py:350
- #, python-format
- msgid "%s: will never be expired and will not be refreshed."
- msgstr "%s : n’expirera jamais et ne sera pas réinitialisé."
- 
--#: dnf/base.py:350
-+#: dnf/base.py:352
- #, python-format
- msgid "%s: has expired and will be refreshed."
- msgstr "%s : a expiré et sera réinitialisé."
- 
- #. expires within the checking period:
--#: dnf/base.py:354
-+#: dnf/base.py:356
- #, python-format
- msgid "%s: metadata will expire after %d seconds and will be refreshed now"
- msgstr ""
- "%s : métadonnées expireront après %d secondes et seront réinitialisées "
- "maintenant"
- 
--#: dnf/base.py:358
-+#: dnf/base.py:360
- #, python-format
- msgid "%s: will expire after %d seconds."
- msgstr "%s : expireront après %d secondes."
- 
- #. performs the md sync
--#: dnf/base.py:364
-+#: dnf/base.py:366
- msgid "Metadata cache created."
- msgstr "Cache des métadonnées créé."
- 
--#: dnf/base.py:397
-+#: dnf/base.py:399 dnf/base.py:466
- #, python-format
- msgid "%s: using metadata from %s."
- msgstr "%s : utilisation des métadonnées depuis le %s."
- 
--#: dnf/base.py:409
-+#: dnf/base.py:411 dnf/base.py:479
- #, python-format
- msgid "Ignoring repositories: %s"
- msgstr "Dépôts ignorés : %s"
- 
--#: dnf/base.py:412
-+#: dnf/base.py:414
- #, python-format
- msgid "Last metadata expiration check: %s ago on %s."
- msgstr ""
- "Dernière vérification de l’expiration des métadonnées effectuée il y a %s le"
- " %s."
- 
--#: dnf/base.py:443
-+#: dnf/base.py:507
- msgid ""
- "The downloaded packages were saved in cache until the next successful "
- "transaction."
-@@ -200,59 +202,59 @@ msgstr ""
- "Les paquets téléchargés ont été mis en cache jusqu’à la prochaine "
- "transaction réussie."
- 
--#: dnf/base.py:445
-+#: dnf/base.py:509
- #, python-format
- msgid "You can remove cached packages by executing '%s'."
- msgstr "Vous pouvez supprimer les paquets en cache en exécutant « %s »."
- 
--#: dnf/base.py:535
-+#: dnf/base.py:599
- #, python-format
- msgid "Invalid tsflag in config file: %s"
- msgstr "tsflag invalide dans le fichier de configuration : %s"
- 
--#: dnf/base.py:591
-+#: dnf/base.py:655
- #, python-format
- msgid "Failed to add groups file for repository: %s - %s"
- msgstr "Échec d’ajout du fichier de groupes pour le dépôt : %s - %s"
- 
--#: dnf/base.py:823
-+#: dnf/base.py:887
- msgid "Running transaction check"
- msgstr "Test de la transaction"
- 
--#: dnf/base.py:831
-+#: dnf/base.py:895
- msgid "Error: transaction check vs depsolve:"
- msgstr ""
- "Erreur : vérification de transaction contre résolution des dépendances :"
- 
--#: dnf/base.py:837
-+#: dnf/base.py:901
- msgid "Transaction check succeeded."
- msgstr "La vérification de la transaction a réussi."
- 
--#: dnf/base.py:840
-+#: dnf/base.py:904
- msgid "Running transaction test"
- msgstr "Lancement de la transaction de test"
- 
--#: dnf/base.py:850 dnf/base.py:992
-+#: dnf/base.py:914 dnf/base.py:1065
- msgid "RPM: {}"
- msgstr "RPM : {}"
- 
--#: dnf/base.py:851
-+#: dnf/base.py:915
- msgid "Transaction test error:"
- msgstr "Erreur de la transaction de test :"
- 
--#: dnf/base.py:862
-+#: dnf/base.py:926
- msgid "Transaction test succeeded."
- msgstr "Transaction de test réussie."
- 
--#: dnf/base.py:883
-+#: dnf/base.py:947
- msgid "Running transaction"
- msgstr "Exécution de la transaction"
- 
--#: dnf/base.py:911
-+#: dnf/base.py:984
- msgid "Disk Requirements:"
- msgstr "Besoins en espace disque :"
- 
--#: dnf/base.py:914
-+#: dnf/base.py:987
- #, python-brace-format
- msgid "At least {0}MB more space needed on the {1} filesystem."
- msgid_plural "At least {0}MB more space needed on the {1} filesystem."
-@@ -263,40 +265,40 @@ msgstr[1] ""
- "Au moins {0} Mio supplémentaires sont nécessaires sur le système de fichiers"
- " {1}."
- 
--#: dnf/base.py:921
-+#: dnf/base.py:994
- msgid "Error Summary"
- msgstr "Résumé des erreurs"
- 
--#: dnf/base.py:947
-+#: dnf/base.py:1020
- #, python-brace-format
- msgid "RPMDB altered outside of {prog}."
- msgstr "RPMDB modifié en dehors de {prog}."
- 
--#: dnf/base.py:993 dnf/base.py:1001
-+#: dnf/base.py:1066 dnf/base.py:1074
- msgid "Could not run transaction."
- msgstr "Impossible d’exécuter la transaction."
- 
--#: dnf/base.py:996
-+#: dnf/base.py:1069
- msgid "Transaction couldn't start:"
- msgstr "La transaction n’a pas pu démarrer :"
- 
--#: dnf/base.py:1010
-+#: dnf/base.py:1083
- #, python-format
- msgid "Failed to remove transaction file %s"
- msgstr "Échec de la suppression du fichier de transaction %s"
- 
--#: dnf/base.py:1092
-+#: dnf/base.py:1165
- msgid "Some packages were not downloaded. Retrying."
- msgstr "Certains paquets n’ont pas été téléchargés. Nouvel essai."
- 
--#: dnf/base.py:1122
-+#: dnf/base.py:1195
- #, python-format
- msgid "Delta RPMs reduced %.1f MB of updates to %.1f MB (%d.1%% saved)"
- msgstr ""
- "Les Delta RPM ont réduit la taille des mises à jour de %.1f Mio à %.1f Mio "
- "(%d.1%% économisés)"
- 
--#: dnf/base.py:1125
-+#: dnf/base.py:1198
- #, python-format
- msgid ""
- "Failed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)"
-@@ -304,77 +306,77 @@ msgstr ""
- "L’échec des Delta RPMs ont fait augmenter les %.1f MO de mises à jour de "
- "%.1f MB (%d.1%% gaspillés)"
- 
--#: dnf/base.py:1167
-+#: dnf/base.py:1240
- msgid "Cannot add local packages, because transaction job already exists"
- msgstr ""
- "Impossible d’ajouter des paquets locaux, car un travail de transaction "
- "existe déjà"
- 
--#: dnf/base.py:1181
-+#: dnf/base.py:1254
- msgid "Could not open: {}"
- msgstr "Impossible d’ouvrir : {}"
- 
--#: dnf/base.py:1219
-+#: dnf/base.py:1292
- #, python-format
- msgid "Public key for %s is not installed"
- msgstr "La clé publique pour %s n’est pas installée"
- 
--#: dnf/base.py:1223
-+#: dnf/base.py:1296
- #, python-format
- msgid "Problem opening package %s"
- msgstr "Problème à l’ouverture du paquet %s"
- 
--#: dnf/base.py:1231
-+#: dnf/base.py:1304
- #, python-format
- msgid "Public key for %s is not trusted"
- msgstr "La clé publique pour %s n’est pas de confiance"
- 
--#: dnf/base.py:1235
-+#: dnf/base.py:1308
- #, python-format
- msgid "Package %s is not signed"
- msgstr "Le paquet %s n’est pas signé"
- 
--#: dnf/base.py:1265
-+#: dnf/base.py:1338
- #, python-format
- msgid "Cannot remove %s"
- msgstr "Impossible de supprimer %s"
- 
--#: dnf/base.py:1269
-+#: dnf/base.py:1342
- #, python-format
- msgid "%s removed"
- msgstr "%s supprimé"
- 
--#: dnf/base.py:1549
-+#: dnf/base.py:1622
- msgid "No match for group package \"{}\""
- msgstr "Aucune correspondance pour le paquet du groupe « {} »"
- 
--#: dnf/base.py:1635
-+#: dnf/base.py:1708
- #, python-format
- msgid "Adding packages from group '%s': %s"
- msgstr "Ajout de paquets en provenance du groupe « %s » : %s"
- 
--#: dnf/base.py:1658 dnf/cli/cli.py:219 dnf/cli/commands/__init__.py:442
-+#: dnf/base.py:1731 dnf/cli/cli.py:220 dnf/cli/commands/__init__.py:442
- #: dnf/cli/commands/__init__.py:499 dnf/cli/commands/__init__.py:592
- #: dnf/cli/commands/__init__.py:641 dnf/cli/commands/install.py:80
- #: dnf/cli/commands/install.py:103 dnf/cli/commands/install.py:110
- msgid "Nothing to do."
- msgstr "Rien à faire."
- 
--#: dnf/base.py:1676
-+#: dnf/base.py:1749
- msgid "No groups marked for removal."
- msgstr "Aucun groupe marqué pour suppression."
- 
--#: dnf/base.py:1710
-+#: dnf/base.py:1783
- msgid "No group marked for upgrade."
- msgstr "Aucun groupe marqué pour mise à jour."
- 
--#: dnf/base.py:1925
-+#: dnf/base.py:1997
- #, python-format
- msgid "Package %s not installed, cannot downgrade it."
- msgstr "Le paquet %s n’est pas installé, impossible de le rétrograder."
- 
--#: dnf/base.py:1927 dnf/base.py:1946 dnf/base.py:1959 dnf/base.py:1980
--#: dnf/base.py:2029 dnf/base.py:2037 dnf/base.py:2172 dnf/cli/cli.py:411
-+#: dnf/base.py:1999 dnf/base.py:2018 dnf/base.py:2031 dnf/base.py:2052
-+#: dnf/base.py:2101 dnf/base.py:2109 dnf/base.py:2243 dnf/cli/cli.py:416
- #: dnf/cli/commands/__init__.py:425 dnf/cli/commands/__init__.py:482
- #: dnf/cli/commands/__init__.py:586 dnf/cli/commands/__init__.py:633
- #: dnf/cli/commands/__init__.py:711 dnf/cli/commands/install.py:147
-@@ -384,30 +386,30 @@ msgstr "Le paquet %s n’est pas installé, impossible de le rétrograder."
- msgid "No match for argument: %s"
- msgstr "Aucune correspondance pour l’argument : %s"
- 
--#: dnf/base.py:1934
-+#: dnf/base.py:2006
- #, python-format
- msgid "Package %s of lower version already installed, cannot downgrade it."
- msgstr ""
- "Le paquet %s est déjà installé dans une version inférieure, impossible de le"
- " rétrograder."
- 
--#: dnf/base.py:1957
-+#: dnf/base.py:2029
- #, python-format
- msgid "Package %s not installed, cannot reinstall it."
- msgstr "Le paquet %s n’est pas installé, impossible de le réinstaller."
- 
--#: dnf/base.py:1972
-+#: dnf/base.py:2044
- #, python-format
- msgid "File %s is a source package and cannot be updated, ignoring."
- msgstr ""
- "Le fichier %s est un paquet source et ne peut pas être mis à jour, ignoré."
- 
--#: dnf/base.py:1978
-+#: dnf/base.py:2050
- #, python-format
- msgid "Package %s not installed, cannot update it."
- msgstr "Le paquet %s n’est pas installé, impossible de le mettre à jour."
- 
--#: dnf/base.py:1987
-+#: dnf/base.py:2059
- #, python-format
- msgid ""
- "The same or higher version of %s is already installed, cannot update it."
-@@ -415,127 +417,113 @@ msgstr ""
- "La même une ou version supérieure de %s est déjà installée, mise à jour "
- "impossible."
- 
--#: dnf/base.py:2026 dnf/cli/commands/reinstall.py:81
-+#: dnf/base.py:2098 dnf/cli/commands/reinstall.py:81
- #, python-format
- msgid "Package %s available, but not installed."
- msgstr "Le paquet %s est disponible mais n’est pas installé."
- 
--#: dnf/base.py:2032
-+#: dnf/base.py:2104
- #, python-format
- msgid "Package %s available, but installed for different architecture."
- msgstr ""
- "Le paquet %s est disponible mais est installé pour une autre architecture."
- 
--#: dnf/base.py:2057 dnf/base.py:2250 dnf/cli/cli.py:668 dnf/cli/cli.py:699
-+#: dnf/base.py:2129
- #, python-format
- msgid "No package %s installed."
- msgstr "Aucun paquet %s installé."
- 
--#: dnf/base.py:2075 dnf/cli/commands/install.py:136
-+#: dnf/base.py:2147 dnf/cli/commands/install.py:136
- #: dnf/cli/commands/remove.py:133
- #, python-format
- msgid "Not a valid form: %s"
- msgstr "Format invalide : %s"
- 
--#: dnf/base.py:2091 dnf/cli/commands/__init__.py:681
--#: dnf/cli/commands/remove.py:163
-+#: dnf/base.py:2162 dnf/cli/commands/__init__.py:681
-+#: dnf/cli/commands/remove.py:162
- msgid "No packages marked for removal."
- msgstr "Aucun paquet marqué pour suppression."
- 
--#: dnf/base.py:2179 dnf/cli/cli.py:422
-+#: dnf/base.py:2250 dnf/cli/cli.py:427
- #, python-format
- msgid "Packages for argument %s available, but not installed."
- msgstr "Les paquets pour le paramètre %s sont disponibles mais pas installés."
- 
--#: dnf/base.py:2184
-+#: dnf/base.py:2255
- #, python-format
- msgid "Package %s of lowest version already installed, cannot downgrade it."
- msgstr ""
- "La version la plus ancienne du paquet %s est déjà installée, impossible de "
- "le rétrograder."
- 
--#: dnf/base.py:2242
--msgid "Action not handled: {}"
--msgstr "Action non gérée : {}"
--
--#: dnf/base.py:2256 dnf/cli/cli.py:419 dnf/cli/cli.py:673 dnf/cli/cli.py:703
--#: dnf/cli/commands/group.py:400 dnf/cli/commands/history.py:169
--#, python-format
--msgid "No package %s available."
--msgstr "Aucun paquet %s n’est disponible."
--
--#: dnf/base.py:2269
--msgid "no package matched"
--msgstr "aucun paquet correspondant"
--
--#: dnf/base.py:2290
-+#: dnf/base.py:2302
- msgid "No security updates needed, but {} update available"
- msgstr ""
- "Aucune mise à jour de sécurité n’est nécessaire, mais la mise à jour {} est "
- "disponible"
- 
--#: dnf/base.py:2292
-+#: dnf/base.py:2304
- msgid "No security updates needed, but {} updates available"
- msgstr ""
- "Aucune mise à jour de sécurité n’est nécessaire, mais les mises à jour {} "
- "sont disponibles"
- 
--#: dnf/base.py:2296
-+#: dnf/base.py:2308
- msgid "No security updates needed for \"{}\", but {} update available"
- msgstr ""
- "Aucune mise à jour de sécurité n’est nécessaire pour « {} », mais la mise à "
- "jour {} est disponible"
- 
--#: dnf/base.py:2298
-+#: dnf/base.py:2310
- msgid "No security updates needed for \"{}\", but {} updates available"
- msgstr ""
- "Aucune mise à jour de sécurité n’est nécessaire pour « {} », mais les mises "
- "à jour {} sont disponibles"
- 
- #. raise an exception, because po.repoid is not in self.repos
--#: dnf/base.py:2319
-+#: dnf/base.py:2331
- #, python-format
- msgid "Unable to retrieve a key for a commandline package: %s"
- msgstr ""
- "Impossible de récupérer une clé pour un paquet en ligne de commande : %s"
- 
--#: dnf/base.py:2327
-+#: dnf/base.py:2339
- #, python-format
- msgid ". Failing package is: %s"
- msgstr ". Le paquet en erreur est : %s"
- 
--#: dnf/base.py:2328
-+#: dnf/base.py:2340
- #, python-format
- msgid "GPG Keys are configured as: %s"
- msgstr "Les clés GPG sont configurées comme : %s"
- 
--#: dnf/base.py:2340
-+#: dnf/base.py:2352
- #, python-format
- msgid "GPG key at %s (0x%s) is already installed"
- msgstr "La clé GPG %s (0x%s) est déjà installée"
- 
--#: dnf/base.py:2373
-+#: dnf/base.py:2385
- msgid "The key has been approved."
- msgstr "La clef a été approuvée."
- 
--#: dnf/base.py:2376
-+#: dnf/base.py:2388
- msgid "The key has been rejected."
- msgstr "La clef a été rejetée."
- 
--#: dnf/base.py:2409
-+#: dnf/base.py:2421
- #, python-format
- msgid "Key import failed (code %d)"
- msgstr "L’import de la clé a échoué (code %d)"
- 
--#: dnf/base.py:2411
-+#: dnf/base.py:2423
- msgid "Key imported successfully"
- msgstr "La clé a bien été importée"
- 
--#: dnf/base.py:2415
-+#: dnf/base.py:2427
- msgid "Didn't install any keys"
- msgstr "Toutes les clés n’ont pas été installées"
- 
--#: dnf/base.py:2418
-+#: dnf/base.py:2430
- #, python-format
- msgid ""
- "The GPG keys listed for the \"%s\" repository are already installed but they are not correct for this package.\n"
-@@ -544,28 +532,28 @@ msgstr ""
- "Les clés GPG listées pour le dépôt « %s » sont déjà installées mais sont incorrectes pour ce paquet.\n"
- "Vérifiez que les URL des clés pour ce dépôt soient correctes."
- 
--#: dnf/base.py:2429
-+#: dnf/base.py:2441
- msgid "Import of key(s) didn't help, wrong key(s)?"
- msgstr ""
- "L’import de la ou des clés n’a pas résolu le problème, clés incorrectes ?"
- 
--#: dnf/base.py:2482
-+#: dnf/base.py:2494
- msgid "  * Maybe you meant: {}"
- msgstr "  * Peut-être vouliez-vous dire : {}"
- 
--#: dnf/base.py:2514
-+#: dnf/base.py:2526
- msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum"
- msgstr "Le paquet \"{}\" du dépôt local \"{}\" a une somme de contrôle incorrecte"
- 
--#: dnf/base.py:2517
-+#: dnf/base.py:2529
- msgid "Some packages from local repository have incorrect checksum"
- msgstr "Certains paquets du dépôt local ont une somme de contrôle incorrecte"
- 
--#: dnf/base.py:2520
-+#: dnf/base.py:2532
- msgid "Package \"{}\" from repository \"{}\" has incorrect checksum"
- msgstr "Le paquet \"{}\" du dépôt \"{}\" a une somme de contrôle incorrecte"
- 
--#: dnf/base.py:2523
-+#: dnf/base.py:2535
- msgid ""
- "Some packages have invalid cache, but cannot be downloaded due to \"--"
- "cacheonly\" option"
-@@ -573,29 +561,29 @@ msgstr ""
- "Certains paquets ont un cache invalide, mais ne peuvent pas être téléchargés"
- " à cause de l’option « --cacheonly »"
- 
--#: dnf/base.py:2541 dnf/base.py:2561
-+#: dnf/base.py:2553 dnf/base.py:2573
- msgid "No match for argument"
- msgstr "Aucune correspondance pour le paramètre"
- 
--#: dnf/base.py:2549 dnf/base.py:2569
-+#: dnf/base.py:2561 dnf/base.py:2581
- msgid "All matches were filtered out by exclude filtering for argument"
- msgstr ""
- "Toutes les correspondances ont été filtrées en excluant le filtrage pour "
- "l’argument"
- 
--#: dnf/base.py:2551
-+#: dnf/base.py:2563
- msgid "All matches were filtered out by modular filtering for argument"
- msgstr ""
- "Toutes les correspondances ont été filtrées par filtrage modulaire pour les "
- "arguments"
- 
--#: dnf/base.py:2567
-+#: dnf/base.py:2579
- msgid "All matches were installed from a different repository for argument"
- msgstr ""
- "Toutes les correspondances ont été installées à partir d’un dépôt différent "
- "pour le paramètre"
- 
--#: dnf/base.py:2583
-+#: dnf/base.py:2626
- #, python-format
- msgid "Package %s is already installed."
- msgstr "Le paquet %s est déjà installé."
-@@ -616,8 +604,8 @@ msgstr "La lecture du fichier « %s » a échoué : %s"
- msgid "Cannot read file \"%s\": %s"
- msgstr "Impossible de lire le fichier « %s » : %s"
- 
--#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:902
--#: dnf/cli/cli.py:906 dnf/cli/commands/alias.py:108
-+#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:803
-+#: dnf/cli/cli.py:807 dnf/cli/commands/alias.py:108
- #, python-format
- msgid "Config error: %s"
- msgstr "Erreur de configuration : %s"
-@@ -650,7 +638,7 @@ msgstr ""
- "Le résulta de l’opération sera le basculement du flux« {1} » du module « {0}"
- " » vers le flux« {2} »"
- 
--#: dnf/cli/cli.py:172
-+#: dnf/cli/cli.py:173
- #, python-brace-format
- msgid ""
- "It is not possible to switch enabled streams of a module.\n"
-@@ -659,12 +647,12 @@ msgstr ""
- "Il n’est pas possible de basculer les flux actifs d’un module.\n"
- "Il et recommandé de retirer tout contenu installé par le module, et de réinitialiser le mode en utilisant la commande « {prog} module reset <nom_du_module> ». Après la réinitialisation, vous pouvez installer les autres flux."
- 
--#: dnf/cli/cli.py:210
-+#: dnf/cli/cli.py:211
- #, python-brace-format
- msgid "{prog} will only download packages for the transaction."
- msgstr "{prog} ne téléchargera que les paquets pour la transaction."
- 
--#: dnf/cli/cli.py:213
-+#: dnf/cli/cli.py:214
- #, python-brace-format
- msgid ""
- "{prog} will only download packages, install gpg keys, and check the "
-@@ -673,23 +661,23 @@ msgstr ""
- "{prog} ne téléchargera que les paquets, installera les clefs GPG et "
- "vérifiera la transaction."
- 
--#: dnf/cli/cli.py:217
-+#: dnf/cli/cli.py:218
- msgid "Operation aborted."
- msgstr "Opération avortée."
- 
--#: dnf/cli/cli.py:224
-+#: dnf/cli/cli.py:225
- msgid "Downloading Packages:"
- msgstr "Téléchargement des paquets :"
- 
--#: dnf/cli/cli.py:230
-+#: dnf/cli/cli.py:231
- msgid "Error downloading packages:"
- msgstr "Erreur de téléchargement des paquets :"
- 
--#: dnf/cli/cli.py:258
-+#: dnf/cli/cli.py:263
- msgid "Transaction failed"
- msgstr "La transaction a échoué"
- 
--#: dnf/cli/cli.py:281
-+#: dnf/cli/cli.py:286
- msgid ""
- "Refusing to automatically import keys when running unattended.\n"
- "Use \"-y\" to override."
-@@ -697,91 +685,70 @@ msgstr ""
- "Refus de l’importation automatique des clés lors d’une exécution sans surveillance.\n"
- "Utilisez l’option « -y » pour passer outre."
- 
--#: dnf/cli/cli.py:331
-+#: dnf/cli/cli.py:336
- msgid "Changelogs for {}"
- msgstr "Changements pour {}"
- 
--#: dnf/cli/cli.py:364 dnf/cli/cli.py:505 dnf/cli/cli.py:511
-+#: dnf/cli/cli.py:369 dnf/cli/cli.py:510 dnf/cli/cli.py:516
- msgid "Obsoleting Packages"
- msgstr "Passage de paquets en obsolètes"
- 
--#: dnf/cli/cli.py:393
-+#: dnf/cli/cli.py:398
- msgid "No packages marked for distribution synchronization."
- msgstr "Aucun paquet marqué pour la synchronisation de la distribution."
- 
--#: dnf/cli/cli.py:428
-+#: dnf/cli/cli.py:424 dnf/cli/commands/group.py:395
-+#, python-format
-+msgid "No package %s available."
-+msgstr "Aucun paquet %s n’est disponible."
-+
-+#: dnf/cli/cli.py:433
- msgid "No packages marked for downgrade."
- msgstr "Aucun paquet n’a été marqué pour passer à une version antérieure."
- 
--#: dnf/cli/cli.py:479
-+#: dnf/cli/cli.py:484
- msgid "Installed Packages"
- msgstr "Paquets installés"
- 
--#: dnf/cli/cli.py:487
-+#: dnf/cli/cli.py:492
- msgid "Available Packages"
- msgstr "Paquets disponibles"
- 
--#: dnf/cli/cli.py:491
-+#: dnf/cli/cli.py:496
- msgid "Autoremove Packages"
- msgstr "Supprime des paquets automatiquement"
- 
--#: dnf/cli/cli.py:493
-+#: dnf/cli/cli.py:498
- msgid "Extra Packages"
- msgstr "Paquets supplémentaires"
- 
--#: dnf/cli/cli.py:497
-+#: dnf/cli/cli.py:502
- msgid "Available Upgrades"
- msgstr "Mises à jour disponibles"
- 
--#: dnf/cli/cli.py:513
-+#: dnf/cli/cli.py:518
- msgid "Recently Added Packages"
- msgstr "Paquets récemment ajoutés"
- 
--#: dnf/cli/cli.py:518
-+#: dnf/cli/cli.py:522
- msgid "No matching Packages to list"
- msgstr "Aucun paquet correspondant à lister"
- 
--#: dnf/cli/cli.py:599
-+#: dnf/cli/cli.py:603
- msgid "No Matches found"
- msgstr "Aucune correspondance trouvée"
- 
--#: dnf/cli/cli.py:609
--msgid "No transaction ID given"
--msgstr "Aucun identifiant de transaction n’a été fourni"
--
--#: dnf/cli/cli.py:614
--msgid "Not found given transaction ID"
--msgstr "L’identifiant de transaction fourni est introuvable"
--
--#: dnf/cli/cli.py:623
--msgid "Found more than one transaction ID!"
--msgstr "Plus d’un identifiant de transaction ont été trouvés !"
--
--#: dnf/cli/cli.py:640
--#, python-format
--msgid "Transaction history is incomplete, before %u."
--msgstr "L’historique des transactions est incomplet, avant %u."
--
--#: dnf/cli/cli.py:642
--#, python-format
--msgid "Transaction history is incomplete, after %u."
--msgstr "L’historique des transactions est incomplet, après %u."
--
--#: dnf/cli/cli.py:689
--msgid "Undoing transaction {}, from {}"
--msgstr "Révocation de lla transaction {}, de {}"
--
--#: dnf/cli/cli.py:769 dnf/cli/commands/shell.py:237
-+#: dnf/cli/cli.py:670 dnf/cli/commands/shell.py:237
- #, python-format
- msgid "Unknown repo: '%s'"
- msgstr "Dépôt inconnu : « %s »"
- 
--#: dnf/cli/cli.py:783
-+#: dnf/cli/cli.py:684
- #, python-format
- msgid "No repository match: %s"
- msgstr "Aucun dépôt ne correspond à %s"
- 
--#: dnf/cli/cli.py:817
-+#: dnf/cli/cli.py:718
- msgid ""
- "This command has to be run with superuser privileges (under the root user on"
- " most systems)."
-@@ -789,12 +756,12 @@ msgstr ""
- "Cette commande doit être exécutée avec les privilèges super-utilisateur "
- "(sous l’utilisateur root sur la plupart des systèmes)."
- 
--#: dnf/cli/cli.py:847
-+#: dnf/cli/cli.py:748
- #, python-format
- msgid "No such command: %s. Please use %s --help"
- msgstr "Aucune commande telle que : %s. Veuillez utiliser %s --help"
- 
--#: dnf/cli/cli.py:850
-+#: dnf/cli/cli.py:751
- #, python-format, python-brace-format
- msgid ""
- "It could be a {PROG} plugin command, try: \"{prog} install 'dnf-"
-@@ -803,7 +770,7 @@ msgstr ""
- "Cela est peut-être une commande d’un module supplémentaire de {PROG}, "
- "essayez : « {prog} install 'dnf-command(%s)' »"
- 
--#: dnf/cli/cli.py:854
-+#: dnf/cli/cli.py:755
- #, python-brace-format
- msgid ""
- "It could be a {prog} plugin command, but loading of plugins is currently "
-@@ -812,7 +779,7 @@ msgstr ""
- "Cela est peut-être une commande d’un module supplémentaire de {prog}, mais "
- "le chargement de modules supplémentaires est actuellement désactivé."
- 
--#: dnf/cli/cli.py:912
-+#: dnf/cli/cli.py:813
- msgid ""
- "--destdir or --downloaddir must be used with --downloadonly or download or "
- "system-upgrade command."
-@@ -820,7 +787,7 @@ msgstr ""
- "--destdir ou --downloaddir doit être utilisé avec la commande --downloadonly"
- " ou download ou system-upgrade command."
- 
--#: dnf/cli/cli.py:918
-+#: dnf/cli/cli.py:819
- msgid ""
- "--enable, --set-enabled and --disable, --set-disabled must be used with "
- "config-manager command."
-@@ -828,7 +795,7 @@ msgstr ""
- "--enable, --set-enabled et --disable, --set-disabled doit être utilisé avec "
- "la commande config-manager."
- 
--#: dnf/cli/cli.py:1000
-+#: dnf/cli/cli.py:901
- msgid ""
- "Warning: Enforcing GPG signature check globally as per active RPM security "
- "policy (see 'gpgcheck' in dnf.conf(5) for how to squelch this message)"
-@@ -837,11 +804,11 @@ msgstr ""
- "politique de sécurité RPM active (voir « gpgcheck » dans dnf.conf(5) pour "
- "savoir comment interpréter ce message)"
- 
--#: dnf/cli/cli.py:1020
-+#: dnf/cli/cli.py:921
- msgid "Config file \"{}\" does not exist"
- msgstr "Le fichier de configuration \"{}\" n’existe pas"
- 
--#: dnf/cli/cli.py:1040
-+#: dnf/cli/cli.py:941
- msgid ""
- "Unable to detect release version (use '--releasever' to specify release "
- "version)"
-@@ -849,28 +816,28 @@ msgstr ""
- "Impossible de détecter le numéro de version (utilisez « --releasever » pour "
- "spécifier une version)"
- 
--#: dnf/cli/cli.py:1127 dnf/cli/commands/repoquery.py:471
-+#: dnf/cli/cli.py:1028 dnf/cli/commands/repoquery.py:471
- msgid "argument {}: not allowed with argument {}"
- msgstr "paramètre {} : non autorisé avec le paramètre {}"
- 
--#: dnf/cli/cli.py:1134
-+#: dnf/cli/cli.py:1035
- #, python-format
- msgid "Command \"%s\" already defined"
- msgstr "Commande « %s » déjà définie"
- 
--#: dnf/cli/cli.py:1154
-+#: dnf/cli/cli.py:1055
- msgid "Excludes in dnf.conf: "
- msgstr "Exclut dans dnf.conf : "
- 
--#: dnf/cli/cli.py:1157
-+#: dnf/cli/cli.py:1058
- msgid "Includes in dnf.conf: "
- msgstr "Inclut dans dnf.conf : "
- 
--#: dnf/cli/cli.py:1160
-+#: dnf/cli/cli.py:1061
- msgid "Excludes in repo "
- msgstr "Exclut dans dépôt "
- 
--#: dnf/cli/cli.py:1163
-+#: dnf/cli/cli.py:1064
- msgid "Includes in repo "
- msgstr "Inclut dans dépôt "
- 
-@@ -929,7 +896,7 @@ msgid "show all packages (default)"
- msgstr "affiche tous les paquets (par défaut)"
- 
- #: dnf/cli/commands/__init__.py:171 dnf/cli/commands/__init__.py:743
--#: dnf/cli/commands/module.py:351
-+#: dnf/cli/commands/module.py:373
- msgid "show only available packages"
- msgstr "affiche uniquement les paquets disponibles"
- 
-@@ -1260,78 +1227,78 @@ msgstr "affiche ou utilise les informations des groupes"
- msgid "No group data available for configured repositories."
- msgstr "Aucune donnée sur les groupes disponibles pour les dépôts configurés."
- 
--#: dnf/cli/commands/group.py:129
-+#: dnf/cli/commands/group.py:126
- #, python-format
- msgid "Warning: Group %s does not exist."
- msgstr "Attention : le groupe %s n’existe pas."
- 
--#: dnf/cli/commands/group.py:170
-+#: dnf/cli/commands/group.py:167
- msgid "Warning: No groups match:"
- msgstr "Attention : aucun groupe ne correspond à :"
- 
--#: dnf/cli/commands/group.py:182 dnf/cli/commands/group.py:193
--#: dnf/cli/output.py:1226
-+#: dnf/cli/commands/group.py:179 dnf/cli/commands/group.py:190
-+#: dnf/cli/output.py:1139
- msgid "<name-unset>"
- msgstr "<name-unset>"
- 
--#: dnf/cli/commands/group.py:199
-+#: dnf/cli/commands/group.py:196
- msgid "Available Environment Groups:"
- msgstr "Groupes d’environnements disponibles :"
- 
--#: dnf/cli/commands/group.py:201
-+#: dnf/cli/commands/group.py:198
- msgid "Installed Environment Groups:"
- msgstr "Groupes d’environnements installés :"
- 
--#: dnf/cli/commands/group.py:208 dnf/cli/commands/group.py:294
-+#: dnf/cli/commands/group.py:205 dnf/cli/commands/group.py:291
- msgid "Installed Groups:"
- msgstr "Groupes installés :"
- 
--#: dnf/cli/commands/group.py:215 dnf/cli/commands/group.py:301
-+#: dnf/cli/commands/group.py:212 dnf/cli/commands/group.py:298
- msgid "Installed Language Groups:"
- msgstr "Groupes de langues installés :"
- 
--#: dnf/cli/commands/group.py:225 dnf/cli/commands/group.py:308
-+#: dnf/cli/commands/group.py:222 dnf/cli/commands/group.py:305
- msgid "Available Groups:"
- msgstr "Groupes disponibles :"
- 
--#: dnf/cli/commands/group.py:232 dnf/cli/commands/group.py:315
-+#: dnf/cli/commands/group.py:229 dnf/cli/commands/group.py:312
- msgid "Available Language Groups:"
- msgstr "Groupes de langues disponibles :"
- 
--#: dnf/cli/commands/group.py:322
-+#: dnf/cli/commands/group.py:319
- msgid "include optional packages from group"
- msgstr "inclure les paquets optionnels du groupe"
- 
--#: dnf/cli/commands/group.py:325
-+#: dnf/cli/commands/group.py:322
- msgid "show also hidden groups"
- msgstr "affiche également les groupes cachés"
- 
--#: dnf/cli/commands/group.py:327
-+#: dnf/cli/commands/group.py:324
- msgid "show only installed groups"
- msgstr "affiche seulement les groupes installés"
- 
--#: dnf/cli/commands/group.py:329
-+#: dnf/cli/commands/group.py:326
- msgid "show only available groups"
- msgstr "affiche uniquement les groupes disponibles"
- 
--#: dnf/cli/commands/group.py:331
-+#: dnf/cli/commands/group.py:328
- msgid "show also ID of groups"
- msgstr "affiche également les ID des groupes"
- 
--#: dnf/cli/commands/group.py:333
-+#: dnf/cli/commands/group.py:330
- msgid "available subcommands: {} (default), {}"
- msgstr "sous-commandes disponibles : {} (par défaut), {}"
- 
--#: dnf/cli/commands/group.py:337
-+#: dnf/cli/commands/group.py:334
- msgid "argument for group subcommand"
- msgstr "paramètre pour la sous-commande group"
- 
--#: dnf/cli/commands/group.py:346
-+#: dnf/cli/commands/group.py:343
- #, python-format
- msgid "Invalid groups sub-command, use: %s."
- msgstr "Sous-commande de groupes invalide, utilisez : %s."
- 
--#: dnf/cli/commands/group.py:403
-+#: dnf/cli/commands/group.py:398
- msgid "Unable to find a mandatory group package."
- msgstr "Impossible de trouver un paquet obligatoire du groupe."
- 
-@@ -1385,16 +1352,16 @@ msgstr "Pas de transaction ou de nom de fichier fourni."
- msgid "More than one argument given as transaction file name."
- msgstr "Plus d’un argument donné comme nom de fichier de transaction."
- 
--#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:126
-+#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:130
- msgid "No transaction ID or package name given."
- msgstr "Pas d’identifiant de transaction ou de nom de paquet fourni."
- 
--#: dnf/cli/commands/history.py:138
-+#: dnf/cli/commands/history.py:142
- #, python-format
- msgid "You don't have access to the history DB: %s"
- msgstr "Vous n’avez pas accès à la base de données de l’historique : %s"
- 
--#: dnf/cli/commands/history.py:147
-+#: dnf/cli/commands/history.py:151
- #, python-format
- msgid ""
- "Cannot undo transaction %s, doing so would result in an inconsistent package"
-@@ -1403,7 +1370,7 @@ msgstr ""
- "Impossible de défaire la transaction %s ; cela aboutirait à une base de "
- "données des paquets incohérente."
- 
--#: dnf/cli/commands/history.py:152
-+#: dnf/cli/commands/history.py:156
- #, python-format
- msgid ""
- "Cannot rollback transaction %s, doing so would result in an inconsistent "
-@@ -1412,7 +1379,34 @@ msgstr ""
- "Impossible de défaire la transaction %s ; cela aboutirait à une base de "
- "données des paquets incohérente."
- 
--#: dnf/cli/commands/history.py:222
-+#: dnf/cli/commands/history.py:175
-+msgid "No transaction ID given"
-+msgstr "Aucun identifiant de transaction n’a été fourni"
-+
-+#: dnf/cli/commands/history.py:179
-+#, python-brace-format
-+msgid "Transaction ID \"{0}\" not found."
-+msgstr "ID de transaction \"{0}\" introuvable."
-+
-+#: dnf/cli/commands/history.py:185
-+msgid "Found more than one transaction ID!"
-+msgstr "Plus d’un identifiant de transaction ont été trouvés !"
-+
-+#: dnf/cli/commands/history.py:203
-+#, python-format
-+msgid "Transaction history is incomplete, before %u."
-+msgstr "L’historique des transactions est incomplet, avant %u."
-+
-+#: dnf/cli/commands/history.py:205
-+#, python-format
-+msgid "Transaction history is incomplete, after %u."
-+msgstr "L’historique des transactions est incomplet, après %u."
-+
-+#: dnf/cli/commands/history.py:256
-+msgid "No packages to list"
-+msgstr "Aucun paquet à lister"
-+
-+#: dnf/cli/commands/history.py:279
- msgid ""
- "Invalid transaction ID range definition '{}'.\n"
- "Use '<transaction-id>..<transaction-id>'."
-@@ -1420,7 +1414,7 @@ msgstr ""
- "La définition de la plage d’identifiants de transaction est invalide « {} ».\n"
- "Utilisez « <transaction-id>..<transaction-id> »."
- 
--#: dnf/cli/commands/history.py:226
-+#: dnf/cli/commands/history.py:283
- msgid ""
- "Can't convert '{}' to transaction ID.\n"
- "Use '<number>', 'last', 'last-<number>'."
-@@ -1428,37 +1422,31 @@ msgstr ""
- "Impossible de convertir « {} » à ID transaction.\n"
- "Utiliser « <number>», « last », « last-<number> »."
- 
--#: dnf/cli/commands/history.py:255
-+#: dnf/cli/commands/history.py:312
- msgid "No transaction which manipulates package '{}' was found."
- msgstr "Aucune transaction manipulant le paquet « {} » n’a été trouvée."
- 
--#: dnf/cli/commands/history.py:305
--#, python-brace-format
--msgid "Transaction ID \"{id}\" not found."
--msgstr "ID de Transaction « {id} » non trouvé."
--
--#: dnf/cli/commands/history.py:313
-+#: dnf/cli/commands/history.py:357
- msgid "{} exists, overwrite?"
- msgstr "{} existe, l’écraser ?"
- 
--#: dnf/cli/commands/history.py:316
-+#: dnf/cli/commands/history.py:360
- msgid "Not overwriting {}, exiting."
- msgstr "{} non écrasé, sortie."
- 
--#: dnf/cli/commands/history.py:323
-+#: dnf/cli/commands/history.py:367
- msgid "Transaction saved to {}."
- msgstr "Transaction enregistrée vers {}."
- 
--#: dnf/cli/commands/history.py:326
-+#: dnf/cli/commands/history.py:370
- msgid "Error storing transaction: {}"
- msgstr "Erreur lors du stockage de la transaction : {}"
- 
--#: dnf/cli/commands/history.py:350
--msgid ""
--"Warning, the following problems occurred while replaying the transaction:"
-+#: dnf/cli/commands/history.py:386
-+msgid "Warning, the following problems occurred while running a transaction:"
- msgstr ""
--"Attention, les problèmes suivants sont survenus lors de la relecture de la "
--"transaction :"
-+"Attention, les problèmes suivants sont survenus lors de l'exécution d'une "
-+"transaction :"
- 
- #: dnf/cli/commands/install.py:47
- msgid "install a package or packages on your system"
-@@ -1477,7 +1465,7 @@ msgstr "Impossible de trouver une correspondance"
- msgid "Not a valid rpm file path: %s"
- msgstr "Chemin du fichier RPM invalide : %s"
- 
--#: dnf/cli/commands/install.py:167
-+#: dnf/cli/commands/install.py:166
- #, python-brace-format
- msgid "There are following alternatives for \"{0}\": {1}"
- msgstr "Il existe les alternatives suivantes pour \"{0}\" : {1}"
-@@ -1522,7 +1510,7 @@ msgid "%s marked as group installed."
- msgstr "%s marqué comme étant installé par un groupe."
- 
- #: dnf/cli/commands/mark.py:85 dnf/cli/commands/shell.py:129
--#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:279
-+#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:282
- msgid "Error:"
- msgstr "Erreur :"
- 
-@@ -1580,42 +1568,46 @@ msgid "Package {} belongs to multiple modules, skipping"
- msgstr "Le paquet {} appartient à de multiples modules, ignorer"
- 
- #: dnf/cli/commands/module.py:277
-+msgid "switch a module to a stream and distrosync rpm packages"
-+msgstr "passer un module à un flux et à des paquets de rpm de distrosync"
-+
-+#: dnf/cli/commands/module.py:299
- msgid "list modular packages"
- msgstr "dresser une liste des paquets modulaires"
- 
--#: dnf/cli/commands/module.py:292
-+#: dnf/cli/commands/module.py:314
- msgid "list packages belonging to a module"
- msgstr "dresser une liste des paquets appartenant à un module"
- 
--#: dnf/cli/commands/module.py:327
-+#: dnf/cli/commands/module.py:349
- msgid "Interact with Modules."
- msgstr "Interagit avec les modules."
- 
--#: dnf/cli/commands/module.py:340
-+#: dnf/cli/commands/module.py:362
- msgid "show only enabled modules"
- msgstr "n’affiche que les modules activés"
- 
--#: dnf/cli/commands/module.py:343
-+#: dnf/cli/commands/module.py:365
- msgid "show only disabled modules"
- msgstr "n’affiche que les modules désactivés"
- 
--#: dnf/cli/commands/module.py:346
-+#: dnf/cli/commands/module.py:368
- msgid "show only installed modules or packages"
- msgstr "affiche uniquement les paquets ou modules installés"
- 
--#: dnf/cli/commands/module.py:349
-+#: dnf/cli/commands/module.py:371
- msgid "show profile content"
- msgstr "affiche le contenu du profil"
- 
--#: dnf/cli/commands/module.py:354
-+#: dnf/cli/commands/module.py:376
- msgid "remove all modular packages"
- msgstr "Supprimer les paquets modulaires"
- 
--#: dnf/cli/commands/module.py:364
-+#: dnf/cli/commands/module.py:386
- msgid "Module specification"
- msgstr "Caractéristique de module"
- 
--#: dnf/cli/commands/module.py:386
-+#: dnf/cli/commands/module.py:408
- msgid "{} {} {}: too few arguments"
- msgstr "{} {} {} : trop peu de paramètres"
- 
-@@ -2133,22 +2125,22 @@ msgstr "MOTCLEF"
- msgid "Keyword to search for"
- msgstr "Mot-clef à chercher"
- 
--#: dnf/cli/commands/search.py:61 dnf/cli/output.py:506
-+#: dnf/cli/commands/search.py:61 dnf/cli/output.py:460
- msgctxt "long"
- msgid "Name"
- msgstr "Nom"
- 
--#: dnf/cli/commands/search.py:62 dnf/cli/output.py:559
-+#: dnf/cli/commands/search.py:62 dnf/cli/output.py:513
- msgctxt "long"
- msgid "Summary"
- msgstr "Résumé"
- 
--#: dnf/cli/commands/search.py:63 dnf/cli/output.py:569
-+#: dnf/cli/commands/search.py:63 dnf/cli/output.py:523
- msgctxt "long"
- msgid "Description"
- msgstr "Description"
- 
--#: dnf/cli/commands/search.py:64 dnf/cli/output.py:562
-+#: dnf/cli/commands/search.py:64 dnf/cli/output.py:516
- msgid "URL"
- msgstr "URL"
- 
-@@ -2291,16 +2283,16 @@ msgstr ""
- "run                      résoud et exécute l’ensemble de transactions\n"
- "exit (ou quit)           quitte l’interpréteur de commandes"
- 
--#: dnf/cli/commands/shell.py:259
-+#: dnf/cli/commands/shell.py:262
- #, python-format
- msgid "Error: Cannot open %s for reading"
- msgstr "Erreur : %s n’a pu être ouvert pour lecture"
- 
--#: dnf/cli/commands/shell.py:281 dnf/cli/main.py:187
-+#: dnf/cli/commands/shell.py:284 dnf/cli/main.py:187
- msgid "Complete!"
- msgstr "Terminé !"
- 
--#: dnf/cli/commands/shell.py:291
-+#: dnf/cli/commands/shell.py:294
- msgid "Leaving Shell"
- msgstr "Abandon de l’interpréteur de commandes"
- 
-@@ -2497,8 +2489,8 @@ msgstr "Criticité"
- msgid "Files"
- msgstr "Fichiers"
- 
--#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1499
--#: dnf/cli/output.py:1772 dnf/cli/output.py:1774
-+#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1652
-+#: dnf/cli/output.py:1654 dnf/util.py:591
- msgid "Installed"
- msgstr "Installé"
- 
-@@ -2862,13 +2854,13 @@ msgstr "Impossible d’encoder l’argument « %s » : %s"
- #. Translators: This is abbreviated 'Name'. Should be no longer
- #. than 12 characters. You can use the full version if it is short
- #. enough in your language.
--#: dnf/cli/output.py:505
-+#: dnf/cli/output.py:459
- msgctxt "short"
- msgid "Name"
- msgstr "Nom"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:511
-+#: dnf/cli/output.py:465
- msgid "Epoch"
- msgstr "Époque"
- 
-@@ -2876,38 +2868,38 @@ msgstr "Époque"
- #. use the full (unabbreviated) term 'Version' if you think that
- #. the translation to your language is not too long and will
- #. always fit to limited space.
--#: dnf/cli/output.py:512 dnf/cli/output.py:1335
-+#: dnf/cli/output.py:466 dnf/cli/output.py:1248
- msgctxt "short"
- msgid "Version"
- msgstr "Version"
- 
- #. Translators: This is the full (unabbreviated) term 'Version'.
--#: dnf/cli/output.py:513 dnf/cli/output.py:1337
-+#: dnf/cli/output.py:467 dnf/cli/output.py:1250
- msgctxt "long"
- msgid "Version"
- msgstr "Version"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:516
-+#: dnf/cli/output.py:470
- msgid "Release"
- msgstr "Publication"
- 
- #. Translators: This is abbreviated 'Architecture', used when
- #. we have not enough space to display the full word.
--#: dnf/cli/output.py:517 dnf/cli/output.py:1326
-+#: dnf/cli/output.py:471 dnf/cli/output.py:1239
- msgctxt "short"
- msgid "Arch"
- msgstr "Architecture"
- 
- #. Translators: This is the full word 'Architecture', used when
- #. we have enough space.
--#: dnf/cli/output.py:518 dnf/cli/output.py:1329
-+#: dnf/cli/output.py:472 dnf/cli/output.py:1242
- msgctxt "long"
- msgid "Architecture"
- msgstr "Architecture"
- 
- #. Translators: This is the full (unabbreviated) term 'Size'.
--#: dnf/cli/output.py:520 dnf/cli/output.py:1352
-+#: dnf/cli/output.py:474 dnf/cli/output.py:1265
- msgctxt "long"
- msgid "Size"
- msgstr "Taille"
-@@ -2916,32 +2908,32 @@ msgstr "Taille"
- #. not be longer than 5 characters. If the term 'Size' in your
- #. language is not longer than 5 characters then you can use it
- #. unabbreviated.
--#: dnf/cli/output.py:520 dnf/cli/output.py:1350
-+#: dnf/cli/output.py:474 dnf/cli/output.py:1263
- msgctxt "short"
- msgid "Size"
- msgstr "Taille"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:524
-+#: dnf/cli/output.py:478
- msgid "Source"
- msgstr "Source"
- 
- #. Translators: This is abbreviated 'Repository', used when
- #. we have not enough space to display the full word.
--#: dnf/cli/output.py:525 dnf/cli/output.py:1341
-+#: dnf/cli/output.py:479 dnf/cli/output.py:1254
- msgctxt "short"
- msgid "Repo"
- msgstr "Dépôt"
- 
- #. Translators: This is the full word 'Repository', used when
- #. we have enough space.
--#: dnf/cli/output.py:526 dnf/cli/output.py:1344
-+#: dnf/cli/output.py:480 dnf/cli/output.py:1257
- msgctxt "long"
- msgid "Repository"
- msgstr "Dépôt"
- 
- #. Translators: This message should be no longer than 12 chars.
--#: dnf/cli/output.py:533
-+#: dnf/cli/output.py:487
- msgid "From repo"
- msgstr "Depuis le dépôt"
- 
-@@ -2949,316 +2941,312 @@ msgstr "Depuis le dépôt"
- #. print(_("Committer   : %s") % ucd(pkg.committer))
- #. print(_("Committime  : %s") % time.ctime(pkg.committime))
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:539
-+#: dnf/cli/output.py:493
- msgid "Packager"
- msgstr "Empaqueteur"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:541
-+#: dnf/cli/output.py:495
- msgid "Buildtime"
- msgstr "Date de compilation"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:545
-+#: dnf/cli/output.py:499
- msgid "Install time"
- msgstr "Date d’installation"
- 
- #. Translators: This message should be no longer than 12 chars.
--#: dnf/cli/output.py:554
-+#: dnf/cli/output.py:508
- msgid "Installed by"
- msgstr "Installé par"
- 
- #. Translators: This is abbreviated 'Summary'. Should be no longer
- #. than 12 characters. You can use the full version if it is short
- #. enough in your language.
--#: dnf/cli/output.py:558
-+#: dnf/cli/output.py:512
- msgctxt "short"
- msgid "Summary"
- msgstr "Résumé"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:564
-+#: dnf/cli/output.py:518
- msgid "License"
- msgstr "Licence"
- 
- #. Translators: This is abbreviated 'Description'. Should be no longer
- #. than 12 characters. You can use the full version if it is short
- #. enough in your language.
--#: dnf/cli/output.py:568
-+#: dnf/cli/output.py:522
- msgctxt "short"
- msgid "Description"
- msgstr "Description"
- 
--#: dnf/cli/output.py:695
--msgid "No packages to list"
--msgstr "Aucun paquet à lister"
--
--#: dnf/cli/output.py:706
-+#: dnf/cli/output.py:650
- msgid "y"
- msgstr "o"
- 
--#: dnf/cli/output.py:706
-+#: dnf/cli/output.py:650
- msgid "yes"
- msgstr "oui"
- 
--#: dnf/cli/output.py:707
-+#: dnf/cli/output.py:651
- msgid "n"
- msgstr "n"
- 
--#: dnf/cli/output.py:707
-+#: dnf/cli/output.py:651
- msgid "no"
- msgstr "non"
- 
--#: dnf/cli/output.py:711
-+#: dnf/cli/output.py:655
- msgid "Is this ok [y/N]: "
- msgstr "Voulez-vous continuer ? [o/N] : "
- 
--#: dnf/cli/output.py:715
-+#: dnf/cli/output.py:659
- msgid "Is this ok [Y/n]: "
- msgstr "Voulez-vous continuer ? [O/n] : "
- 
--#: dnf/cli/output.py:795
-+#: dnf/cli/output.py:739
- #, python-format
- msgid "Group: %s"
- msgstr "Groupe : %s"
- 
--#: dnf/cli/output.py:799
-+#: dnf/cli/output.py:743
- #, python-format
- msgid " Group-Id: %s"
- msgstr " Identifiant du groupe : %s"
- 
--#: dnf/cli/output.py:801 dnf/cli/output.py:840
-+#: dnf/cli/output.py:745 dnf/cli/output.py:784
- #, python-format
- msgid " Description: %s"
- msgstr " Description : %s"
- 
--#: dnf/cli/output.py:803
-+#: dnf/cli/output.py:747
- #, python-format
- msgid " Language: %s"
- msgstr " Langue : %s"
- 
--#: dnf/cli/output.py:806
-+#: dnf/cli/output.py:750
- msgid " Mandatory Packages:"
- msgstr " Paquets obligatoires :"
- 
--#: dnf/cli/output.py:807
-+#: dnf/cli/output.py:751
- msgid " Default Packages:"
- msgstr " Paquets par défaut :"
- 
--#: dnf/cli/output.py:808
-+#: dnf/cli/output.py:752
- msgid " Optional Packages:"
- msgstr " Paquets optionnels :"
- 
--#: dnf/cli/output.py:809
-+#: dnf/cli/output.py:753
- msgid " Conditional Packages:"
- msgstr " Paquets conditionnels :"
- 
--#: dnf/cli/output.py:834
-+#: dnf/cli/output.py:778
- #, python-format
- msgid "Environment Group: %s"
- msgstr "Groupe d’environnement : %s"
- 
--#: dnf/cli/output.py:837
-+#: dnf/cli/output.py:781
- #, python-format
- msgid " Environment-Id: %s"
- msgstr " Identifiant d’environnement : %s"
- 
--#: dnf/cli/output.py:843
-+#: dnf/cli/output.py:787
- msgid " Mandatory Groups:"
- msgstr " Groupes obligatoires :"
- 
--#: dnf/cli/output.py:844
-+#: dnf/cli/output.py:788
- msgid " Optional Groups:"
- msgstr " Groupes optionnels :"
- 
--#: dnf/cli/output.py:865
-+#: dnf/cli/output.py:809
- msgid "Matched from:"
- msgstr "Correspondances trouvées dans  :"
- 
--#: dnf/cli/output.py:879
-+#: dnf/cli/output.py:823
- #, python-format
- msgid "Filename    : %s"
- msgstr "Nom de fichier : %s"
- 
--#: dnf/cli/output.py:904
-+#: dnf/cli/output.py:848
- #, python-format
- msgid "Repo        : %s"
- msgstr "Dépôt               : %s"
- 
--#: dnf/cli/output.py:913
-+#: dnf/cli/output.py:857
- msgid "Description : "
- msgstr "Description  : "
- 
--#: dnf/cli/output.py:917
-+#: dnf/cli/output.py:861
- #, python-format
- msgid "URL         : %s"
- msgstr "URL                 : %s"
- 
--#: dnf/cli/output.py:921
-+#: dnf/cli/output.py:865
- #, python-format
- msgid "License     : %s"
- msgstr "Licence        : %s"
- 
--#: dnf/cli/output.py:927
-+#: dnf/cli/output.py:871
- #, python-format
- msgid "Provide    : %s"
- msgstr "Provide    : %s"
- 
--#: dnf/cli/output.py:947
-+#: dnf/cli/output.py:891
- #, python-format
- msgid "Other       : %s"
- msgstr "Autre  : %s"
- 
--#: dnf/cli/output.py:996
-+#: dnf/cli/output.py:940
- msgid "There was an error calculating total download size"
- msgstr ""
- "Une erreur est survenue pendant le calcul de la taille totale des "
- "téléchargements"
- 
--#: dnf/cli/output.py:1002
-+#: dnf/cli/output.py:946
- #, python-format
- msgid "Total size: %s"
- msgstr "Taille totale  : %s"
- 
--#: dnf/cli/output.py:1005
-+#: dnf/cli/output.py:949
- #, python-format
- msgid "Total download size: %s"
- msgstr "Taille totale des téléchargements : %s"
- 
--#: dnf/cli/output.py:1008
-+#: dnf/cli/output.py:952
- #, python-format
- msgid "Installed size: %s"
- msgstr "Taille des paquets installés : %s"
- 
--#: dnf/cli/output.py:1026
-+#: dnf/cli/output.py:970
- msgid "There was an error calculating installed size"
- msgstr ""
- "Une erreur est survenue pendant le calcul de la taille des paquets "
- "installées"
- 
--#: dnf/cli/output.py:1030
-+#: dnf/cli/output.py:974
- #, python-format
- msgid "Freed space: %s"
- msgstr "Espace libéré : %s"
- 
--#: dnf/cli/output.py:1039
-+#: dnf/cli/output.py:983
- msgid "Marking packages as installed by the group:"
- msgstr "Marquage des paquets installés par le groupe :"
- 
--#: dnf/cli/output.py:1046
-+#: dnf/cli/output.py:990
- msgid "Marking packages as removed by the group:"
- msgstr "Marquage des paquets supprimés par le groupe :"
- 
--#: dnf/cli/output.py:1056
-+#: dnf/cli/output.py:1000
- msgid "Group"
- msgstr "Groupe"
- 
--#: dnf/cli/output.py:1056
-+#: dnf/cli/output.py:1000
- msgid "Packages"
- msgstr "Paquets"
- 
--#: dnf/cli/output.py:1133
-+#: dnf/cli/output.py:1046
- msgid "Installing group/module packages"
- msgstr "Installation des paquets du groupe/module"
- 
--#: dnf/cli/output.py:1134
-+#: dnf/cli/output.py:1047
- msgid "Installing group packages"
- msgstr "Installation du groupe de paquets"
- 
- #. TRANSLATORS: This is for a list of packages to be installed.
--#: dnf/cli/output.py:1138
-+#: dnf/cli/output.py:1051
- msgctxt "summary"
- msgid "Installing"
- msgstr "Installation"
- 
- #. TRANSLATORS: This is for a list of packages to be upgraded.
--#: dnf/cli/output.py:1140
-+#: dnf/cli/output.py:1053
- msgctxt "summary"
- msgid "Upgrading"
- msgstr "Mise à jour"
- 
- #. TRANSLATORS: This is for a list of packages to be reinstalled.
--#: dnf/cli/output.py:1142
-+#: dnf/cli/output.py:1055
- msgctxt "summary"
- msgid "Reinstalling"
- msgstr "Réinstallation"
- 
--#: dnf/cli/output.py:1144
-+#: dnf/cli/output.py:1057
- msgid "Installing dependencies"
- msgstr "Installation des dépendances"
- 
--#: dnf/cli/output.py:1145
-+#: dnf/cli/output.py:1058
- msgid "Installing weak dependencies"
- msgstr "Installation des dépendances faibles"
- 
- #. TRANSLATORS: This is for a list of packages to be removed.
--#: dnf/cli/output.py:1147
-+#: dnf/cli/output.py:1060
- msgid "Removing"
- msgstr "Suppression"
- 
--#: dnf/cli/output.py:1148
-+#: dnf/cli/output.py:1061
- msgid "Removing dependent packages"
- msgstr "Supprimer des paquets dépendants"
- 
--#: dnf/cli/output.py:1149
-+#: dnf/cli/output.py:1062
- msgid "Removing unused dependencies"
- msgstr "Suppression des dépendances inutilisées"
- 
- #. TRANSLATORS: This is for a list of packages to be downgraded.
--#: dnf/cli/output.py:1151
-+#: dnf/cli/output.py:1064
- msgctxt "summary"
- msgid "Downgrading"
- msgstr "Rétrogradation"
- 
--#: dnf/cli/output.py:1176
-+#: dnf/cli/output.py:1089
- msgid "Installing module profiles"
- msgstr "Installation des profils de module"
- 
--#: dnf/cli/output.py:1185
-+#: dnf/cli/output.py:1098
- msgid "Disabling module profiles"
- msgstr "Désactivation des profils de module"
- 
--#: dnf/cli/output.py:1194
-+#: dnf/cli/output.py:1107
- msgid "Enabling module streams"
- msgstr "Activation des flux de modules"
- 
--#: dnf/cli/output.py:1202
-+#: dnf/cli/output.py:1115
- msgid "Switching module streams"
- msgstr "Basculement des flux de modules"
- 
--#: dnf/cli/output.py:1210
-+#: dnf/cli/output.py:1123
- msgid "Disabling modules"
- msgstr "Désactivation des modules"
- 
--#: dnf/cli/output.py:1218
-+#: dnf/cli/output.py:1131
- msgid "Resetting modules"
- msgstr "Réinitialisation des modules"
- 
--#: dnf/cli/output.py:1230
-+#: dnf/cli/output.py:1143
- msgid "Installing Environment Groups"
- msgstr "Installation des groupes d’environnement"
- 
--#: dnf/cli/output.py:1237
-+#: dnf/cli/output.py:1150
- msgid "Upgrading Environment Groups"
- msgstr "Mise à niveau des groupes d’environnement"
- 
--#: dnf/cli/output.py:1244
-+#: dnf/cli/output.py:1157
- msgid "Removing Environment Groups"
- msgstr "Suppression des groupes d’environnement"
- 
--#: dnf/cli/output.py:1251
-+#: dnf/cli/output.py:1164
- msgid "Installing Groups"
- msgstr "Installation des groupes"
- 
--#: dnf/cli/output.py:1258
-+#: dnf/cli/output.py:1171
- msgid "Upgrading Groups"
- msgstr "Mise à niveau des groupes"
- 
--#: dnf/cli/output.py:1265
-+#: dnf/cli/output.py:1178
- msgid "Removing Groups"
- msgstr "Suppression des groupes"
- 
--#: dnf/cli/output.py:1281
-+#: dnf/cli/output.py:1194
- #, python-format
- msgid ""
- "Skipping packages with conflicts:\n"
-@@ -3267,12 +3255,12 @@ msgstr ""
- "Ignorer les paquets en conflit :\n"
- "(ajouter « %s » à la ligne de commande pour forcer leur mise à niveau)"
- 
--#: dnf/cli/output.py:1291
-+#: dnf/cli/output.py:1204
- #, python-format
- msgid "Skipping packages with broken dependencies%s"
- msgstr "Ignorer les paquets ayant des dépendances cassées %s"
- 
--#: dnf/cli/output.py:1295
-+#: dnf/cli/output.py:1208
- msgid " or part of a group"
- msgstr " ou qui fait parti d’un groupe"
- 
-@@ -3280,22 +3268,22 @@ msgstr " ou qui fait parti d’un groupe"
- #. use the full (unabbreviated) term 'Package' if you think that
- #. the translation to your language is not too long and will
- #. always fit to limited space.
--#: dnf/cli/output.py:1320
-+#: dnf/cli/output.py:1233
- msgctxt "short"
- msgid "Package"
- msgstr "Paquet"
- 
- #. Translators: This is the full (unabbreviated) term 'Package'.
--#: dnf/cli/output.py:1322
-+#: dnf/cli/output.py:1235
- msgctxt "long"
- msgid "Package"
- msgstr "Paquet"
- 
--#: dnf/cli/output.py:1371
-+#: dnf/cli/output.py:1284
- msgid "replacing"
- msgstr "remplacement"
- 
--#: dnf/cli/output.py:1378
-+#: dnf/cli/output.py:1291
- #, python-format
- msgid ""
- "\n"
-@@ -3307,289 +3295,273 @@ msgstr ""
- "%s\n"
- 
- #. TODO: remove
--#: dnf/cli/output.py:1383 dnf/cli/output.py:1932 dnf/cli/output.py:1933
-+#: dnf/cli/output.py:1296 dnf/cli/output.py:1812 dnf/cli/output.py:1813
- msgid "Install"
- msgstr "Installer"
- 
--#: dnf/cli/output.py:1387 dnf/cli/output.py:1941
-+#: dnf/cli/output.py:1300 dnf/cli/output.py:1821
- msgid "Upgrade"
- msgstr "Mettre à niveau"
- 
--#: dnf/cli/output.py:1388
-+#: dnf/cli/output.py:1301
- msgid "Remove"
- msgstr "Supprimer"
- 
--#: dnf/cli/output.py:1390 dnf/cli/output.py:1939
-+#: dnf/cli/output.py:1303 dnf/cli/output.py:1819
- msgid "Downgrade"
- msgstr "Retrograder"
- 
--#: dnf/cli/output.py:1391
-+#: dnf/cli/output.py:1304
- msgid "Skip"
- msgstr "Ignorer"
- 
--#: dnf/cli/output.py:1400 dnf/cli/output.py:1416
-+#: dnf/cli/output.py:1313 dnf/cli/output.py:1329
- msgid "Package"
- msgid_plural "Packages"
- msgstr[0] "Paquet"
- msgstr[1] "Paquets"
- 
--#: dnf/cli/output.py:1418
-+#: dnf/cli/output.py:1331
- msgid "Dependent package"
- msgid_plural "Dependent packages"
- msgstr[0] "Paquet dépendant"
- msgstr[1] "Paquets dépendants"
- 
--#: dnf/cli/output.py:1497 dnf/cli/output.py:1773 dnf/cli/output.py:1942
--msgid "Upgraded"
--msgstr "Mis à niveau"
--
--#: dnf/cli/output.py:1498 dnf/cli/output.py:1773 dnf/cli/output.py:1940
--msgid "Downgraded"
--msgstr "Rétrogradé"
--
--#: dnf/cli/output.py:1503
--msgid "Reinstalled"
--msgstr "Réinstallé"
--
--#: dnf/cli/output.py:1504
--msgid "Skipped"
--msgstr "Ignoré"
--
--#: dnf/cli/output.py:1505
--msgid "Removed"
--msgstr "Supprimé"
--
--#: dnf/cli/output.py:1508
--msgid "Failed"
--msgstr "Échec"
--
--#: dnf/cli/output.py:1559
-+#: dnf/cli/output.py:1439
- msgid "Total"
- msgstr "Total"
- 
--#: dnf/cli/output.py:1587
-+#: dnf/cli/output.py:1467
- msgid "<unset>"
- msgstr "<unset>"
- 
--#: dnf/cli/output.py:1588
-+#: dnf/cli/output.py:1468
- msgid "System"
- msgstr "Système"
- 
--#: dnf/cli/output.py:1638
-+#: dnf/cli/output.py:1518
- msgid "Command line"
- msgstr "Ligne de commande"
- 
- #. TRANSLATORS: user names who executed transaction in history command output
--#: dnf/cli/output.py:1649
-+#: dnf/cli/output.py:1529
- msgid "User name"
- msgstr "Nom d’utilisateur"
- 
--#: dnf/cli/output.py:1651
-+#: dnf/cli/output.py:1531
- msgid "ID"
- msgstr "ID"
- 
--#: dnf/cli/output.py:1653
-+#: dnf/cli/output.py:1533
- msgid "Date and time"
- msgstr "Date et heure"
- 
--#: dnf/cli/output.py:1654
-+#: dnf/cli/output.py:1534
- msgid "Action(s)"
- msgstr "Action(s)"
- 
--#: dnf/cli/output.py:1655
-+#: dnf/cli/output.py:1535
- msgid "Altered"
- msgstr "Modifié"
- 
--#: dnf/cli/output.py:1698
-+#: dnf/cli/output.py:1578
- msgid "No transactions"
- msgstr "Pas de transaction"
- 
--#: dnf/cli/output.py:1699 dnf/cli/output.py:1715
-+#: dnf/cli/output.py:1579 dnf/cli/output.py:1595
- msgid "Failed history info"
- msgstr "Infos sur l’historique des échecs"
- 
--#: dnf/cli/output.py:1714
-+#: dnf/cli/output.py:1594
- msgid "No transaction ID, or package, given"
- msgstr "Pas de paquet ou d’identifiant de transaction fourni"
- 
--#: dnf/cli/output.py:1772
-+#: dnf/cli/output.py:1652
- msgid "Erased"
- msgstr "Effacé"
- 
--#: dnf/cli/output.py:1774
-+#: dnf/cli/output.py:1653 dnf/cli/output.py:1820 dnf/util.py:590
-+msgid "Downgraded"
-+msgstr "Rétrogradé"
-+
-+#: dnf/cli/output.py:1653 dnf/cli/output.py:1822 dnf/util.py:589
-+msgid "Upgraded"
-+msgstr "Mis à niveau"
-+
-+#: dnf/cli/output.py:1654
- msgid "Not installed"
- msgstr "Non installé"
- 
--#: dnf/cli/output.py:1775
-+#: dnf/cli/output.py:1655
- msgid "Newer"
- msgstr "Plus récent"
- 
--#: dnf/cli/output.py:1775
-+#: dnf/cli/output.py:1655
- msgid "Older"
- msgstr "Plus ancien"
- 
--#: dnf/cli/output.py:1823 dnf/cli/output.py:1825
-+#: dnf/cli/output.py:1703 dnf/cli/output.py:1705
- msgid "Transaction ID :"
- msgstr "Identifiant de transaction :"
- 
--#: dnf/cli/output.py:1828
-+#: dnf/cli/output.py:1708
- msgid "Begin time     :"
- msgstr "Temps de début    :"
- 
--#: dnf/cli/output.py:1831 dnf/cli/output.py:1833
-+#: dnf/cli/output.py:1711 dnf/cli/output.py:1713
- msgid "Begin rpmdb    :"
- msgstr "Début de RPMDB    :"
- 
--#: dnf/cli/output.py:1839
-+#: dnf/cli/output.py:1719
- #, python-format
- msgid "(%u seconds)"
- msgstr "(%u secondes)"
- 
--#: dnf/cli/output.py:1841
-+#: dnf/cli/output.py:1721
- #, python-format
- msgid "(%u minutes)"
- msgstr "(%u minutes)"
- 
--#: dnf/cli/output.py:1843
-+#: dnf/cli/output.py:1723
- #, python-format
- msgid "(%u hours)"
- msgstr "(%u heures)"
- 
--#: dnf/cli/output.py:1845
-+#: dnf/cli/output.py:1725
- #, python-format
- msgid "(%u days)"
- msgstr "(%u jours)"
- 
--#: dnf/cli/output.py:1846
-+#: dnf/cli/output.py:1726
- msgid "End time       :"
- msgstr "Temps de fin :"
- 
--#: dnf/cli/output.py:1849 dnf/cli/output.py:1851
-+#: dnf/cli/output.py:1729 dnf/cli/output.py:1731
- msgid "End rpmdb      :"
- msgstr "Fin de RPMDB :"
- 
--#: dnf/cli/output.py:1858 dnf/cli/output.py:1860
-+#: dnf/cli/output.py:1738 dnf/cli/output.py:1740
- msgid "User           :"
- msgstr "Utilisateur  :"
- 
--#: dnf/cli/output.py:1864 dnf/cli/output.py:1871
-+#: dnf/cli/output.py:1744 dnf/cli/output.py:1751
- msgid "Aborted"
- msgstr "Avorté"
- 
--#: dnf/cli/output.py:1864 dnf/cli/output.py:1867 dnf/cli/output.py:1869
--#: dnf/cli/output.py:1871 dnf/cli/output.py:1873 dnf/cli/output.py:1875
-+#: dnf/cli/output.py:1744 dnf/cli/output.py:1747 dnf/cli/output.py:1749
-+#: dnf/cli/output.py:1751 dnf/cli/output.py:1753 dnf/cli/output.py:1755
- msgid "Return-Code    :"
- msgstr "Code de retour  :"
- 
--#: dnf/cli/output.py:1867 dnf/cli/output.py:1875
-+#: dnf/cli/output.py:1747 dnf/cli/output.py:1755
- msgid "Success"
- msgstr "Réussi"
- 
--#: dnf/cli/output.py:1869
-+#: dnf/cli/output.py:1749
- msgid "Failures:"
- msgstr "Échecs :"
- 
--#: dnf/cli/output.py:1873
-+#: dnf/cli/output.py:1753
- msgid "Failure:"
- msgstr "Échec :"
- 
--#: dnf/cli/output.py:1883 dnf/cli/output.py:1885
-+#: dnf/cli/output.py:1763 dnf/cli/output.py:1765
- msgid "Releasever     :"
- msgstr "Releasever     :"
- 
--#: dnf/cli/output.py:1890 dnf/cli/output.py:1892
-+#: dnf/cli/output.py:1770 dnf/cli/output.py:1772
- msgid "Command Line   :"
- msgstr "Ligne de commande :"
- 
--#: dnf/cli/output.py:1897 dnf/cli/output.py:1899
-+#: dnf/cli/output.py:1777 dnf/cli/output.py:1779
- msgid "Comment        :"
- msgstr "Commentaire :"
- 
--#: dnf/cli/output.py:1903
-+#: dnf/cli/output.py:1783
- msgid "Transaction performed with:"
- msgstr "Transaction effectuée avec :"
- 
--#: dnf/cli/output.py:1912
-+#: dnf/cli/output.py:1792
- msgid "Packages Altered:"
- msgstr "Paquets modifiés :"
- 
--#: dnf/cli/output.py:1918
-+#: dnf/cli/output.py:1798
- msgid "Scriptlet output:"
- msgstr "Sortie du mini script :"
- 
--#: dnf/cli/output.py:1925
-+#: dnf/cli/output.py:1805
- msgid "Errors:"
- msgstr "Erreurs :"
- 
--#: dnf/cli/output.py:1934
-+#: dnf/cli/output.py:1814
- msgid "Dep-Install"
- msgstr "Installation des dépendances"
- 
--#: dnf/cli/output.py:1935
-+#: dnf/cli/output.py:1815
- msgid "Obsoleted"
- msgstr "Rendu obsolète"
- 
--#: dnf/cli/output.py:1936 dnf/transaction.py:84 dnf/transaction.py:85
-+#: dnf/cli/output.py:1816 dnf/transaction.py:84 dnf/transaction.py:85
- msgid "Obsoleting"
- msgstr "Rend obsolète"
- 
--#: dnf/cli/output.py:1937
-+#: dnf/cli/output.py:1817
- msgid "Erase"
- msgstr "Effacement"
- 
--#: dnf/cli/output.py:1938
-+#: dnf/cli/output.py:1818
- msgid "Reinstall"
- msgstr "Réinstallation"
- 
--#: dnf/cli/output.py:2016
-+#: dnf/cli/output.py:1892
- #, python-format
- msgid "---> Package %s.%s %s will be installed"
- msgstr "---> Le paquet %s.%s %s sera installé"
- 
--#: dnf/cli/output.py:2018
-+#: dnf/cli/output.py:1894
- #, python-format
- msgid "---> Package %s.%s %s will be an upgrade"
- msgstr "---> Le paquet %s.%s %s sera une mise à jour"
- 
--#: dnf/cli/output.py:2020
-+#: dnf/cli/output.py:1896
- #, python-format
- msgid "---> Package %s.%s %s will be erased"
- msgstr "---> Le paquet %s.%s %s sera supprimé"
- 
--#: dnf/cli/output.py:2022
-+#: dnf/cli/output.py:1898
- #, python-format
- msgid "---> Package %s.%s %s will be reinstalled"
- msgstr "---> Le paquet %s.%s %s sera réinstallé"
- 
--#: dnf/cli/output.py:2024
-+#: dnf/cli/output.py:1900
- #, python-format
- msgid "---> Package %s.%s %s will be a downgrade"
- msgstr "---> Le paquet %s.%s %s sera une rétrogradation"
- 
--#: dnf/cli/output.py:2026
-+#: dnf/cli/output.py:1902
- #, python-format
- msgid "---> Package %s.%s %s will be obsoleting"
- msgstr "---> Le paquet %s.%s %s sera rendu obsolète"
- 
--#: dnf/cli/output.py:2028
-+#: dnf/cli/output.py:1904
- #, python-format
- msgid "---> Package %s.%s %s will be upgraded"
- msgstr "---> Le paquet %s.%s %s sera mis à jour"
- 
--#: dnf/cli/output.py:2030
-+#: dnf/cli/output.py:1906
- #, python-format
- msgid "---> Package %s.%s %s will be obsoleted"
- msgstr "---> Le paquet %s.%s %s sera rendu obsolète"
- 
--#: dnf/cli/output.py:2039
-+#: dnf/cli/output.py:1915
- msgid "--> Starting dependency resolution"
- msgstr "--> Début de la résolution des dépendances"
- 
--#: dnf/cli/output.py:2044
-+#: dnf/cli/output.py:1919
- msgid "--> Finished dependency resolution"
- msgstr "--> Résolution des dépendances terminée"
- 
--#: dnf/cli/output.py:2058 dnf/crypto.py:132
-+#: dnf/cli/output.py:1933 dnf/crypto.py:132
- #, python-format
- msgid ""
- "Importing GPG key 0x%s:\n"
-@@ -3677,7 +3649,7 @@ msgstr "Module ou Groupe « %s » n’existe pas."
- msgid "Environment id '%s' does not exist."
- msgstr "L’id d’environnement « %s » n’existe pas."
- 
--#: dnf/comps.py:622 dnf/transaction_sr.py:443 dnf/transaction_sr.py:453
-+#: dnf/comps.py:622 dnf/transaction_sr.py:477 dnf/transaction_sr.py:487
- #, python-format
- msgid "Environment id '%s' is not installed."
- msgstr "L’id d’environnement « %s » n’est pas installé."
-@@ -3791,6 +3763,11 @@ msgstr "dépôt %s : 0x%s déjà importé"
- msgid "repo %s: imported key 0x%s."
- msgstr "dépôt %s : clé importée 0x%s."
- 
-+#: dnf/crypto.py:177
-+#, python-format
-+msgid "retrieving repo key for %s unencrypted from %s"
-+msgstr "récupération de la clé de repo de %s non cryptée à partir %s"
-+
- #: dnf/db/group.py:293
- msgid ""
- "No available modular metadata for modular package '{}', it cannot be "
-@@ -3878,7 +3855,7 @@ msgid_plural "Modular dependency problems with Defaults:"
- msgstr[0] "Problème de dépendance modulaire avec les valeurs par défaut :"
- msgstr[1] "Problèmes de dépendance modulaire avec les valeurs par défaut :"
- 
--#: dnf/exceptions.py:131 dnf/module/module_base.py:686
-+#: dnf/exceptions.py:131 dnf/module/module_base.py:841
- msgid "Modular dependency problem:"
- msgid_plural "Modular dependency problems:"
- msgstr[0] "Problème de dépendance modulaire :"
-@@ -3935,8 +3912,8 @@ msgstr ""
- "\n"
- "Aide : [d]éfaut, [e]activé, [x]désactivé, [i]nstallé, [a]ctivé"
- 
--#: dnf/module/module_base.py:54 dnf/module/module_base.py:421
--#: dnf/module/module_base.py:477 dnf/module/module_base.py:543
-+#: dnf/module/module_base.py:54 dnf/module/module_base.py:547
-+#: dnf/module/module_base.py:603 dnf/module/module_base.py:669
- msgid "Ignoring unnecessary profile: '{}/{}'"
- msgstr "Profil inutile ignoré : {}/{}"
- 
-@@ -3947,21 +3924,21 @@ msgstr ""
- "Toutes les correspondance pour le paramètre « {0} » dans le mode module « "
- "{1}:{2} » ne sont pas actives"
- 
--#: dnf/module/module_base.py:92
-+#: dnf/module/module_base.py:92 dnf/module/module_base.py:202
- #, python-brace-format
- msgid "Installing module '{0}' from Fail-Safe repository {1} is not allowed"
- msgstr ""
- "L’installation du module « {0} » à partir du dépôt Fail-Safe {1} n’est pas "
- "permise"
- 
--#: dnf/module/module_base.py:102
-+#: dnf/module/module_base.py:102 dnf/module/module_base.py:212
- msgid ""
- "Unable to match profile for argument {}. Available profiles for '{}:{}': {}"
- msgstr ""
- "Impossible de faire correspondre le profil pour l’argument {}. Profils "
- "disponibles pour « {}:{} » : {}"
- 
--#: dnf/module/module_base.py:106
-+#: dnf/module/module_base.py:106 dnf/module/module_base.py:216
- msgid "Unable to match profile for argument {}"
- msgstr "Impossible de faire correspondre le profil pour l’argument {}"
- 
-@@ -3978,39 +3955,53 @@ msgstr "Aucun profil pour le module {} : {}"
- msgid "Default profile {} not available in module {}:{}"
- msgstr "Le profil par défaut {} n’est pas disponible dans le module {} : {}"
- 
--#: dnf/module/module_base.py:142
-+#: dnf/module/module_base.py:142 dnf/module/module_base.py:245
- msgid "Installing module from Fail-Safe repository is not allowed"
- msgstr ""
- "L’installation du module à partir du dépôt Fail-Safe n’est pas permise"
- 
--#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
--#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
--#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
--#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
-+#: dnf/module/module_base.py:194
-+#, python-brace-format
-+msgid "No active matches for argument '{0}' in module '{1}:{2}'"
-+msgstr ""
-+"Aucune correspondance active pour l'argument '{0}' dans le module '{1}:{2}'"
-+
-+#: dnf/module/module_base.py:226
-+#, python-brace-format
-+msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'"
-+msgstr ""
-+"Le profil installé '{0}' n'est pas disponible dans le module '{1}' stream "
-+"'{2}'"
-+
-+#: dnf/module/module_base.py:265
-+msgid "No packages available to distrosync for package name '{}'"
-+msgstr ""
-+"Aucun paquet disponible pour la distribution pour le nom de paquet '{}'"
-+
-+#: dnf/module/module_base.py:308 dnf/module/module_base.py:452
-+#: dnf/module/module_base.py:477 dnf/module/module_base.py:496
-+#: dnf/module/module_base.py:543 dnf/module/module_base.py:599
-+#: dnf/module/module_base.py:665 dnf/module/module_base.py:827
- msgid "Unable to resolve argument {}"
- msgstr "Impossible de résoudre le paramètre {}"
- 
--#: dnf/module/module_base.py:160
--msgid "No match for package {}"
--msgstr "Aucune correspondance pour le paquet {}"
--
--#: dnf/module/module_base.py:204
-+#: dnf/module/module_base.py:319
- #, python-brace-format
- msgid "Upgrading module '{0}' from Fail-Safe repository {1} is not allowed"
- msgstr ""
- "La mise à niveau du module « {0} » à partir du dépôt Fail-Safe {1} n’est pas"
- " permise"
- 
--#: dnf/module/module_base.py:223 dnf/module/module_base.py:251
-+#: dnf/module/module_base.py:338 dnf/module/module_base.py:366
- msgid "Unable to match profile in argument {}"
- msgstr "Impossible de faire correspondre le profil dans l’argument {}"
- 
--#: dnf/module/module_base.py:231
-+#: dnf/module/module_base.py:346
- msgid "Upgrading module from Fail-Safe repository is not allowed"
- msgstr ""
- "La mise à niveau du module à partir du dépôt Fail-Safe n’est pas permise"
- 
--#: dnf/module/module_base.py:367
-+#: dnf/module/module_base.py:500
- msgid ""
- "Only module name is required. Ignoring unneeded information in argument: "
- "'{}'"
-@@ -4018,7 +4009,11 @@ msgstr ""
- "Seul le nom du module est nécessaire. Les paramètres inutiles ont été "
- "ignorés : « {} »"
- 
--#: dnf/package.py:298
-+#: dnf/module/module_base.py:828
-+msgid "No match for package {}"
-+msgstr "Aucune correspondance pour le paquet {}"
-+
-+#: dnf/package.py:333
- #, python-format
- msgid "%s: %s check failed: %s vs %s"
- msgstr "%s : %s vérification a échoué : %s vs %s"
-@@ -4032,12 +4027,12 @@ msgstr "%s est un fichier vide"
- #: dnf/persistor.py:91
- #, python-format
- msgid "Failed to load expired repos cache: %s"
--msgstr ""
-+msgstr "Echec du chargement du cache des repos expirés : %s"
- 
- #: dnf/persistor.py:99
- #, python-format
- msgid "Failed to store expired repos cache: %s"
--msgstr ""
-+msgstr "N'a pas réussi à stocker le cache des repos expirés : %s"
- 
- #: dnf/persistor.py:106
- msgid "Failed storing last makecache time."
-@@ -4102,6 +4097,14 @@ msgstr "Ajout du dépôt %s depuis le %s"
- msgid "Errors occurred during test transaction."
- msgstr "Des erreurs sont survenues lors de la transaction de test."
- 
-+#: dnf/sack.py:47
-+msgid ""
-+"allow_vendor_change is disabled. This option is currently not supported for "
-+"downgrade and distro-sync commands"
-+msgstr ""
-+"allow_vendor_change est désactivé. Cette option n'est actuellement pas prise"
-+" en charge pour les commandes de downgrade et de distro-sync"
-+
- #. TRANSLATORS: This is for a single package currently being downgraded.
- #: dnf/transaction.py:80
- msgctxt "currently"
-@@ -4148,27 +4151,31 @@ msgstr "Exécution du scriptlet"
- msgid "Preparing"
- msgstr "Préparation"
- 
--#: dnf/transaction_sr.py:60
-+#: dnf/transaction_sr.py:66
- #, python-brace-format
--msgid "Errors in \"{filename}\":"
--msgstr "Erreurs dans « {filename} » :"
-+msgid ""
-+"The following problems occurred while replaying the transaction from file "
-+"\"{filename}\":"
-+msgstr ""
-+"Les problèmes suivants sont survenus lors de la relecture de la transaction "
-+"à partir du fichier \"{filename}\" :"
- 
--#: dnf/transaction_sr.py:70
--#, python-brace-format
--msgid "Error in \"{filename}\": {error}"
--msgstr "Erreur dans « {filename} » : {error}"
-+#: dnf/transaction_sr.py:68
-+msgid "The following problems occurred while running a transaction:"
-+msgstr ""
-+"Les problèmes suivants sont survenus lors de l'exécution d'une transaction :"
- 
--#: dnf/transaction_sr.py:87
-+#: dnf/transaction_sr.py:89
- #, python-brace-format
- msgid "Invalid major version \"{major}\", number expected."
- msgstr "Version majeur invalide « {major} », numéro attendu."
- 
--#: dnf/transaction_sr.py:95
-+#: dnf/transaction_sr.py:97
- #, python-brace-format
- msgid "Invalid minor version \"{minor}\", number expected."
- msgstr "Version mineure invalide « {minor} », numéro attendu."
- 
--#: dnf/transaction_sr.py:101
-+#: dnf/transaction_sr.py:103
- #, python-brace-format
- msgid ""
- "Incompatible major version \"{major}\", supported major version is "
-@@ -4177,137 +4184,186 @@ msgstr ""
- "Version majeure incompatible « {major} », la version majeure prise en charge"
- " est « {major_supp} »."
- 
--#: dnf/transaction_sr.py:244
-+#: dnf/transaction_sr.py:224
-+msgid ""
-+"Conflicting TransactionReplay arguments have been specified: filename, data"
-+msgstr ""
-+"Des arguments contradictoires de TransactionReplay ont été spécifiés : nom "
-+"de fichier, données"
-+
-+#: dnf/transaction_sr.py:265
- #, python-brace-format
- msgid "Unexpected type of \"{id}\", {exp} expected."
- msgstr "Type de « {id} » inattendu, {exp} attendu."
- 
--#: dnf/transaction_sr.py:250
-+#: dnf/transaction_sr.py:271
- #, python-brace-format
- msgid "Missing key \"{key}\"."
- msgstr "Clé « {key} » manquante."
- 
--#: dnf/transaction_sr.py:263
-+#: dnf/transaction_sr.py:285
- #, python-brace-format
- msgid "Missing object key \"{key}\" in an rpm."
- msgstr "Clé objet « {key} » manquante dans un rpm."
- 
--#: dnf/transaction_sr.py:267
-+#: dnf/transaction_sr.py:289
- #, python-brace-format
- msgid "Unexpected value of package reason \"{reason}\" for rpm nevra \"{nevra}\"."
- msgstr ""
-+"Valeur inattendue de la raison du paquet \"{reason}\" pour rpm nevra "
-+"\"{nevra}\"."
- 
--#: dnf/transaction_sr.py:275
-+#: dnf/transaction_sr.py:297
- #, python-brace-format
- msgid "Cannot parse NEVRA for package \"{nevra}\"."
--msgstr ""
-+msgstr "Impossible d'analyser NEVRA pour le paquet \"{nevra}\"."
- 
--#: dnf/transaction_sr.py:286
-+#: dnf/transaction_sr.py:321
- #, python-brace-format
- msgid "Cannot find rpm nevra \"{nevra}\"."
--msgstr ""
-+msgstr "Impossible de trouver rpm nevra \"{nevra}\"."
- 
--#: dnf/transaction_sr.py:301
--#, fuzzy, python-brace-format
--#| msgid "Package %s is already installed."
-+#: dnf/transaction_sr.py:336
-+#, python-brace-format
- msgid "Package \"{na}\" is already installed for action \"{action}\"."
--msgstr "Le paquet %s est déjà installé."
-+msgstr "Le paquet \"%s\" est déjà installé pour l'action \"{action}\"."
- 
--#: dnf/transaction_sr.py:311
-+#: dnf/transaction_sr.py:345
- #, python-brace-format
- msgid ""
- "Package nevra \"{nevra}\" not available in repositories for action "
- "\"{action}\"."
- msgstr ""
-+"Le paquet nevra \"{nevra}\" n'est pas disponible dans les dépôts pour action"
-+" \"{action}\"."
- 
--#: dnf/transaction_sr.py:322
-+#: dnf/transaction_sr.py:356
- #, python-brace-format
- msgid "Package nevra \"{nevra}\" not installed for action \"{action}\"."
--msgstr ""
-+msgstr "Le paquet nevra \"{nevra}\" n'est pas installé pour l'action \"{action}\"."
- 
--#: dnf/transaction_sr.py:336
-+#: dnf/transaction_sr.py:370
- #, python-brace-format
- msgid "Unexpected value of package action \"{action}\" for rpm nevra \"{nevra}\"."
--msgstr ""
-+msgstr "Valeur inattendue de l'action paquet \"{action}\" pour rpm nevra \"{nevra}\"."
- 
--#: dnf/transaction_sr.py:343
--#, fuzzy, python-format
--#| msgid "Module or Group '%s' is not available."
-+#: dnf/transaction_sr.py:377
-+#, python-format
- msgid "Group id '%s' is not available."
--msgstr "Module ou Groupe « %s » non disponible."
-+msgstr "L'id du groupe '%s' n'est pas disponible."
- 
--#: dnf/transaction_sr.py:364
-+#: dnf/transaction_sr.py:398
- #, python-brace-format
- msgid "Missing object key \"{key}\" in groups.packages."
--msgstr ""
-+msgstr "Clé d'objet manquante \"{key}\" dans groups.packages."
- 
--#: dnf/transaction_sr.py:377 dnf/transaction_sr.py:387
--#, fuzzy, python-format
--#| msgid "Module or Group '%s' is not installed."
-+#: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421
-+#, python-format
- msgid "Group id '%s' is not installed."
--msgstr "Module ou Groupe « %s » non installé."
-+msgstr "L'id de groupe '%s' non installé."
- 
--#: dnf/transaction_sr.py:398
--#, fuzzy, python-format
--#| msgid "Environment '%s' is not available."
-+#: dnf/transaction_sr.py:432
-+#, python-format
- msgid "Environment id '%s' is not available."
--msgstr "L’environnement « %s » n’est pas disponible."
-+msgstr "L’id e l’environnement « %s » n’est pas disponible."
- 
--#: dnf/transaction_sr.py:422
-+#: dnf/transaction_sr.py:456
- #, python-brace-format
- msgid ""
- "Invalid value \"{group_type}\" of environments.groups.group_type, only "
- "\"mandatory\" or \"optional\" is supported."
- msgstr ""
-+"Valeur invalide \"{group_type}\" de environments.groups.group_type, seul \" "
-+"obligatoire \" ou \" optionnel \" est supporté."
- 
--#: dnf/transaction_sr.py:430
-+#: dnf/transaction_sr.py:464
- #, python-brace-format
- msgid "Missing object key \"{key}\" in environments.groups."
--msgstr ""
-+msgstr "Clé d'objet manquante \"{key}\" dans environments.groups."
- 
--#: dnf/transaction_sr.py:508
-+#: dnf/transaction_sr.py:542
- #, python-brace-format
- msgid "Unexpected value of group action \"{action}\" for group \"{group}\"."
- msgstr ""
-+"Valeur inattendue de l'action de groupe \"{action}\" pour le groupe "
-+"\"{group}\"."
- 
--#: dnf/transaction_sr.py:513
-+#: dnf/transaction_sr.py:547
- #, python-brace-format
- msgid "Missing object key \"{key}\" in a group."
--msgstr ""
-+msgstr "Clé d'objet manquant \"{key}\" dans un groupe."
- 
--#: dnf/transaction_sr.py:537
-+#: dnf/transaction_sr.py:571
- #, python-brace-format
- msgid "Unexpected value of environment action \"{action}\" for environment \"{env}\"."
- msgstr ""
-+"Valeur inattendue de l'action environnementale \"{action}\" pour "
-+"l'environnement \"{env}\"."
- 
--#: dnf/transaction_sr.py:542
-+#: dnf/transaction_sr.py:576
- #, python-brace-format
- msgid "Missing object key \"{key}\" in an environment."
--msgstr ""
-+msgstr "Clé d'objet manquant \"{key}\" dans un environnement."
- 
--#: dnf/transaction_sr.py:581
-+#: dnf/transaction_sr.py:615
- #, python-brace-format
- msgid ""
- "Package nevra \"{nevra}\", which is not present in the transaction file, was"
- " pulled into the transaction."
- msgstr ""
-+"Le paquet nevra \"{nevra}\", qui n'est pas présent dans le fichier de "
-+"transaction, a été introduit dans la transaction."
- 
--#: dnf/util.py:391 dnf/util.py:393
-+#: dnf/util.py:393 dnf/util.py:395
- msgid "Problem"
- msgstr "Problème"
- 
--#: dnf/util.py:444
-+#: dnf/util.py:446
- msgid "TransactionItem not found for key: {}"
- msgstr "TransactionItem n’a pas été trouvé pour la clef : {}"
- 
--#: dnf/util.py:454
-+#: dnf/util.py:456
- msgid "TransactionSWDBItem not found for key: {}"
- msgstr "TransactionSWDBItem n’a pas été trouvé pour la clef : {}"
- 
--#: dnf/util.py:457
-+#: dnf/util.py:459
- msgid "Errors occurred during transaction."
- msgstr "Des erreurs sont survenues lors de la transaction."
- 
-+#: dnf/util.py:595
-+msgid "Reinstalled"
-+msgstr "Réinstallé"
-+
-+#: dnf/util.py:596
-+msgid "Skipped"
-+msgstr "Ignoré"
-+
-+#: dnf/util.py:597
-+msgid "Removed"
-+msgstr "Supprimé"
-+
-+#: dnf/util.py:600
-+msgid "Failed"
-+msgstr "Échec"
-+
-+#~ msgid "Action not handled: {}"
-+#~ msgstr "Action non gérée : {}"
-+
-+#~ msgid "no package matched"
-+#~ msgstr "aucun paquet correspondant"
-+
-+#~ msgid "Not found given transaction ID"
-+#~ msgstr "L’identifiant de transaction fourni est introuvable"
-+
-+#~ msgid "Undoing transaction {}, from {}"
-+#~ msgstr "Révocation de lla transaction {}, de {}"
-+
-+#~ msgid "Errors in \"{filename}\":"
-+#~ msgstr "Erreurs dans « {filename} » :"
-+
-+#~ msgid "Error in \"{filename}\": {error}"
-+#~ msgstr "Erreur dans « {filename} » : {error}"
-+
- #~ msgid "format for displaying found packages"
- #~ msgstr "format d’affichage des paquets trouvés"
- 
-diff --git a/po/ja.po b/po/ja.po
-index 6435271c..00529771 100644
---- a/po/ja.po
-+++ b/po/ja.po
-@@ -22,20 +22,21 @@
- # Julien Humbert <julroy67@gmail.com>, 2020.
- # Casey Jones <nahareport@yahoo.com>, 2020.
- # Hajime Taira <htaira@pantora.net>, 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-07-27 05:29+0000\n"
--"Last-Translator: Hajime Taira <htaira@pantora.net>\n"
--"Language-Team: Japanese <https://translate.fedoraproject.org/projects/dnf/dnf-master/ja/>\n"
-+"POT-Creation-Date: 2021-02-22 09:22+0100\n"
-+"PO-Revision-Date: 2021-03-08 10:29+0000\n"
-+"Last-Translator: Sundeep Anand <suanand@redhat.com>\n"
-+"Language-Team: Japanese <https://translate.fedoraproject.org/projects/dnf/dnf-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.1.1\n"
-+"X-Generator: Weblate 4.5.1\n"
- 
- #: dnf/automatic/emitter.py:32
- #, python-format
-@@ -45,7 +46,7 @@ msgstr "'%s' に以下の更新が適用されました:"
- #: dnf/automatic/emitter.py:33
- #, python-format
- msgid "Updates completed at %s"
--msgstr "'%s' に更新が適用されました。"
-+msgstr "'%s' に更新が適用されました"
- 
- #: dnf/automatic/emitter.py:34
- #, python-format
-@@ -92,7 +93,7 @@ msgstr "不明な設定値: %s=%s in %s; %s"
- msgid "Unknown configuration option: %s = %s in %s"
- msgstr "不明な設定オプション: %s = %s in %s"
- 
--#: dnf/automatic/main.py:237 dnf/cli/cli.py:299
-+#: dnf/automatic/main.py:237 dnf/cli/cli.py:304
- msgid "GPG check FAILED"
- msgstr "GPG の確認に失敗しました"
- 
-@@ -105,9 +106,9 @@ msgid "Started dnf-automatic."
- msgstr "dnf-automatic を開始しました。"
- 
- #: dnf/automatic/main.py:308
--#, python-format
--msgid "Sleep for %s seconds"
--msgstr "%s 秒スリープします"
-+msgid "Sleep for {} second"
-+msgid_plural "Sleep for {} seconds"
-+msgstr[0] "{} 秒スリープします"
- 
- #: dnf/automatic/main.py:315
- msgid "System is off-line."
-@@ -119,7 +120,7 @@ msgstr "システムはオフラインです。"
- msgid "Error: %s"
- msgstr "エラー: %s"
- 
--#: dnf/base.py:146
-+#: dnf/base.py:146 dnf/base.py:472 dnf/base.py:474
- msgid "loading repo '{}' failure: {}"
- msgstr "repo '{}' のロードに失敗しました: {}"
- 
-@@ -127,236 +128,236 @@ msgstr "repo '{}' のロードに失敗しました: {}"
- msgid "Loading repository '{}' has failed"
- msgstr "repository '{}' のロードに失敗しました"
- 
--#: dnf/base.py:320
-+#: dnf/base.py:322
- msgid "Metadata timer caching disabled when running on metered connection."
- msgstr "metered 接続で実行する際、メタデータタイマーキャッシュは無効化されました。"
- 
--#: dnf/base.py:325
-+#: dnf/base.py:327
- msgid "Metadata timer caching disabled when running on a battery."
- msgstr "バッテリーで実行する際、メタデータタイマーキャッシュは無効化されました。"
- 
--#: dnf/base.py:330
-+#: dnf/base.py:332
- msgid "Metadata timer caching disabled."
- msgstr "メタデータタイマーキャッシュは無効化されました。"
- 
--#: dnf/base.py:335
-+#: dnf/base.py:337
- msgid "Metadata cache refreshed recently."
- msgstr "メタデータキャッシュは最近、リフレッシュされました。"
- 
--#: dnf/base.py:341 dnf/cli/commands/__init__.py:91
-+#: dnf/base.py:343 dnf/cli/commands/__init__.py:91
- msgid "There are no enabled repositories in \"{}\"."
- msgstr "\"{}\" には有効化されたリポジトリーがありません。"
- 
--#: dnf/base.py:348
-+#: dnf/base.py:350
- #, python-format
- msgid "%s: will never be expired and will not be refreshed."
- msgstr "%s: は期限切れになることはなく、リフレッシュされることもありません。"
- 
--#: dnf/base.py:350
-+#: dnf/base.py:352
- #, python-format
- msgid "%s: has expired and will be refreshed."
- msgstr "%s: は期限切れとなったのでリフレッシュされます。"
- 
- #. expires within the checking period:
--#: dnf/base.py:354
-+#: dnf/base.py:356
- #, python-format
- msgid "%s: metadata will expire after %d seconds and will be refreshed now"
- msgstr "%s: メタデータは %d 秒後に期限切れとなり、すぐにリフレッシュされます"
- 
--#: dnf/base.py:358
-+#: dnf/base.py:360
- #, python-format
- msgid "%s: will expire after %d seconds."
- msgstr "%s: は %d 秒後に期限切れとなります。"
- 
- #. performs the md sync
--#: dnf/base.py:364
-+#: dnf/base.py:366
- msgid "Metadata cache created."
- msgstr "メタデータキャッシュを作成しました。"
- 
--#: dnf/base.py:397
-+#: dnf/base.py:399 dnf/base.py:466
- #, python-format
- msgid "%s: using metadata from %s."
--msgstr "%s: は %s から取得したメタデータを使用中"
-+msgstr "%s: は %s から取得したメタデータを使用中。"
- 
--#: dnf/base.py:409
-+#: dnf/base.py:411 dnf/base.py:479
- #, python-format
- msgid "Ignoring repositories: %s"
- msgstr "リポジトリーを無視します: %s"
- 
--#: dnf/base.py:412
-+#: dnf/base.py:414
- #, python-format
- msgid "Last metadata expiration check: %s ago on %s."
- msgstr "メタデータの期限切れの最終確認: %s 時間前の %s に実施しました。"
- 
--#: dnf/base.py:443
-+#: dnf/base.py:507
- msgid ""
- "The downloaded packages were saved in cache until the next successful "
- "transaction."
- msgstr "ダウンロード済みのパッケージは、次の正常なトランザクションまでキャッシュに保存されました。"
- 
--#: dnf/base.py:445
-+#: dnf/base.py:509
- #, python-format
- msgid "You can remove cached packages by executing '%s'."
- msgstr "'%s' を実行することでキャッシュパッケージを削除できます。"
- 
--#: dnf/base.py:535
-+#: dnf/base.py:599
- #, python-format
- msgid "Invalid tsflag in config file: %s"
- msgstr "設定ファイルの tsflag が無効です: %s"
- 
--#: dnf/base.py:591
-+#: dnf/base.py:655
- #, python-format
- msgid "Failed to add groups file for repository: %s - %s"
- msgstr "リポジトリーのグループファイルを追加できませんでした: %s - %s"
- 
--#: dnf/base.py:823
-+#: dnf/base.py:887
- msgid "Running transaction check"
- msgstr "トランザクションの確認を実行中"
- 
--#: dnf/base.py:831
-+#: dnf/base.py:895
- msgid "Error: transaction check vs depsolve:"
- msgstr "エラー: トランザクションの確認 vs depsolve:"
- 
--#: dnf/base.py:837
-+#: dnf/base.py:901
- msgid "Transaction check succeeded."
- msgstr "トランザクションの確認に成功しました。"
- 
--#: dnf/base.py:840
-+#: dnf/base.py:904
- msgid "Running transaction test"
- msgstr "トランザクションのテストを実行中"
- 
--#: dnf/base.py:850 dnf/base.py:992
-+#: dnf/base.py:914 dnf/base.py:1065
- msgid "RPM: {}"
- msgstr "RPM: {}"
- 
--#: dnf/base.py:851
-+#: dnf/base.py:915
- msgid "Transaction test error:"
- msgstr "トランザクションテストエラー:"
- 
--#: dnf/base.py:862
-+#: dnf/base.py:926
- msgid "Transaction test succeeded."
- msgstr "トランザクションのテストに成功しました。"
- 
--#: dnf/base.py:883
-+#: dnf/base.py:947
- msgid "Running transaction"
- msgstr "トランザクションを実行中"
- 
--#: dnf/base.py:911
-+#: dnf/base.py:984
- msgid "Disk Requirements:"
--msgstr "ディスク要件"
-+msgstr "ディスク要件:"
- 
--#: dnf/base.py:914
-+#: dnf/base.py:987
- #, python-brace-format
- msgid "At least {0}MB more space needed on the {1} filesystem."
- msgid_plural "At least {0}MB more space needed on the {1} filesystem."
- msgstr[0] "{1} ファイルシステムに最低 {0}MB の追加スペースが必要です。"
- 
--#: dnf/base.py:921
-+#: dnf/base.py:994
- msgid "Error Summary"
- msgstr "エラーの概要"
- 
--#: dnf/base.py:947
-+#: dnf/base.py:1020
- #, python-brace-format
- msgid "RPMDB altered outside of {prog}."
- msgstr "RPMDBは {prog} のサポート外に変更されました。"
- 
--#: dnf/base.py:993 dnf/base.py:1001
-+#: dnf/base.py:1066 dnf/base.py:1074
- msgid "Could not run transaction."
- msgstr "トランザクションを実行できませんでした。"
- 
--#: dnf/base.py:996
-+#: dnf/base.py:1069
- msgid "Transaction couldn't start:"
- msgstr "トランザクションを開始できませんでした:"
- 
--#: dnf/base.py:1010
-+#: dnf/base.py:1083
- #, python-format
- msgid "Failed to remove transaction file %s"
- msgstr "トランザクションファイル %s の削除に失敗しました"
- 
--#: dnf/base.py:1092
-+#: dnf/base.py:1165
- msgid "Some packages were not downloaded. Retrying."
- msgstr "一部のパッケージはダウンロードされませんでした。再試行中です。"
- 
--#: dnf/base.py:1122
-+#: dnf/base.py:1195
- #, python-format
- msgid "Delta RPMs reduced %.1f MB of updates to %.1f MB (%d.1%% saved)"
- msgstr "Delta RPM により %.1f MB の更新を %.1f MB に削減できました。(%d.1%% がキャッシュされていました)"
- 
--#: dnf/base.py:1125
-+#: dnf/base.py:1198
- #, python-format
- msgid ""
- "Failed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)"
- msgstr "非効率な Delta RPM により %.1f MB の更新が増加し、%.1f MB となりました。(%d.1%% が無駄になりました)"
- 
--#: dnf/base.py:1167
-+#: dnf/base.py:1240
- msgid "Cannot add local packages, because transaction job already exists"
- msgstr "ローカルパッケージを追加できません、トランザクションジョブがすでに存在するためです"
- 
--#: dnf/base.py:1181
-+#: dnf/base.py:1254
- msgid "Could not open: {}"
- msgstr "開くことができませんでした: {}"
- 
--#: dnf/base.py:1219
-+#: dnf/base.py:1292
- #, python-format
- msgid "Public key for %s is not installed"
- msgstr "%s の公開鍵がインストールされていません"
- 
--#: dnf/base.py:1223
-+#: dnf/base.py:1296
- #, python-format
- msgid "Problem opening package %s"
- msgstr "パッケージ %s を開くことができません"
- 
--#: dnf/base.py:1231
-+#: dnf/base.py:1304
- #, python-format
- msgid "Public key for %s is not trusted"
- msgstr "%s の公開鍵は信頼されていません"
- 
--#: dnf/base.py:1235
-+#: dnf/base.py:1308
- #, python-format
- msgid "Package %s is not signed"
- msgstr "パッケージ %s は署名されていません"
- 
--#: dnf/base.py:1265
-+#: dnf/base.py:1338
- #, python-format
- msgid "Cannot remove %s"
- msgstr "%s を削除できません"
- 
--#: dnf/base.py:1269
-+#: dnf/base.py:1342
- #, python-format
- msgid "%s removed"
- msgstr "%s を削除しました"
- 
--#: dnf/base.py:1549
-+#: dnf/base.py:1622
- msgid "No match for group package \"{}\""
--msgstr "グループパッケージ  \"{}\" に一致するものはありません"
-+msgstr "グループパッケージ \"{}\" に一致するものはありません"
- 
--#: dnf/base.py:1635
-+#: dnf/base.py:1708
- #, python-format
- msgid "Adding packages from group '%s': %s"
- msgstr "グループ '%s' からのパッケージを追加します: %s"
- 
--#: dnf/base.py:1658 dnf/cli/cli.py:219 dnf/cli/commands/__init__.py:442
-+#: dnf/base.py:1731 dnf/cli/cli.py:220 dnf/cli/commands/__init__.py:442
- #: dnf/cli/commands/__init__.py:499 dnf/cli/commands/__init__.py:592
- #: dnf/cli/commands/__init__.py:641 dnf/cli/commands/install.py:80
- #: dnf/cli/commands/install.py:103 dnf/cli/commands/install.py:110
- msgid "Nothing to do."
- msgstr "行うべきことはありません。"
- 
--#: dnf/base.py:1676
-+#: dnf/base.py:1749
- msgid "No groups marked for removal."
- msgstr "削除対象のパッケージはありません。"
- 
--#: dnf/base.py:1710
-+#: dnf/base.py:1783
- msgid "No group marked for upgrade."
- msgstr "アップグレード対象のグループはありません。"
- 
--#: dnf/base.py:1925
-+#: dnf/base.py:1997
- #, python-format
- msgid "Package %s not installed, cannot downgrade it."
- msgstr "パッケージ %s はインストールされていないので、ダウングレードできません。"
- 
--#: dnf/base.py:1927 dnf/base.py:1946 dnf/base.py:1959 dnf/base.py:1980
--#: dnf/base.py:2029 dnf/base.py:2037 dnf/base.py:2172 dnf/cli/cli.py:411
-+#: dnf/base.py:1999 dnf/base.py:2018 dnf/base.py:2031 dnf/base.py:2052
-+#: dnf/base.py:2101 dnf/base.py:2109 dnf/base.py:2243 dnf/cli/cli.py:416
- #: dnf/cli/commands/__init__.py:425 dnf/cli/commands/__init__.py:482
- #: dnf/cli/commands/__init__.py:586 dnf/cli/commands/__init__.py:633
- #: dnf/cli/commands/__init__.py:711 dnf/cli/commands/install.py:147
-@@ -366,141 +367,127 @@ msgstr "パッケージ %s はインストールされていないので、ダ
- msgid "No match for argument: %s"
- msgstr "一致した引数がありません: %s"
- 
--#: dnf/base.py:1934
-+#: dnf/base.py:2006
- #, python-format
- msgid "Package %s of lower version already installed, cannot downgrade it."
- msgstr "下位バージョンのパッケージ %s はインストール済みなので、ダウングレードできません。"
- 
--#: dnf/base.py:1957
-+#: dnf/base.py:2029
- #, python-format
- msgid "Package %s not installed, cannot reinstall it."
- msgstr "パッケージ %s はインストールされていないのでの、再インストールできません。"
- 
--#: dnf/base.py:1972
-+#: dnf/base.py:2044
- #, python-format
- msgid "File %s is a source package and cannot be updated, ignoring."
- msgstr "ファイル %s はソースパッケージで更新できません。無視します。"
- 
--#: dnf/base.py:1978
-+#: dnf/base.py:2050
- #, python-format
- msgid "Package %s not installed, cannot update it."
- msgstr "パッケージ %s はインストールされていないので、更新できません。"
- 
--#: dnf/base.py:1987
-+#: dnf/base.py:2059
- #, python-format
- msgid ""
- "The same or higher version of %s is already installed, cannot update it."
- msgstr "同じまたはさらに新しいバージョンの %s が既にインストールされています、アップデートできません。"
- 
--#: dnf/base.py:2026 dnf/cli/commands/reinstall.py:81
-+#: dnf/base.py:2098 dnf/cli/commands/reinstall.py:81
- #, python-format
- msgid "Package %s available, but not installed."
- msgstr "パッケージ %s は利用可能ですが、インストールされていません。"
- 
--#: dnf/base.py:2032
-+#: dnf/base.py:2104
- #, python-format
- msgid "Package %s available, but installed for different architecture."
- msgstr "パッケージ %s は利用可能ですが、他のアーキテクチャー用にインストールされています。"
- 
--#: dnf/base.py:2057 dnf/base.py:2250 dnf/cli/cli.py:668 dnf/cli/cli.py:699
-+#: dnf/base.py:2129
- #, python-format
- msgid "No package %s installed."
- msgstr "パッケージ %s はインストールされていません。"
- 
--#: dnf/base.py:2075 dnf/cli/commands/install.py:136
-+#: dnf/base.py:2147 dnf/cli/commands/install.py:136
- #: dnf/cli/commands/remove.py:133
- #, python-format
- msgid "Not a valid form: %s"
- msgstr "有効な形式ではありません: %s"
- 
--#: dnf/base.py:2091 dnf/cli/commands/__init__.py:681
--#: dnf/cli/commands/remove.py:163
-+#: dnf/base.py:2162 dnf/cli/commands/__init__.py:681
-+#: dnf/cli/commands/remove.py:162
- msgid "No packages marked for removal."
- msgstr "削除対象のパッケージはありません。"
- 
--#: dnf/base.py:2179 dnf/cli/cli.py:422
-+#: dnf/base.py:2250 dnf/cli/cli.py:427
- #, python-format
- msgid "Packages for argument %s available, but not installed."
--msgstr "引数  %s のパッケージは利用可能ですが、インストールされていません。"
-+msgstr "引数 %s のパッケージは利用可能ですが、インストールされていません。"
- 
--#: dnf/base.py:2184
-+#: dnf/base.py:2255
- #, python-format
- msgid "Package %s of lowest version already installed, cannot downgrade it."
- msgstr "最下位バージョンのパッケージ %s はインストール済みなので、ダウングレードできません。"
- 
--#: dnf/base.py:2242
--msgid "Action not handled: {}"
--msgstr "動作は対処されていません: {}"
--
--#: dnf/base.py:2256 dnf/cli/cli.py:419 dnf/cli/cli.py:673 dnf/cli/cli.py:703
--#: dnf/cli/commands/group.py:400 dnf/cli/commands/history.py:169
--#, python-format
--msgid "No package %s available."
--msgstr "利用可能なパッケージ %s がありません。"
--
--#: dnf/base.py:2269
--msgid "no package matched"
--msgstr "一致したパッケージはありません。"
--
--#: dnf/base.py:2290
-+#: dnf/base.py:2302
- msgid "No security updates needed, but {} update available"
- msgstr "セキュリティー更新は必要ありませんが、{} 更新が利用可能です"
- 
--#: dnf/base.py:2292
-+#: dnf/base.py:2304
- msgid "No security updates needed, but {} updates available"
- msgstr "セキュリティー更新は必要ありませんが、{} 更新が利用可能です"
- 
--#: dnf/base.py:2296
-+#: dnf/base.py:2308
- msgid "No security updates needed for \"{}\", but {} update available"
- msgstr "\"{}\" のセキュリティー更新は必要ありませんが、{} 更新が利用可能です"
- 
--#: dnf/base.py:2298
-+#: dnf/base.py:2310
- msgid "No security updates needed for \"{}\", but {} updates available"
- msgstr "\"{}\" のセキュリティー更新は必要ありませんが、{} 更新が利用可能です"
- 
- #. raise an exception, because po.repoid is not in self.repos
--#: dnf/base.py:2319
-+#: dnf/base.py:2331
- #, python-format
- msgid "Unable to retrieve a key for a commandline package: %s"
--msgstr ""
-+msgstr "コマンドラインパッケージのキーを取得できません: %s"
- 
--#: dnf/base.py:2327
-+#: dnf/base.py:2339
- #, python-format
- msgid ". Failing package is: %s"
- msgstr ". 失敗したパッケージは: %s"
- 
--#: dnf/base.py:2328
-+#: dnf/base.py:2340
- #, python-format
- msgid "GPG Keys are configured as: %s"
- msgstr "GPG 鍵が設定されています: %s"
- 
--#: dnf/base.py:2340
-+#: dnf/base.py:2352
- #, python-format
- msgid "GPG key at %s (0x%s) is already installed"
- msgstr "%s (0x%s) の GPG 鍵はインストール済みです"
- 
--#: dnf/base.py:2373
-+#: dnf/base.py:2385
- msgid "The key has been approved."
- msgstr "鍵が承認されました。"
- 
--#: dnf/base.py:2376
-+#: dnf/base.py:2388
- msgid "The key has been rejected."
- msgstr "鍵が拒否されました。"
- 
--#: dnf/base.py:2409
-+#: dnf/base.py:2421
- #, python-format
- msgid "Key import failed (code %d)"
- msgstr "鍵のインポートに失敗しました (コード: %d)"
- 
--#: dnf/base.py:2411
-+#: dnf/base.py:2423
- msgid "Key imported successfully"
- msgstr "鍵のインポートに成功しました"
- 
--#: dnf/base.py:2415
-+#: dnf/base.py:2427
- msgid "Didn't install any keys"
- msgstr "鍵を 1 つもインストールしませんでした"
- 
--#: dnf/base.py:2418
-+#: dnf/base.py:2430
- #, python-format
- msgid ""
- "The GPG keys listed for the \"%s\" repository are already installed but they are not correct for this package.\n"
-@@ -509,49 +496,49 @@ msgstr ""
- "\"%s\" リポジトリーに一覧表示されている GPG 鍵はインストール済みですが、このパッケージには適切ではありません。\n"
- "正しい鍵 URL がこのリポジトリー用に設定されているか確認してください。"
- 
--#: dnf/base.py:2429
-+#: dnf/base.py:2441
- msgid "Import of key(s) didn't help, wrong key(s)?"
- msgstr "鍵をインポートしても役に立ちませんでした。鍵が間違っていませんか?"
- 
--#: dnf/base.py:2482
-+#: dnf/base.py:2494
- msgid "  * Maybe you meant: {}"
- msgstr "  * おそらく: {}"
- 
--#: dnf/base.py:2514
-+#: dnf/base.py:2526
- msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum"
- msgstr "ローカルリポジトリー \"{}\" のパッケージ \"{}\" のチェックサムは正しくありません"
- 
--#: dnf/base.py:2517
-+#: dnf/base.py:2529
- msgid "Some packages from local repository have incorrect checksum"
- msgstr "ローカルリポジトリーのいくつかのパッケージのチェックサムは正しくありません"
- 
--#: dnf/base.py:2520
-+#: dnf/base.py:2532
- msgid "Package \"{}\" from repository \"{}\" has incorrect checksum"
- msgstr "リポジトリー \"{}\" のパッケージ \"{}\" のチェックサムは正しくありません"
- 
--#: dnf/base.py:2523
-+#: dnf/base.py:2535
- msgid ""
- "Some packages have invalid cache, but cannot be downloaded due to \"--"
- "cacheonly\" option"
- msgstr "いくつかのパッケージには無効なキャッシュがありますが、\"--cacheonly\" オプションによりダウンロードできません"
- 
--#: dnf/base.py:2541 dnf/base.py:2561
-+#: dnf/base.py:2553 dnf/base.py:2573
- msgid "No match for argument"
- msgstr "一致した引数がありません"
- 
--#: dnf/base.py:2549 dnf/base.py:2569
-+#: dnf/base.py:2561 dnf/base.py:2581
- msgid "All matches were filtered out by exclude filtering for argument"
--msgstr "すべての検索結果は引数の除外フィルタリングに一致しません(filter out)"
-+msgstr "すべての検索結果は引数の除外フィルタリングに一致しません (filter out)"
- 
--#: dnf/base.py:2551
-+#: dnf/base.py:2563
- msgid "All matches were filtered out by modular filtering for argument"
--msgstr "すべての検出結果は引数のモジュラーフィルタリングに一致しません(filter out)"
-+msgstr "すべての検出結果は引数のモジュラーフィルタリングに一致しません (filter out)"
- 
--#: dnf/base.py:2567
-+#: dnf/base.py:2579
- msgid "All matches were installed from a different repository for argument"
- msgstr "すべての検索結果は引数に対し異なるレポジトリからインストールされたものです"
- 
--#: dnf/base.py:2583
-+#: dnf/base.py:2626
- #, python-format
- msgid "Package %s is already installed."
- msgstr "パッケージ %s は既にインストールされています。"
-@@ -571,8 +558,8 @@ msgstr "ファイル \"%s\" の解析に失敗しました: %s"
- msgid "Cannot read file \"%s\": %s"
- msgstr "ファイル \"%s\" を読み込めません: %s"
- 
--#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:902
--#: dnf/cli/cli.py:906 dnf/cli/commands/alias.py:108
-+#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:803
-+#: dnf/cli/cli.py:807 dnf/cli/commands/alias.py:108
- #, python-format
- msgid "Config error: %s"
- msgstr "設定エラー: %s"
-@@ -603,7 +590,7 @@ msgid ""
- "stream '{2}'"
- msgstr "オペレーションは、モジュール '{0}' ストリーム '{1}' を ストリーム '{2}' へと切り替える結果となります"
- 
--#: dnf/cli/cli.py:172
-+#: dnf/cli/cli.py:173
- #, python-brace-format
- msgid ""
- "It is not possible to switch enabled streams of a module.\n"
-@@ -612,35 +599,35 @@ msgstr ""
- "モジュールの有効なストリームを切り替えることはできません。\n"
- "モジュールからインストールされた全てのコンテンツを削除し、 '{prog} module reset <module_name>' コマンドを使用してリセットすることが推奨されます。モジュールのリセット後、他のストリームをインストール可能です。"
- 
--#: dnf/cli/cli.py:210
-+#: dnf/cli/cli.py:211
- #, python-brace-format
- msgid "{prog} will only download packages for the transaction."
- msgstr "{prog} はトランザクションでパッケージのダウンロードのみ行います。"
- 
--#: dnf/cli/cli.py:213
-+#: dnf/cli/cli.py:214
- #, python-brace-format
- msgid ""
- "{prog} will only download packages, install gpg keys, and check the "
- "transaction."
- msgstr "{prog} はパッケージのダウンロード、gpgキーのインストール、トランザクションのチェックのみ行います。"
- 
--#: dnf/cli/cli.py:217
-+#: dnf/cli/cli.py:218
- msgid "Operation aborted."
- msgstr "操作が中断されました。"
- 
--#: dnf/cli/cli.py:224
-+#: dnf/cli/cli.py:225
- msgid "Downloading Packages:"
- msgstr "パッケージのダウンロード:"
- 
--#: dnf/cli/cli.py:230
-+#: dnf/cli/cli.py:231
- msgid "Error downloading packages:"
- msgstr "パッケージのダウンロード中にエラーが発生しました:"
- 
--#: dnf/cli/cli.py:258
-+#: dnf/cli/cli.py:263
- msgid "Transaction failed"
- msgstr "トランザクションが失敗しました"
- 
--#: dnf/cli/cli.py:281
-+#: dnf/cli/cli.py:286
- msgid ""
- "Refusing to automatically import keys when running unattended.\n"
- "Use \"-y\" to override."
-@@ -648,116 +635,95 @@ msgstr ""
- "無人での実行中に鍵の自動インポートを拒否します。\n"
- "オーバーライドするには \"-y\" を使用してください。"
- 
--#: dnf/cli/cli.py:331
-+#: dnf/cli/cli.py:336
- msgid "Changelogs for {}"
- msgstr "{} の Changelogs"
- 
--#: dnf/cli/cli.py:364 dnf/cli/cli.py:505 dnf/cli/cli.py:511
-+#: dnf/cli/cli.py:369 dnf/cli/cli.py:510 dnf/cli/cli.py:516
- msgid "Obsoleting Packages"
- msgstr "パッケージの廃止"
- 
--#: dnf/cli/cli.py:393
-+#: dnf/cli/cli.py:398
- msgid "No packages marked for distribution synchronization."
--msgstr "ディストリビューション同期対象のパッケージがありません"
-+msgstr "ディストリビューション同期対象のパッケージがありません。"
-+
-+#: dnf/cli/cli.py:424 dnf/cli/commands/group.py:395
-+#, python-format
-+msgid "No package %s available."
-+msgstr "利用可能なパッケージ %s がありません。"
- 
--#: dnf/cli/cli.py:428
-+#: dnf/cli/cli.py:433
- msgid "No packages marked for downgrade."
- msgstr "ダウングレード対象のパッケージはありません。"
- 
--#: dnf/cli/cli.py:479
-+#: dnf/cli/cli.py:484
- msgid "Installed Packages"
- msgstr "インストール済みパッケージ"
- 
--#: dnf/cli/cli.py:487
-+#: dnf/cli/cli.py:492
- msgid "Available Packages"
- msgstr "利用可能なパッケージ"
- 
--#: dnf/cli/cli.py:491
-+#: dnf/cli/cli.py:496
- msgid "Autoremove Packages"
- msgstr "パッケージを自動削除します"
- 
--#: dnf/cli/cli.py:493
-+#: dnf/cli/cli.py:498
- msgid "Extra Packages"
- msgstr "エクストラパッケージ"
- 
--#: dnf/cli/cli.py:497
-+#: dnf/cli/cli.py:502
- msgid "Available Upgrades"
- msgstr "利用可能なアップグレード"
- 
--#: dnf/cli/cli.py:513
-+#: dnf/cli/cli.py:518
- msgid "Recently Added Packages"
- msgstr "最近追加したパッケージ"
- 
--#: dnf/cli/cli.py:518
-+#: dnf/cli/cli.py:522
- msgid "No matching Packages to list"
- msgstr "表示するための一致したパッケージはありません"
- 
--#: dnf/cli/cli.py:599
-+#: dnf/cli/cli.py:603
- msgid "No Matches found"
- msgstr "一致したものは見つかりませんでした"
- 
--#: dnf/cli/cli.py:609
--msgid "No transaction ID given"
--msgstr "トランザクション ID は指定されていません"
--
--#: dnf/cli/cli.py:614
--msgid "Not found given transaction ID"
--msgstr "指定されたトランザクション ID は見つかりません"
--
--#: dnf/cli/cli.py:623
--msgid "Found more than one transaction ID!"
--msgstr "1 つ以上のトランザクション ID が見つかりました!"
--
--#: dnf/cli/cli.py:640
--#, python-format
--msgid "Transaction history is incomplete, before %u."
--msgstr "%u の前のトランザクション履歴が不完全です。"
--
--#: dnf/cli/cli.py:642
--#, python-format
--msgid "Transaction history is incomplete, after %u."
--msgstr "%u の後のトランザクション履歴が不完全です。"
--
--#: dnf/cli/cli.py:689
--msgid "Undoing transaction {}, from {}"
--msgstr "トランザクション {} を {} から取り消しています"
--
--#: dnf/cli/cli.py:769 dnf/cli/commands/shell.py:237
-+#: dnf/cli/cli.py:670 dnf/cli/commands/shell.py:237
- #, python-format
- msgid "Unknown repo: '%s'"
- msgstr "不明な repo : '%s'"
- 
--#: dnf/cli/cli.py:783
-+#: dnf/cli/cli.py:684
- #, python-format
- msgid "No repository match: %s"
- msgstr "一致するリポジトリーがありません: %s"
- 
--#: dnf/cli/cli.py:817
-+#: dnf/cli/cli.py:718
- msgid ""
- "This command has to be run with superuser privileges (under the root user on"
- " most systems)."
- msgstr "このコマンドはスーパーユーザー特権(大概のシステムではrootユーザー)で実行しなければいけません。"
- 
--#: dnf/cli/cli.py:847
-+#: dnf/cli/cli.py:748
- #, python-format
- msgid "No such command: %s. Please use %s --help"
--msgstr "そのようなコマンドはありません: %s. %s --help を使用してください。"
-+msgstr "そのようなコマンドはありません: %s. %s --help を使用してください"
- 
--#: dnf/cli/cli.py:850
-+#: dnf/cli/cli.py:751
- #, python-format, python-brace-format
- msgid ""
- "It could be a {PROG} plugin command, try: \"{prog} install 'dnf-"
- "command(%s)'\""
- msgstr "{PROG} プラグインコマンドを実行できません、試してください: \"{prog} install 'dnf-command(%s)'\""
- 
--#: dnf/cli/cli.py:854
-+#: dnf/cli/cli.py:755
- #, python-brace-format
- msgid ""
- "It could be a {prog} plugin command, but loading of plugins is currently "
- "disabled."
- msgstr "{prog} プラグインコマンドを実行できません、プラグインのロードが現在無効になっているようです。"
- 
--#: dnf/cli/cli.py:912
-+#: dnf/cli/cli.py:813
- msgid ""
- "--destdir or --downloaddir must be used with --downloadonly or download or "
- "system-upgrade command."
-@@ -765,7 +731,7 @@ msgstr ""
- "--destdir または --downloaddir は、--downloadonly、download あるいは system-upgrade "
- "コマンドと共に使用する必要があります。"
- 
--#: dnf/cli/cli.py:918
-+#: dnf/cli/cli.py:819
- msgid ""
- "--enable, --set-enabled and --disable, --set-disabled must be used with "
- "config-manager command."
-@@ -773,7 +739,7 @@ msgstr ""
- "--enable と --set-enabled および --disable と --set-disabled は、config-manager "
- "コマンドと共に使用しなければなりません。"
- 
--#: dnf/cli/cli.py:1000
-+#: dnf/cli/cli.py:901
- msgid ""
- "Warning: Enforcing GPG signature check globally as per active RPM security "
- "policy (see 'gpgcheck' in dnf.conf(5) for how to squelch this message)"
-@@ -781,38 +747,38 @@ msgstr ""
- "警告: アクティブな RPM セキュリティーポリシーにより、GPG 署名の確認をグローバルに強制します "
- "(このメッセージをスケルチするには、dnf.conf(5) の 'gpgcheck' を参照してください)"
- 
--#: dnf/cli/cli.py:1020
-+#: dnf/cli/cli.py:921
- msgid "Config file \"{}\" does not exist"
- msgstr "設定ファイル \"{}\" は存在しません"
- 
--#: dnf/cli/cli.py:1040
-+#: dnf/cli/cli.py:941
- msgid ""
- "Unable to detect release version (use '--releasever' to specify release "
- "version)"
- msgstr "リリースバージョンを検出できません (リリースバージョンを指定するには '--releasever' を使用してください)"
- 
--#: dnf/cli/cli.py:1127 dnf/cli/commands/repoquery.py:471
-+#: dnf/cli/cli.py:1028 dnf/cli/commands/repoquery.py:471
- msgid "argument {}: not allowed with argument {}"
- msgstr "引数 {}: 引数 {} と許可されていません"
- 
--#: dnf/cli/cli.py:1134
-+#: dnf/cli/cli.py:1035
- #, python-format
- msgid "Command \"%s\" already defined"
- msgstr "コマンド \"%s\" はすでに定義済みです"
- 
--#: dnf/cli/cli.py:1154
-+#: dnf/cli/cli.py:1055
- msgid "Excludes in dnf.conf: "
- msgstr "dnf.conf で除外します: "
- 
--#: dnf/cli/cli.py:1157
-+#: dnf/cli/cli.py:1058
- msgid "Includes in dnf.conf: "
- msgstr "dnf.conf で含めます: "
- 
--#: dnf/cli/cli.py:1160
-+#: dnf/cli/cli.py:1061
- msgid "Excludes in repo "
- msgstr "repo で除外します "
- 
--#: dnf/cli/cli.py:1163
-+#: dnf/cli/cli.py:1064
- msgid "Includes in repo "
- msgstr "repo に含めます "
- 
-@@ -869,7 +835,7 @@ msgid "show all packages (default)"
- msgstr "すべてのパッケージを表示します (デフォルト)"
- 
- #: dnf/cli/commands/__init__.py:171 dnf/cli/commands/__init__.py:743
--#: dnf/cli/commands/module.py:351
-+#: dnf/cli/commands/module.py:373
- msgid "show only available packages"
- msgstr "利用可能なパッケージのみを表示します"
- 
-@@ -1194,78 +1160,78 @@ msgstr "グループ情報を表示または使用します"
- msgid "No group data available for configured repositories."
- msgstr "設定されたリポジトリーが利用可能なグループデータはありません。"
- 
--#: dnf/cli/commands/group.py:129
-+#: dnf/cli/commands/group.py:126
- #, python-format
- msgid "Warning: Group %s does not exist."
- msgstr "警告: グループ %s は存在しません。"
- 
--#: dnf/cli/commands/group.py:170
-+#: dnf/cli/commands/group.py:167
- msgid "Warning: No groups match:"
- msgstr "警告: 一致するグループはありません:"
- 
--#: dnf/cli/commands/group.py:182 dnf/cli/commands/group.py:193
--#: dnf/cli/output.py:1226
-+#: dnf/cli/commands/group.py:179 dnf/cli/commands/group.py:190
-+#: dnf/cli/output.py:1139
- msgid "<name-unset>"
- msgstr "<name-unset>"
- 
--#: dnf/cli/commands/group.py:199
-+#: dnf/cli/commands/group.py:196
- msgid "Available Environment Groups:"
- msgstr "利用可能な環境グループ:"
- 
--#: dnf/cli/commands/group.py:201
-+#: dnf/cli/commands/group.py:198
- msgid "Installed Environment Groups:"
- msgstr "インストール済みの環境グループ:"
- 
--#: dnf/cli/commands/group.py:208 dnf/cli/commands/group.py:294
-+#: dnf/cli/commands/group.py:205 dnf/cli/commands/group.py:291
- msgid "Installed Groups:"
- msgstr "インストール済みのグループ:"
- 
--#: dnf/cli/commands/group.py:215 dnf/cli/commands/group.py:301
-+#: dnf/cli/commands/group.py:212 dnf/cli/commands/group.py:298
- msgid "Installed Language Groups:"
- msgstr "インストール済みの言語グループ:"
- 
--#: dnf/cli/commands/group.py:225 dnf/cli/commands/group.py:308
-+#: dnf/cli/commands/group.py:222 dnf/cli/commands/group.py:305
- msgid "Available Groups:"
- msgstr "利用可能なグループ:"
- 
--#: dnf/cli/commands/group.py:232 dnf/cli/commands/group.py:315
-+#: dnf/cli/commands/group.py:229 dnf/cli/commands/group.py:312
- msgid "Available Language Groups:"
- msgstr "利用可能な言語グループ:"
- 
--#: dnf/cli/commands/group.py:322
-+#: dnf/cli/commands/group.py:319
- msgid "include optional packages from group"
- msgstr "グループのオプションパッケージを含めます"
- 
--#: dnf/cli/commands/group.py:325
-+#: dnf/cli/commands/group.py:322
- msgid "show also hidden groups"
- msgstr "非表示のグループも表示します"
- 
--#: dnf/cli/commands/group.py:327
-+#: dnf/cli/commands/group.py:324
- msgid "show only installed groups"
- msgstr "インストール済みのグループのみを表示します"
- 
--#: dnf/cli/commands/group.py:329
-+#: dnf/cli/commands/group.py:326
- msgid "show only available groups"
- msgstr "利用可能なグループのみを表示します"
- 
--#: dnf/cli/commands/group.py:331
-+#: dnf/cli/commands/group.py:328
- msgid "show also ID of groups"
- msgstr "グループIDも表示"
- 
--#: dnf/cli/commands/group.py:333
-+#: dnf/cli/commands/group.py:330
- msgid "available subcommands: {} (default), {}"
- msgstr "利用可能なサブコマンド: {} (default), {}"
- 
--#: dnf/cli/commands/group.py:337
-+#: dnf/cli/commands/group.py:334
- msgid "argument for group subcommand"
- msgstr "グループサブコマンドの引数"
- 
--#: dnf/cli/commands/group.py:346
-+#: dnf/cli/commands/group.py:343
- #, python-format
- msgid "Invalid groups sub-command, use: %s."
--msgstr "groups のサブコマンドが無効です: %s. を使用します"
-+msgstr "groups のサブコマンドが無効です: %s を使用します。"
- 
--#: dnf/cli/commands/group.py:403
-+#: dnf/cli/commands/group.py:398
- msgid "Unable to find a mandatory group package."
- msgstr "必須のグループパッケージを見つけることができません。"
- 
-@@ -1275,25 +1241,25 @@ msgstr "トランザクション履歴を表示、または使用します"
- 
- #: dnf/cli/commands/history.py:66
- msgid "For the store command, file path to store the transaction to"
--msgstr ""
-+msgstr "store コマンドの場合は、トランザクションを保存するファイルパス"
- 
- #: dnf/cli/commands/history.py:68
- msgid ""
- "For the replay command, don't check for installed packages matching those in"
- " transaction"
--msgstr ""
-+msgstr "replay コマンドの場合は、トランザクション内のパッケージに一致するインストール済みパッケージを確認しない"
- 
- #: dnf/cli/commands/history.py:71
- msgid ""
- "For the replay command, don't check for extra packages pulled into the "
- "transaction"
--msgstr ""
-+msgstr "replay コマンドの場合は、トランザクションにプルされた追加パッケージを確認しない"
- 
- #: dnf/cli/commands/history.py:74
- msgid ""
- "For the replay command, skip packages that are not available or have missing"
- " dependencies"
--msgstr ""
-+msgstr "replay コマンドの場合は、利用できないパッケージや、依存関係が不足しているパッケージをスキップ"
- 
- #: dnf/cli/commands/history.py:94
- msgid ""
-@@ -1304,41 +1270,64 @@ msgstr ""
- "'{}' は 1 つのトランザクション ID またはパッケージ名が必要です。"
- 
- #: dnf/cli/commands/history.py:101
--#, fuzzy
--#| msgid "No transaction ID or package name given."
- msgid "No transaction file name given."
--msgstr "トランザクション ID、またはパッケージ名が指定されていません。"
-+msgstr "トランザクションファイル名が指定されていません。"
- 
- #: dnf/cli/commands/history.py:103
--#, fuzzy
--#| msgid "Failed to remove transaction file %s"
- msgid "More than one argument given as transaction file name."
--msgstr "トランザクションファイル %s の削除に失敗しました"
-+msgstr "トランザクションファイル名として指定された複数の引数。"
- 
--#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:126
-+#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:130
- msgid "No transaction ID or package name given."
- msgstr "トランザクション ID、またはパッケージ名が指定されていません。"
- 
--#: dnf/cli/commands/history.py:138
-+#: dnf/cli/commands/history.py:142
- #, python-format
- msgid "You don't have access to the history DB: %s"
- msgstr "履歴 DB にアクセスできません: %s"
- 
--#: dnf/cli/commands/history.py:147
-+#: dnf/cli/commands/history.py:151
- #, python-format
- msgid ""
- "Cannot undo transaction %s, doing so would result in an inconsistent package"
- " database."
- msgstr "トランザクション %s を取り消すことはできません。取り消すことで、パッケージデータベースに矛盾が生じます。"
- 
--#: dnf/cli/commands/history.py:152
-+#: dnf/cli/commands/history.py:156
- #, python-format
- msgid ""
- "Cannot rollback transaction %s, doing so would result in an inconsistent "
- "package database."
- msgstr "トランザクション %s をロールバックすることはできません。ロールバックすることで、パッケージデータベースに矛盾が生じます。"
- 
--#: dnf/cli/commands/history.py:222
-+#: dnf/cli/commands/history.py:175
-+msgid "No transaction ID given"
-+msgstr "トランザクション ID は指定されていません"
-+
-+#: dnf/cli/commands/history.py:179
-+#, python-brace-format
-+msgid "Transaction ID \"{0}\" not found."
-+msgstr "トランザクション ID \"{0}\" が見つかりません。"
-+
-+#: dnf/cli/commands/history.py:185
-+msgid "Found more than one transaction ID!"
-+msgstr "1 つ以上のトランザクション ID が見つかりました!"
-+
-+#: dnf/cli/commands/history.py:203
-+#, python-format
-+msgid "Transaction history is incomplete, before %u."
-+msgstr "%u の前のトランザクション履歴が不完全です。"
-+
-+#: dnf/cli/commands/history.py:205
-+#, python-format
-+msgid "Transaction history is incomplete, after %u."
-+msgstr "%u の後のトランザクション履歴が不完全です。"
-+
-+#: dnf/cli/commands/history.py:256
-+msgid "No packages to list"
-+msgstr "一覧表示するパッケージはありません"
-+
-+#: dnf/cli/commands/history.py:279
- msgid ""
- "Invalid transaction ID range definition '{}'.\n"
- "Use '<transaction-id>..<transaction-id>'."
-@@ -1346,7 +1335,7 @@ msgstr ""
- "無効なトランザクション ID の範囲の定義 '{}'。\n"
- "'<transaction-id>..<transaction-id>' を使用してください。"
- 
--#: dnf/cli/commands/history.py:226
-+#: dnf/cli/commands/history.py:283
- msgid ""
- "Can't convert '{}' to transaction ID.\n"
- "Use '<number>', 'last', 'last-<number>'."
-@@ -1354,40 +1343,29 @@ msgstr ""
- "'{}' をトランザクション IDに変換できません。\n"
- "'<number>', 'last', 'last-<number>' を使用してください。"
- 
--#: dnf/cli/commands/history.py:255
-+#: dnf/cli/commands/history.py:312
- msgid "No transaction which manipulates package '{}' was found."
- msgstr "パッケージ '{}' を操作するトランザクションが見つかりません。"
- 
--#: dnf/cli/commands/history.py:305
--#, fuzzy, python-brace-format
--#| msgid "TransactionItem not found for key: {}"
--msgid "Transaction ID \"{id}\" not found."
--msgstr "TransactionItemが見つかりません鍵: {}"
--
--#: dnf/cli/commands/history.py:313
-+#: dnf/cli/commands/history.py:357
- msgid "{} exists, overwrite?"
--msgstr ""
-+msgstr "{} は存在します。上書きしますか?"
- 
--#: dnf/cli/commands/history.py:316
-+#: dnf/cli/commands/history.py:360
- msgid "Not overwriting {}, exiting."
--msgstr ""
-+msgstr "{} は存在するため上書きしません。"
- 
--#: dnf/cli/commands/history.py:323
--#, fuzzy
--#| msgid "Transaction failed"
-+#: dnf/cli/commands/history.py:367
- msgid "Transaction saved to {}."
--msgstr "トランザクションが失敗しました"
-+msgstr "{} に保存されているトランザクション。"
- 
--#: dnf/cli/commands/history.py:326
--#, fuzzy
--#| msgid "Errors occurred during transaction."
-+#: dnf/cli/commands/history.py:370
- msgid "Error storing transaction: {}"
--msgstr "トランザクション中にエラーが発生しました。"
-+msgstr "トランザクションの保存エラー: {}"
- 
--#: dnf/cli/commands/history.py:350
--msgid ""
--"Warning, the following problems occurred while replaying the transaction:"
--msgstr ""
-+#: dnf/cli/commands/history.py:386
-+msgid "Warning, the following problems occurred while running a transaction:"
-+msgstr "警告: トランザクションの実行中に以下の問題が発生しました。"
- 
- #: dnf/cli/commands/install.py:47
- msgid "install a package or packages on your system"
-@@ -1406,7 +1384,7 @@ msgstr "一致するものが見つかりません"
- msgid "Not a valid rpm file path: %s"
- msgstr "有効な rpm ファイルパスではありません: %s"
- 
--#: dnf/cli/commands/install.py:167
-+#: dnf/cli/commands/install.py:166
- #, python-brace-format
- msgid "There are following alternatives for \"{0}\": {1}"
- msgstr "\"{0}\"には次の選択肢があります: {1}"
-@@ -1449,7 +1427,7 @@ msgid "%s marked as group installed."
- msgstr "グループインストールには %s のマークがついています。"
- 
- #: dnf/cli/commands/mark.py:85 dnf/cli/commands/shell.py:129
--#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:279
-+#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:282
- msgid "Error:"
- msgstr "エラー:"
- 
-@@ -1505,42 +1483,46 @@ msgid "Package {} belongs to multiple modules, skipping"
- msgstr "パッケージ {} は複数のモジュールに属しています、スキップします"
- 
- #: dnf/cli/commands/module.py:277
-+msgid "switch a module to a stream and distrosync rpm packages"
-+msgstr "モジュールをストリームに切り替え、rpm パッケージを distrosync します"
-+
-+#: dnf/cli/commands/module.py:299
- msgid "list modular packages"
- msgstr "モジュラーパッケージをリスト"
- 
--#: dnf/cli/commands/module.py:292
-+#: dnf/cli/commands/module.py:314
- msgid "list packages belonging to a module"
- msgstr "モジュールに属するパッケージをリスト"
- 
--#: dnf/cli/commands/module.py:327
-+#: dnf/cli/commands/module.py:349
- msgid "Interact with Modules."
- msgstr "モジュールと対話します。"
- 
--#: dnf/cli/commands/module.py:340
-+#: dnf/cli/commands/module.py:362
- msgid "show only enabled modules"
- msgstr "有効なモジュールのみを表示します"
- 
--#: dnf/cli/commands/module.py:343
-+#: dnf/cli/commands/module.py:365
- msgid "show only disabled modules"
- msgstr "無効なモジュールのみを表示します"
- 
--#: dnf/cli/commands/module.py:346
-+#: dnf/cli/commands/module.py:368
- msgid "show only installed modules or packages"
- msgstr "インストールされたモジュールまたはパッケージのみ表示"
- 
--#: dnf/cli/commands/module.py:349
-+#: dnf/cli/commands/module.py:371
- msgid "show profile content"
- msgstr "プロファイルコンテンツを表示します"
- 
--#: dnf/cli/commands/module.py:354
-+#: dnf/cli/commands/module.py:376
- msgid "remove all modular packages"
- msgstr "すべてのモジュラーパッケージを削除"
- 
--#: dnf/cli/commands/module.py:364
-+#: dnf/cli/commands/module.py:386
- msgid "Module specification"
- msgstr "モジュールspec"
- 
--#: dnf/cli/commands/module.py:386
-+#: dnf/cli/commands/module.py:408
- msgid "{} {} {}: too few arguments"
- msgstr "{} {} {}: 引数が足りません"
- 
-@@ -1843,6 +1825,8 @@ msgid ""
- "display format for listing packages: \"%%{name} %%{version} ...\", use "
- "--querytags to view full tag list"
- msgstr ""
-+"パッケージを一覧表示するための形式の表示: \"%%{name} %%{version} ...\"。--querytags "
-+"を指定して完全なタグリストを表示"
- 
- #: dnf/cli/commands/repoquery.py:198
- msgid "show available tags to use with --queryformat"
-@@ -1977,7 +1961,7 @@ msgid ""
- msgstr ""
- "オプションの '--resolve' は、'--conflicts'、'--depends'、'--enhances'、'--provides'、'--"
- "recommends'、'--requires'、'--requires-pre'、'--suggests' または '--supplements' "
--"オプションのいずれか 1 つと使用する必要があります。"
-+"オプションのいずれか 1 つと使用する必要があります"
- 
- #: dnf/cli/commands/repoquery.py:305
- msgid ""
-@@ -1986,7 +1970,7 @@ msgid ""
- "--resolve'"
- msgstr ""
- "オプションの '--recursive' は、'--whatrequires <REQ>' (オプションでは '--exactdeps' ではなく、'"
--"--alldeps' と共に使用) または '--requires <REQ> --resolve' と共に使用する必要があります。"
-+"--alldeps' と共に使用) または '--requires <REQ> --resolve' と共に使用する必要があります"
- 
- #: dnf/cli/commands/repoquery.py:312
- msgid "argument {} requires --whatrequires or --whatdepends option"
-@@ -2027,22 +2011,22 @@ msgstr "KEYWORD"
- msgid "Keyword to search for"
- msgstr "検索のキーワード"
- 
--#: dnf/cli/commands/search.py:61 dnf/cli/output.py:506
-+#: dnf/cli/commands/search.py:61 dnf/cli/output.py:460
- msgctxt "long"
- msgid "Name"
- msgstr "名前"
- 
--#: dnf/cli/commands/search.py:62 dnf/cli/output.py:559
-+#: dnf/cli/commands/search.py:62 dnf/cli/output.py:513
- msgctxt "long"
- msgid "Summary"
- msgstr "概要"
- 
--#: dnf/cli/commands/search.py:63 dnf/cli/output.py:569
-+#: dnf/cli/commands/search.py:63 dnf/cli/output.py:523
- msgctxt "long"
- msgid "Description"
- msgstr "説明"
- 
--#: dnf/cli/commands/search.py:64 dnf/cli/output.py:562
-+#: dnf/cli/commands/search.py:64 dnf/cli/output.py:516
- msgid "URL"
- msgstr "URL"
- 
-@@ -2185,16 +2169,16 @@ msgstr ""
- "実行                      トランザクションセットの解決および実行\n"
- "終了 (または 中止)           シェルの終了"
- 
--#: dnf/cli/commands/shell.py:259
-+#: dnf/cli/commands/shell.py:262
- #, python-format
- msgid "Error: Cannot open %s for reading"
- msgstr "エラー: 読み込み用に %s を開くことができません"
- 
--#: dnf/cli/commands/shell.py:281 dnf/cli/main.py:187
-+#: dnf/cli/commands/shell.py:284 dnf/cli/main.py:187
- msgid "Complete!"
- msgstr "完了しました!"
- 
--#: dnf/cli/commands/shell.py:291
-+#: dnf/cli/commands/shell.py:294
- msgid "Leaving Shell"
- msgstr "シェルを終了します"
- 
-@@ -2385,8 +2369,8 @@ msgstr "重大度"
- msgid "Files"
- msgstr "ファイル"
- 
--#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1499
--#: dnf/cli/output.py:1772 dnf/cli/output.py:1774
-+#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1652
-+#: dnf/cli/output.py:1654 dnf/util.py:591
- msgid "Installed"
- msgstr "インストール済み"
- 
-@@ -2709,13 +2693,13 @@ msgstr "引数をエンコードできません '%s': %s"
- #. Translators: This is abbreviated 'Name'. Should be no longer
- #. than 12 characters. You can use the full version if it is short
- #. enough in your language.
--#: dnf/cli/output.py:505
-+#: dnf/cli/output.py:459
- msgctxt "short"
- msgid "Name"
- msgstr "名前"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:511
-+#: dnf/cli/output.py:465
- msgid "Epoch"
- msgstr "エポック"
- 
-@@ -2723,38 +2707,38 @@ msgstr "エポック"
- #. use the full (unabbreviated) term 'Version' if you think that
- #. the translation to your language is not too long and will
- #. always fit to limited space.
--#: dnf/cli/output.py:512 dnf/cli/output.py:1335
-+#: dnf/cli/output.py:466 dnf/cli/output.py:1248
- msgctxt "short"
- msgid "Version"
- msgstr "バージョン"
- 
- #. Translators: This is the full (unabbreviated) term 'Version'.
--#: dnf/cli/output.py:513 dnf/cli/output.py:1337
-+#: dnf/cli/output.py:467 dnf/cli/output.py:1250
- msgctxt "long"
- msgid "Version"
- msgstr "バージョン"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:516
-+#: dnf/cli/output.py:470
- msgid "Release"
- msgstr "リリース"
- 
- #. Translators: This is abbreviated 'Architecture', used when
- #. we have not enough space to display the full word.
--#: dnf/cli/output.py:517 dnf/cli/output.py:1326
-+#: dnf/cli/output.py:471 dnf/cli/output.py:1239
- msgctxt "short"
- msgid "Arch"
- msgstr "Arch"
- 
- #. Translators: This is the full word 'Architecture', used when
- #. we have enough space.
--#: dnf/cli/output.py:518 dnf/cli/output.py:1329
-+#: dnf/cli/output.py:472 dnf/cli/output.py:1242
- msgctxt "long"
- msgid "Architecture"
- msgstr "アーキテクチャー"
- 
- #. Translators: This is the full (unabbreviated) term 'Size'.
--#: dnf/cli/output.py:520 dnf/cli/output.py:1352
-+#: dnf/cli/output.py:474 dnf/cli/output.py:1265
- msgctxt "long"
- msgid "Size"
- msgstr "サイズ"
-@@ -2763,32 +2747,32 @@ msgstr "サイズ"
- #. not be longer than 5 characters. If the term 'Size' in your
- #. language is not longer than 5 characters then you can use it
- #. unabbreviated.
--#: dnf/cli/output.py:520 dnf/cli/output.py:1350
-+#: dnf/cli/output.py:474 dnf/cli/output.py:1263
- msgctxt "short"
- msgid "Size"
- msgstr "サイズ"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:524
-+#: dnf/cli/output.py:478
- msgid "Source"
- msgstr "ソース"
- 
- #. Translators: This is abbreviated 'Repository', used when
- #. we have not enough space to display the full word.
--#: dnf/cli/output.py:525 dnf/cli/output.py:1341
-+#: dnf/cli/output.py:479 dnf/cli/output.py:1254
- msgctxt "short"
- msgid "Repo"
- msgstr "Repo"
- 
- #. Translators: This is the full word 'Repository', used when
- #. we have enough space.
--#: dnf/cli/output.py:526 dnf/cli/output.py:1344
-+#: dnf/cli/output.py:480 dnf/cli/output.py:1257
- msgctxt "long"
- msgid "Repository"
- msgstr "リポジトリー"
- 
- #. Translators: This message should be no longer than 12 chars.
--#: dnf/cli/output.py:533
-+#: dnf/cli/output.py:487
- msgid "From repo"
- msgstr "repo から"
- 
-@@ -2796,312 +2780,308 @@ msgstr "repo から"
- #. print(_("Committer   : %s") % ucd(pkg.committer))
- #. print(_("Committime  : %s") % time.ctime(pkg.committime))
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:539
-+#: dnf/cli/output.py:493
- msgid "Packager"
- msgstr "パッケージャー"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:541
-+#: dnf/cli/output.py:495
- msgid "Buildtime"
- msgstr "ビルド時間"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:545
-+#: dnf/cli/output.py:499
- msgid "Install time"
- msgstr "インストール時間"
- 
- #. Translators: This message should be no longer than 12 chars.
--#: dnf/cli/output.py:554
-+#: dnf/cli/output.py:508
- msgid "Installed by"
- msgstr "インストール済み"
- 
- #. Translators: This is abbreviated 'Summary'. Should be no longer
- #. than 12 characters. You can use the full version if it is short
- #. enough in your language.
--#: dnf/cli/output.py:558
-+#: dnf/cli/output.py:512
- msgctxt "short"
- msgid "Summary"
- msgstr "概要"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:564
-+#: dnf/cli/output.py:518
- msgid "License"
- msgstr "ライセンス"
- 
- #. Translators: This is abbreviated 'Description'. Should be no longer
- #. than 12 characters. You can use the full version if it is short
- #. enough in your language.
--#: dnf/cli/output.py:568
-+#: dnf/cli/output.py:522
- msgctxt "short"
- msgid "Description"
- msgstr "説明"
- 
--#: dnf/cli/output.py:695
--msgid "No packages to list"
--msgstr "一覧表示するパッケージはありません"
--
--#: dnf/cli/output.py:706
-+#: dnf/cli/output.py:650
- msgid "y"
- msgstr "y"
- 
--#: dnf/cli/output.py:706
-+#: dnf/cli/output.py:650
- msgid "yes"
- msgstr "はい"
- 
--#: dnf/cli/output.py:707
-+#: dnf/cli/output.py:651
- msgid "n"
- msgstr "n"
- 
--#: dnf/cli/output.py:707
-+#: dnf/cli/output.py:651
- msgid "no"
- msgstr "いいえ"
- 
--#: dnf/cli/output.py:711
-+#: dnf/cli/output.py:655
- msgid "Is this ok [y/N]: "
- msgstr "これでよろしいですか? [y/N]: "
- 
--#: dnf/cli/output.py:715
-+#: dnf/cli/output.py:659
- msgid "Is this ok [Y/n]: "
- msgstr "これでよろしいですか? [Y/n]: "
- 
--#: dnf/cli/output.py:795
-+#: dnf/cli/output.py:739
- #, python-format
- msgid "Group: %s"
- msgstr "グループ: %s"
- 
--#: dnf/cli/output.py:799
-+#: dnf/cli/output.py:743
- #, python-format
- msgid " Group-Id: %s"
- msgstr " グループ ID: %s"
- 
--#: dnf/cli/output.py:801 dnf/cli/output.py:840
-+#: dnf/cli/output.py:745 dnf/cli/output.py:784
- #, python-format
- msgid " Description: %s"
- msgstr " 説明: %s"
- 
--#: dnf/cli/output.py:803
-+#: dnf/cli/output.py:747
- #, python-format
- msgid " Language: %s"
- msgstr " 言語: %s"
- 
--#: dnf/cli/output.py:806
-+#: dnf/cli/output.py:750
- msgid " Mandatory Packages:"
- msgstr " 必須なパッケージ:"
- 
--#: dnf/cli/output.py:807
-+#: dnf/cli/output.py:751
- msgid " Default Packages:"
- msgstr " 標準パッケージ:"
- 
--#: dnf/cli/output.py:808
-+#: dnf/cli/output.py:752
- msgid " Optional Packages:"
- msgstr " オプション パッケージ:"
- 
--#: dnf/cli/output.py:809
-+#: dnf/cli/output.py:753
- msgid " Conditional Packages:"
- msgstr " 条件付きパッケージ:"
- 
--#: dnf/cli/output.py:834
-+#: dnf/cli/output.py:778
- #, python-format
- msgid "Environment Group: %s"
- msgstr "環境グループ: %s"
- 
--#: dnf/cli/output.py:837
-+#: dnf/cli/output.py:781
- #, python-format
- msgid " Environment-Id: %s"
- msgstr " 環境 Id: %s"
- 
--#: dnf/cli/output.py:843
-+#: dnf/cli/output.py:787
- msgid " Mandatory Groups:"
- msgstr " 必須なグループ:"
- 
--#: dnf/cli/output.py:844
-+#: dnf/cli/output.py:788
- msgid " Optional Groups:"
- msgstr " 任意なグループ:"
- 
--#: dnf/cli/output.py:865
-+#: dnf/cli/output.py:809
- msgid "Matched from:"
- msgstr "一致:"
- 
--#: dnf/cli/output.py:879
-+#: dnf/cli/output.py:823
- #, python-format
- msgid "Filename    : %s"
- msgstr "ファイル名    : %s"
- 
--#: dnf/cli/output.py:904
-+#: dnf/cli/output.py:848
- #, python-format
- msgid "Repo        : %s"
- msgstr "Repo        : %s"
- 
--#: dnf/cli/output.py:913
-+#: dnf/cli/output.py:857
- msgid "Description : "
--msgstr "説明                : "
-+msgstr "説明: "
- 
--#: dnf/cli/output.py:917
-+#: dnf/cli/output.py:861
- #, python-format
- msgid "URL         : %s"
- msgstr "URL                 : %s"
- 
--#: dnf/cli/output.py:921
-+#: dnf/cli/output.py:865
- #, python-format
- msgid "License     : %s"
- msgstr "ライセンス    : %s"
- 
--#: dnf/cli/output.py:927
-+#: dnf/cli/output.py:871
- #, python-format
- msgid "Provide    : %s"
- msgstr "提供する    : %s"
- 
--#: dnf/cli/output.py:947
-+#: dnf/cli/output.py:891
- #, python-format
- msgid "Other       : %s"
- msgstr "その他       : %s"
- 
--#: dnf/cli/output.py:996
-+#: dnf/cli/output.py:940
- msgid "There was an error calculating total download size"
- msgstr "ダウンロードサイズの合計を計算中にエラーが発生しました"
- 
--#: dnf/cli/output.py:1002
-+#: dnf/cli/output.py:946
- #, python-format
- msgid "Total size: %s"
- msgstr "合計サイズ: %s"
- 
--#: dnf/cli/output.py:1005
-+#: dnf/cli/output.py:949
- #, python-format
- msgid "Total download size: %s"
- msgstr "ダウンロードサイズの合計: %s"
- 
--#: dnf/cli/output.py:1008
-+#: dnf/cli/output.py:952
- #, python-format
- msgid "Installed size: %s"
- msgstr "インストール後のサイズ: %s"
- 
--#: dnf/cli/output.py:1026
-+#: dnf/cli/output.py:970
- msgid "There was an error calculating installed size"
- msgstr "インストール後のサイズを計算中にエラーが発生しました"
- 
--#: dnf/cli/output.py:1030
-+#: dnf/cli/output.py:974
- #, python-format
- msgid "Freed space: %s"
- msgstr "解放された容量: %s"
- 
--#: dnf/cli/output.py:1039
-+#: dnf/cli/output.py:983
- msgid "Marking packages as installed by the group:"
- msgstr "パッケージをグループごとにインストール済みとマークします:"
- 
--#: dnf/cli/output.py:1046
-+#: dnf/cli/output.py:990
- msgid "Marking packages as removed by the group:"
- msgstr "パッケージをグループごとに削除済みとマークします:"
- 
--#: dnf/cli/output.py:1056
-+#: dnf/cli/output.py:1000
- msgid "Group"
- msgstr "グループ"
- 
--#: dnf/cli/output.py:1056
-+#: dnf/cli/output.py:1000
- msgid "Packages"
- msgstr "パッケージ"
- 
--#: dnf/cli/output.py:1133
-+#: dnf/cli/output.py:1046
- msgid "Installing group/module packages"
- msgstr "group/moduleパッケージをインストール"
- 
--#: dnf/cli/output.py:1134
-+#: dnf/cli/output.py:1047
- msgid "Installing group packages"
- msgstr "グループパッケージのインストール"
- 
- #. TRANSLATORS: This is for a list of packages to be installed.
--#: dnf/cli/output.py:1138
-+#: dnf/cli/output.py:1051
- msgctxt "summary"
- msgid "Installing"
- msgstr "インストール"
- 
- #. TRANSLATORS: This is for a list of packages to be upgraded.
--#: dnf/cli/output.py:1140
-+#: dnf/cli/output.py:1053
- msgctxt "summary"
- msgid "Upgrading"
- msgstr "アップグレード"
- 
- #. TRANSLATORS: This is for a list of packages to be reinstalled.
--#: dnf/cli/output.py:1142
-+#: dnf/cli/output.py:1055
- msgctxt "summary"
- msgid "Reinstalling"
- msgstr "再インストール"
- 
--#: dnf/cli/output.py:1144
-+#: dnf/cli/output.py:1057
- msgid "Installing dependencies"
- msgstr "依存関係のインストール"
- 
--#: dnf/cli/output.py:1145
-+#: dnf/cli/output.py:1058
- msgid "Installing weak dependencies"
- msgstr "弱い依存関係のインストール"
- 
- #. TRANSLATORS: This is for a list of packages to be removed.
--#: dnf/cli/output.py:1147
-+#: dnf/cli/output.py:1060
- msgid "Removing"
- msgstr "削除中"
- 
--#: dnf/cli/output.py:1148
-+#: dnf/cli/output.py:1061
- msgid "Removing dependent packages"
- msgstr "依存関係パッケージの削除"
- 
--#: dnf/cli/output.py:1149
-+#: dnf/cli/output.py:1062
- msgid "Removing unused dependencies"
- msgstr "未使用の依存関係の削除"
- 
- #. TRANSLATORS: This is for a list of packages to be downgraded.
--#: dnf/cli/output.py:1151
-+#: dnf/cli/output.py:1064
- msgctxt "summary"
- msgid "Downgrading"
- msgstr "ダウングレード"
- 
--#: dnf/cli/output.py:1176
-+#: dnf/cli/output.py:1089
- msgid "Installing module profiles"
- msgstr "モジュールプロファイルのインストール中"
- 
--#: dnf/cli/output.py:1185
-+#: dnf/cli/output.py:1098
- msgid "Disabling module profiles"
- msgstr "モジュールプロファイルの無効化中"
- 
--#: dnf/cli/output.py:1194
-+#: dnf/cli/output.py:1107
- msgid "Enabling module streams"
- msgstr "モジュールストリームの有効化中"
- 
--#: dnf/cli/output.py:1202
-+#: dnf/cli/output.py:1115
- msgid "Switching module streams"
- msgstr "モジュールストリームの切り替え中"
- 
--#: dnf/cli/output.py:1210
-+#: dnf/cli/output.py:1123
- msgid "Disabling modules"
- msgstr "モジュールの無効化"
- 
--#: dnf/cli/output.py:1218
-+#: dnf/cli/output.py:1131
- msgid "Resetting modules"
- msgstr "モジュールの再設定中"
- 
--#: dnf/cli/output.py:1230
-+#: dnf/cli/output.py:1143
- msgid "Installing Environment Groups"
- msgstr "環境グループのインストール中"
- 
--#: dnf/cli/output.py:1237
-+#: dnf/cli/output.py:1150
- msgid "Upgrading Environment Groups"
- msgstr "環境グループのアップグレード中"
- 
--#: dnf/cli/output.py:1244
-+#: dnf/cli/output.py:1157
- msgid "Removing Environment Groups"
- msgstr "環境グループの削除中"
- 
--#: dnf/cli/output.py:1251
-+#: dnf/cli/output.py:1164
- msgid "Installing Groups"
- msgstr "グループのインストール中"
- 
--#: dnf/cli/output.py:1258
-+#: dnf/cli/output.py:1171
- msgid "Upgrading Groups"
- msgstr "グループのアップグレード中"
- 
--#: dnf/cli/output.py:1265
-+#: dnf/cli/output.py:1178
- msgid "Removing Groups"
- msgstr "グループの削除中"
- 
--#: dnf/cli/output.py:1281
-+#: dnf/cli/output.py:1194
- #, python-format
- msgid ""
- "Skipping packages with conflicts:\n"
-@@ -3110,12 +3090,12 @@ msgstr ""
- "競合するパッケージをスキップします:\n"
- "(アップグレードを強制するにはコマンドラインに '%s' を追加します)"
- 
--#: dnf/cli/output.py:1291
-+#: dnf/cli/output.py:1204
- #, python-format
- msgid "Skipping packages with broken dependencies%s"
- msgstr "壊れた dependencies%s のパッケージをスキップします"
- 
--#: dnf/cli/output.py:1295
-+#: dnf/cli/output.py:1208
- msgid " or part of a group"
- msgstr " またはグループの一部"
- 
-@@ -3123,22 +3103,22 @@ msgstr " またはグループの一部"
- #. use the full (unabbreviated) term 'Package' if you think that
- #. the translation to your language is not too long and will
- #. always fit to limited space.
--#: dnf/cli/output.py:1320
-+#: dnf/cli/output.py:1233
- msgctxt "short"
- msgid "Package"
- msgstr "パッケージ"
- 
- #. Translators: This is the full (unabbreviated) term 'Package'.
--#: dnf/cli/output.py:1322
-+#: dnf/cli/output.py:1235
- msgctxt "long"
- msgid "Package"
- msgstr "パッケージ"
- 
--#: dnf/cli/output.py:1371
-+#: dnf/cli/output.py:1284
- msgid "replacing"
- msgstr "置き換え"
- 
--#: dnf/cli/output.py:1378
-+#: dnf/cli/output.py:1291
- #, python-format
- msgid ""
- "\n"
-@@ -3150,287 +3130,271 @@ msgstr ""
- "%s\n"
- 
- #. TODO: remove
--#: dnf/cli/output.py:1383 dnf/cli/output.py:1932 dnf/cli/output.py:1933
-+#: dnf/cli/output.py:1296 dnf/cli/output.py:1812 dnf/cli/output.py:1813
- msgid "Install"
- msgstr "インストール"
- 
--#: dnf/cli/output.py:1387 dnf/cli/output.py:1941
-+#: dnf/cli/output.py:1300 dnf/cli/output.py:1821
- msgid "Upgrade"
- msgstr "アップグレード"
- 
--#: dnf/cli/output.py:1388
-+#: dnf/cli/output.py:1301
- msgid "Remove"
- msgstr "削除"
- 
--#: dnf/cli/output.py:1390 dnf/cli/output.py:1939
-+#: dnf/cli/output.py:1303 dnf/cli/output.py:1819
- msgid "Downgrade"
- msgstr "ダウングレード"
- 
--#: dnf/cli/output.py:1391
-+#: dnf/cli/output.py:1304
- msgid "Skip"
- msgstr "スキップ"
- 
--#: dnf/cli/output.py:1400 dnf/cli/output.py:1416
-+#: dnf/cli/output.py:1313 dnf/cli/output.py:1329
- msgid "Package"
- msgid_plural "Packages"
- msgstr[0] "パッケージ"
- 
--#: dnf/cli/output.py:1418
-+#: dnf/cli/output.py:1331
- msgid "Dependent package"
- msgid_plural "Dependent packages"
- msgstr[0] "依存パッケージ"
- 
--#: dnf/cli/output.py:1497 dnf/cli/output.py:1773 dnf/cli/output.py:1942
--msgid "Upgraded"
--msgstr "アップグレード済み"
--
--#: dnf/cli/output.py:1498 dnf/cli/output.py:1773 dnf/cli/output.py:1940
--msgid "Downgraded"
--msgstr "ダウングレード済み"
--
--#: dnf/cli/output.py:1503
--msgid "Reinstalled"
--msgstr "再インストール済み"
--
--#: dnf/cli/output.py:1504
--msgid "Skipped"
--msgstr "スキップ済み"
--
--#: dnf/cli/output.py:1505
--msgid "Removed"
--msgstr "削除しました"
--
--#: dnf/cli/output.py:1508
--msgid "Failed"
--msgstr "失敗しました"
--
--#: dnf/cli/output.py:1559
-+#: dnf/cli/output.py:1439
- msgid "Total"
- msgstr "合計"
- 
--#: dnf/cli/output.py:1587
-+#: dnf/cli/output.py:1467
- msgid "<unset>"
- msgstr "<未設定>"
- 
--#: dnf/cli/output.py:1588
-+#: dnf/cli/output.py:1468
- msgid "System"
- msgstr "システム"
- 
--#: dnf/cli/output.py:1638
-+#: dnf/cli/output.py:1518
- msgid "Command line"
- msgstr "コマンドライン"
- 
- #. TRANSLATORS: user names who executed transaction in history command output
--#: dnf/cli/output.py:1649
-+#: dnf/cli/output.py:1529
- msgid "User name"
- msgstr "ユーザー名"
- 
--#: dnf/cli/output.py:1651
-+#: dnf/cli/output.py:1531
- msgid "ID"
- msgstr "ID"
- 
--#: dnf/cli/output.py:1653
-+#: dnf/cli/output.py:1533
- msgid "Date and time"
- msgstr "日時"
- 
--#: dnf/cli/output.py:1654
-+#: dnf/cli/output.py:1534
- msgid "Action(s)"
- msgstr "動作"
- 
--#: dnf/cli/output.py:1655
-+#: dnf/cli/output.py:1535
- msgid "Altered"
- msgstr "変更されました"
- 
--#: dnf/cli/output.py:1698
-+#: dnf/cli/output.py:1578
- msgid "No transactions"
- msgstr "トランザクションがありません"
- 
--#: dnf/cli/output.py:1699 dnf/cli/output.py:1715
-+#: dnf/cli/output.py:1579 dnf/cli/output.py:1595
- msgid "Failed history info"
- msgstr "失敗した履歴情報"
- 
--#: dnf/cli/output.py:1714
-+#: dnf/cli/output.py:1594
- msgid "No transaction ID, or package, given"
- msgstr "トランザクション ID、またはパッケージが指定されていません"
- 
--#: dnf/cli/output.py:1772
-+#: dnf/cli/output.py:1652
- msgid "Erased"
- msgstr "削除されました"
- 
--#: dnf/cli/output.py:1774
-+#: dnf/cli/output.py:1653 dnf/cli/output.py:1820 dnf/util.py:590
-+msgid "Downgraded"
-+msgstr "ダウングレード済み"
-+
-+#: dnf/cli/output.py:1653 dnf/cli/output.py:1822 dnf/util.py:589
-+msgid "Upgraded"
-+msgstr "アップグレード済み"
-+
-+#: dnf/cli/output.py:1654
- msgid "Not installed"
- msgstr "インストールされていません"
- 
--#: dnf/cli/output.py:1775
-+#: dnf/cli/output.py:1655
- msgid "Newer"
- msgstr "新しい"
- 
--#: dnf/cli/output.py:1775
-+#: dnf/cli/output.py:1655
- msgid "Older"
- msgstr "古い"
- 
--#: dnf/cli/output.py:1823 dnf/cli/output.py:1825
-+#: dnf/cli/output.py:1703 dnf/cli/output.py:1705
- msgid "Transaction ID :"
- msgstr "トランザクション ID :"
- 
--#: dnf/cli/output.py:1828
-+#: dnf/cli/output.py:1708
- msgid "Begin time     :"
- msgstr "開始時間            :"
- 
--#: dnf/cli/output.py:1831 dnf/cli/output.py:1833
-+#: dnf/cli/output.py:1711 dnf/cli/output.py:1713
- msgid "Begin rpmdb    :"
- msgstr "開始 rpmdb          :"
- 
--#: dnf/cli/output.py:1839
-+#: dnf/cli/output.py:1719
- #, python-format
- msgid "(%u seconds)"
- msgstr "(%u 秒)"
- 
--#: dnf/cli/output.py:1841
-+#: dnf/cli/output.py:1721
- #, python-format
- msgid "(%u minutes)"
- msgstr "(%u 分)"
- 
--#: dnf/cli/output.py:1843
-+#: dnf/cli/output.py:1723
- #, python-format
- msgid "(%u hours)"
- msgstr "(%u 時間)"
- 
--#: dnf/cli/output.py:1845
-+#: dnf/cli/output.py:1725
- #, python-format
- msgid "(%u days)"
- msgstr "(%u 日)"
- 
--#: dnf/cli/output.py:1846
-+#: dnf/cli/output.py:1726
- msgid "End time       :"
- msgstr "終了時間            :"
- 
--#: dnf/cli/output.py:1849 dnf/cli/output.py:1851
-+#: dnf/cli/output.py:1729 dnf/cli/output.py:1731
- msgid "End rpmdb      :"
- msgstr "終了 rpmdb          :"
- 
--#: dnf/cli/output.py:1858 dnf/cli/output.py:1860
-+#: dnf/cli/output.py:1738 dnf/cli/output.py:1740
- msgid "User           :"
- msgstr "ユーザー            :"
- 
--#: dnf/cli/output.py:1864 dnf/cli/output.py:1871
-+#: dnf/cli/output.py:1744 dnf/cli/output.py:1751
- msgid "Aborted"
- msgstr "中断しました"
- 
--#: dnf/cli/output.py:1864 dnf/cli/output.py:1867 dnf/cli/output.py:1869
--#: dnf/cli/output.py:1871 dnf/cli/output.py:1873 dnf/cli/output.py:1875
-+#: dnf/cli/output.py:1744 dnf/cli/output.py:1747 dnf/cli/output.py:1749
-+#: dnf/cli/output.py:1751 dnf/cli/output.py:1753 dnf/cli/output.py:1755
- msgid "Return-Code    :"
- msgstr "終了コード          :"
- 
--#: dnf/cli/output.py:1867 dnf/cli/output.py:1875
-+#: dnf/cli/output.py:1747 dnf/cli/output.py:1755
- msgid "Success"
- msgstr "成功"
- 
--#: dnf/cli/output.py:1869
-+#: dnf/cli/output.py:1749
- msgid "Failures:"
- msgstr "失敗:"
- 
--#: dnf/cli/output.py:1873
-+#: dnf/cli/output.py:1753
- msgid "Failure:"
- msgstr "失敗しました:"
- 
--#: dnf/cli/output.py:1883 dnf/cli/output.py:1885
-+#: dnf/cli/output.py:1763 dnf/cli/output.py:1765
- msgid "Releasever     :"
- msgstr "Releasever     :"
- 
--#: dnf/cli/output.py:1890 dnf/cli/output.py:1892
-+#: dnf/cli/output.py:1770 dnf/cli/output.py:1772
- msgid "Command Line   :"
- msgstr "コマンドライン      :"
- 
--#: dnf/cli/output.py:1897 dnf/cli/output.py:1899
-+#: dnf/cli/output.py:1777 dnf/cli/output.py:1779
- msgid "Comment        :"
- msgstr "コメント        :"
- 
--#: dnf/cli/output.py:1903
-+#: dnf/cli/output.py:1783
- msgid "Transaction performed with:"
- msgstr "実行されたトランザクション:"
- 
--#: dnf/cli/output.py:1912
-+#: dnf/cli/output.py:1792
- msgid "Packages Altered:"
- msgstr "変更されたパッケージ:"
- 
--#: dnf/cli/output.py:1918
-+#: dnf/cli/output.py:1798
- msgid "Scriptlet output:"
- msgstr "Scriptlet の出力:"
- 
--#: dnf/cli/output.py:1925
-+#: dnf/cli/output.py:1805
- msgid "Errors:"
- msgstr "エラー:"
- 
--#: dnf/cli/output.py:1934
-+#: dnf/cli/output.py:1814
- msgid "Dep-Install"
- msgstr "Dep-Install"
- 
--#: dnf/cli/output.py:1935
-+#: dnf/cli/output.py:1815
- msgid "Obsoleted"
- msgstr "廃止された"
- 
--#: dnf/cli/output.py:1936 dnf/transaction.py:84 dnf/transaction.py:85
-+#: dnf/cli/output.py:1816 dnf/transaction.py:84 dnf/transaction.py:85
- msgid "Obsoleting"
- msgstr "廃止"
- 
--#: dnf/cli/output.py:1937
-+#: dnf/cli/output.py:1817
- msgid "Erase"
- msgstr "削除"
- 
--#: dnf/cli/output.py:1938
-+#: dnf/cli/output.py:1818
- msgid "Reinstall"
- msgstr "再インストール"
- 
--#: dnf/cli/output.py:2016
-+#: dnf/cli/output.py:1892
- #, python-format
- msgid "---> Package %s.%s %s will be installed"
- msgstr "---> パッケージ %s.%s %s はインストールされます"
- 
--#: dnf/cli/output.py:2018
-+#: dnf/cli/output.py:1894
- #, python-format
- msgid "---> Package %s.%s %s will be an upgrade"
- msgstr "---> パッケージ %s.%s %s はアップグレードされます"
- 
--#: dnf/cli/output.py:2020
-+#: dnf/cli/output.py:1896
- #, python-format
- msgid "---> Package %s.%s %s will be erased"
- msgstr "---> パッケージ %s.%s %s は消去されます"
- 
--#: dnf/cli/output.py:2022
-+#: dnf/cli/output.py:1898
- #, python-format
- msgid "---> Package %s.%s %s will be reinstalled"
- msgstr "---> パッケージ %s.%s %s は再インストールされます"
- 
--#: dnf/cli/output.py:2024
-+#: dnf/cli/output.py:1900
- #, python-format
- msgid "---> Package %s.%s %s will be a downgrade"
- msgstr "---> パッケージ %s.%s %s はダウングレードされます"
- 
--#: dnf/cli/output.py:2026
-+#: dnf/cli/output.py:1902
- #, python-format
- msgid "---> Package %s.%s %s will be obsoleting"
- msgstr "---> パッケージ %s.%s %s は廃止となります"
- 
--#: dnf/cli/output.py:2028
-+#: dnf/cli/output.py:1904
- #, python-format
- msgid "---> Package %s.%s %s will be upgraded"
- msgstr "---> パッケージ %s.%s %s はアップグレードされます"
- 
--#: dnf/cli/output.py:2030
-+#: dnf/cli/output.py:1906
- #, python-format
- msgid "---> Package %s.%s %s will be obsoleted"
- msgstr "---> パッケージ %s.%s %s は廃止されます"
- 
--#: dnf/cli/output.py:2039
-+#: dnf/cli/output.py:1915
- msgid "--> Starting dependency resolution"
- msgstr "--> 依存関係の解決を開始しました"
- 
--#: dnf/cli/output.py:2044
-+#: dnf/cli/output.py:1919
- msgid "--> Finished dependency resolution"
- msgstr "--> 依存関係の解決が完了しました"
- 
--#: dnf/cli/output.py:2058 dnf/crypto.py:132
-+#: dnf/cli/output.py:1933 dnf/crypto.py:132
- #, python-format
- msgid ""
- "Importing GPG key 0x%s:\n"
-@@ -3512,16 +3476,14 @@ msgid "Module or Group '%s' does not exist."
- msgstr "モジュールまたはグループ '%s' は存在しません。"
- 
- #: dnf/comps.py:599
--#, fuzzy, python-format
--#| msgid "Environment '%s' is not installed."
-+#, python-format
- msgid "Environment id '%s' does not exist."
--msgstr "環境 '%s' はインストールされていません。"
-+msgstr "環境 id '%s' は存在しません。"
- 
--#: dnf/comps.py:622 dnf/transaction_sr.py:443 dnf/transaction_sr.py:453
--#, fuzzy, python-format
--#| msgid "Environment '%s' is not installed."
-+#: dnf/comps.py:622 dnf/transaction_sr.py:477 dnf/transaction_sr.py:487
-+#, python-format
- msgid "Environment id '%s' is not installed."
--msgstr "環境 '%s' はインストールされていません。"
-+msgstr "環境 id '%s' はインストールされていません。"
- 
- #: dnf/comps.py:639
- #, python-format
-@@ -3534,10 +3496,9 @@ msgid "Environment '%s' is not available."
- msgstr "環境 '%s' は利用不可です。"
- 
- #: dnf/comps.py:673
--#, fuzzy, python-format
--#| msgid "Group_id '%s' does not exist."
-+#, python-format
- msgid "Group id '%s' does not exist."
--msgstr "Group_id '%s' は存在しません。"
-+msgstr "グループ id '%s' は存在しません。"
- 
- #: dnf/conf/config.py:136
- #, python-format
-@@ -3588,7 +3549,7 @@ msgstr "repo %s には setopt の前に %s attr. がありませんでした"
- #: dnf/conf/read.py:51
- #, python-format
- msgid "Warning: failed loading '%s', skipping."
--msgstr "警告:  '%s' のロードに失敗、スキップします。"
-+msgstr "警告: '%s' のロードに失敗、スキップします。"
- 
- #: dnf/conf/read.py:63
- msgid "Bad id for repo: {} ({}), byte = {} {}"
-@@ -3628,6 +3589,11 @@ msgstr "repo %s: 0x%s はインポート済みです"
- msgid "repo %s: imported key 0x%s."
- msgstr "repo %s: インポート済みの鍵 0x%s。"
- 
-+#: dnf/crypto.py:177
-+#, python-format
-+msgid "retrieving repo key for %s unencrypted from %s"
-+msgstr "%s から暗号化されていない %s の repo キーを取得しています"
-+
- #: dnf/db/group.py:293
- msgid ""
- "No available modular metadata for modular package '{}', it cannot be "
-@@ -3710,7 +3676,7 @@ msgid "Modular dependency problem with Defaults:"
- msgid_plural "Modular dependency problems with Defaults:"
- msgstr[0] "デフォルトのモジュラー依存問題:"
- 
--#: dnf/exceptions.py:131 dnf/module/module_base.py:686
-+#: dnf/exceptions.py:131 dnf/module/module_base.py:841
- msgid "Modular dependency problem:"
- msgid_plural "Modular dependency problems:"
- msgstr[0] "モジュラーの依存に関する問題:"
-@@ -3764,8 +3730,8 @@ msgstr ""
- "\n"
- "ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled, [a]ctive"
- 
--#: dnf/module/module_base.py:54 dnf/module/module_base.py:421
--#: dnf/module/module_base.py:477 dnf/module/module_base.py:543
-+#: dnf/module/module_base.py:54 dnf/module/module_base.py:547
-+#: dnf/module/module_base.py:603 dnf/module/module_base.py:669
- msgid "Ignoring unnecessary profile: '{}/{}'"
- msgstr "不要なプロファイルを無視します: '{}/{}'"
- 
-@@ -3774,17 +3740,17 @@ msgstr "不要なプロファイルを無視します: '{}/{}'"
- msgid "All matches for argument '{0}' in module '{1}:{2}' are not active"
- msgstr "モジュール '{1}:{2}' の引数 '{0}' に一致するものはすべて非アクティブです"
- 
--#: dnf/module/module_base.py:92
-+#: dnf/module/module_base.py:92 dnf/module/module_base.py:202
- #, python-brace-format
- msgid "Installing module '{0}' from Fail-Safe repository {1} is not allowed"
- msgstr "フェイルセーフレポジトリー {1} からのモジュール '{0}' インストールは許可されていません"
- 
--#: dnf/module/module_base.py:102
-+#: dnf/module/module_base.py:102 dnf/module/module_base.py:212
- msgid ""
- "Unable to match profile for argument {}. Available profiles for '{}:{}': {}"
- msgstr "引数 {} でプロファイルが見つかりません。利用可能プロファイル '{}:{}': {}"
- 
--#: dnf/module/module_base.py:106
-+#: dnf/module/module_base.py:106 dnf/module/module_base.py:216
- msgid "Unable to match profile for argument {}"
- msgstr "引数 {} でプロファイルが見つかりません"
- 
-@@ -3800,41 +3766,55 @@ msgstr "モジュール {}:{} にプロファイルがありません"
- msgid "Default profile {} not available in module {}:{}"
- msgstr "デフォルトのプロファイル {} はモジュール {}:{} で利用不可です"
- 
--#: dnf/module/module_base.py:142
-+#: dnf/module/module_base.py:142 dnf/module/module_base.py:245
- msgid "Installing module from Fail-Safe repository is not allowed"
- msgstr "フェイルセーフレポジトリーからのモジュールインストールは許可されていません"
- 
--#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
--#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
--#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
--#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
-+#: dnf/module/module_base.py:194
-+#, python-brace-format
-+msgid "No active matches for argument '{0}' in module '{1}:{2}'"
-+msgstr "モジュール '{1}:{2}' の引数 '{0}' には、アクティブな一致がありません"
-+
-+#: dnf/module/module_base.py:226
-+#, python-brace-format
-+msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'"
-+msgstr "インストールされたプロファイル '{0}' は、モジュール '{1}' ストリーム '{2}' では利用できません"
-+
-+#: dnf/module/module_base.py:265
-+msgid "No packages available to distrosync for package name '{}'"
-+msgstr "パッケージ名 '{}' 向けに distrosync するパッケージはありません"
-+
-+#: dnf/module/module_base.py:308 dnf/module/module_base.py:452
-+#: dnf/module/module_base.py:477 dnf/module/module_base.py:496
-+#: dnf/module/module_base.py:543 dnf/module/module_base.py:599
-+#: dnf/module/module_base.py:665 dnf/module/module_base.py:827
- msgid "Unable to resolve argument {}"
- msgstr "引数 {} を解決できません"
- 
--#: dnf/module/module_base.py:160
--msgid "No match for package {}"
--msgstr "パッケージ {} に一致するものはありません"
--
--#: dnf/module/module_base.py:204
-+#: dnf/module/module_base.py:319
- #, python-brace-format
- msgid "Upgrading module '{0}' from Fail-Safe repository {1} is not allowed"
- msgstr "フェイルセーフレポジトリー {1} からのモジュール '{0}' アップグレードは許可されていません"
- 
--#: dnf/module/module_base.py:223 dnf/module/module_base.py:251
-+#: dnf/module/module_base.py:338 dnf/module/module_base.py:366
- msgid "Unable to match profile in argument {}"
- msgstr "引数 {} でプロファイルを一致できません"
- 
--#: dnf/module/module_base.py:231
-+#: dnf/module/module_base.py:346
- msgid "Upgrading module from Fail-Safe repository is not allowed"
- msgstr "フェイルセーフレポジトリーからのモジュールアップグレードは許可されていません"
- 
--#: dnf/module/module_base.py:367
-+#: dnf/module/module_base.py:500
- msgid ""
- "Only module name is required. Ignoring unneeded information in argument: "
- "'{}'"
- msgstr "モジュール名のみが必要です。引数で不必要な情報を無視します: '{}'"
- 
--#: dnf/package.py:298
-+#: dnf/module/module_base.py:828
-+msgid "No match for package {}"
-+msgstr "パッケージ {} に一致するものはありません"
-+
-+#: dnf/package.py:333
- #, python-format
- msgid "%s: %s check failed: %s vs %s"
- msgstr "%s: %s の確認に失敗しました: %s vs %s"
-@@ -3848,12 +3828,12 @@ msgstr "%s は空のファイルです"
- #: dnf/persistor.py:91
- #, python-format
- msgid "Failed to load expired repos cache: %s"
--msgstr ""
-+msgstr "期限切れのリポジトリーキャッシュのロードに失敗しました: %s"
- 
- #: dnf/persistor.py:99
- #, python-format
- msgid "Failed to store expired repos cache: %s"
--msgstr ""
-+msgstr "期限切れのリポジトリーキャッシュの保存に失敗しました: %s"
- 
- #: dnf/persistor.py:106
- msgid "Failed storing last makecache time."
-@@ -3915,6 +3895,14 @@ msgstr "%s から %s repo を追加しました"
- msgid "Errors occurred during test transaction."
- msgstr "テストトランザクション中にエラーが発生しました。"
- 
-+#: dnf/sack.py:47
-+msgid ""
-+"allow_vendor_change is disabled. This option is currently not supported for "
-+"downgrade and distro-sync commands"
-+msgstr ""
-+"allow_vendor_change は無効になっています。このオプションは、downgrade コマンドおよび distro-sync "
-+"コマンドではサポートされていません"
-+
- #. TRANSLATORS: This is for a single package currently being downgraded.
- #: dnf/transaction.py:80
- msgctxt "currently"
-@@ -3961,168 +3949,200 @@ msgstr "scriptletの実行中"
- msgid "Preparing"
- msgstr "準備"
- 
--#: dnf/transaction_sr.py:60
-+#: dnf/transaction_sr.py:66
- #, python-brace-format
--msgid "Errors in \"{filename}\":"
--msgstr ""
-+msgid ""
-+"The following problems occurred while replaying the transaction from file "
-+"\"{filename}\":"
-+msgstr "ファイル \"{filename}\" からのトランザクションの再生中に以下の問題が発生しました。"
- 
--#: dnf/transaction_sr.py:70
--#, python-brace-format
--msgid "Error in \"{filename}\": {error}"
--msgstr ""
-+#: dnf/transaction_sr.py:68
-+msgid "The following problems occurred while running a transaction:"
-+msgstr "トランザクションの実行中に以下の問題が発生しました。"
- 
--#: dnf/transaction_sr.py:87
-+#: dnf/transaction_sr.py:89
- #, python-brace-format
- msgid "Invalid major version \"{major}\", number expected."
--msgstr ""
-+msgstr "無効なメジャーバージョン \"{major}\"。数字が必要です。"
- 
--#: dnf/transaction_sr.py:95
-+#: dnf/transaction_sr.py:97
- #, python-brace-format
- msgid "Invalid minor version \"{minor}\", number expected."
--msgstr ""
-+msgstr "無効なマイナーバージョン \"{minor}\"。数字が必要です。"
- 
--#: dnf/transaction_sr.py:101
-+#: dnf/transaction_sr.py:103
- #, python-brace-format
- msgid ""
- "Incompatible major version \"{major}\", supported major version is "
- "\"{major_supp}\"."
--msgstr ""
-+msgstr "互換性のないメジャーバージョン \"{major}\"。サポートされているメジャーバージョンは \"{major_supp}\" です。"
-+
-+#: dnf/transaction_sr.py:224
-+msgid ""
-+"Conflicting TransactionReplay arguments have been specified: filename, data"
-+msgstr "競合する TransactionReplay 引数が指定されています。filename, data"
- 
--#: dnf/transaction_sr.py:244
-+#: dnf/transaction_sr.py:265
- #, python-brace-format
- msgid "Unexpected type of \"{id}\", {exp} expected."
--msgstr ""
-+msgstr "予期しない {id}\" のタイプ。{exp} が必要です。"
- 
--#: dnf/transaction_sr.py:250
-+#: dnf/transaction_sr.py:271
- #, python-brace-format
- msgid "Missing key \"{key}\"."
--msgstr ""
-+msgstr "\"{key}\" キーがありません。"
- 
--#: dnf/transaction_sr.py:263
-+#: dnf/transaction_sr.py:285
- #, python-brace-format
- msgid "Missing object key \"{key}\" in an rpm."
--msgstr ""
-+msgstr "オブジェクトキー \"{key}\" が rpm にありません。"
- 
--#: dnf/transaction_sr.py:267
-+#: dnf/transaction_sr.py:289
- #, python-brace-format
- msgid "Unexpected value of package reason \"{reason}\" for rpm nevra \"{nevra}\"."
--msgstr ""
-+msgstr "rpm nevra \"{nevra}\" の予期しないパッケージ理由 \"{reason}\" の値。"
- 
--#: dnf/transaction_sr.py:275
-+#: dnf/transaction_sr.py:297
- #, python-brace-format
- msgid "Cannot parse NEVRA for package \"{nevra}\"."
--msgstr ""
-+msgstr "パッケージ \"{nevra}\" の NEVRA を解析できません。"
- 
--#: dnf/transaction_sr.py:286
-+#: dnf/transaction_sr.py:321
- #, python-brace-format
- msgid "Cannot find rpm nevra \"{nevra}\"."
--msgstr ""
-+msgstr "rpm nevra \"{nevra}\" を見つけることはできません。"
- 
--#: dnf/transaction_sr.py:301
--#, fuzzy, python-brace-format
--#| msgid "Package %s is already installed."
-+#: dnf/transaction_sr.py:336
-+#, python-brace-format
- msgid "Package \"{na}\" is already installed for action \"{action}\"."
--msgstr "パッケージ %s は既にインストールされています。"
-+msgstr "パッケージ \"{na}\" は、アクション \"{action}\" 用に既にインストールされています。"
- 
--#: dnf/transaction_sr.py:311
-+#: dnf/transaction_sr.py:345
- #, python-brace-format
- msgid ""
- "Package nevra \"{nevra}\" not available in repositories for action "
- "\"{action}\"."
--msgstr ""
-+msgstr "アクション \"{action}\" に利用できる パッケージ nevra \"{nevra}\" はレポジトリーにありません。"
- 
--#: dnf/transaction_sr.py:322
-+#: dnf/transaction_sr.py:356
- #, python-brace-format
- msgid "Package nevra \"{nevra}\" not installed for action \"{action}\"."
--msgstr ""
-+msgstr "アクション \"{action}\" には、パッケージ nevra \"{nevra}\" インストールされていません。"
- 
--#: dnf/transaction_sr.py:336
-+#: dnf/transaction_sr.py:370
- #, python-brace-format
- msgid "Unexpected value of package action \"{action}\" for rpm nevra \"{nevra}\"."
--msgstr ""
-+msgstr "rpm nevra \"{nevra}\" の、パッケージアクション \"{action}\" の予期しない値。"
- 
--#: dnf/transaction_sr.py:343
--#, fuzzy, python-format
--#| msgid "Module or Group '%s' is not available."
-+#: dnf/transaction_sr.py:377
-+#, python-format
- msgid "Group id '%s' is not available."
--msgstr "モジュールまたはグループ '%s' は利用不可です。"
-+msgstr "グループ id '%s' は利用できません。"
- 
--#: dnf/transaction_sr.py:364
-+#: dnf/transaction_sr.py:398
- #, python-brace-format
- msgid "Missing object key \"{key}\" in groups.packages."
--msgstr ""
-+msgstr "オブジェクトキー \"{key}\" が groups.packages に含まれません。"
- 
--#: dnf/transaction_sr.py:377 dnf/transaction_sr.py:387
--#, fuzzy, python-format
--#| msgid "Module or Group '%s' is not installed."
-+#: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421
-+#, python-format
- msgid "Group id '%s' is not installed."
--msgstr "モジュールまたはグループ '%s' がインストールされていません。"
-+msgstr "グループ id '%s' がインストールされていません。"
- 
--#: dnf/transaction_sr.py:398
--#, fuzzy, python-format
--#| msgid "Environment '%s' is not available."
-+#: dnf/transaction_sr.py:432
-+#, python-format
- msgid "Environment id '%s' is not available."
--msgstr "環境 '%s' は利用不可です。"
-+msgstr "環境 id '%s' は利用できません。"
- 
--#: dnf/transaction_sr.py:422
-+#: dnf/transaction_sr.py:456
- #, python-brace-format
- msgid ""
- "Invalid value \"{group_type}\" of environments.groups.group_type, only "
- "\"mandatory\" or \"optional\" is supported."
- msgstr ""
-+"environments.groups.group_type の無効な値 \"{group_type}\"。\"mandatory\" または "
-+"\"optional\" のみに対応しています。"
- 
--#: dnf/transaction_sr.py:430
-+#: dnf/transaction_sr.py:464
- #, python-brace-format
- msgid "Missing object key \"{key}\" in environments.groups."
--msgstr ""
-+msgstr "オブジェクトキー \"{key}\" が environments.groups に含まれません。"
- 
--#: dnf/transaction_sr.py:508
-+#: dnf/transaction_sr.py:542
- #, python-brace-format
- msgid "Unexpected value of group action \"{action}\" for group \"{group}\"."
--msgstr ""
-+msgstr "グループ \"{group}\" の グループアクション \"{action}\" の予期しない値。"
- 
--#: dnf/transaction_sr.py:513
-+#: dnf/transaction_sr.py:547
- #, python-brace-format
- msgid "Missing object key \"{key}\" in a group."
--msgstr ""
-+msgstr "オブジェクトキー \"{key}\" がグループ内にありません。"
- 
--#: dnf/transaction_sr.py:537
-+#: dnf/transaction_sr.py:571
- #, python-brace-format
- msgid "Unexpected value of environment action \"{action}\" for environment \"{env}\"."
--msgstr ""
-+msgstr "環境 \"{env}\" の環境アクション \"{action}\" の予期しない値。"
- 
--#: dnf/transaction_sr.py:542
-+#: dnf/transaction_sr.py:576
- #, python-brace-format
- msgid "Missing object key \"{key}\" in an environment."
--msgstr ""
-+msgstr "オブジェクトキー \"{key}\" が環境にありません。"
- 
--#: dnf/transaction_sr.py:581
-+#: dnf/transaction_sr.py:615
- #, python-brace-format
- msgid ""
- "Package nevra \"{nevra}\", which is not present in the transaction file, was"
- " pulled into the transaction."
--msgstr ""
-+msgstr "トランザクションファイルに存在しないパッケージ nevra \"{nevra}\" がトランザクションにプルされていました。"
- 
- # translation auto-copied from project jbpm-designer, version 6.0.1, document
- # org.jbpm/jbpm-designer-
- # api/resources/org/jbpm/designer/resources/i18n/DesignerConstants, author
- # nmirasch
--#: dnf/util.py:391 dnf/util.py:393
-+#: dnf/util.py:393 dnf/util.py:395
- msgid "Problem"
- msgstr "問題"
- 
--#: dnf/util.py:444
-+#: dnf/util.py:446
- msgid "TransactionItem not found for key: {}"
- msgstr "TransactionItemが見つかりません鍵: {}"
- 
--#: dnf/util.py:454
-+#: dnf/util.py:456
- msgid "TransactionSWDBItem not found for key: {}"
- msgstr "TransactionSWDBItemが見つかりません鍵: {}"
- 
--#: dnf/util.py:457
-+#: dnf/util.py:459
- msgid "Errors occurred during transaction."
- msgstr "トランザクション中にエラーが発生しました。"
- 
-+#: dnf/util.py:595
-+msgid "Reinstalled"
-+msgstr "再インストール済み"
-+
-+#: dnf/util.py:596
-+msgid "Skipped"
-+msgstr "スキップ済み"
-+
-+#: dnf/util.py:597
-+msgid "Removed"
-+msgstr "削除しました"
-+
-+#: dnf/util.py:600
-+msgid "Failed"
-+msgstr "失敗しました"
-+
-+#~ msgid "Action not handled: {}"
-+#~ msgstr "動作は対処されていません: {}"
-+
-+#~ msgid "no package matched"
-+#~ msgstr "一致したパッケージはありません。"
-+
-+#~ msgid "Not found given transaction ID"
-+#~ msgstr "指定されたトランザクション ID は見つかりません"
-+
-+#~ msgid "Undoing transaction {}, from {}"
-+#~ msgstr "トランザクション {} を {} から取り消しています"
-+
- #~ msgid "format for displaying found packages"
- #~ msgstr "見つかったパッケージを表示する形式"
- 
-diff --git a/po/ko.po b/po/ko.po
-index 449f6130..9f37ae13 100644
---- a/po/ko.po
-+++ b/po/ko.po
-@@ -5,7 +5,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: 2021-02-22 09:22+0100\n"
- "PO-Revision-Date: 2020-09-12 11:29+0000\n"
- "Last-Translator: Ludek Janda <ljanda@redhat.com>\n"
- "Language-Team: Korean <https://translate.fedoraproject.org/projects/dnf/dnf-master/ko/>\n"
-@@ -72,7 +72,7 @@ msgstr "알 수없는 설정: %s=%s in %s; %s"
- msgid "Unknown configuration option: %s = %s in %s"
- msgstr "알 수없는 옵션 : %s = %s in %s"
- 
--#: dnf/automatic/main.py:237 dnf/cli/cli.py:299
-+#: dnf/automatic/main.py:237 dnf/cli/cli.py:304
- msgid "GPG check FAILED"
- msgstr "GPG 확인 실패"
- 
-@@ -85,9 +85,11 @@ msgid "Started dnf-automatic."
- msgstr "dnf-automatic을 시작했습니다."
- 
- #: dnf/automatic/main.py:308
--#, python-format
--msgid "Sleep for %s seconds"
--msgstr "%s 초 동안 절전합니다"
-+#, fuzzy
-+#| msgid "Sleep for %s seconds"
-+msgid "Sleep for {} second"
-+msgid_plural "Sleep for {} seconds"
-+msgstr[0] "%s 초 동안 절전합니다"
- 
- #: dnf/automatic/main.py:315
- msgid "System is off-line."
-@@ -99,7 +101,7 @@ msgstr ""
- msgid "Error: %s"
- msgstr "오류: %s"
- 
--#: dnf/base.py:146
-+#: dnf/base.py:146 dnf/base.py:472 dnf/base.py:474
- msgid "loading repo '{}' failure: {}"
- msgstr "repo '{}'의 로드에 실패했습니다 : {}"
- 
-@@ -107,236 +109,236 @@ msgstr "repo '{}'의 로드에 실패했습니다 : {}"
- msgid "Loading repository '{}' has failed"
- msgstr "리포지토리 '{}'의 로드에 실패했습니다"
- 
--#: dnf/base.py:320
-+#: dnf/base.py:322
- msgid "Metadata timer caching disabled when running on metered connection."
- msgstr "데이터 통신 연결을 사용할 때 메타 데이터 타이머 캐싱을 비활성화합니다."
- 
--#: dnf/base.py:325
-+#: dnf/base.py:327
- msgid "Metadata timer caching disabled when running on a battery."
- msgstr "배터리를 사용할할 때 메타 데이터 타이머 캐싱을 비활성화합니다."
- 
--#: dnf/base.py:330
-+#: dnf/base.py:332
- msgid "Metadata timer caching disabled."
- msgstr "메타 데이터 타이머 캐싱이 비활성화되었습니다."
- 
--#: dnf/base.py:335
-+#: dnf/base.py:337
- msgid "Metadata cache refreshed recently."
- msgstr "최근에 메타 데이터 캐시가 새로 고쳐졌습니다."
- 
--#: dnf/base.py:341 dnf/cli/commands/__init__.py:91
-+#: dnf/base.py:343 dnf/cli/commands/__init__.py:91
- msgid "There are no enabled repositories in \"{}\"."
- msgstr "\"{}\"에 사용 가능한 저장소가 없습니다."
- 
--#: dnf/base.py:348
-+#: dnf/base.py:350
- #, python-format
- msgid "%s: will never be expired and will not be refreshed."
- msgstr "%s: 만료되지 않고 새로 고침되지 않습니다."
- 
--#: dnf/base.py:350
-+#: dnf/base.py:352
- #, python-format
- msgid "%s: has expired and will be refreshed."
- msgstr "%s: 만료되어 새로 고침됩니다."
- 
- #. expires within the checking period:
--#: dnf/base.py:354
-+#: dnf/base.py:356
- #, python-format
- msgid "%s: metadata will expire after %d seconds and will be refreshed now"
- msgstr "%s: 메타 데이터는 %d 초 이후에 만료되며 이제 새로 고침됩니다."
- 
--#: dnf/base.py:358
-+#: dnf/base.py:360
- #, python-format
- msgid "%s: will expire after %d seconds."
- msgstr "%s: %d 초 후에 만료됩니다."
- 
- #. performs the md sync
--#: dnf/base.py:364
-+#: dnf/base.py:366
- msgid "Metadata cache created."
- msgstr "메타 데이터 캐시가 생성되었습니다."
- 
--#: dnf/base.py:397
-+#: dnf/base.py:399 dnf/base.py:466
- #, python-format
- msgid "%s: using metadata from %s."
- msgstr "%s: %s에서 메타 데이터 사용 중"
- 
--#: dnf/base.py:409
-+#: dnf/base.py:411 dnf/base.py:479
- #, python-format
- msgid "Ignoring repositories: %s"
- msgstr "리포지토리를 무시합니다: %s"
- 
--#: dnf/base.py:412
-+#: dnf/base.py:414
- #, python-format
- msgid "Last metadata expiration check: %s ago on %s."
- msgstr "마지막 메타 데이터 만료 확인 :%s. %s 이전에 확인"
- 
--#: dnf/base.py:443
-+#: dnf/base.py:507
- msgid ""
- "The downloaded packages were saved in cache until the next successful "
- "transaction."
- msgstr "다운로드된 패키지는 다음 번 성공적인 트랜잭션까지 캐시에 저장됩니다."
- 
--#: dnf/base.py:445
-+#: dnf/base.py:509
- #, python-format
- msgid "You can remove cached packages by executing '%s'."
- msgstr "'%s'을/를 실행하여 캐시 패키지를 삭제할 수 있습니다."
- 
--#: dnf/base.py:535
-+#: dnf/base.py:599
- #, python-format
- msgid "Invalid tsflag in config file: %s"
- msgstr "설정 파일에서 tsflag 사용이 잘못되었습니다: %s"
- 
--#: dnf/base.py:591
-+#: dnf/base.py:655
- #, python-format
- msgid "Failed to add groups file for repository: %s - %s"
- msgstr "리포지토리의 그룹 파일을 추가하지 못했습니다. %s - %s"
- 
--#: dnf/base.py:823
-+#: dnf/base.py:887
- msgid "Running transaction check"
- msgstr "트랜잭션 확인 실행 중"
- 
--#: dnf/base.py:831
-+#: dnf/base.py:895
- msgid "Error: transaction check vs depsolve:"
- msgstr "오류 : 트랜잭션 확인 및 종속성 해결 오류"
- 
--#: dnf/base.py:837
-+#: dnf/base.py:901
- msgid "Transaction check succeeded."
- msgstr "트랜잭션 확인에 성공했습니다."
- 
--#: dnf/base.py:840
-+#: dnf/base.py:904
- msgid "Running transaction test"
- msgstr "트랜잭션 테스트 실행 중"
- 
--#: dnf/base.py:850 dnf/base.py:992
-+#: dnf/base.py:914 dnf/base.py:1065
- msgid "RPM: {}"
- msgstr "RPM: {}"
- 
--#: dnf/base.py:851
-+#: dnf/base.py:915
- msgid "Transaction test error:"
- msgstr "트랜잭션 테스트 오류:"
- 
--#: dnf/base.py:862
-+#: dnf/base.py:926
- msgid "Transaction test succeeded."
- msgstr "트랜잭션 테스트에 성공했습니다."
- 
--#: dnf/base.py:883
-+#: dnf/base.py:947
- msgid "Running transaction"
- msgstr "트랜잭션 실행 중"
- 
--#: dnf/base.py:911
-+#: dnf/base.py:984
- msgid "Disk Requirements:"
- msgstr "디스크 요구 사항 :"
- 
--#: dnf/base.py:914
-+#: dnf/base.py:987
- #, python-brace-format
- msgid "At least {0}MB more space needed on the {1} filesystem."
- msgid_plural "At least {0}MB more space needed on the {1} filesystem."
- msgstr[0] "{1} 파일 시스템에 최소 {0}MB의 공간이 더 필요합니다."
- 
--#: dnf/base.py:921
-+#: dnf/base.py:994
- msgid "Error Summary"
- msgstr "오류 요약"
- 
--#: dnf/base.py:947
-+#: dnf/base.py:1020
- #, python-brace-format
- msgid "RPMDB altered outside of {prog}."
- msgstr "RPMDB는 {prog} 외부에서 변경되었습니다."
- 
--#: dnf/base.py:993 dnf/base.py:1001
-+#: dnf/base.py:1066 dnf/base.py:1074
- msgid "Could not run transaction."
- msgstr "트랜잭션을 실행할 수 없습니다."
- 
--#: dnf/base.py:996
-+#: dnf/base.py:1069
- msgid "Transaction couldn't start:"
- msgstr "트랜잭션을 시작할 수 없습니다 :"
- 
--#: dnf/base.py:1010
-+#: dnf/base.py:1083
- #, python-format
- msgid "Failed to remove transaction file %s"
- msgstr "%s 트랜잭션 파일을 삭제하지 못했습니다"
- 
--#: dnf/base.py:1092
-+#: dnf/base.py:1165
- msgid "Some packages were not downloaded. Retrying."
- msgstr "일부 패키지가 다운로드되지 않았습니다. 다시 시도 중입니다."
- 
--#: dnf/base.py:1122
-+#: dnf/base.py:1195
- #, python-format
- msgid "Delta RPMs reduced %.1f MB of updates to %.1f MB (%d.1%% saved)"
- msgstr "Delta RPM이 %.1f MB의 업데이트를 %.1f MB로 줄였습니다. (%d.1 %% 절약됨)"
- 
--#: dnf/base.py:1125
-+#: dnf/base.py:1198
- #, python-format
- msgid ""
- "Failed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)"
- msgstr "Delta RPM은 %.1f MB의 업데이트를 %.1f MB로 줄이는데 실패했습니다. (%d.1 %% 손실됨)"
- 
--#: dnf/base.py:1167
-+#: dnf/base.py:1240
- msgid "Cannot add local packages, because transaction job already exists"
- msgstr "트랜잭션 작업이 이미 존재하므로 로컬 패키지를 추가할 수 없습니다"
- 
--#: dnf/base.py:1181
-+#: dnf/base.py:1254
- msgid "Could not open: {}"
- msgstr "열 수 없음 : {}"
- 
--#: dnf/base.py:1219
-+#: dnf/base.py:1292
- #, python-format
- msgid "Public key for %s is not installed"
- msgstr "%s의 공개 키는 설치되어 있지 않습니다."
- 
--#: dnf/base.py:1223
-+#: dnf/base.py:1296
- #, python-format
- msgid "Problem opening package %s"
- msgstr "%s 패키지를 여는 중에 문제가 발생했습니다"
- 
--#: dnf/base.py:1231
-+#: dnf/base.py:1304
- #, python-format
- msgid "Public key for %s is not trusted"
- msgstr "%s의 공개 키는 신뢰할 수 없습니다"
- 
--#: dnf/base.py:1235
-+#: dnf/base.py:1308
- #, python-format
- msgid "Package %s is not signed"
- msgstr "%s 패키지가 서명되지 않았습니다"
- 
--#: dnf/base.py:1265
-+#: dnf/base.py:1338
- #, python-format
- msgid "Cannot remove %s"
- msgstr "%s을/를 삭제할 수 없습니다."
- 
--#: dnf/base.py:1269
-+#: dnf/base.py:1342
- #, python-format
- msgid "%s removed"
- msgstr "%s가 삭제되었습니다"
- 
--#: dnf/base.py:1549
-+#: dnf/base.py:1622
- msgid "No match for group package \"{}\""
- msgstr "그룹 패키지 \"{}\"에 일치하는 항목이 없습니다"
- 
--#: dnf/base.py:1635
-+#: dnf/base.py:1708
- #, python-format
- msgid "Adding packages from group '%s': %s"
- msgstr "'%s' 그룹에서 패키지 추가: %s"
- 
--#: dnf/base.py:1658 dnf/cli/cli.py:219 dnf/cli/commands/__init__.py:442
-+#: dnf/base.py:1731 dnf/cli/cli.py:220 dnf/cli/commands/__init__.py:442
- #: dnf/cli/commands/__init__.py:499 dnf/cli/commands/__init__.py:592
- #: dnf/cli/commands/__init__.py:641 dnf/cli/commands/install.py:80
- #: dnf/cli/commands/install.py:103 dnf/cli/commands/install.py:110
- msgid "Nothing to do."
- msgstr "처리가 필요하지 않습니다"
- 
--#: dnf/base.py:1676
-+#: dnf/base.py:1749
- msgid "No groups marked for removal."
- msgstr "제거할 패키지 그룹이 없습니다"
- 
--#: dnf/base.py:1710
-+#: dnf/base.py:1783
- msgid "No group marked for upgrade."
- msgstr "업그레이드용으로 표시된 그룹이 없습니다."
- 
--#: dnf/base.py:1925
-+#: dnf/base.py:1997
- #, python-format
- msgid "Package %s not installed, cannot downgrade it."
- msgstr "%s 패키지가 설치되어 있지 않기 때문에 다운 그레이드할 수 없습니다."
- 
--#: dnf/base.py:1927 dnf/base.py:1946 dnf/base.py:1959 dnf/base.py:1980
--#: dnf/base.py:2029 dnf/base.py:2037 dnf/base.py:2172 dnf/cli/cli.py:411
-+#: dnf/base.py:1999 dnf/base.py:2018 dnf/base.py:2031 dnf/base.py:2052
-+#: dnf/base.py:2101 dnf/base.py:2109 dnf/base.py:2243 dnf/cli/cli.py:416
- #: dnf/cli/commands/__init__.py:425 dnf/cli/commands/__init__.py:482
- #: dnf/cli/commands/__init__.py:586 dnf/cli/commands/__init__.py:633
- #: dnf/cli/commands/__init__.py:711 dnf/cli/commands/install.py:147
-@@ -346,141 +348,127 @@ msgstr "%s 패키지가 설치되어 있지 않기 때문에 다운 그레이드
- msgid "No match for argument: %s"
- msgstr "일치하는 인수가 없습니다 : %s"
- 
--#: dnf/base.py:1934
-+#: dnf/base.py:2006
- #, python-format
- msgid "Package %s of lower version already installed, cannot downgrade it."
- msgstr "%s 패키지의 하위 버전이 이미 설치되어 있으므로 다운 그레이드할 수 없습니다."
- 
--#: dnf/base.py:1957
-+#: dnf/base.py:2029
- #, python-format
- msgid "Package %s not installed, cannot reinstall it."
- msgstr "%s 패키지가 설치되어 있지 않기 때문에 다시 설치할 수 없습니다."
- 
--#: dnf/base.py:1972
-+#: dnf/base.py:2044
- #, python-format
- msgid "File %s is a source package and cannot be updated, ignoring."
- msgstr "%s 파일은 소스 패키지이며 업데이트할 수 없습니다. 무시합니다."
- 
--#: dnf/base.py:1978
-+#: dnf/base.py:2050
- #, python-format
- msgid "Package %s not installed, cannot update it."
- msgstr "%s 패키지가 설치되어 있지 않기 때문에 업데이트할 수 없습니다."
- 
--#: dnf/base.py:1987
-+#: dnf/base.py:2059
- #, python-format
- msgid ""
- "The same or higher version of %s is already installed, cannot update it."
- msgstr "%s 이상의 버전이 이미 설치되어 있으므로 업데이트할 수 없습니다."
- 
--#: dnf/base.py:2026 dnf/cli/commands/reinstall.py:81
-+#: dnf/base.py:2098 dnf/cli/commands/reinstall.py:81
- #, python-format
- msgid "Package %s available, but not installed."
- msgstr "%s 패키지는 사용할 수는 있지만 설치되어 있지 않습니다."
- 
--#: dnf/base.py:2032
-+#: dnf/base.py:2104
- #, python-format
- msgid "Package %s available, but installed for different architecture."
- msgstr "%s 패키지는 사용 가능하지만 다른 아키텍처 용으로 설치되어 있습니다."
- 
--#: dnf/base.py:2057 dnf/base.py:2250 dnf/cli/cli.py:668 dnf/cli/cli.py:699
-+#: dnf/base.py:2129
- #, python-format
- msgid "No package %s installed."
- msgstr "%s 패키지는 설치되어 있지 않습니다"
- 
--#: dnf/base.py:2075 dnf/cli/commands/install.py:136
-+#: dnf/base.py:2147 dnf/cli/commands/install.py:136
- #: dnf/cli/commands/remove.py:133
- #, python-format
- msgid "Not a valid form: %s"
- msgstr "잘못된 형식: %s"
- 
--#: dnf/base.py:2091 dnf/cli/commands/__init__.py:681
--#: dnf/cli/commands/remove.py:163
-+#: dnf/base.py:2162 dnf/cli/commands/__init__.py:681
-+#: dnf/cli/commands/remove.py:162
- msgid "No packages marked for removal."
- msgstr "제거 대상 패키지가 없습니다."
- 
--#: dnf/base.py:2179 dnf/cli/cli.py:422
-+#: dnf/base.py:2250 dnf/cli/cli.py:427
- #, python-format
- msgid "Packages for argument %s available, but not installed."
- msgstr "%s 인수에 대한 패키지를 사용할 수 있지만 설치되어 있지 않습니다."
- 
--#: dnf/base.py:2184
-+#: dnf/base.py:2255
- #, python-format
- msgid "Package %s of lowest version already installed, cannot downgrade it."
- msgstr "%s 패키지의 최하위 버전이 이미 설치되어 있으므로 다운 그레이드할 수 없습니다."
- 
--#: dnf/base.py:2242
--msgid "Action not handled: {}"
--msgstr "작업이 처리되지 않았습니다: {}"
--
--#: dnf/base.py:2256 dnf/cli/cli.py:419 dnf/cli/cli.py:673 dnf/cli/cli.py:703
--#: dnf/cli/commands/group.py:400 dnf/cli/commands/history.py:169
--#, python-format
--msgid "No package %s available."
--msgstr "사용 가능한 패키지 %s가 없습니다."
--
--#: dnf/base.py:2269
--msgid "no package matched"
--msgstr "일치하는 패키지가 없습니다."
--
--#: dnf/base.py:2290
-+#: dnf/base.py:2302
- msgid "No security updates needed, but {} update available"
- msgstr "보안 업데이트가 필요하지 않지만 {} 업데이트가 가능합니다"
- 
--#: dnf/base.py:2292
-+#: dnf/base.py:2304
- msgid "No security updates needed, but {} updates available"
- msgstr "보안 업데이트는 필요하지 않지만 {} 업데이트가 가능합니다"
- 
--#: dnf/base.py:2296
-+#: dnf/base.py:2308
- msgid "No security updates needed for \"{}\", but {} update available"
- msgstr "\"{}\"에는 보안 업데이트가 필요하지 않지만 {} 업데이트가 가능합니다"
- 
--#: dnf/base.py:2298
-+#: dnf/base.py:2310
- msgid "No security updates needed for \"{}\", but {} updates available"
- msgstr "\"{}\"에는 보안 업데이트가 필요하지 않지만 {} 업데이트가 가능합니다"
- 
- #. raise an exception, because po.repoid is not in self.repos
--#: dnf/base.py:2319
-+#: dnf/base.py:2331
- #, python-format
- msgid "Unable to retrieve a key for a commandline package: %s"
- msgstr ""
- 
--#: dnf/base.py:2327
-+#: dnf/base.py:2339
- #, python-format
- msgid ". Failing package is: %s"
- msgstr "실패한 패키지는 다음과 같습니다. %s"
- 
--#: dnf/base.py:2328
-+#: dnf/base.py:2340
- #, python-format
- msgid "GPG Keys are configured as: %s"
- msgstr "GPG 키는 다음과 같이 설정되어 있습니다. %s"
- 
--#: dnf/base.py:2340
-+#: dnf/base.py:2352
- #, python-format
- msgid "GPG key at %s (0x%s) is already installed"
- msgstr "%s (0x%s)의 GPG 키가 이미 설치되어 있습니다"
- 
--#: dnf/base.py:2373
-+#: dnf/base.py:2385
- msgid "The key has been approved."
- msgstr "키가 승인되었습니다."
- 
--#: dnf/base.py:2376
-+#: dnf/base.py:2388
- msgid "The key has been rejected."
- msgstr "키가 거부되었습니다."
- 
--#: dnf/base.py:2409
-+#: dnf/base.py:2421
- #, python-format
- msgid "Key import failed (code %d)"
- msgstr "키 가져 오기에 실패했습니다 (코드 %d)"
- 
--#: dnf/base.py:2411
-+#: dnf/base.py:2423
- msgid "Key imported successfully"
- msgstr "키 가져오기에 성공했습니다"
- 
--#: dnf/base.py:2415
-+#: dnf/base.py:2427
- msgid "Didn't install any keys"
- msgstr "키를 하나도 설치하지 못했습니다"
- 
--#: dnf/base.py:2418
-+#: dnf/base.py:2430
- #, python-format
- msgid ""
- "The GPG keys listed for the \"%s\" repository are already installed but they are not correct for this package.\n"
-@@ -489,49 +477,49 @@ msgstr ""
- "해당 GPG 키는 \"%s\"저장소가 이미 설치되어 있지만이 패키지에 맞지 않습니다.\n"
- "이 저장소에 대해 올바른 키 URL이 구성되었는지 확인하십시오."
- 
--#: dnf/base.py:2429
-+#: dnf/base.py:2441
- msgid "Import of key(s) didn't help, wrong key(s)?"
- msgstr "가져온 키에 문제가 있습니다. 잘못된 키입니까?"
- 
--#: dnf/base.py:2482
-+#: dnf/base.py:2494
- msgid "  * Maybe you meant: {}"
- msgstr "  * 다음을 의미할 수도 있습니다: {}"
- 
--#: dnf/base.py:2514
-+#: dnf/base.py:2526
- msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum"
- msgstr "로컬 저장소 \"{}\"의 \"{}\"패키지에 잘못된 체크섬이 있습니다"
- 
--#: dnf/base.py:2517
-+#: dnf/base.py:2529
- msgid "Some packages from local repository have incorrect checksum"
- msgstr "로컬 저장소의 일부 패키지에 잘못된 체크섬이 있습니다"
- 
--#: dnf/base.py:2520
-+#: dnf/base.py:2532
- msgid "Package \"{}\" from repository \"{}\" has incorrect checksum"
- msgstr "저장소 \"{}\"의 패키지 \"{}\"에 잘못된 체크섬이 있습니다"
- 
--#: dnf/base.py:2523
-+#: dnf/base.py:2535
- msgid ""
- "Some packages have invalid cache, but cannot be downloaded due to \"--"
- "cacheonly\" option"
- msgstr "일부 패키지에는 유효하지 않은 캐시가 있지만 \"--cacheonly\"옵션으로 인해 다운로드할 수 없습니다"
- 
--#: dnf/base.py:2541 dnf/base.py:2561
-+#: dnf/base.py:2553 dnf/base.py:2573
- msgid "No match for argument"
- msgstr "일치하는 인수가 없습니다"
- 
--#: dnf/base.py:2549 dnf/base.py:2569
-+#: dnf/base.py:2561 dnf/base.py:2581
- msgid "All matches were filtered out by exclude filtering for argument"
- msgstr "모든 일치 항목이 인수의 제외 필터로 필터링되었습니다"
- 
--#: dnf/base.py:2551
-+#: dnf/base.py:2563
- msgid "All matches were filtered out by modular filtering for argument"
- msgstr "모든 일치 항목이 인수의 모듈식 필터로 필터링되었습니다"
- 
--#: dnf/base.py:2567
-+#: dnf/base.py:2579
- msgid "All matches were installed from a different repository for argument"
- msgstr "모든 일치 항목이 인수의 다른 리포지토리에서 설치되었습니다"
- 
--#: dnf/base.py:2583
-+#: dnf/base.py:2626
- #, python-format
- msgid "Package %s is already installed."
- msgstr "패키지 %s이/가 이미 설치되어 있습니다."
-@@ -551,8 +539,8 @@ msgstr "\"%s\" 파일의 구문 분석에 실패했습니다 : %s"
- msgid "Cannot read file \"%s\": %s"
- msgstr "\"%s\" 파일을 읽을 수 없습니다: %s"
- 
--#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:902
--#: dnf/cli/cli.py:906 dnf/cli/commands/alias.py:108
-+#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:803
-+#: dnf/cli/cli.py:807 dnf/cli/commands/alias.py:108
- #, python-format
- msgid "Config error: %s"
- msgstr "설정 오류: %s"
-@@ -583,7 +571,7 @@ msgid ""
- "stream '{2}'"
- msgstr "이 작업은 '{0}' 모듈을 '{1}' 스트림에서 ‘{2}' 스트림으로 전환합니다"
- 
--#: dnf/cli/cli.py:172
-+#: dnf/cli/cli.py:173
- #, python-brace-format
- msgid ""
- "It is not possible to switch enabled streams of a module.\n"
-@@ -592,35 +580,35 @@ msgstr ""
- "활성화된 모듈 스트림을 전환 할 수 없습니다.\n"
- "설치된 모든 내용을 모듈에서 제거하고 ‘{prog} module reset <module_name>' 명령을 사용하여 모듈을 재설정하는 것이 좋습니다. 모듈을 재설정한 후 다른 스트림을 설치할 수 있습니다."
- 
--#: dnf/cli/cli.py:210
-+#: dnf/cli/cli.py:211
- #, python-brace-format
- msgid "{prog} will only download packages for the transaction."
- msgstr "{prog}은/는 트랜잭션용 패키지 만 다운로드합니다."
- 
--#: dnf/cli/cli.py:213
-+#: dnf/cli/cli.py:214
- #, python-brace-format
- msgid ""
- "{prog} will only download packages, install gpg keys, and check the "
- "transaction."
- msgstr "{prog}은/는 패키지 만 다운로드하고 gpg 키를 설치하며 트랜잭션을 확인합니다."
- 
--#: dnf/cli/cli.py:217
-+#: dnf/cli/cli.py:218
- msgid "Operation aborted."
- msgstr "작업이 중지됨."
- 
--#: dnf/cli/cli.py:224
-+#: dnf/cli/cli.py:225
- msgid "Downloading Packages:"
- msgstr "패키지 다운로드중:"
- 
--#: dnf/cli/cli.py:230
-+#: dnf/cli/cli.py:231
- msgid "Error downloading packages:"
- msgstr "패키지 다운로드중 오류 발생:"
- 
--#: dnf/cli/cli.py:258
-+#: dnf/cli/cli.py:263
- msgid "Transaction failed"
- msgstr "트랜잭션 실패"
- 
--#: dnf/cli/cli.py:281
-+#: dnf/cli/cli.py:286
- msgid ""
- "Refusing to automatically import keys when running unattended.\n"
- "Use \"-y\" to override."
-@@ -628,117 +616,96 @@ msgstr ""
- "키를 자동으로 가져 오는 것을 거부합니다.\n"
- "동작을 무시하려면 \"-y\"를 사용하십시오."
- 
--#: dnf/cli/cli.py:331
-+#: dnf/cli/cli.py:336
- msgid "Changelogs for {}"
- msgstr "{}의 변경 사항"
- 
--#: dnf/cli/cli.py:364 dnf/cli/cli.py:505 dnf/cli/cli.py:511
-+#: dnf/cli/cli.py:369 dnf/cli/cli.py:510 dnf/cli/cli.py:516
- msgid "Obsoleting Packages"
- msgstr "더 이상 사용되지 않는 패키지"
- 
--#: dnf/cli/cli.py:393
-+#: dnf/cli/cli.py:398
- msgid "No packages marked for distribution synchronization."
- msgstr "배포 동기화가 필요한 패키지가 없습니다."
- 
--#: dnf/cli/cli.py:428
-+#: dnf/cli/cli.py:424 dnf/cli/commands/group.py:395
-+#, python-format
-+msgid "No package %s available."
-+msgstr "사용 가능한 패키지 %s가 없습니다."
-+
-+#: dnf/cli/cli.py:433
- msgid "No packages marked for downgrade."
- msgstr "다운 그레이드 대상으로 표시된 패키지가 없습니다."
- 
--#: dnf/cli/cli.py:479
-+#: dnf/cli/cli.py:484
- msgid "Installed Packages"
- msgstr "설치된 패키지"
- 
--#: dnf/cli/cli.py:487
-+#: dnf/cli/cli.py:492
- msgid "Available Packages"
- msgstr "사용 가능한 패키지"
- 
--#: dnf/cli/cli.py:491
-+#: dnf/cli/cli.py:496
- msgid "Autoremove Packages"
- msgstr "패키지 자동 삭제"
- 
- # ctx::sourcefile::Systems Navigation Menu
--#: dnf/cli/cli.py:493
-+#: dnf/cli/cli.py:498
- msgid "Extra Packages"
- msgstr "추가 패키지"
- 
--#: dnf/cli/cli.py:497
-+#: dnf/cli/cli.py:502
- msgid "Available Upgrades"
- msgstr "사용 가능한 업그레이드"
- 
--#: dnf/cli/cli.py:513
-+#: dnf/cli/cli.py:518
- msgid "Recently Added Packages"
- msgstr "최근에 추가 된 패키지"
- 
--#: dnf/cli/cli.py:518
-+#: dnf/cli/cli.py:522
- msgid "No matching Packages to list"
- msgstr "목록과 일치하는 패키지가 없습니다"
- 
--#: dnf/cli/cli.py:599
-+#: dnf/cli/cli.py:603
- msgid "No Matches found"
- msgstr "검색 결과가 없습니다"
- 
--#: dnf/cli/cli.py:609
--msgid "No transaction ID given"
--msgstr "지정된 트랜잭션 ID가 없습니다"
--
--#: dnf/cli/cli.py:614
--msgid "Not found given transaction ID"
--msgstr "주어진 트랜잭션 ID를 찾을 수 없습니다"
--
--#: dnf/cli/cli.py:623
--msgid "Found more than one transaction ID!"
--msgstr "두 개 이상의 트랜잭션 ID를 찾았습니다!"
--
--#: dnf/cli/cli.py:640
--#, python-format
--msgid "Transaction history is incomplete, before %u."
--msgstr "%u이전 트랜잭션 내역이 불완전합니다."
--
--#: dnf/cli/cli.py:642
--#, python-format
--msgid "Transaction history is incomplete, after %u."
--msgstr "%u이후 트랜잭션 내역이 불완전합니다."
--
--#: dnf/cli/cli.py:689
--msgid "Undoing transaction {}, from {}"
--msgstr "{}에서 {} 트랜잭션 실행을 취소하고 있습니다"
--
--#: dnf/cli/cli.py:769 dnf/cli/commands/shell.py:237
-+#: dnf/cli/cli.py:670 dnf/cli/commands/shell.py:237
- #, python-format
- msgid "Unknown repo: '%s'"
- msgstr "알 수 없는 저장소: '%s'"
- 
--#: dnf/cli/cli.py:783
-+#: dnf/cli/cli.py:684
- #, python-format
- msgid "No repository match: %s"
- msgstr "일치하는 저장소가 없습니다 : %s"
- 
--#: dnf/cli/cli.py:817
-+#: dnf/cli/cli.py:718
- msgid ""
- "This command has to be run with superuser privileges (under the root user on"
- " most systems)."
- msgstr "이 명령은 수퍼 유저 권한으로 실행해야합니다 (대부분의 시스템에서 root 사용자로 실행)."
- 
--#: dnf/cli/cli.py:847
-+#: dnf/cli/cli.py:748
- #, python-format
- msgid "No such command: %s. Please use %s --help"
- msgstr "명령을 찾을 수 없습니다: %s . %s --help를 사용하십시오"
- 
--#: dnf/cli/cli.py:850
-+#: dnf/cli/cli.py:751
- #, python-format, python-brace-format
- msgid ""
- "It could be a {PROG} plugin command, try: \"{prog} install 'dnf-"
- "command(%s)'\""
- msgstr "{PROG} 플러그인 명령일 수 있습니다: \"{prog} 'dnf-command(%s)'\""
- 
--#: dnf/cli/cli.py:854
-+#: dnf/cli/cli.py:755
- #, python-brace-format
- msgid ""
- "It could be a {prog} plugin command, but loading of plugins is currently "
- "disabled."
- msgstr "{prog} 플러그인 명령일 수 있지만 플러그인 로딩은 현재 비활성화되어 있습니다."
- 
--#: dnf/cli/cli.py:912
-+#: dnf/cli/cli.py:813
- msgid ""
- "--destdir or --downloaddir must be used with --downloadonly or download or "
- "system-upgrade command."
-@@ -746,7 +713,7 @@ msgstr ""
- "--destdir 또는 --downloaddir은 --downloadonly 또는 download 또는 system-upgrade 명령과"
- " 함께 사용해야합니다."
- 
--#: dnf/cli/cli.py:918
-+#: dnf/cli/cli.py:819
- msgid ""
- "--enable, --set-enabled and --disable, --set-disabled must be used with "
- "config-manager command."
-@@ -754,7 +721,7 @@ msgstr ""
- "--enable, --set-enabled 및 --disable, --set-disabled는 config-manager 명령과 함께 "
- "사용해야합니다."
- 
--#: dnf/cli/cli.py:1000
-+#: dnf/cli/cli.py:901
- msgid ""
- "Warning: Enforcing GPG signature check globally as per active RPM security "
- "policy (see 'gpgcheck' in dnf.conf(5) for how to squelch this message)"
-@@ -762,38 +729,38 @@ msgstr ""
- "경고: 활성화된 RPM 보안 정책에 따라 GPG 서명 검사를 전체적으로 시행합니다 (이 메시지를 제거하는 방법은 dnf.conf (5)의"
- " 'gpgcheck' 참조)"
- 
--#: dnf/cli/cli.py:1020
-+#: dnf/cli/cli.py:921
- msgid "Config file \"{}\" does not exist"
- msgstr "\"{}\" 설정 파일이 존재하지 않습니다"
- 
--#: dnf/cli/cli.py:1040
-+#: dnf/cli/cli.py:941
- msgid ""
- "Unable to detect release version (use '--releasever' to specify release "
- "version)"
- msgstr "릴리스 버전을 찾을 수 없습니다 ('--releasever'를 사용하여 릴리스 버전을 지정하십시오)"
- 
--#: dnf/cli/cli.py:1127 dnf/cli/commands/repoquery.py:471
-+#: dnf/cli/cli.py:1028 dnf/cli/commands/repoquery.py:471
- msgid "argument {}: not allowed with argument {}"
- msgstr "인수 {}: 인수 {}과 함께 사용할 수 없습니다"
- 
--#: dnf/cli/cli.py:1134
-+#: dnf/cli/cli.py:1035
- #, python-format
- msgid "Command \"%s\" already defined"
- msgstr "\"%s\" 명령이 이미 정의되어 있습니다"
- 
--#: dnf/cli/cli.py:1154
-+#: dnf/cli/cli.py:1055
- msgid "Excludes in dnf.conf: "
- msgstr "dnf.conf에서 제외: "
- 
--#: dnf/cli/cli.py:1157
-+#: dnf/cli/cli.py:1058
- msgid "Includes in dnf.conf: "
- msgstr "dnf.conf에 포함:. "
- 
--#: dnf/cli/cli.py:1160
-+#: dnf/cli/cli.py:1061
- msgid "Excludes in repo "
- msgstr "리포지토리에서 제외 "
- 
--#: dnf/cli/cli.py:1163
-+#: dnf/cli/cli.py:1064
- msgid "Includes in repo "
- msgstr "리포지토리에 포함 "
- 
-@@ -849,7 +816,7 @@ msgid "show all packages (default)"
- msgstr "모든 패키지 표시 (기본값)"
- 
- #: dnf/cli/commands/__init__.py:171 dnf/cli/commands/__init__.py:743
--#: dnf/cli/commands/module.py:351
-+#: dnf/cli/commands/module.py:373
- msgid "show only available packages"
- msgstr "사용 가능한 패키지 만 표시"
- 
-@@ -1174,78 +1141,78 @@ msgstr "그룹 정보를 표시하거나 사용합니다"
- msgid "No group data available for configured repositories."
- msgstr "설정된 리포지토리에 사용할 수있는 그룹 데이터가 없습니다."
- 
--#: dnf/cli/commands/group.py:129
-+#: dnf/cli/commands/group.py:126
- #, python-format
- msgid "Warning: Group %s does not exist."
- msgstr "경고: %s 그룹이 존재하지 않습니다."
- 
--#: dnf/cli/commands/group.py:170
-+#: dnf/cli/commands/group.py:167
- msgid "Warning: No groups match:"
- msgstr "경고: 일치하는 그룹이 없습니다"
- 
--#: dnf/cli/commands/group.py:182 dnf/cli/commands/group.py:193
--#: dnf/cli/output.py:1226
-+#: dnf/cli/commands/group.py:179 dnf/cli/commands/group.py:190
-+#: dnf/cli/output.py:1139
- msgid "<name-unset>"
- msgstr "<name-unset>"
- 
--#: dnf/cli/commands/group.py:199
-+#: dnf/cli/commands/group.py:196
- msgid "Available Environment Groups:"
- msgstr "사용 가능한 환경 그룹 :"
- 
--#: dnf/cli/commands/group.py:201
-+#: dnf/cli/commands/group.py:198
- msgid "Installed Environment Groups:"
- msgstr "설치된 환경 그룹 :"
- 
--#: dnf/cli/commands/group.py:208 dnf/cli/commands/group.py:294
-+#: dnf/cli/commands/group.py:205 dnf/cli/commands/group.py:291
- msgid "Installed Groups:"
- msgstr "설치된 그룹 :"
- 
--#: dnf/cli/commands/group.py:215 dnf/cli/commands/group.py:301
-+#: dnf/cli/commands/group.py:212 dnf/cli/commands/group.py:298
- msgid "Installed Language Groups:"
- msgstr "설치된 언어 그룹 :"
- 
--#: dnf/cli/commands/group.py:225 dnf/cli/commands/group.py:308
-+#: dnf/cli/commands/group.py:222 dnf/cli/commands/group.py:305
- msgid "Available Groups:"
- msgstr "사용 가능한 그룹 :"
- 
--#: dnf/cli/commands/group.py:232 dnf/cli/commands/group.py:315
-+#: dnf/cli/commands/group.py:229 dnf/cli/commands/group.py:312
- msgid "Available Language Groups:"
- msgstr "사용 가능한 언어 그룹 :"
- 
--#: dnf/cli/commands/group.py:322
-+#: dnf/cli/commands/group.py:319
- msgid "include optional packages from group"
- msgstr "그룹의 선택 패키지를 포함합니다"
- 
--#: dnf/cli/commands/group.py:325
-+#: dnf/cli/commands/group.py:322
- msgid "show also hidden groups"
- msgstr "숨겨진 그룹도 표시합니다"
- 
--#: dnf/cli/commands/group.py:327
-+#: dnf/cli/commands/group.py:324
- msgid "show only installed groups"
- msgstr "설치된 그룹 만 표시합니다"
- 
--#: dnf/cli/commands/group.py:329
-+#: dnf/cli/commands/group.py:326
- msgid "show only available groups"
- msgstr "사용 가능한 그룹 만 표시합니다"
- 
--#: dnf/cli/commands/group.py:331
-+#: dnf/cli/commands/group.py:328
- msgid "show also ID of groups"
- msgstr "그룹 ID 표시"
- 
--#: dnf/cli/commands/group.py:333
-+#: dnf/cli/commands/group.py:330
- msgid "available subcommands: {} (default), {}"
- msgstr "사용 가능한 하위 명령: {} (기본값), {}"
- 
--#: dnf/cli/commands/group.py:337
-+#: dnf/cli/commands/group.py:334
- msgid "argument for group subcommand"
- msgstr "그룹 하위 명령의 인수"
- 
--#: dnf/cli/commands/group.py:346
-+#: dnf/cli/commands/group.py:343
- #, python-format
- msgid "Invalid groups sub-command, use: %s."
- msgstr "그룹 하위 명령이 잘못되었습니다. %s을/를 사용합니다."
- 
--#: dnf/cli/commands/group.py:403
-+#: dnf/cli/commands/group.py:398
- msgid "Unable to find a mandatory group package."
- msgstr "필수 그룹 패키지를 찾을 수 없습니다."
- 
-@@ -1295,30 +1262,58 @@ msgstr "주어진 거래 ID가 없습니다."
- msgid "More than one argument given as transaction file name."
- msgstr "트랜잭션 파일을 제거하지 못했습니다. %s"
- 
--#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:126
-+#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:130
- msgid "No transaction ID or package name given."
- msgstr "트랜잭션 ID 또는 패키지 이름이 없습니다."
- 
--#: dnf/cli/commands/history.py:138
-+#: dnf/cli/commands/history.py:142
- #, python-format
- msgid "You don't have access to the history DB: %s"
- msgstr "기록 DB에 액세스할 수 없습니다: %s"
- 
--#: dnf/cli/commands/history.py:147
-+#: dnf/cli/commands/history.py:151
- #, python-format
- msgid ""
- "Cannot undo transaction %s, doing so would result in an inconsistent package"
- " database."
- msgstr "%s 트랜잭션을 취소할 수 없습니다. 취소하면 패키지 데이터베이스가 일치하지 않게 됩니다."
- 
--#: dnf/cli/commands/history.py:152
-+#: dnf/cli/commands/history.py:156
- #, python-format
- msgid ""
- "Cannot rollback transaction %s, doing so would result in an inconsistent "
- "package database."
- msgstr "%s 트랜잭션을 롤백할 수 없습니다. 이렇게하면 패키지 데이터베이스가 일치하지 않게 됩니다."
- 
--#: dnf/cli/commands/history.py:222
-+#: dnf/cli/commands/history.py:175
-+msgid "No transaction ID given"
-+msgstr "지정된 트랜잭션 ID가 없습니다"
-+
-+#: dnf/cli/commands/history.py:179
-+#, fuzzy, python-brace-format
-+#| msgid "TransactionItem not found for key: {}"
-+msgid "Transaction ID \"{0}\" not found."
-+msgstr "{} 키에 대한 TransactionItem을 찾을 수 없습니다"
-+
-+#: dnf/cli/commands/history.py:185
-+msgid "Found more than one transaction ID!"
-+msgstr "두 개 이상의 트랜잭션 ID를 찾았습니다!"
-+
-+#: dnf/cli/commands/history.py:203
-+#, python-format
-+msgid "Transaction history is incomplete, before %u."
-+msgstr "%u이전 트랜잭션 내역이 불완전합니다."
-+
-+#: dnf/cli/commands/history.py:205
-+#, python-format
-+msgid "Transaction history is incomplete, after %u."
-+msgstr "%u이후 트랜잭션 내역이 불완전합니다."
-+
-+#: dnf/cli/commands/history.py:256
-+msgid "No packages to list"
-+msgstr "목록에 패키지가 없습니다"
-+
-+#: dnf/cli/commands/history.py:279
- msgid ""
- "Invalid transaction ID range definition '{}'.\n"
- "Use '<transaction-id>..<transaction-id>'."
-@@ -1326,7 +1321,7 @@ msgstr ""
- "잘못된 트랜잭션 ID 범위 정의 '{}'. \n"
- "'<transaction-id>..<transaction-id>' 사용."
- 
--#: dnf/cli/commands/history.py:226
-+#: dnf/cli/commands/history.py:283
- msgid ""
- "Can't convert '{}' to transaction ID.\n"
- "Use '<number>', 'last', 'last-<number>'."
-@@ -1334,38 +1329,32 @@ msgstr ""
- "'{}'을 (를) 트랜잭션 ID로 변환할 수 없습니다. \n"
- "'<number>', 'last', 'last-<number>' 사용."
- 
--#: dnf/cli/commands/history.py:255
-+#: dnf/cli/commands/history.py:312
- msgid "No transaction which manipulates package '{}' was found."
- msgstr "패키지 '{}'을 (를) 사용하는 트랜잭션이 없습니다."
- 
--#: dnf/cli/commands/history.py:305
--#, python-brace-format
--msgid "Transaction ID \"{id}\" not found."
--msgstr ""
--
--#: dnf/cli/commands/history.py:313
-+#: dnf/cli/commands/history.py:357
- msgid "{} exists, overwrite?"
- msgstr ""
- 
--#: dnf/cli/commands/history.py:316
-+#: dnf/cli/commands/history.py:360
- msgid "Not overwriting {}, exiting."
- msgstr ""
- 
--#: dnf/cli/commands/history.py:323
-+#: dnf/cli/commands/history.py:367
- #, fuzzy
- #| msgid "Transaction test succeeded."
- msgid "Transaction saved to {}."
- msgstr "트랜잭션 테스트가 완료되었습니다."
- 
--#: dnf/cli/commands/history.py:326
-+#: dnf/cli/commands/history.py:370
- #, fuzzy
- #| msgid "Errors occurred during transaction."
- msgid "Error storing transaction: {}"
- msgstr "거래 중에 오류가 발생했습니다."
- 
--#: dnf/cli/commands/history.py:350
--msgid ""
--"Warning, the following problems occurred while replaying the transaction:"
-+#: dnf/cli/commands/history.py:386
-+msgid "Warning, the following problems occurred while running a transaction:"
- msgstr ""
- 
- #: dnf/cli/commands/install.py:47
-@@ -1385,7 +1374,7 @@ msgstr "일치하는 항목을 찾을 수 없습니다"
- msgid "Not a valid rpm file path: %s"
- msgstr "올바른 rpm 파일 경로가 아닙니다. %s"
- 
--#: dnf/cli/commands/install.py:167
-+#: dnf/cli/commands/install.py:166
- #, python-brace-format
- msgid "There are following alternatives for \"{0}\": {1}"
- msgstr "다음은 “{0}\"의 대안입니다. {1}"
-@@ -1428,7 +1417,7 @@ msgid "%s marked as group installed."
- msgstr "%s은/는 그룹이 설치한 것으로 표시되었습니다"
- 
- #: dnf/cli/commands/mark.py:85 dnf/cli/commands/shell.py:129
--#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:279
-+#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:282
- msgid "Error:"
- msgstr "오류:"
- 
-@@ -1484,42 +1473,46 @@ msgid "Package {} belongs to multiple modules, skipping"
- msgstr "{} 패키지는 여러 모듈에 속합니다. 건너 뛰기"
- 
- #: dnf/cli/commands/module.py:277
-+msgid "switch a module to a stream and distrosync rpm packages"
-+msgstr ""
-+
-+#: dnf/cli/commands/module.py:299
- msgid "list modular packages"
- msgstr "모듈 패키지 목록"
- 
--#: dnf/cli/commands/module.py:292
-+#: dnf/cli/commands/module.py:314
- msgid "list packages belonging to a module"
- msgstr "모듈에 속하는 패키지를 나열하십시오"
- 
--#: dnf/cli/commands/module.py:327
-+#: dnf/cli/commands/module.py:349
- msgid "Interact with Modules."
- msgstr "모듈과 상호 작용합니다."
- 
--#: dnf/cli/commands/module.py:340
-+#: dnf/cli/commands/module.py:362
- msgid "show only enabled modules"
- msgstr "활성화된 모듈 만 표시"
- 
--#: dnf/cli/commands/module.py:343
-+#: dnf/cli/commands/module.py:365
- msgid "show only disabled modules"
- msgstr "비활성화된 모듈 만 표시"
- 
--#: dnf/cli/commands/module.py:346
-+#: dnf/cli/commands/module.py:368
- msgid "show only installed modules or packages"
- msgstr "설치된 모듈 또는 패키지 만 표시"
- 
--#: dnf/cli/commands/module.py:349
-+#: dnf/cli/commands/module.py:371
- msgid "show profile content"
- msgstr "프로파일 내용 표시"
- 
--#: dnf/cli/commands/module.py:354
-+#: dnf/cli/commands/module.py:376
- msgid "remove all modular packages"
- msgstr "모든 모듈 패키지 삭제"
- 
--#: dnf/cli/commands/module.py:364
-+#: dnf/cli/commands/module.py:386
- msgid "Module specification"
- msgstr "모듈 사양"
- 
--#: dnf/cli/commands/module.py:386
-+#: dnf/cli/commands/module.py:408
- msgid "{} {} {}: too few arguments"
- msgstr "{} {} {}: 인수가 부족합니다"
- 
-@@ -2004,22 +1997,22 @@ msgstr "KEYWORD"
- msgid "Keyword to search for"
- msgstr "검색 키워드"
- 
--#: dnf/cli/commands/search.py:61 dnf/cli/output.py:506
-+#: dnf/cli/commands/search.py:61 dnf/cli/output.py:460
- msgctxt "long"
- msgid "Name"
- msgstr "이름"
- 
--#: dnf/cli/commands/search.py:62 dnf/cli/output.py:559
-+#: dnf/cli/commands/search.py:62 dnf/cli/output.py:513
- msgctxt "long"
- msgid "Summary"
- msgstr "요약"
- 
--#: dnf/cli/commands/search.py:63 dnf/cli/output.py:569
-+#: dnf/cli/commands/search.py:63 dnf/cli/output.py:523
- msgctxt "long"
- msgid "Description"
- msgstr "설명"
- 
--#: dnf/cli/commands/search.py:64 dnf/cli/output.py:562
-+#: dnf/cli/commands/search.py:64 dnf/cli/output.py:516
- msgid "URL"
- msgstr "URL"
- 
-@@ -2162,16 +2155,16 @@ msgstr ""
- "run                      트랜잭션 세트 분석 및 실행\n"
- "exit (or quit)           쉘 종료"
- 
--#: dnf/cli/commands/shell.py:259
-+#: dnf/cli/commands/shell.py:262
- #, python-format
- msgid "Error: Cannot open %s for reading"
- msgstr "오류: 읽기 전용 %s를 열 수 없습니다"
- 
--#: dnf/cli/commands/shell.py:281 dnf/cli/main.py:187
-+#: dnf/cli/commands/shell.py:284 dnf/cli/main.py:187
- msgid "Complete!"
- msgstr "완료되었습니다!"
- 
--#: dnf/cli/commands/shell.py:291
-+#: dnf/cli/commands/shell.py:294
- msgid "Leaving Shell"
- msgstr "쉘 나가기"
- 
-@@ -2364,8 +2357,8 @@ msgstr "파일"
- 
- # translation auto-copied from project subscription-manager, version 1.11.X,
- # document keys
--#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1499
--#: dnf/cli/output.py:1772 dnf/cli/output.py:1774
-+#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1652
-+#: dnf/cli/output.py:1654 dnf/util.py:591
- msgid "Installed"
- msgstr "설치됨"
- 
-@@ -2688,13 +2681,13 @@ msgstr "‘%s' 인수를 인코딩할 수 없습니다: %s"
- #. Translators: This is abbreviated 'Name'. Should be no longer
- #. than 12 characters. You can use the full version if it is short
- #. enough in your language.
--#: dnf/cli/output.py:505
-+#: dnf/cli/output.py:459
- msgctxt "short"
- msgid "Name"
- msgstr "이름"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:511
-+#: dnf/cli/output.py:465
- msgid "Epoch"
- msgstr "기간"
- 
-@@ -2702,38 +2695,38 @@ msgstr "기간"
- #. use the full (unabbreviated) term 'Version' if you think that
- #. the translation to your language is not too long and will
- #. always fit to limited space.
--#: dnf/cli/output.py:512 dnf/cli/output.py:1335
-+#: dnf/cli/output.py:466 dnf/cli/output.py:1248
- msgctxt "short"
- msgid "Version"
- msgstr "버전"
- 
- #. Translators: This is the full (unabbreviated) term 'Version'.
--#: dnf/cli/output.py:513 dnf/cli/output.py:1337
-+#: dnf/cli/output.py:467 dnf/cli/output.py:1250
- msgctxt "long"
- msgid "Version"
- msgstr "버전"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:516
-+#: dnf/cli/output.py:470
- msgid "Release"
- msgstr "릴리즈"
- 
- #. Translators: This is abbreviated 'Architecture', used when
- #. we have not enough space to display the full word.
--#: dnf/cli/output.py:517 dnf/cli/output.py:1326
-+#: dnf/cli/output.py:471 dnf/cli/output.py:1239
- msgctxt "short"
- msgid "Arch"
- msgstr "아키텍처"
- 
- #. Translators: This is the full word 'Architecture', used when
- #. we have enough space.
--#: dnf/cli/output.py:518 dnf/cli/output.py:1329
-+#: dnf/cli/output.py:472 dnf/cli/output.py:1242
- msgctxt "long"
- msgid "Architecture"
- msgstr "아키텍처"
- 
- #. Translators: This is the full (unabbreviated) term 'Size'.
--#: dnf/cli/output.py:520 dnf/cli/output.py:1352
-+#: dnf/cli/output.py:474 dnf/cli/output.py:1265
- msgctxt "long"
- msgid "Size"
- msgstr "크기"
-@@ -2742,32 +2735,32 @@ msgstr "크기"
- #. not be longer than 5 characters. If the term 'Size' in your
- #. language is not longer than 5 characters then you can use it
- #. unabbreviated.
--#: dnf/cli/output.py:520 dnf/cli/output.py:1350
-+#: dnf/cli/output.py:474 dnf/cli/output.py:1263
- msgctxt "short"
- msgid "Size"
- msgstr "크기"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:524
-+#: dnf/cli/output.py:478
- msgid "Source"
- msgstr "소스"
- 
- #. Translators: This is abbreviated 'Repository', used when
- #. we have not enough space to display the full word.
--#: dnf/cli/output.py:525 dnf/cli/output.py:1341
-+#: dnf/cli/output.py:479 dnf/cli/output.py:1254
- msgctxt "short"
- msgid "Repo"
- msgstr "리포지터리"
- 
- #. Translators: This is the full word 'Repository', used when
- #. we have enough space.
--#: dnf/cli/output.py:526 dnf/cli/output.py:1344
-+#: dnf/cli/output.py:480 dnf/cli/output.py:1257
- msgctxt "long"
- msgid "Repository"
- msgstr "리포지터리"
- 
- #. Translators: This message should be no longer than 12 chars.
--#: dnf/cli/output.py:533
-+#: dnf/cli/output.py:487
- msgid "From repo"
- msgstr "리포지터리에서"
- 
-@@ -2775,314 +2768,310 @@ msgstr "리포지터리에서"
- #. print(_("Committer   : %s") % ucd(pkg.committer))
- #. print(_("Committime  : %s") % time.ctime(pkg.committime))
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:539
-+#: dnf/cli/output.py:493
- msgid "Packager"
- msgstr "패키지 프로그램"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:541
-+#: dnf/cli/output.py:495
- msgid "Buildtime"
- msgstr "빌드 시간"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:545
-+#: dnf/cli/output.py:499
- msgid "Install time"
- msgstr "설치 시간"
- 
- #. Translators: This message should be no longer than 12 chars.
--#: dnf/cli/output.py:554
-+#: dnf/cli/output.py:508
- msgid "Installed by"
- msgstr "설치자"
- 
- #. Translators: This is abbreviated 'Summary'. Should be no longer
- #. than 12 characters. You can use the full version if it is short
- #. enough in your language.
--#: dnf/cli/output.py:558
-+#: dnf/cli/output.py:512
- msgctxt "short"
- msgid "Summary"
- msgstr "요약"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:564
-+#: dnf/cli/output.py:518
- msgid "License"
- msgstr "라이센스"
- 
- #. Translators: This is abbreviated 'Description'. Should be no longer
- #. than 12 characters. You can use the full version if it is short
- #. enough in your language.
--#: dnf/cli/output.py:568
-+#: dnf/cli/output.py:522
- msgctxt "short"
- msgid "Description"
- msgstr "설명"
- 
--#: dnf/cli/output.py:695
--msgid "No packages to list"
--msgstr "목록에 패키지가 없습니다"
--
--#: dnf/cli/output.py:706
-+#: dnf/cli/output.py:650
- msgid "y"
- msgstr "y"
- 
--#: dnf/cli/output.py:706
-+#: dnf/cli/output.py:650
- msgid "yes"
- msgstr "예"
- 
--#: dnf/cli/output.py:707
-+#: dnf/cli/output.py:651
- msgid "n"
- msgstr "n"
- 
--#: dnf/cli/output.py:707
-+#: dnf/cli/output.py:651
- msgid "no"
- msgstr "아니요"
- 
--#: dnf/cli/output.py:711
-+#: dnf/cli/output.py:655
- msgid "Is this ok [y/N]: "
- msgstr "정말입니까 [y/N]: "
- 
--#: dnf/cli/output.py:715
-+#: dnf/cli/output.py:659
- msgid "Is this ok [Y/n]: "
- msgstr "정말입니까 [Y/n]: "
- 
--#: dnf/cli/output.py:795
-+#: dnf/cli/output.py:739
- #, python-format
- msgid "Group: %s"
- msgstr "그룹 %s"
- 
--#: dnf/cli/output.py:799
-+#: dnf/cli/output.py:743
- #, python-format
- msgid " Group-Id: %s"
- msgstr " 그룹 ID: %s"
- 
--#: dnf/cli/output.py:801 dnf/cli/output.py:840
-+#: dnf/cli/output.py:745 dnf/cli/output.py:784
- #, python-format
- msgid " Description: %s"
- msgstr " 설명: %s"
- 
--#: dnf/cli/output.py:803
-+#: dnf/cli/output.py:747
- #, python-format
- msgid " Language: %s"
- msgstr " 언어: %s"
- 
--#: dnf/cli/output.py:806
-+#: dnf/cli/output.py:750
- msgid " Mandatory Packages:"
- msgstr " 필수 패키지 :"
- 
--#: dnf/cli/output.py:807
-+#: dnf/cli/output.py:751
- msgid " Default Packages:"
- msgstr " 기본 패키지 :"
- 
--#: dnf/cli/output.py:808
-+#: dnf/cli/output.py:752
- msgid " Optional Packages:"
- msgstr " 선택적인 패키지 :"
- 
--#: dnf/cli/output.py:809
-+#: dnf/cli/output.py:753
- msgid " Conditional Packages:"
- msgstr " 추가 가능 패키지 :"
- 
--#: dnf/cli/output.py:834
-+#: dnf/cli/output.py:778
- #, python-format
- msgid "Environment Group: %s"
- msgstr "환경 그룹 : %s"
- 
--#: dnf/cli/output.py:837
-+#: dnf/cli/output.py:781
- #, python-format
- msgid " Environment-Id: %s"
- msgstr " 환경 -ID : %s"
- 
--#: dnf/cli/output.py:843
-+#: dnf/cli/output.py:787
- msgid " Mandatory Groups:"
- msgstr " 필수 그룹 :"
- 
--#: dnf/cli/output.py:844
-+#: dnf/cli/output.py:788
- msgid " Optional Groups:"
- msgstr " 선택적인 그룹 :"
- 
--#: dnf/cli/output.py:865
-+#: dnf/cli/output.py:809
- msgid "Matched from:"
- msgstr "일치하는 항목 :"
- 
--#: dnf/cli/output.py:879
-+#: dnf/cli/output.py:823
- #, python-format
- msgid "Filename    : %s"
- msgstr "파일 이름 : %s"
- 
--#: dnf/cli/output.py:904
-+#: dnf/cli/output.py:848
- #, python-format
- msgid "Repo        : %s"
- msgstr "리포지토리      : %s"
- 
--#: dnf/cli/output.py:913
-+#: dnf/cli/output.py:857
- msgid "Description : "
- msgstr "설명 : "
- 
--#: dnf/cli/output.py:917
-+#: dnf/cli/output.py:861
- #, python-format
- msgid "URL         : %s"
- msgstr "URL         : %s"
- 
--#: dnf/cli/output.py:921
-+#: dnf/cli/output.py:865
- #, python-format
- msgid "License     : %s"
- msgstr "라이센스    : %s"
- 
--#: dnf/cli/output.py:927
-+#: dnf/cli/output.py:871
- #, python-format
- msgid "Provide    : %s"
- msgstr "제공        : %s"
- 
--#: dnf/cli/output.py:947
-+#: dnf/cli/output.py:891
- #, python-format
- msgid "Other       : %s"
- msgstr "기타       : %s"
- 
--#: dnf/cli/output.py:996
-+#: dnf/cli/output.py:940
- msgid "There was an error calculating total download size"
- msgstr "총 다운로드 크기를 계산하는 중에 오류가 발생했습니다"
- 
--#: dnf/cli/output.py:1002
-+#: dnf/cli/output.py:946
- #, python-format
- msgid "Total size: %s"
- msgstr "전체 크기: %s"
- 
--#: dnf/cli/output.py:1005
-+#: dnf/cli/output.py:949
- #, python-format
- msgid "Total download size: %s"
- msgstr "총 다운로드 크기 : %s"
- 
--#: dnf/cli/output.py:1008
-+#: dnf/cli/output.py:952
- #, python-format
- msgid "Installed size: %s"
- msgstr "설치된 크기 : %s"
- 
--#: dnf/cli/output.py:1026
-+#: dnf/cli/output.py:970
- msgid "There was an error calculating installed size"
- msgstr "설치된 크기를 계산하는 동안 오류가 발생했습니다"
- 
--#: dnf/cli/output.py:1030
-+#: dnf/cli/output.py:974
- #, python-format
- msgid "Freed space: %s"
- msgstr "사용 가능한 공간 : %s"
- 
--#: dnf/cli/output.py:1039
-+#: dnf/cli/output.py:983
- msgid "Marking packages as installed by the group:"
- msgstr "그룹에 설치된 패키지 표시:"
- 
--#: dnf/cli/output.py:1046
-+#: dnf/cli/output.py:990
- msgid "Marking packages as removed by the group:"
- msgstr "그룹에 의해 제거된 패키지 표시:"
- 
--#: dnf/cli/output.py:1056
-+#: dnf/cli/output.py:1000
- msgid "Group"
- msgstr "그룹"
- 
--#: dnf/cli/output.py:1056
-+#: dnf/cli/output.py:1000
- msgid "Packages"
- msgstr "패키지"
- 
--#: dnf/cli/output.py:1133
-+#: dnf/cli/output.py:1046
- msgid "Installing group/module packages"
- msgstr "그룹 / 모듈 패키지 설치"
- 
--#: dnf/cli/output.py:1134
-+#: dnf/cli/output.py:1047
- msgid "Installing group packages"
- msgstr "그룹 패키지 설치"
- 
- #. TRANSLATORS: This is for a list of packages to be installed.
--#: dnf/cli/output.py:1138
-+#: dnf/cli/output.py:1051
- msgctxt "summary"
- msgid "Installing"
- msgstr "설치 중"
- 
- #. TRANSLATORS: This is for a list of packages to be upgraded.
--#: dnf/cli/output.py:1140
-+#: dnf/cli/output.py:1053
- msgctxt "summary"
- msgid "Upgrading"
- msgstr "업그레이드 중"
- 
- #. TRANSLATORS: This is for a list of packages to be reinstalled.
--#: dnf/cli/output.py:1142
-+#: dnf/cli/output.py:1055
- msgctxt "summary"
- msgid "Reinstalling"
- msgstr "재설치 중"
- 
--#: dnf/cli/output.py:1144
-+#: dnf/cli/output.py:1057
- msgid "Installing dependencies"
- msgstr "종속 패키지 설치 중"
- 
--#: dnf/cli/output.py:1145
-+#: dnf/cli/output.py:1058
- msgid "Installing weak dependencies"
- msgstr "취약한 종속 패키지 설치 중"
- 
- #. TRANSLATORS: This is for a list of packages to be removed.
- # translation auto-copied from project subscription-manager, version 1.11.X,
- # document keys
--#: dnf/cli/output.py:1147
-+#: dnf/cli/output.py:1060
- msgid "Removing"
- msgstr "삭제 중"
- 
--#: dnf/cli/output.py:1148
-+#: dnf/cli/output.py:1061
- msgid "Removing dependent packages"
- msgstr "종속 패키지 제거"
- 
--#: dnf/cli/output.py:1149
-+#: dnf/cli/output.py:1062
- msgid "Removing unused dependencies"
- msgstr "사용하지 않는 종속 패키지 제거"
- 
- #. TRANSLATORS: This is for a list of packages to be downgraded.
--#: dnf/cli/output.py:1151
-+#: dnf/cli/output.py:1064
- msgctxt "summary"
- msgid "Downgrading"
- msgstr "다운그레이드 중"
- 
--#: dnf/cli/output.py:1176
-+#: dnf/cli/output.py:1089
- msgid "Installing module profiles"
- msgstr "모듈 프로파일 설치"
- 
--#: dnf/cli/output.py:1185
-+#: dnf/cli/output.py:1098
- msgid "Disabling module profiles"
- msgstr "모듈 프로파일 비활성화"
- 
--#: dnf/cli/output.py:1194
-+#: dnf/cli/output.py:1107
- msgid "Enabling module streams"
- msgstr "모듈 스트림 활성화"
- 
--#: dnf/cli/output.py:1202
-+#: dnf/cli/output.py:1115
- msgid "Switching module streams"
- msgstr "모듈 스트림 전환"
- 
--#: dnf/cli/output.py:1210
-+#: dnf/cli/output.py:1123
- msgid "Disabling modules"
- msgstr "모듈 비활성화"
- 
--#: dnf/cli/output.py:1218
-+#: dnf/cli/output.py:1131
- msgid "Resetting modules"
- msgstr "모듈 재설정"
- 
--#: dnf/cli/output.py:1230
-+#: dnf/cli/output.py:1143
- msgid "Installing Environment Groups"
- msgstr "환경 그룹 설치"
- 
--#: dnf/cli/output.py:1237
-+#: dnf/cli/output.py:1150
- msgid "Upgrading Environment Groups"
- msgstr "환경 그룹 업그레이드"
- 
--#: dnf/cli/output.py:1244
-+#: dnf/cli/output.py:1157
- msgid "Removing Environment Groups"
- msgstr "환경 그룹 제거"
- 
--#: dnf/cli/output.py:1251
-+#: dnf/cli/output.py:1164
- msgid "Installing Groups"
- msgstr "그룹 설치"
- 
--#: dnf/cli/output.py:1258
-+#: dnf/cli/output.py:1171
- msgid "Upgrading Groups"
- msgstr "그룹 업그레이드"
- 
--#: dnf/cli/output.py:1265
-+#: dnf/cli/output.py:1178
- msgid "Removing Groups"
- msgstr "그룹 제거"
- 
--#: dnf/cli/output.py:1281
-+#: dnf/cli/output.py:1194
- #, python-format
- msgid ""
- "Skipping packages with conflicts:\n"
-@@ -3091,12 +3080,12 @@ msgstr ""
- "충돌 패키지 건너 뛰기 :\n"
- "(업그레이드를 강제하려면 명령행에 '%s' 추가)"
- 
--#: dnf/cli/output.py:1291
-+#: dnf/cli/output.py:1204
- #, python-format
- msgid "Skipping packages with broken dependencies%s"
- msgstr "손상된 종속성이 있는 %s 패키지 건너 뛰기"
- 
--#: dnf/cli/output.py:1295
-+#: dnf/cli/output.py:1208
- msgid " or part of a group"
- msgstr " 또는 그룹의 일부"
- 
-@@ -3104,22 +3093,22 @@ msgstr " 또는 그룹의 일부"
- #. use the full (unabbreviated) term 'Package' if you think that
- #. the translation to your language is not too long and will
- #. always fit to limited space.
--#: dnf/cli/output.py:1320
-+#: dnf/cli/output.py:1233
- msgctxt "short"
- msgid "Package"
- msgstr "패키지"
- 
- #. Translators: This is the full (unabbreviated) term 'Package'.
--#: dnf/cli/output.py:1322
-+#: dnf/cli/output.py:1235
- msgctxt "long"
- msgid "Package"
- msgstr "패키지"
- 
--#: dnf/cli/output.py:1371
-+#: dnf/cli/output.py:1284
- msgid "replacing"
- msgstr "교체"
- 
--#: dnf/cli/output.py:1378
-+#: dnf/cli/output.py:1291
- #, python-format
- msgid ""
- "\n"
-@@ -3131,292 +3120,276 @@ msgstr ""
- "%s\n"
- 
- #. TODO: remove
--#: dnf/cli/output.py:1383 dnf/cli/output.py:1932 dnf/cli/output.py:1933
-+#: dnf/cli/output.py:1296 dnf/cli/output.py:1812 dnf/cli/output.py:1813
- msgid "Install"
- msgstr "설치"
- 
- # ctx::sourcefile::Navigation Menu
--#: dnf/cli/output.py:1387 dnf/cli/output.py:1941
-+#: dnf/cli/output.py:1300 dnf/cli/output.py:1821
- msgid "Upgrade"
- msgstr "업그레이드"
- 
--#: dnf/cli/output.py:1388
-+#: dnf/cli/output.py:1301
- msgid "Remove"
- msgstr "삭제"
- 
--#: dnf/cli/output.py:1390 dnf/cli/output.py:1939
-+#: dnf/cli/output.py:1303 dnf/cli/output.py:1819
- msgid "Downgrade"
- msgstr "다운 그레이드"
- 
--#: dnf/cli/output.py:1391
-+#: dnf/cli/output.py:1304
- msgid "Skip"
- msgstr "건너뛰기"
- 
--#: dnf/cli/output.py:1400 dnf/cli/output.py:1416
-+#: dnf/cli/output.py:1313 dnf/cli/output.py:1329
- msgid "Package"
- msgid_plural "Packages"
- msgstr[0] "패키지"
- 
--#: dnf/cli/output.py:1418
-+#: dnf/cli/output.py:1331
- msgid "Dependent package"
- msgid_plural "Dependent packages"
- msgstr[0] "종속 패키지"
- 
--#: dnf/cli/output.py:1497 dnf/cli/output.py:1773 dnf/cli/output.py:1942
--msgid "Upgraded"
--msgstr "업그레이드 됨"
--
--#: dnf/cli/output.py:1498 dnf/cli/output.py:1773 dnf/cli/output.py:1940
--msgid "Downgraded"
--msgstr "다운 그레이드"
--
--#: dnf/cli/output.py:1503
--msgid "Reinstalled"
--msgstr "다시 설치됨"
--
--#: dnf/cli/output.py:1504
--msgid "Skipped"
--msgstr "건너 뛰기됨"
--
--#: dnf/cli/output.py:1505
--msgid "Removed"
--msgstr "제거됨"
--
--#: dnf/cli/output.py:1508
--msgid "Failed"
--msgstr "실패하였습니다"
--
- # auto translated by TM merge from project: RHOSP Director Installation and
- # Usage , version: 11-Korean, DocId: master
--#: dnf/cli/output.py:1559
-+#: dnf/cli/output.py:1439
- msgid "Total"
- msgstr "합계"
- 
--#: dnf/cli/output.py:1587
-+#: dnf/cli/output.py:1467
- msgid "<unset>"
- msgstr "<unset>"
- 
--#: dnf/cli/output.py:1588
-+#: dnf/cli/output.py:1468
- msgid "System"
- msgstr "시스템"
- 
--#: dnf/cli/output.py:1638
-+#: dnf/cli/output.py:1518
- msgid "Command line"
- msgstr "명령행"
- 
- #. TRANSLATORS: user names who executed transaction in history command output
--#: dnf/cli/output.py:1649
-+#: dnf/cli/output.py:1529
- msgid "User name"
- msgstr "사용자 이름"
- 
- # translation auto-copied from project subscription-manager, version 1.11.X,
- # document keys
--#: dnf/cli/output.py:1651
-+#: dnf/cli/output.py:1531
- msgid "ID"
- msgstr "ID"
- 
--#: dnf/cli/output.py:1653
-+#: dnf/cli/output.py:1533
- msgid "Date and time"
- msgstr "날짜와 시간"
- 
--#: dnf/cli/output.py:1654
-+#: dnf/cli/output.py:1534
- msgid "Action(s)"
- msgstr "작업"
- 
--#: dnf/cli/output.py:1655
-+#: dnf/cli/output.py:1535
- msgid "Altered"
- msgstr "변경됨"
- 
--#: dnf/cli/output.py:1698
-+#: dnf/cli/output.py:1578
- msgid "No transactions"
- msgstr "트랜잭션 없음"
- 
--#: dnf/cli/output.py:1699 dnf/cli/output.py:1715
-+#: dnf/cli/output.py:1579 dnf/cli/output.py:1595
- msgid "Failed history info"
- msgstr "실패 기록 정보"
- 
--#: dnf/cli/output.py:1714
-+#: dnf/cli/output.py:1594
- msgid "No transaction ID, or package, given"
- msgstr "트랜잭션 ID 또는 패키지가 지정되지 않았습니다"
- 
--#: dnf/cli/output.py:1772
-+#: dnf/cli/output.py:1652
- msgid "Erased"
- msgstr "삭제됨"
- 
--#: dnf/cli/output.py:1774
-+#: dnf/cli/output.py:1653 dnf/cli/output.py:1820 dnf/util.py:590
-+msgid "Downgraded"
-+msgstr "다운 그레이드"
-+
-+#: dnf/cli/output.py:1653 dnf/cli/output.py:1822 dnf/util.py:589
-+msgid "Upgraded"
-+msgstr "업그레이드 됨"
-+
-+#: dnf/cli/output.py:1654
- msgid "Not installed"
- msgstr "설치되지 않음"
- 
--#: dnf/cli/output.py:1775
-+#: dnf/cli/output.py:1655
- msgid "Newer"
- msgstr "최신"
- 
--#: dnf/cli/output.py:1775
-+#: dnf/cli/output.py:1655
- msgid "Older"
- msgstr "이전"
- 
--#: dnf/cli/output.py:1823 dnf/cli/output.py:1825
-+#: dnf/cli/output.py:1703 dnf/cli/output.py:1705
- msgid "Transaction ID :"
- msgstr "트랜잭션 ID :"
- 
--#: dnf/cli/output.py:1828
-+#: dnf/cli/output.py:1708
- msgid "Begin time     :"
- msgstr "시작 시간 :"
- 
--#: dnf/cli/output.py:1831 dnf/cli/output.py:1833
-+#: dnf/cli/output.py:1711 dnf/cli/output.py:1713
- msgid "Begin rpmdb    :"
- msgstr "rpmdb 시작 :"
- 
--#: dnf/cli/output.py:1839
-+#: dnf/cli/output.py:1719
- #, python-format
- msgid "(%u seconds)"
- msgstr "(%u 초)"
- 
--#: dnf/cli/output.py:1841
-+#: dnf/cli/output.py:1721
- #, python-format
- msgid "(%u minutes)"
- msgstr "(%u 분)"
- 
--#: dnf/cli/output.py:1843
-+#: dnf/cli/output.py:1723
- #, python-format
- msgid "(%u hours)"
- msgstr "(%u 시간)"
- 
--#: dnf/cli/output.py:1845
-+#: dnf/cli/output.py:1725
- #, python-format
- msgid "(%u days)"
- msgstr "(%u 일)"
- 
--#: dnf/cli/output.py:1846
-+#: dnf/cli/output.py:1726
- msgid "End time       :"
- msgstr "종료 시간 :"
- 
--#: dnf/cli/output.py:1849 dnf/cli/output.py:1851
-+#: dnf/cli/output.py:1729 dnf/cli/output.py:1731
- msgid "End rpmdb      :"
- msgstr "rpmdb 종료:"
- 
--#: dnf/cli/output.py:1858 dnf/cli/output.py:1860
-+#: dnf/cli/output.py:1738 dnf/cli/output.py:1740
- msgid "User           :"
- msgstr "사용자            :"
- 
--#: dnf/cli/output.py:1864 dnf/cli/output.py:1871
-+#: dnf/cli/output.py:1744 dnf/cli/output.py:1751
- msgid "Aborted"
- msgstr "중지됨"
- 
--#: dnf/cli/output.py:1864 dnf/cli/output.py:1867 dnf/cli/output.py:1869
--#: dnf/cli/output.py:1871 dnf/cli/output.py:1873 dnf/cli/output.py:1875
-+#: dnf/cli/output.py:1744 dnf/cli/output.py:1747 dnf/cli/output.py:1749
-+#: dnf/cli/output.py:1751 dnf/cli/output.py:1753 dnf/cli/output.py:1755
- msgid "Return-Code    :"
- msgstr "반환 코드 :"
- 
--#: dnf/cli/output.py:1867 dnf/cli/output.py:1875
-+#: dnf/cli/output.py:1747 dnf/cli/output.py:1755
- msgid "Success"
- msgstr "성공"
- 
--#: dnf/cli/output.py:1869
-+#: dnf/cli/output.py:1749
- msgid "Failures:"
- msgstr "실패 :"
- 
--#: dnf/cli/output.py:1873
-+#: dnf/cli/output.py:1753
- msgid "Failure:"
- msgstr "실패:"
- 
--#: dnf/cli/output.py:1883 dnf/cli/output.py:1885
-+#: dnf/cli/output.py:1763 dnf/cli/output.py:1765
- msgid "Releasever     :"
- msgstr "Releasever     :"
- 
--#: dnf/cli/output.py:1890 dnf/cli/output.py:1892
-+#: dnf/cli/output.py:1770 dnf/cli/output.py:1772
- msgid "Command Line   :"
- msgstr "명령 줄 :"
- 
--#: dnf/cli/output.py:1897 dnf/cli/output.py:1899
-+#: dnf/cli/output.py:1777 dnf/cli/output.py:1779
- msgid "Comment        :"
- msgstr "댓글 :"
- 
--#: dnf/cli/output.py:1903
-+#: dnf/cli/output.py:1783
- msgid "Transaction performed with:"
- msgstr "실행된 트랜잭션:"
- 
--#: dnf/cli/output.py:1912
-+#: dnf/cli/output.py:1792
- msgid "Packages Altered:"
- msgstr "변경된 패키지 :"
- 
--#: dnf/cli/output.py:1918
-+#: dnf/cli/output.py:1798
- msgid "Scriptlet output:"
- msgstr "Scriptlet 출력 :"
- 
--#: dnf/cli/output.py:1925
-+#: dnf/cli/output.py:1805
- msgid "Errors:"
- msgstr "오류 :"
- 
--#: dnf/cli/output.py:1934
-+#: dnf/cli/output.py:1814
- msgid "Dep-Install"
- msgstr "Dep-Install"
- 
--#: dnf/cli/output.py:1935
-+#: dnf/cli/output.py:1815
- msgid "Obsoleted"
- msgstr "사용 중지됨"
- 
--#: dnf/cli/output.py:1936 dnf/transaction.py:84 dnf/transaction.py:85
-+#: dnf/cli/output.py:1816 dnf/transaction.py:84 dnf/transaction.py:85
- msgid "Obsoleting"
- msgstr "사용 중지"
- 
--#: dnf/cli/output.py:1937
-+#: dnf/cli/output.py:1817
- msgid "Erase"
- msgstr "삭제"
- 
--#: dnf/cli/output.py:1938
-+#: dnf/cli/output.py:1818
- msgid "Reinstall"
- msgstr "재설치"
- 
--#: dnf/cli/output.py:2016
-+#: dnf/cli/output.py:1892
- #, python-format
- msgid "---> Package %s.%s %s will be installed"
- msgstr "---> 패키지 %s.%s %s이/가 설치됩니다"
- 
--#: dnf/cli/output.py:2018
-+#: dnf/cli/output.py:1894
- #, python-format
- msgid "---> Package %s.%s %s will be an upgrade"
- msgstr "---> 패키지 %s.%s %s이/가 업그레이드됩니다"
- 
--#: dnf/cli/output.py:2020
-+#: dnf/cli/output.py:1896
- #, python-format
- msgid "---> Package %s.%s %s will be erased"
- msgstr "---> 패키지 %s.%s %s이/가 제거됩니다"
- 
--#: dnf/cli/output.py:2022
-+#: dnf/cli/output.py:1898
- #, python-format
- msgid "---> Package %s.%s %s will be reinstalled"
- msgstr "---> 패키지 %s.%s %s이/가 다시 설치됩니다"
- 
--#: dnf/cli/output.py:2024
-+#: dnf/cli/output.py:1900
- #, python-format
- msgid "---> Package %s.%s %s will be a downgrade"
- msgstr "---> 패키지 %s.%s %s이/가 다운그레이드됩니다"
- 
--#: dnf/cli/output.py:2026
-+#: dnf/cli/output.py:1902
- #, python-format
- msgid "---> Package %s.%s %s will be obsoleting"
- msgstr "---> 패키지 %s.%s %s이/가 더 이상 사용되지 않습니다"
- 
--#: dnf/cli/output.py:2028
-+#: dnf/cli/output.py:1904
- #, python-format
- msgid "---> Package %s.%s %s will be upgraded"
- msgstr "---> 패키지 %s.%s %s이/가 업그레이드됩니다"
- 
--#: dnf/cli/output.py:2030
-+#: dnf/cli/output.py:1906
- #, python-format
- msgid "---> Package %s.%s %s will be obsoleted"
- msgstr "---> 패키지 %s.%s %s이/가 더 이상 사용되지 않습니다"
- 
--#: dnf/cli/output.py:2039
-+#: dnf/cli/output.py:1915
- msgid "--> Starting dependency resolution"
- msgstr "-> 종석성 해결 시작"
- 
--#: dnf/cli/output.py:2044
-+#: dnf/cli/output.py:1919
- msgid "--> Finished dependency resolution"
- msgstr "-> 종속성 해결 완료"
- 
--#: dnf/cli/output.py:2058 dnf/crypto.py:132
-+#: dnf/cli/output.py:1933 dnf/crypto.py:132
- #, python-format
- msgid ""
- "Importing GPG key 0x%s:\n"
-@@ -3503,7 +3476,7 @@ msgstr "모듈 또는 그룹 '%s'이/가 존재하지 않습니다."
- msgid "Environment id '%s' does not exist."
- msgstr "환경 '%s'이 설치되지 않았습니다."
- 
--#: dnf/comps.py:622 dnf/transaction_sr.py:443 dnf/transaction_sr.py:453
-+#: dnf/comps.py:622 dnf/transaction_sr.py:477 dnf/transaction_sr.py:487
- #, fuzzy, python-format
- #| msgid "Environment '%s' is not installed."
- msgid "Environment id '%s' is not installed."
-@@ -3614,6 +3587,11 @@ msgstr "repo %s: 0x%s을/를 이미 가져왔습니다"
- msgid "repo %s: imported key 0x%s."
- msgstr "repo %s: 0x%s 키를 가져왔습니다."
- 
-+#: dnf/crypto.py:177
-+#, python-format
-+msgid "retrieving repo key for %s unencrypted from %s"
-+msgstr ""
-+
- #: dnf/db/group.py:293
- msgid ""
- "No available modular metadata for modular package '{}', it cannot be "
-@@ -3698,7 +3676,7 @@ msgid "Modular dependency problem with Defaults:"
- msgid_plural "Modular dependency problems with Defaults:"
- msgstr[0] "기본값의 모듈 종속성 문제 :"
- 
--#: dnf/exceptions.py:131 dnf/module/module_base.py:686
-+#: dnf/exceptions.py:131 dnf/module/module_base.py:841
- msgid "Modular dependency problem:"
- msgid_plural "Modular dependency problems:"
- msgstr[0] "모듈 종속성 문제 :"
-@@ -3752,8 +3730,8 @@ msgstr ""
- "\n"
- "힌트 : [d] efault, [e] nabled, [x] disabled, [i] stalled, [a] ctive"
- 
--#: dnf/module/module_base.py:54 dnf/module/module_base.py:421
--#: dnf/module/module_base.py:477 dnf/module/module_base.py:543
-+#: dnf/module/module_base.py:54 dnf/module/module_base.py:547
-+#: dnf/module/module_base.py:603 dnf/module/module_base.py:669
- msgid "Ignoring unnecessary profile: '{}/{}'"
- msgstr "불필요한 프로파일을 무시합니다: '{}/{}'"
- 
-@@ -3762,17 +3740,17 @@ msgstr "불필요한 프로파일을 무시합니다: '{}/{}'"
- msgid "All matches for argument '{0}' in module '{1}:{2}' are not active"
- msgstr "모듈 '{1}:{2}'의 인수 '{0}'에 대한 모든 일치 항목이 활성화되지 않았습니다"
- 
--#: dnf/module/module_base.py:92
-+#: dnf/module/module_base.py:92 dnf/module/module_base.py:202
- #, python-brace-format
- msgid "Installing module '{0}' from Fail-Safe repository {1} is not allowed"
- msgstr "Fail-Safe 리포지토리 {1}에서 모듈 '{0}’을/를 설치할 수 없습니다"
- 
--#: dnf/module/module_base.py:102
-+#: dnf/module/module_base.py:102 dnf/module/module_base.py:212
- msgid ""
- "Unable to match profile for argument {}. Available profiles for '{}:{}': {}"
- msgstr "인수 {}의 프로파일을 찾을 수 없습니다. '{}:{}'에 사용 가능한 프로파일: {}"
- 
--#: dnf/module/module_base.py:106
-+#: dnf/module/module_base.py:106 dnf/module/module_base.py:216
- msgid "Unable to match profile for argument {}"
- msgstr "인수 {}의 프로파일을 찾을 수 없습니다"
- 
-@@ -3788,41 +3766,58 @@ msgstr "{} : {} 모듈에 대한 프로파일이 없습니다"
- msgid "Default profile {} not available in module {}:{}"
- msgstr "{} 모듈에서 기본 프로필 {}을 (를) 사용할 수 없음 : {}"
- 
--#: dnf/module/module_base.py:142
-+#: dnf/module/module_base.py:142 dnf/module/module_base.py:245
- msgid "Installing module from Fail-Safe repository is not allowed"
- msgstr "Fail-Safe 리포지토리에서 모듈을 설치할 수 없습니다"
- 
--#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
--#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
--#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
--#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
-+#: dnf/module/module_base.py:194
-+#, fuzzy, python-brace-format
-+#| msgid ""
-+#| "All matches for argument '{0}' in module '{1}:{2}' are not active"
-+msgid "No active matches for argument '{0}' in module '{1}:{2}'"
-+msgstr "모듈 '{1}:{2}'의 인수 '{0}'에 대한 모든 일치 항목이 활성화되지 않았습니다"
-+
-+#: dnf/module/module_base.py:226
-+#, fuzzy, python-brace-format
-+#| msgid "Default profile {} not available in module {}:{}"
-+msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'"
-+msgstr "{} 모듈에서 기본 프로필 {}을 (를) 사용할 수 없음 : {}"
-+
-+#: dnf/module/module_base.py:265
-+msgid "No packages available to distrosync for package name '{}'"
-+msgstr ""
-+
-+#: dnf/module/module_base.py:308 dnf/module/module_base.py:452
-+#: dnf/module/module_base.py:477 dnf/module/module_base.py:496
-+#: dnf/module/module_base.py:543 dnf/module/module_base.py:599
-+#: dnf/module/module_base.py:665 dnf/module/module_base.py:827
- msgid "Unable to resolve argument {}"
- msgstr "인수 {}을 (를) 구문 분석할 수 없습니다"
- 
--#: dnf/module/module_base.py:160
--msgid "No match for package {}"
--msgstr "{} 패키지와 일치하지 않습니다"
--
--#: dnf/module/module_base.py:204
-+#: dnf/module/module_base.py:319
- #, python-brace-format
- msgid "Upgrading module '{0}' from Fail-Safe repository {1} is not allowed"
- msgstr "Fail-Safe 리포지토리 {1}에서 모듈 '{0}’을/를 업그레이드할 수 없습니다"
- 
--#: dnf/module/module_base.py:223 dnf/module/module_base.py:251
-+#: dnf/module/module_base.py:338 dnf/module/module_base.py:366
- msgid "Unable to match profile in argument {}"
- msgstr "인수 {}에서 프로파일이 일치하지 않습니다"
- 
--#: dnf/module/module_base.py:231
-+#: dnf/module/module_base.py:346
- msgid "Upgrading module from Fail-Safe repository is not allowed"
- msgstr "Fail-Safe 리포지토리에서 모듈을 업그레이드할 수 없습니다"
- 
--#: dnf/module/module_base.py:367
-+#: dnf/module/module_base.py:500
- msgid ""
- "Only module name is required. Ignoring unneeded information in argument: "
- "'{}'"
- msgstr "모듈 이름만 필요합니다. '{}'인수에서 불필요한 정보를 무시합니다"
- 
--#: dnf/package.py:298
-+#: dnf/module/module_base.py:828
-+msgid "No match for package {}"
-+msgstr "{} 패키지와 일치하지 않습니다"
-+
-+#: dnf/package.py:333
- #, python-format
- msgid "%s: %s check failed: %s vs %s"
- msgstr "%s: %s 확인 실패 : %s 대 %s"
-@@ -3903,6 +3898,12 @@ msgstr "%s 에서 %s repo를 추가했습니다"
- msgid "Errors occurred during test transaction."
- msgstr "트랜잭션 테스트 중에 오류가 발생했습니다."
- 
-+#: dnf/sack.py:47
-+msgid ""
-+"allow_vendor_change is disabled. This option is currently not supported for "
-+"downgrade and distro-sync commands"
-+msgstr ""
-+
- #. TRANSLATORS: This is for a single package currently being downgraded.
- #: dnf/transaction.py:80
- msgctxt "currently"
-@@ -3949,163 +3950,199 @@ msgstr "scriptlet 실행 중"
- msgid "Preparing"
- msgstr "준비 중"
- 
--#: dnf/transaction_sr.py:60
-+#: dnf/transaction_sr.py:66
- #, python-brace-format
--msgid "Errors in \"{filename}\":"
-+msgid ""
-+"The following problems occurred while replaying the transaction from file "
-+"\"{filename}\":"
- msgstr ""
- 
--#: dnf/transaction_sr.py:70
--#, python-brace-format
--msgid "Error in \"{filename}\": {error}"
--msgstr ""
-+#: dnf/transaction_sr.py:68
-+#, fuzzy
-+#| msgid "Errors occurred during transaction."
-+msgid "The following problems occurred while running a transaction:"
-+msgstr "트랜잭션 중에 오류가 발생했습니다."
- 
--#: dnf/transaction_sr.py:87
-+#: dnf/transaction_sr.py:89
- #, python-brace-format
- msgid "Invalid major version \"{major}\", number expected."
- msgstr ""
- 
--#: dnf/transaction_sr.py:95
-+#: dnf/transaction_sr.py:97
- #, python-brace-format
- msgid "Invalid minor version \"{minor}\", number expected."
- msgstr ""
- 
--#: dnf/transaction_sr.py:101
-+#: dnf/transaction_sr.py:103
- #, python-brace-format
- msgid ""
- "Incompatible major version \"{major}\", supported major version is "
- "\"{major_supp}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:244
-+#: dnf/transaction_sr.py:224
-+msgid ""
-+"Conflicting TransactionReplay arguments have been specified: filename, data"
-+msgstr ""
-+
-+#: dnf/transaction_sr.py:265
- #, python-brace-format
- msgid "Unexpected type of \"{id}\", {exp} expected."
- msgstr ""
- 
--#: dnf/transaction_sr.py:250
-+#: dnf/transaction_sr.py:271
- #, python-brace-format
- msgid "Missing key \"{key}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:263
-+#: dnf/transaction_sr.py:285
- #, python-brace-format
- msgid "Missing object key \"{key}\" in an rpm."
- msgstr ""
- 
--#: dnf/transaction_sr.py:267
-+#: dnf/transaction_sr.py:289
- #, python-brace-format
- msgid "Unexpected value of package reason \"{reason}\" for rpm nevra \"{nevra}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:275
-+#: dnf/transaction_sr.py:297
- #, python-brace-format
- msgid "Cannot parse NEVRA for package \"{nevra}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:286
-+#: dnf/transaction_sr.py:321
- #, python-brace-format
- msgid "Cannot find rpm nevra \"{nevra}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:301
-+#: dnf/transaction_sr.py:336
- #, python-brace-format
- msgid "Package \"{na}\" is already installed for action \"{action}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:311
-+#: dnf/transaction_sr.py:345
- #, python-brace-format
- msgid ""
- "Package nevra \"{nevra}\" not available in repositories for action "
- "\"{action}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:322
-+#: dnf/transaction_sr.py:356
- #, python-brace-format
- msgid "Package nevra \"{nevra}\" not installed for action \"{action}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:336
-+#: dnf/transaction_sr.py:370
- #, python-brace-format
- msgid "Unexpected value of package action \"{action}\" for rpm nevra \"{nevra}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:343
-+#: dnf/transaction_sr.py:377
- #, fuzzy, python-format
- #| msgid "Group_id '%s' does not exist."
- msgid "Group id '%s' is not available."
- msgstr "Group_id '%s' 존재하지 않는다."
- 
--#: dnf/transaction_sr.py:364
-+#: dnf/transaction_sr.py:398
- #, python-brace-format
- msgid "Missing object key \"{key}\" in groups.packages."
- msgstr ""
- 
--#: dnf/transaction_sr.py:377 dnf/transaction_sr.py:387
-+#: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421
- #, fuzzy, python-format
- #| msgid "Environment '%s' is not installed."
- msgid "Group id '%s' is not installed."
- msgstr "환경 '%s'이 설치되지 않았습니다."
- 
--#: dnf/transaction_sr.py:398
-+#: dnf/transaction_sr.py:432
- #, fuzzy, python-format
- #| msgid "Environment '%s' is not installed."
- msgid "Environment id '%s' is not available."
- msgstr "환경 '%s'이 설치되지 않았습니다."
- 
--#: dnf/transaction_sr.py:422
-+#: dnf/transaction_sr.py:456
- #, python-brace-format
- msgid ""
- "Invalid value \"{group_type}\" of environments.groups.group_type, only "
- "\"mandatory\" or \"optional\" is supported."
- msgstr ""
- 
--#: dnf/transaction_sr.py:430
-+#: dnf/transaction_sr.py:464
- #, python-brace-format
- msgid "Missing object key \"{key}\" in environments.groups."
- msgstr ""
- 
--#: dnf/transaction_sr.py:508
-+#: dnf/transaction_sr.py:542
- #, python-brace-format
- msgid "Unexpected value of group action \"{action}\" for group \"{group}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:513
-+#: dnf/transaction_sr.py:547
- #, python-brace-format
- msgid "Missing object key \"{key}\" in a group."
- msgstr ""
- 
--#: dnf/transaction_sr.py:537
-+#: dnf/transaction_sr.py:571
- #, python-brace-format
- msgid "Unexpected value of environment action \"{action}\" for environment \"{env}\"."
- msgstr ""
- 
--#: dnf/transaction_sr.py:542
-+#: dnf/transaction_sr.py:576
- #, python-brace-format
- msgid "Missing object key \"{key}\" in an environment."
- msgstr ""
- 
--#: dnf/transaction_sr.py:581
-+#: dnf/transaction_sr.py:615
- #, python-brace-format
- msgid ""
- "Package nevra \"{nevra}\", which is not present in the transaction file, was"
- " pulled into the transaction."
- msgstr ""
- 
--#: dnf/util.py:391 dnf/util.py:393
-+#: dnf/util.py:393 dnf/util.py:395
- msgid "Problem"
- msgstr "문제"
- 
--#: dnf/util.py:444
-+#: dnf/util.py:446
- msgid "TransactionItem not found for key: {}"
- msgstr "{} 키에 대한 TransactionItem을 찾을 수 없습니다"
- 
--#: dnf/util.py:454
-+#: dnf/util.py:456
- msgid "TransactionSWDBItem not found for key: {}"
- msgstr "{} 키에 대한 TransactionSWDBItem을 찾을 수 없습니다"
- 
--#: dnf/util.py:457
-+#: dnf/util.py:459
- msgid "Errors occurred during transaction."
- msgstr "트랜잭션 중에 오류가 발생했습니다."
- 
-+#: dnf/util.py:595
-+msgid "Reinstalled"
-+msgstr "다시 설치됨"
-+
-+#: dnf/util.py:596
-+msgid "Skipped"
-+msgstr "건너 뛰기됨"
-+
-+#: dnf/util.py:597
-+msgid "Removed"
-+msgstr "제거됨"
-+
-+#: dnf/util.py:600
-+msgid "Failed"
-+msgstr "실패하였습니다"
-+
-+#~ msgid "Action not handled: {}"
-+#~ msgstr "작업이 처리되지 않았습니다: {}"
-+
-+#~ msgid "no package matched"
-+#~ msgstr "일치하는 패키지가 없습니다."
-+
-+#~ msgid "Not found given transaction ID"
-+#~ msgstr "주어진 트랜잭션 ID를 찾을 수 없습니다"
-+
-+#~ msgid "Undoing transaction {}, from {}"
-+#~ msgstr "{}에서 {} 트랜잭션 실행을 취소하고 있습니다"
-+
- #~ msgid "format for displaying found packages"
- #~ msgstr "발견 된 패키지를 표시하기위한 형식"
- 
-diff --git a/po/zh_CN.po b/po/zh_CN.po
-index 7ede4ed8..d1c433a3 100644
---- a/po/zh_CN.po
-+++ b/po/zh_CN.po
-@@ -26,20 +26,21 @@
- # Anonymous <noreply@weblate.org>, 2020.
- # Hongqiao Chen <harrychen0314@gmail.com>, 2020.
- # Harry Chen <harrychen0314@gmail.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-08-02 08:29+0000\n"
--"Last-Translator: Charles Lee <lchopn@gmail.com>\n"
--"Language-Team: Chinese (Simplified) <https://translate.fedoraproject.org/projects/dnf/dnf-master/zh_CN/>\n"
-+"POT-Creation-Date: 2021-02-22 09:22+0100\n"
-+"PO-Revision-Date: 2021-03-08 10:29+0000\n"
-+"Last-Translator: Sundeep Anand <suanand@redhat.com>\n"
-+"Language-Team: Chinese (Simplified) <https://translate.fedoraproject.org/projects/dnf/dnf-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.5.1\n"
- 
- #: dnf/automatic/emitter.py:32
- #, python-format
-@@ -96,7 +97,7 @@ msgstr "未知配置值: %s=%s 在 %s 中; %s"
- msgid "Unknown configuration option: %s = %s in %s"
- msgstr "未知配置选项:%s = %s 在 %s 中"
- 
--#: dnf/automatic/main.py:237 dnf/cli/cli.py:299
-+#: dnf/automatic/main.py:237 dnf/cli/cli.py:304
- msgid "GPG check FAILED"
- msgstr "GPG 检查失败"
- 
-@@ -109,9 +110,9 @@ msgid "Started dnf-automatic."
- msgstr "启动的 dnf-automatic。"
- 
- #: dnf/automatic/main.py:308
--#, python-format
--msgid "Sleep for %s seconds"
--msgstr "休眠 %s 秒"
-+msgid "Sleep for {} second"
-+msgid_plural "Sleep for {} seconds"
-+msgstr[0] "休眠 {} 秒"
- 
- #: dnf/automatic/main.py:315
- msgid "System is off-line."
-@@ -123,7 +124,7 @@ msgstr "系统离线。"
- msgid "Error: %s"
- msgstr "错误:%s"
- 
--#: dnf/base.py:146
-+#: dnf/base.py:146 dnf/base.py:472 dnf/base.py:474
- msgid "loading repo '{}' failure: {}"
- msgstr "加载仓库 '{}' 失败:{}"
- 
-@@ -131,236 +132,236 @@ msgstr "加载仓库 '{}' 失败:{}"
- msgid "Loading repository '{}' has failed"
- msgstr "加载仓库 '{}' 失败"
- 
--#: dnf/base.py:320
-+#: dnf/base.py:322
- msgid "Metadata timer caching disabled when running on metered connection."
- msgstr "在使用按流量计费的连接时禁用元数据计时缓存。"
- 
--#: dnf/base.py:325
-+#: dnf/base.py:327
- msgid "Metadata timer caching disabled when running on a battery."
- msgstr "在使用电池时禁用元数据计时缓存。"
- 
--#: dnf/base.py:330
-+#: dnf/base.py:332
- msgid "Metadata timer caching disabled."
- msgstr "元数据计时缓存已禁用。"
- 
--#: dnf/base.py:335
-+#: dnf/base.py:337
- msgid "Metadata cache refreshed recently."
- msgstr "元数据缓存近期已刷新。"
- 
--#: dnf/base.py:341 dnf/cli/commands/__init__.py:91
-+#: dnf/base.py:343 dnf/cli/commands/__init__.py:91
- msgid "There are no enabled repositories in \"{}\"."
- msgstr "在\"{}\"中没有被启用的仓库。"
- 
--#: dnf/base.py:348
-+#: dnf/base.py:350
- #, python-format
- msgid "%s: will never be expired and will not be refreshed."
- msgstr "%s: 永远不过期并不会被刷新。"
- 
--#: dnf/base.py:350
-+#: dnf/base.py:352
- #, python-format
- msgid "%s: has expired and will be refreshed."
- msgstr "%s: 已过期并不会被刷新。"
- 
- #. expires within the checking period:
--#: dnf/base.py:354
-+#: dnf/base.py:356
- #, python-format
- msgid "%s: metadata will expire after %d seconds and will be refreshed now"
- msgstr "%s: 元数据将在 %d 秒后过期,现在将会被刷新"
- 
--#: dnf/base.py:358
-+#: dnf/base.py:360
- #, python-format
- msgid "%s: will expire after %d seconds."
- msgstr "%s: 将会在 %d 秒后过期。"
- 
- #. performs the md sync
--#: dnf/base.py:364
-+#: dnf/base.py:366
- msgid "Metadata cache created."
- msgstr "元数据缓存已建立。"
- 
--#: dnf/base.py:397
-+#: dnf/base.py:399 dnf/base.py:466
- #, python-format
- msgid "%s: using metadata from %s."
- msgstr "%s:正在使用截止于 %s 的元数据。"
- 
--#: dnf/base.py:409
-+#: dnf/base.py:411 dnf/base.py:479
- #, python-format
- msgid "Ignoring repositories: %s"
- msgstr "正在忽略仓库:%s"
- 
--#: dnf/base.py:412
-+#: dnf/base.py:414
- #, python-format
- msgid "Last metadata expiration check: %s ago on %s."
- msgstr "上次元数据过期检查:%s 前,执行于 %s。"
- 
--#: dnf/base.py:443
-+#: dnf/base.py:507
- msgid ""
- "The downloaded packages were saved in cache until the next successful "
- "transaction."
- msgstr "下载的软件包保存在缓存中,直到下次成功执行事务。"
- 
--#: dnf/base.py:445
-+#: dnf/base.py:509
- #, python-format
- msgid "You can remove cached packages by executing '%s'."
- msgstr "您可以通过执行 '%s' 删除软件包缓存。"
- 
--#: dnf/base.py:535
-+#: dnf/base.py:599
- #, python-format
- msgid "Invalid tsflag in config file: %s"
- msgstr "配置文件 %s 中使用 tsflag 是错误的"
- 
--#: dnf/base.py:591
-+#: dnf/base.py:655
- #, python-format
- msgid "Failed to add groups file for repository: %s - %s"
- msgstr "为仓库 %s 添加组文件时失败:%s"
- 
--#: dnf/base.py:823
-+#: dnf/base.py:887
- msgid "Running transaction check"
- msgstr "运行事务检查"
- 
--#: dnf/base.py:831
-+#: dnf/base.py:895
- msgid "Error: transaction check vs depsolve:"
- msgstr "错误:事务检查与依赖解决错误:"
- 
--#: dnf/base.py:837
-+#: dnf/base.py:901
- msgid "Transaction check succeeded."
- msgstr "事务检查成功。"
- 
--#: dnf/base.py:840
-+#: dnf/base.py:904
- msgid "Running transaction test"
- msgstr "运行事务测试"
- 
--#: dnf/base.py:850 dnf/base.py:992
-+#: dnf/base.py:914 dnf/base.py:1065
- msgid "RPM: {}"
- msgstr "RPM软件包: {}"
- 
--#: dnf/base.py:851
-+#: dnf/base.py:915
- msgid "Transaction test error:"
- msgstr "事物测试失败:"
- 
--#: dnf/base.py:862
-+#: dnf/base.py:926
- msgid "Transaction test succeeded."
- msgstr "事务测试成功。"
- 
--#: dnf/base.py:883
-+#: dnf/base.py:947
- msgid "Running transaction"
- msgstr "运行事务"
- 
--#: dnf/base.py:911
-+#: dnf/base.py:984
- msgid "Disk Requirements:"
- msgstr "磁盘需求:"
- 
--#: dnf/base.py:914
-+#: dnf/base.py:987
- #, python-brace-format
- msgid "At least {0}MB more space needed on the {1} filesystem."
- msgid_plural "At least {0}MB more space needed on the {1} filesystem."
- msgstr[0] "在文件系统{1}上至少需要{0}MB的可用空间。"
- 
--#: dnf/base.py:921
-+#: dnf/base.py:994
- msgid "Error Summary"
- msgstr "错误汇总"
- 
--#: dnf/base.py:947
-+#: dnf/base.py:1020
- #, python-brace-format
- msgid "RPMDB altered outside of {prog}."
- msgstr "RPMDB 在 {prog} 外被改动了。"
- 
--#: dnf/base.py:993 dnf/base.py:1001
-+#: dnf/base.py:1066 dnf/base.py:1074
- msgid "Could not run transaction."
- msgstr "不能执行事务。"
- 
--#: dnf/base.py:996
-+#: dnf/base.py:1069
- msgid "Transaction couldn't start:"
- msgstr "事务无法启动:"
- 
--#: dnf/base.py:1010
-+#: dnf/base.py:1083
- #, python-format
- msgid "Failed to remove transaction file %s"
- msgstr "移除事务文件 %s 失败"
- 
--#: dnf/base.py:1092
-+#: dnf/base.py:1165
- msgid "Some packages were not downloaded. Retrying."
- msgstr "某些软件包没有被下载。正在重试。"
- 
--#: dnf/base.py:1122
-+#: dnf/base.py:1195
- #, python-format
- msgid "Delta RPMs reduced %.1f MB of updates to %.1f MB (%d.1%% saved)"
- msgstr "增量 RPM 将 %.1f MB 的更新减少至 %.1f MB(已节省 %d.1%% )"
- 
--#: dnf/base.py:1125
-+#: dnf/base.py:1198
- #, python-format
- msgid ""
- "Failed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)"
- msgstr "增量 RPM 未能将 %.1f MB 的更新减少至 %.1f MB(已浪费 %d.1%% )"
- 
--#: dnf/base.py:1167
-+#: dnf/base.py:1240
- msgid "Cannot add local packages, because transaction job already exists"
- msgstr "由于事物已经存在,无法添加本地软件包"
- 
--#: dnf/base.py:1181
-+#: dnf/base.py:1254
- msgid "Could not open: {}"
- msgstr "无法打开: {}"
- 
--#: dnf/base.py:1219
-+#: dnf/base.py:1292
- #, python-format
- msgid "Public key for %s is not installed"
- msgstr "%s 的公钥没有安装"
- 
--#: dnf/base.py:1223
-+#: dnf/base.py:1296
- #, python-format
- msgid "Problem opening package %s"
- msgstr "打开软件包 %s 出现问题"
- 
--#: dnf/base.py:1231
-+#: dnf/base.py:1304
- #, python-format
- msgid "Public key for %s is not trusted"
- msgstr "%s 的公钥不可信任"
- 
--#: dnf/base.py:1235
-+#: dnf/base.py:1308
- #, python-format
- msgid "Package %s is not signed"
- msgstr "软件包 %s 没有签名"
- 
--#: dnf/base.py:1265
-+#: dnf/base.py:1338
- #, python-format
- msgid "Cannot remove %s"
- msgstr "无法删除 %s"
- 
--#: dnf/base.py:1269
-+#: dnf/base.py:1342
- #, python-format
- msgid "%s removed"
- msgstr "%s 已删除"
- 
--#: dnf/base.py:1549
-+#: dnf/base.py:1622
- msgid "No match for group package \"{}\""
- msgstr "没有和组 \"{}\" 匹配的"
- 
--#: dnf/base.py:1635
-+#: dnf/base.py:1708
- #, python-format
- msgid "Adding packages from group '%s': %s"
- msgstr "从组 '%s': %s 添加软件包"
- 
--#: dnf/base.py:1658 dnf/cli/cli.py:219 dnf/cli/commands/__init__.py:442
-+#: dnf/base.py:1731 dnf/cli/cli.py:220 dnf/cli/commands/__init__.py:442
- #: dnf/cli/commands/__init__.py:499 dnf/cli/commands/__init__.py:592
- #: dnf/cli/commands/__init__.py:641 dnf/cli/commands/install.py:80
- #: dnf/cli/commands/install.py:103 dnf/cli/commands/install.py:110
- msgid "Nothing to do."
- msgstr "无需任何处理。"
- 
--#: dnf/base.py:1676
-+#: dnf/base.py:1749
- msgid "No groups marked for removal."
- msgstr "没有软件包组需要移除。"
- 
--#: dnf/base.py:1710
-+#: dnf/base.py:1783
- msgid "No group marked for upgrade."
- msgstr "没有标记为要升级的组。"
- 
--#: dnf/base.py:1925
-+#: dnf/base.py:1997
- #, python-format
- msgid "Package %s not installed, cannot downgrade it."
- msgstr "软件包 %s 并没有能够安装,无法进行降级操作。"
- 
--#: dnf/base.py:1927 dnf/base.py:1946 dnf/base.py:1959 dnf/base.py:1980
--#: dnf/base.py:2029 dnf/base.py:2037 dnf/base.py:2172 dnf/cli/cli.py:411
-+#: dnf/base.py:1999 dnf/base.py:2018 dnf/base.py:2031 dnf/base.py:2052
-+#: dnf/base.py:2101 dnf/base.py:2109 dnf/base.py:2243 dnf/cli/cli.py:416
- #: dnf/cli/commands/__init__.py:425 dnf/cli/commands/__init__.py:482
- #: dnf/cli/commands/__init__.py:586 dnf/cli/commands/__init__.py:633
- #: dnf/cli/commands/__init__.py:711 dnf/cli/commands/install.py:147
-@@ -370,141 +371,127 @@ msgstr "软件包 %s 并没有能够安装,无法进行降级操作。"
- msgid "No match for argument: %s"
- msgstr "未找到匹配的参数: %s"
- 
--#: dnf/base.py:1934
-+#: dnf/base.py:2006
- #, python-format
- msgid "Package %s of lower version already installed, cannot downgrade it."
- msgstr "软件包 %s 的低版本已经安装,无法进行降级。"
- 
--#: dnf/base.py:1957
-+#: dnf/base.py:2029
- #, python-format
- msgid "Package %s not installed, cannot reinstall it."
- msgstr "软件包 %s 未能够安装成功,无法进行重新安装。"
- 
--#: dnf/base.py:1972
-+#: dnf/base.py:2044
- #, python-format
- msgid "File %s is a source package and cannot be updated, ignoring."
- msgstr "%s 文件无法被升级,已忽略。"
- 
--#: dnf/base.py:1978
-+#: dnf/base.py:2050
- #, python-format
- msgid "Package %s not installed, cannot update it."
- msgstr "软件包 %s 未安装,无法更新。"
- 
--#: dnf/base.py:1987
-+#: dnf/base.py:2059
- #, python-format
- msgid ""
- "The same or higher version of %s is already installed, cannot update it."
- msgstr "已经安装了软件包%s的相同或更高版本,无法更新。"
- 
--#: dnf/base.py:2026 dnf/cli/commands/reinstall.py:81
-+#: dnf/base.py:2098 dnf/cli/commands/reinstall.py:81
- #, python-format
- msgid "Package %s available, but not installed."
- msgstr "软件包 %s 可用,但没有被安装。"
- 
--#: dnf/base.py:2032
-+#: dnf/base.py:2104
- #, python-format
- msgid "Package %s available, but installed for different architecture."
- msgstr "软件包 %s 可用,当是为其它架构安装。"
- 
--#: dnf/base.py:2057 dnf/base.py:2250 dnf/cli/cli.py:668 dnf/cli/cli.py:699
-+#: dnf/base.py:2129
- #, python-format
- msgid "No package %s installed."
- msgstr "没有软件包 %s 安装。"
- 
--#: dnf/base.py:2075 dnf/cli/commands/install.py:136
-+#: dnf/base.py:2147 dnf/cli/commands/install.py:136
- #: dnf/cli/commands/remove.py:133
- #, python-format
- msgid "Not a valid form: %s"
- msgstr "无效: %s"
- 
--#: dnf/base.py:2091 dnf/cli/commands/__init__.py:681
--#: dnf/cli/commands/remove.py:163
-+#: dnf/base.py:2162 dnf/cli/commands/__init__.py:681
-+#: dnf/cli/commands/remove.py:162
- msgid "No packages marked for removal."
- msgstr "没有软件包需要移除。"
- 
--#: dnf/base.py:2179 dnf/cli/cli.py:422
-+#: dnf/base.py:2250 dnf/cli/cli.py:427
- #, python-format
- msgid "Packages for argument %s available, but not installed."
- msgstr "针对于参数 %s 的软件包可用, 但是目前没有安装。"
- 
--#: dnf/base.py:2184
-+#: dnf/base.py:2255
- #, python-format
- msgid "Package %s of lowest version already installed, cannot downgrade it."
- msgstr "软件包 %s 的最低版本已经安装,无法再进行降级。"
- 
--#: dnf/base.py:2242
--msgid "Action not handled: {}"
--msgstr "操作没被处理:{}"
--
--#: dnf/base.py:2256 dnf/cli/cli.py:419 dnf/cli/cli.py:673 dnf/cli/cli.py:703
--#: dnf/cli/commands/group.py:400 dnf/cli/commands/history.py:169
--#, python-format
--msgid "No package %s available."
--msgstr "没有可用的软件包 %s。"
--
--#: dnf/base.py:2269
--msgid "no package matched"
--msgstr "没有能够与之匹配的软件包"
--
--#: dnf/base.py:2290
-+#: dnf/base.py:2302
- msgid "No security updates needed, but {} update available"
- msgstr "没有必须的安全更新, 但是 {} 的更新可用"
- 
--#: dnf/base.py:2292
-+#: dnf/base.py:2304
- msgid "No security updates needed, but {} updates available"
- msgstr "没有必须的安全更新, 但是 {} 的更新可用"
- 
--#: dnf/base.py:2296
-+#: dnf/base.py:2308
- msgid "No security updates needed for \"{}\", but {} update available"
- msgstr "没有针对于\"{}\" 所必须的安全更新, 但是 {} 的更新可用"
- 
--#: dnf/base.py:2298
-+#: dnf/base.py:2310
- msgid "No security updates needed for \"{}\", but {} updates available"
- msgstr "没有针对于\"{}\" 所必须的安全更新, 但是 {} 的更新可用"
- 
- #. raise an exception, because po.repoid is not in self.repos
--#: dnf/base.py:2319
-+#: dnf/base.py:2331
- #, python-format
- msgid "Unable to retrieve a key for a commandline package: %s"
--msgstr ""
-+msgstr "无法获取命令行软件包的密钥: %s"
- 
--#: dnf/base.py:2327
-+#: dnf/base.py:2339
- #, python-format
- msgid ". Failing package is: %s"
- msgstr ". 失败的软件包是:%s"
- 
--#: dnf/base.py:2328
-+#: dnf/base.py:2340
- #, python-format
- msgid "GPG Keys are configured as: %s"
- msgstr "GPG密钥配置为:%s"
- 
--#: dnf/base.py:2340
-+#: dnf/base.py:2352
- #, python-format
- msgid "GPG key at %s (0x%s) is already installed"
- msgstr "%s 的 GPG 公钥(0x%s)已安装"
- 
--#: dnf/base.py:2373
-+#: dnf/base.py:2385
- msgid "The key has been approved."
- msgstr "密钥已被确认。"
- 
--#: dnf/base.py:2376
-+#: dnf/base.py:2388
- msgid "The key has been rejected."
- msgstr "密钥已被拒绝。"
- 
--#: dnf/base.py:2409
-+#: dnf/base.py:2421
- #, python-format
- msgid "Key import failed (code %d)"
- msgstr "导入公钥失败(代码 %d)"
- 
--#: dnf/base.py:2411
-+#: dnf/base.py:2423
- msgid "Key imported successfully"
- msgstr "导入公钥成功"
- 
--#: dnf/base.py:2415
-+#: dnf/base.py:2427
- msgid "Didn't install any keys"
- msgstr "没有安装任何公钥"
- 
--#: dnf/base.py:2418
-+#: dnf/base.py:2430
- #, python-format
- msgid ""
- "The GPG keys listed for the \"%s\" repository are already installed but they are not correct for this package.\n"
-@@ -513,49 +500,49 @@ msgstr ""
- "仓库 \"%s\" 的 GPG 公钥已安装,但是不适用于此软件包。\n"
- "请检查此仓库的公钥 URL 是否配置正确。"
- 
--#: dnf/base.py:2429
-+#: dnf/base.py:2441
- msgid "Import of key(s) didn't help, wrong key(s)?"
- msgstr "导入的密钥没有公钥,错误的公钥?"
- 
--#: dnf/base.py:2482
-+#: dnf/base.py:2494
- msgid "  * Maybe you meant: {}"
- msgstr "  * 可能您的意思是:{}"
- 
--#: dnf/base.py:2514
-+#: dnf/base.py:2526
- msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum"
- msgstr "软件包 \"{}\"(来自于本地仓库 \"{}\")的 checksum 不正确"
- 
--#: dnf/base.py:2517
-+#: dnf/base.py:2529
- msgid "Some packages from local repository have incorrect checksum"
- msgstr "本地仓库的一些软件包校验值(checksum)不正确,无法确定软件包完整"
- 
--#: dnf/base.py:2520
-+#: dnf/base.py:2532
- msgid "Package \"{}\" from repository \"{}\" has incorrect checksum"
- msgstr "软件包 \"{}\"(来自仓库 \"{}\")的 checksum 不正确"
- 
--#: dnf/base.py:2523
-+#: dnf/base.py:2535
- msgid ""
- "Some packages have invalid cache, but cannot be downloaded due to \"--"
- "cacheonly\" option"
- msgstr "以下软件包有无效缓存,因为使用了 \"--cacheonly\" 选项不能下载"
- 
--#: dnf/base.py:2541 dnf/base.py:2561
-+#: dnf/base.py:2553 dnf/base.py:2573
- msgid "No match for argument"
- msgstr "未找到匹配的参数"
- 
--#: dnf/base.py:2549 dnf/base.py:2569
-+#: dnf/base.py:2561 dnf/base.py:2581
- msgid "All matches were filtered out by exclude filtering for argument"
- msgstr "由于您的搜索参数,所有相关结果都已被滤掉"
- 
--#: dnf/base.py:2551
-+#: dnf/base.py:2563
- msgid "All matches were filtered out by modular filtering for argument"
- msgstr "所有的匹配结果均已经被参数的模块化过滤条件筛除"
- 
--#: dnf/base.py:2567
-+#: dnf/base.py:2579
- msgid "All matches were installed from a different repository for argument"
- msgstr "已从另一个仓库安装了参数的所有匹配"
- 
--#: dnf/base.py:2583
-+#: dnf/base.py:2626
- #, python-format
- msgid "Package %s is already installed."
- msgstr "软件包 %s 已安装。"
-@@ -575,8 +562,8 @@ msgstr "解析文件 \"%s\" 失败:%s"
- msgid "Cannot read file \"%s\": %s"
- msgstr "无法读取文件 \"%s\": %s"
- 
--#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:902
--#: dnf/cli/cli.py:906 dnf/cli/commands/alias.py:108
-+#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:803
-+#: dnf/cli/cli.py:807 dnf/cli/commands/alias.py:108
- #, python-format
- msgid "Config error: %s"
- msgstr "配置错误:%s"
-@@ -607,7 +594,7 @@ msgid ""
- "stream '{2}'"
- msgstr "这个操作会把模块 '{0}' 从流 '{1}' 切换到流 '{2}'"
- 
--#: dnf/cli/cli.py:172
-+#: dnf/cli/cli.py:173
- #, python-brace-format
- msgid ""
- "It is not possible to switch enabled streams of a module.\n"
-@@ -616,35 +603,35 @@ msgstr ""
- "无法切换已启用模块的流。\n"
- "推荐移除来自模块的所有已安装内容,然后通过 '{prog} module reset <module_name>' 命令重置模块。在您重置模块之后,就可以安装其他的流。"
- 
--#: dnf/cli/cli.py:210
-+#: dnf/cli/cli.py:211
- #, python-brace-format
- msgid "{prog} will only download packages for the transaction."
- msgstr "{prog}将仅会从事务下载软件包。"
- 
--#: dnf/cli/cli.py:213
-+#: dnf/cli/cli.py:214
- #, python-brace-format
- msgid ""
- "{prog} will only download packages, install gpg keys, and check the "
- "transaction."
- msgstr "{prog}将仅会下载软件包,导入gpg密钥并检查事务。"
- 
--#: dnf/cli/cli.py:217
-+#: dnf/cli/cli.py:218
- msgid "Operation aborted."
- msgstr "操作中止。"
- 
--#: dnf/cli/cli.py:224
-+#: dnf/cli/cli.py:225
- msgid "Downloading Packages:"
- msgstr "下载软件包:"
- 
--#: dnf/cli/cli.py:230
-+#: dnf/cli/cli.py:231
- msgid "Error downloading packages:"
- msgstr "下载软件包出错 :"
- 
--#: dnf/cli/cli.py:258
-+#: dnf/cli/cli.py:263
- msgid "Transaction failed"
- msgstr "事务失败"
- 
--#: dnf/cli/cli.py:281
-+#: dnf/cli/cli.py:286
- msgid ""
- "Refusing to automatically import keys when running unattended.\n"
- "Use \"-y\" to override."
-@@ -652,116 +639,95 @@ msgstr ""
- "如果不加干预,拒绝自动导入公钥。\n"
- "指定 \"-y\" 改变这个行为。"
- 
--#: dnf/cli/cli.py:331
-+#: dnf/cli/cli.py:336
- msgid "Changelogs for {}"
- msgstr "{}的变更记录"
- 
--#: dnf/cli/cli.py:364 dnf/cli/cli.py:505 dnf/cli/cli.py:511
-+#: dnf/cli/cli.py:369 dnf/cli/cli.py:510 dnf/cli/cli.py:516
- msgid "Obsoleting Packages"
- msgstr "取代的软件包"
- 
--#: dnf/cli/cli.py:393
-+#: dnf/cli/cli.py:398
- msgid "No packages marked for distribution synchronization."
- msgstr "没有软件包需要发行版同步。"
- 
--#: dnf/cli/cli.py:428
-+#: dnf/cli/cli.py:424 dnf/cli/commands/group.py:395
-+#, python-format
-+msgid "No package %s available."
-+msgstr "没有可用的软件包 %s。"
-+
-+#: dnf/cli/cli.py:433
- msgid "No packages marked for downgrade."
- msgstr "没有标记要降级的软件包。"
- 
--#: dnf/cli/cli.py:479
-+#: dnf/cli/cli.py:484
- msgid "Installed Packages"
- msgstr "已安装的软件包"
- 
--#: dnf/cli/cli.py:487
-+#: dnf/cli/cli.py:492
- msgid "Available Packages"
- msgstr "可安装的软件包"
- 
--#: dnf/cli/cli.py:491
-+#: dnf/cli/cli.py:496
- msgid "Autoremove Packages"
- msgstr "自动移除软件包"
- 
--#: dnf/cli/cli.py:493
-+#: dnf/cli/cli.py:498
- msgid "Extra Packages"
- msgstr "更多软件包"
- 
--#: dnf/cli/cli.py:497
-+#: dnf/cli/cli.py:502
- msgid "Available Upgrades"
- msgstr "可用升级"
- 
--#: dnf/cli/cli.py:513
-+#: dnf/cli/cli.py:518
- msgid "Recently Added Packages"
- msgstr "最近添加的软件包"
- 
--#: dnf/cli/cli.py:518
-+#: dnf/cli/cli.py:522
- msgid "No matching Packages to list"
- msgstr "没有匹配的软件包可以列出"
- 
--#: dnf/cli/cli.py:599
-+#: dnf/cli/cli.py:603
- msgid "No Matches found"
- msgstr "没有找到匹配的软件包"
- 
--#: dnf/cli/cli.py:609
--msgid "No transaction ID given"
--msgstr "没有事务 ID"
--
--#: dnf/cli/cli.py:614
--msgid "Not found given transaction ID"
--msgstr "未找到指定事务 ID"
--
--#: dnf/cli/cli.py:623
--msgid "Found more than one transaction ID!"
--msgstr "找到多个事务 ID!"
--
--#: dnf/cli/cli.py:640
--#, python-format
--msgid "Transaction history is incomplete, before %u."
--msgstr "在 %u 之前,事务历史不完整。"
--
--#: dnf/cli/cli.py:642
--#, python-format
--msgid "Transaction history is incomplete, after %u."
--msgstr "在 %u 之后,事务历史不完整。"
--
--#: dnf/cli/cli.py:689
--msgid "Undoing transaction {}, from {}"
--msgstr "撤销事务 {},从 {}"
--
--#: dnf/cli/cli.py:769 dnf/cli/commands/shell.py:237
-+#: dnf/cli/cli.py:670 dnf/cli/commands/shell.py:237
- #, python-format
- msgid "Unknown repo: '%s'"
- msgstr "未知仓库:'%s'"
- 
--#: dnf/cli/cli.py:783
-+#: dnf/cli/cli.py:684
- #, python-format
- msgid "No repository match: %s"
- msgstr "没有仓库匹配: %s"
- 
--#: dnf/cli/cli.py:817
-+#: dnf/cli/cli.py:718
- msgid ""
- "This command has to be run with superuser privileges (under the root user on"
- " most systems)."
- msgstr "运行此命令需要管理员特权(多数系统下是root用户)。"
- 
--#: dnf/cli/cli.py:847
-+#: dnf/cli/cli.py:748
- #, python-format
- msgid "No such command: %s. Please use %s --help"
- msgstr "未找到命令: %s。请使用 %s --help"
- 
--#: dnf/cli/cli.py:850
-+#: dnf/cli/cli.py:751
- #, python-format, python-brace-format
- msgid ""
- "It could be a {PROG} plugin command, try: \"{prog} install 'dnf-"
- "command(%s)'\""
- msgstr "它可能是一个{PROG}插件命令,尝试:\"{prog} install 'dnf-command(%s)'\""
- 
--#: dnf/cli/cli.py:854
-+#: dnf/cli/cli.py:755
- #, python-brace-format
- msgid ""
- "It could be a {prog} plugin command, but loading of plugins is currently "
- "disabled."
- msgstr "这可能是一个 {prog} 插件的命令,但是插件的加载当前已经禁用。"
- 
--#: dnf/cli/cli.py:912
-+#: dnf/cli/cli.py:813
- msgid ""
- "--destdir or --downloaddir must be used with --downloadonly or download or "
- "system-upgrade command."
-@@ -769,51 +735,51 @@ msgstr ""
- "--destdir 或 --downloaddir 必须和 --downloadonly 或 download 或 system-upgrade "
- "命令一起使用。"
- 
--#: dnf/cli/cli.py:918
-+#: dnf/cli/cli.py:819
- msgid ""
- "--enable, --set-enabled and --disable, --set-disabled must be used with "
- "config-manager command."
- msgstr ""
- "--enable、--set-enabled 和 --disable、--set-disabled 必须和 config-manager 命令一起使用。"
- 
--#: dnf/cli/cli.py:1000
-+#: dnf/cli/cli.py:901
- msgid ""
- "Warning: Enforcing GPG signature check globally as per active RPM security "
- "policy (see 'gpgcheck' in dnf.conf(5) for how to squelch this message)"
- msgstr "警告:由于活动的RPM安全策略,强制执行全局GPG签名检查 (请参照dnf.conf(5)中的'gpgcheck'以了解如何阻止这条信息)"
- 
--#: dnf/cli/cli.py:1020
-+#: dnf/cli/cli.py:921
- msgid "Config file \"{}\" does not exist"
- msgstr "配置文件 \"{}\" 不存在"
- 
--#: dnf/cli/cli.py:1040
-+#: dnf/cli/cli.py:941
- msgid ""
- "Unable to detect release version (use '--releasever' to specify release "
- "version)"
- msgstr "无法找到发布版本(可用 '--releasever' 指定版本)"
- 
--#: dnf/cli/cli.py:1127 dnf/cli/commands/repoquery.py:471
-+#: dnf/cli/cli.py:1028 dnf/cli/commands/repoquery.py:471
- msgid "argument {}: not allowed with argument {}"
- msgstr "参数 {}:不允许与参数 {} 一起使用"
- 
--#: dnf/cli/cli.py:1134
-+#: dnf/cli/cli.py:1035
- #, python-format
- msgid "Command \"%s\" already defined"
- msgstr "命令 \"%s\" 已有定义"
- 
--#: dnf/cli/cli.py:1154
-+#: dnf/cli/cli.py:1055
- msgid "Excludes in dnf.conf: "
- msgstr "在 dnf.conf 中排除: "
- 
--#: dnf/cli/cli.py:1157
-+#: dnf/cli/cli.py:1058
- msgid "Includes in dnf.conf: "
- msgstr "在 dnf.conf 中包括: "
- 
--#: dnf/cli/cli.py:1160
-+#: dnf/cli/cli.py:1061
- msgid "Excludes in repo "
- msgstr "在 repo 中排除 "
- 
--#: dnf/cli/cli.py:1163
-+#: dnf/cli/cli.py:1064
- msgid "Includes in repo "
- msgstr "在 repo 中包括 "
- 
-@@ -870,7 +836,7 @@ msgid "show all packages (default)"
- msgstr "显示所有的软件包(默认)"
- 
- #: dnf/cli/commands/__init__.py:171 dnf/cli/commands/__init__.py:743
--#: dnf/cli/commands/module.py:351
-+#: dnf/cli/commands/module.py:373
- msgid "show only available packages"
- msgstr "只显示可用的软件包"
- 
-@@ -1195,78 +1161,78 @@ msgstr "显示或使用组信息"
- msgid "No group data available for configured repositories."
- msgstr "配置的软件源不包含组数据。"
- 
--#: dnf/cli/commands/group.py:129
-+#: dnf/cli/commands/group.py:126
- #, python-format
- msgid "Warning: Group %s does not exist."
- msgstr "警告:组 %s 不存在。"
- 
--#: dnf/cli/commands/group.py:170
-+#: dnf/cli/commands/group.py:167
- msgid "Warning: No groups match:"
- msgstr "警告:没有匹配的组:"
- 
--#: dnf/cli/commands/group.py:182 dnf/cli/commands/group.py:193
--#: dnf/cli/output.py:1226
-+#: dnf/cli/commands/group.py:179 dnf/cli/commands/group.py:190
-+#: dnf/cli/output.py:1139
- msgid "<name-unset>"
- msgstr "<名称-未设定>"
- 
--#: dnf/cli/commands/group.py:199
-+#: dnf/cli/commands/group.py:196
- msgid "Available Environment Groups:"
- msgstr "可用环境组:"
- 
--#: dnf/cli/commands/group.py:201
-+#: dnf/cli/commands/group.py:198
- msgid "Installed Environment Groups:"
- msgstr "已安装的环境组:"
- 
--#: dnf/cli/commands/group.py:208 dnf/cli/commands/group.py:294
-+#: dnf/cli/commands/group.py:205 dnf/cli/commands/group.py:291
- msgid "Installed Groups:"
- msgstr "已安装组:"
- 
--#: dnf/cli/commands/group.py:215 dnf/cli/commands/group.py:301
-+#: dnf/cli/commands/group.py:212 dnf/cli/commands/group.py:298
- msgid "Installed Language Groups:"
- msgstr "已安装语言组:"
- 
--#: dnf/cli/commands/group.py:225 dnf/cli/commands/group.py:308
-+#: dnf/cli/commands/group.py:222 dnf/cli/commands/group.py:305
- msgid "Available Groups:"
- msgstr "可用组:"
- 
--#: dnf/cli/commands/group.py:232 dnf/cli/commands/group.py:315
-+#: dnf/cli/commands/group.py:229 dnf/cli/commands/group.py:312
- msgid "Available Language Groups:"
- msgstr "可用语言组:"
- 
--#: dnf/cli/commands/group.py:322
-+#: dnf/cli/commands/group.py:319
- msgid "include optional packages from group"
- msgstr "包含可选软件包"
- 
--#: dnf/cli/commands/group.py:325
-+#: dnf/cli/commands/group.py:322
- msgid "show also hidden groups"
- msgstr "同时显示已隐藏的软件组"
- 
--#: dnf/cli/commands/group.py:327
-+#: dnf/cli/commands/group.py:324
- msgid "show only installed groups"
- msgstr "只显示已安装的软件组"
- 
--#: dnf/cli/commands/group.py:329
-+#: dnf/cli/commands/group.py:326
- msgid "show only available groups"
- msgstr "只显示可获得的团队"
- 
--#: dnf/cli/commands/group.py:331
-+#: dnf/cli/commands/group.py:328
- msgid "show also ID of groups"
- msgstr "同时显示组的 ID"
- 
--#: dnf/cli/commands/group.py:333
-+#: dnf/cli/commands/group.py:330
- msgid "available subcommands: {} (default), {}"
- msgstr "可用的子命令:{} (默认), {}"
- 
--#: dnf/cli/commands/group.py:337
-+#: dnf/cli/commands/group.py:334
- msgid "argument for group subcommand"
- msgstr "组子命令的参数"
- 
--#: dnf/cli/commands/group.py:346
-+#: dnf/cli/commands/group.py:343
- #, python-format
- msgid "Invalid groups sub-command, use: %s."
- msgstr "无效的组子命令,请使用:%s 。"
- 
--#: dnf/cli/commands/group.py:403
-+#: dnf/cli/commands/group.py:398
- msgid "Unable to find a mandatory group package."
- msgstr "无法找到一个必须的组软件包。"
- 
-@@ -1276,25 +1242,25 @@ msgstr "显示或使用事务历史"
- 
- #: dnf/cli/commands/history.py:66
- msgid "For the store command, file path to store the transaction to"
--msgstr ""
-+msgstr "对于 store 命令,将事务保存到的文件路径"
- 
- #: dnf/cli/commands/history.py:68
- msgid ""
- "For the replay command, don't check for installed packages matching those in"
- " transaction"
--msgstr ""
-+msgstr "对于 replay 命令,不检查与事务中匹配的安装的软件包"
- 
- #: dnf/cli/commands/history.py:71
- msgid ""
- "For the replay command, don't check for extra packages pulled into the "
- "transaction"
--msgstr ""
-+msgstr "对于 replay 命令,不检查提取到事务中的额外的软件包"
- 
- #: dnf/cli/commands/history.py:74
- msgid ""
- "For the replay command, skip packages that are not available or have missing"
- " dependencies"
--msgstr ""
-+msgstr "对于 replay 命令,跳过不可用或者缺少依赖项的软件包"
- 
- #: dnf/cli/commands/history.py:94
- msgid ""
-@@ -1305,41 +1271,64 @@ msgstr ""
- "'{}' 需要一个事务 ID 或软件包名。"
- 
- #: dnf/cli/commands/history.py:101
--#, fuzzy
--#| msgid "No transaction ID or package name given."
- msgid "No transaction file name given."
--msgstr "没有提供事务 ID 或软件包名。"
-+msgstr "没有给定事务文件名称。"
- 
- #: dnf/cli/commands/history.py:103
--#, fuzzy
--#| msgid "Failed to remove transaction file %s"
- msgid "More than one argument given as transaction file name."
--msgstr "移除事务文件 %s 失败"
-+msgstr "提供了多于一个的作为事务文件名的参数。"
- 
--#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:126
-+#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:130
- msgid "No transaction ID or package name given."
- msgstr "没有提供事务 ID 或软件包名。"
- 
--#: dnf/cli/commands/history.py:138
-+#: dnf/cli/commands/history.py:142
- #, python-format
- msgid "You don't have access to the history DB: %s"
- msgstr "你没有权限访问历史数据库:%s"
- 
--#: dnf/cli/commands/history.py:147
-+#: dnf/cli/commands/history.py:151
- #, python-format
- msgid ""
- "Cannot undo transaction %s, doing so would result in an inconsistent package"
- " database."
- msgstr "无法撤销事务 %s,这样做将可能导致不一致的软件包数据库。"
- 
--#: dnf/cli/commands/history.py:152
-+#: dnf/cli/commands/history.py:156
- #, python-format
- msgid ""
- "Cannot rollback transaction %s, doing so would result in an inconsistent "
- "package database."
- msgstr "无法回滚事务 %s,这样做将可能导致不一致的软件包数据库。"
- 
--#: dnf/cli/commands/history.py:222
-+#: dnf/cli/commands/history.py:175
-+msgid "No transaction ID given"
-+msgstr "没有事务 ID"
-+
-+#: dnf/cli/commands/history.py:179
-+#, python-brace-format
-+msgid "Transaction ID \"{0}\" not found."
-+msgstr "没有找到事务 ID \"{0}\"。"
-+
-+#: dnf/cli/commands/history.py:185
-+msgid "Found more than one transaction ID!"
-+msgstr "找到多个事务 ID!"
-+
-+#: dnf/cli/commands/history.py:203
-+#, python-format
-+msgid "Transaction history is incomplete, before %u."
-+msgstr "在 %u 之前,事务历史不完整。"
-+
-+#: dnf/cli/commands/history.py:205
-+#, python-format
-+msgid "Transaction history is incomplete, after %u."
-+msgstr "在 %u 之后,事务历史不完整。"
-+
-+#: dnf/cli/commands/history.py:256
-+msgid "No packages to list"
-+msgstr "没有可以列出的软件包"
-+
-+#: dnf/cli/commands/history.py:279
- msgid ""
- "Invalid transaction ID range definition '{}'.\n"
- "Use '<transaction-id>..<transaction-id>'."
-@@ -1347,7 +1336,7 @@ msgstr ""
- "无效的事务 ID 范围定义 '{}'。\n"
- "使用 '<transaction-id>..<transaction-id>'。"
- 
--#: dnf/cli/commands/history.py:226
-+#: dnf/cli/commands/history.py:283
- msgid ""
- "Can't convert '{}' to transaction ID.\n"
- "Use '<number>', 'last', 'last-<number>'."
-@@ -1355,40 +1344,29 @@ msgstr ""
- "无法将 '{}' 转换为事务 ID。\n"
- "请使用 '<number>'、'last'、'last-<number>'。"
- 
--#: dnf/cli/commands/history.py:255
-+#: dnf/cli/commands/history.py:312
- msgid "No transaction which manipulates package '{}' was found."
- msgstr "没有找到操作软件包 '{}' 的事务。"
- 
--#: dnf/cli/commands/history.py:305
--#, fuzzy, python-brace-format
--#| msgid "TransactionItem not found for key: {}"
--msgid "Transaction ID \"{id}\" not found."
--msgstr "找不到键的 TransactionItem: {}"
--
--#: dnf/cli/commands/history.py:313
-+#: dnf/cli/commands/history.py:357
- msgid "{} exists, overwrite?"
--msgstr ""
-+msgstr "{} 已存在,是否覆盖?"
- 
--#: dnf/cli/commands/history.py:316
-+#: dnf/cli/commands/history.py:360
- msgid "Not overwriting {}, exiting."
--msgstr ""
-+msgstr "不覆盖 {},退出。"
- 
--#: dnf/cli/commands/history.py:323
--#, fuzzy
--#| msgid "Transaction failed"
-+#: dnf/cli/commands/history.py:367
- msgid "Transaction saved to {}."
--msgstr "事务失败"
-+msgstr "事务保存到 {}。"
- 
--#: dnf/cli/commands/history.py:326
--#, fuzzy
--#| msgid "Errors occurred during transaction."
-+#: dnf/cli/commands/history.py:370
- msgid "Error storing transaction: {}"
--msgstr "事务过程中出现错误。"
-+msgstr "存储事务出错:{}"
- 
--#: dnf/cli/commands/history.py:350
--msgid ""
--"Warning, the following problems occurred while replaying the transaction:"
--msgstr ""
-+#: dnf/cli/commands/history.py:386
-+msgid "Warning, the following problems occurred while running a transaction:"
-+msgstr "警告,在运行事务时发生以下问题:"
- 
- #: dnf/cli/commands/install.py:47
- msgid "install a package or packages on your system"
-@@ -1407,7 +1385,7 @@ msgstr "没有任何匹配"
- msgid "Not a valid rpm file path: %s"
- msgstr "RPM文件路径错误:%s"
- 
--#: dnf/cli/commands/install.py:167
-+#: dnf/cli/commands/install.py:166
- #, python-brace-format
- msgid "There are following alternatives for \"{0}\": {1}"
- msgstr "以下是 \"{0}\" 的替代 : {1}"
-@@ -1450,7 +1428,7 @@ msgid "%s marked as group installed."
- msgstr "%s 已标记为已安装软件组。"
- 
- #: dnf/cli/commands/mark.py:85 dnf/cli/commands/shell.py:129
--#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:279
-+#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:282
- msgid "Error:"
- msgstr "错误:"
- 
-@@ -1506,42 +1484,46 @@ msgid "Package {} belongs to multiple modules, skipping"
- msgstr "软件包 {} 属于多个模块,正在跳过"
- 
- #: dnf/cli/commands/module.py:277
-+msgid "switch a module to a stream and distrosync rpm packages"
-+msgstr "将模块切换到流和 distrosync rpm 软件包"
-+
-+#: dnf/cli/commands/module.py:299
- msgid "list modular packages"
- msgstr "列出模块包"
- 
--#: dnf/cli/commands/module.py:292
-+#: dnf/cli/commands/module.py:314
- msgid "list packages belonging to a module"
- msgstr "列出属于一个模块的软件包"
- 
--#: dnf/cli/commands/module.py:327
-+#: dnf/cli/commands/module.py:349
- msgid "Interact with Modules."
- msgstr "与模块交互。"
- 
--#: dnf/cli/commands/module.py:340
-+#: dnf/cli/commands/module.py:362
- msgid "show only enabled modules"
- msgstr "只显示启用的模块"
- 
--#: dnf/cli/commands/module.py:343
-+#: dnf/cli/commands/module.py:365
- msgid "show only disabled modules"
- msgstr "只显示禁用的模块"
- 
--#: dnf/cli/commands/module.py:346
-+#: dnf/cli/commands/module.py:368
- msgid "show only installed modules or packages"
- msgstr "只显示已安装的模块或者软件包"
- 
--#: dnf/cli/commands/module.py:349
-+#: dnf/cli/commands/module.py:371
- msgid "show profile content"
- msgstr "显示档案内容"
- 
--#: dnf/cli/commands/module.py:354
-+#: dnf/cli/commands/module.py:376
- msgid "remove all modular packages"
- msgstr "移除所有模块包"
- 
--#: dnf/cli/commands/module.py:364
-+#: dnf/cli/commands/module.py:386
- msgid "Module specification"
- msgstr "模块规格"
- 
--#: dnf/cli/commands/module.py:386
-+#: dnf/cli/commands/module.py:408
- msgid "{} {} {}: too few arguments"
- msgstr "{} {} {}: 参数太少"
- 
-@@ -2026,22 +2008,22 @@ msgstr "KEYWORD"
- msgid "Keyword to search for"
- msgstr "要搜索的关键字"
- 
--#: dnf/cli/commands/search.py:61 dnf/cli/output.py:506
-+#: dnf/cli/commands/search.py:61 dnf/cli/output.py:460
- msgctxt "long"
- msgid "Name"
- msgstr "名称"
- 
--#: dnf/cli/commands/search.py:62 dnf/cli/output.py:559
-+#: dnf/cli/commands/search.py:62 dnf/cli/output.py:513
- msgctxt "long"
- msgid "Summary"
- msgstr "概况"
- 
--#: dnf/cli/commands/search.py:63 dnf/cli/output.py:569
-+#: dnf/cli/commands/search.py:63 dnf/cli/output.py:523
- msgctxt "long"
- msgid "Description"
- msgstr "描述"
- 
--#: dnf/cli/commands/search.py:64 dnf/cli/output.py:562
-+#: dnf/cli/commands/search.py:64 dnf/cli/output.py:516
- msgid "URL"
- msgstr "URL"
- 
-@@ -2184,16 +2166,16 @@ msgstr ""
- "run                      解析以及运行事务集\n"
- "exit (或 quit)           退出 shell"
- 
--#: dnf/cli/commands/shell.py:259
-+#: dnf/cli/commands/shell.py:262
- #, python-format
- msgid "Error: Cannot open %s for reading"
- msgstr "错误:无法打开%s来读取"
- 
--#: dnf/cli/commands/shell.py:281 dnf/cli/main.py:187
-+#: dnf/cli/commands/shell.py:284 dnf/cli/main.py:187
- msgid "Complete!"
- msgstr "完毕!"
- 
--#: dnf/cli/commands/shell.py:291
-+#: dnf/cli/commands/shell.py:294
- msgid "Leaving Shell"
- msgstr "离开终端"
- 
-@@ -2384,8 +2366,8 @@ msgstr "严重性"
- msgid "Files"
- msgstr "文件"
- 
--#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1499
--#: dnf/cli/output.py:1772 dnf/cli/output.py:1774
-+#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1652
-+#: dnf/cli/output.py:1654 dnf/util.py:591
- msgid "Installed"
- msgstr "已安装"
- 
-@@ -2706,13 +2688,13 @@ msgstr "无法编码参数 '%s': %s"
- #. Translators: This is abbreviated 'Name'. Should be no longer
- #. than 12 characters. You can use the full version if it is short
- #. enough in your language.
--#: dnf/cli/output.py:505
-+#: dnf/cli/output.py:459
- msgctxt "short"
- msgid "Name"
- msgstr "名称"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:511
-+#: dnf/cli/output.py:465
- msgid "Epoch"
- msgstr "时期"
- 
-@@ -2720,38 +2702,38 @@ msgstr "时期"
- #. use the full (unabbreviated) term 'Version' if you think that
- #. the translation to your language is not too long and will
- #. always fit to limited space.
--#: dnf/cli/output.py:512 dnf/cli/output.py:1335
-+#: dnf/cli/output.py:466 dnf/cli/output.py:1248
- msgctxt "short"
- msgid "Version"
- msgstr "版本"
- 
- #. Translators: This is the full (unabbreviated) term 'Version'.
--#: dnf/cli/output.py:513 dnf/cli/output.py:1337
-+#: dnf/cli/output.py:467 dnf/cli/output.py:1250
- msgctxt "long"
- msgid "Version"
- msgstr "版本"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:516
-+#: dnf/cli/output.py:470
- msgid "Release"
- msgstr "发布"
- 
- #. Translators: This is abbreviated 'Architecture', used when
- #. we have not enough space to display the full word.
--#: dnf/cli/output.py:517 dnf/cli/output.py:1326
-+#: dnf/cli/output.py:471 dnf/cli/output.py:1239
- msgctxt "short"
- msgid "Arch"
- msgstr "架构"
- 
- #. Translators: This is the full word 'Architecture', used when
- #. we have enough space.
--#: dnf/cli/output.py:518 dnf/cli/output.py:1329
-+#: dnf/cli/output.py:472 dnf/cli/output.py:1242
- msgctxt "long"
- msgid "Architecture"
- msgstr "架构"
- 
- #. Translators: This is the full (unabbreviated) term 'Size'.
--#: dnf/cli/output.py:520 dnf/cli/output.py:1352
-+#: dnf/cli/output.py:474 dnf/cli/output.py:1265
- msgctxt "long"
- msgid "Size"
- msgstr "大小"
-@@ -2760,32 +2742,32 @@ msgstr "大小"
- #. not be longer than 5 characters. If the term 'Size' in your
- #. language is not longer than 5 characters then you can use it
- #. unabbreviated.
--#: dnf/cli/output.py:520 dnf/cli/output.py:1350
-+#: dnf/cli/output.py:474 dnf/cli/output.py:1263
- msgctxt "short"
- msgid "Size"
- msgstr "大小"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:524
-+#: dnf/cli/output.py:478
- msgid "Source"
- msgstr "源"
- 
- #. Translators: This is abbreviated 'Repository', used when
- #. we have not enough space to display the full word.
--#: dnf/cli/output.py:525 dnf/cli/output.py:1341
-+#: dnf/cli/output.py:479 dnf/cli/output.py:1254
- msgctxt "short"
- msgid "Repo"
- msgstr "仓库"
- 
- #. Translators: This is the full word 'Repository', used when
- #. we have enough space.
--#: dnf/cli/output.py:526 dnf/cli/output.py:1344
-+#: dnf/cli/output.py:480 dnf/cli/output.py:1257
- msgctxt "long"
- msgid "Repository"
- msgstr "仓库"
- 
- #. Translators: This message should be no longer than 12 chars.
--#: dnf/cli/output.py:533
-+#: dnf/cli/output.py:487
- msgid "From repo"
- msgstr "来自仓库"
- 
-@@ -2793,312 +2775,308 @@ msgstr "来自仓库"
- #. print(_("Committer   : %s") % ucd(pkg.committer))
- #. print(_("Committime  : %s") % time.ctime(pkg.committime))
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:539
-+#: dnf/cli/output.py:493
- msgid "Packager"
- msgstr "打包者"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:541
-+#: dnf/cli/output.py:495
- msgid "Buildtime"
- msgstr "构建时间"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:545
-+#: dnf/cli/output.py:499
- msgid "Install time"
- msgstr "安装时间"
- 
- #. Translators: This message should be no longer than 12 chars.
--#: dnf/cli/output.py:554
-+#: dnf/cli/output.py:508
- msgid "Installed by"
- msgstr "安装者"
- 
- #. Translators: This is abbreviated 'Summary'. Should be no longer
- #. than 12 characters. You can use the full version if it is short
- #. enough in your language.
--#: dnf/cli/output.py:558
-+#: dnf/cli/output.py:512
- msgctxt "short"
- msgid "Summary"
- msgstr "概况"
- 
- #. Translators: This message should be no longer than 12 characters.
--#: dnf/cli/output.py:564
-+#: dnf/cli/output.py:518
- msgid "License"
- msgstr "协议"
- 
- #. Translators: This is abbreviated 'Description'. Should be no longer
- #. than 12 characters. You can use the full version if it is short
- #. enough in your language.
--#: dnf/cli/output.py:568
-+#: dnf/cli/output.py:522
- msgctxt "short"
- msgid "Description"
- msgstr "描述"
- 
--#: dnf/cli/output.py:695
--msgid "No packages to list"
--msgstr "没有可以列出的软件包"
--
--#: dnf/cli/output.py:706
-+#: dnf/cli/output.py:650
- msgid "y"
- msgstr "y"
- 
--#: dnf/cli/output.py:706
-+#: dnf/cli/output.py:650
- msgid "yes"
- msgstr "是"
- 
--#: dnf/cli/output.py:707
-+#: dnf/cli/output.py:651
- msgid "n"
- msgstr "n"
- 
--#: dnf/cli/output.py:707
-+#: dnf/cli/output.py:651
- msgid "no"
- msgstr "否"
- 
--#: dnf/cli/output.py:711
-+#: dnf/cli/output.py:655
- msgid "Is this ok [y/N]: "
- msgstr "确定吗?[y/N]: "
- 
--#: dnf/cli/output.py:715
-+#: dnf/cli/output.py:659
- msgid "Is this ok [Y/n]: "
- msgstr "确定吗?[Y/n]: "
- 
--#: dnf/cli/output.py:795
-+#: dnf/cli/output.py:739
- #, python-format
- msgid "Group: %s"
- msgstr "组:%s"
- 
--#: dnf/cli/output.py:799
-+#: dnf/cli/output.py:743
- #, python-format
- msgid " Group-Id: %s"
- msgstr " 组编号:%s"
- 
--#: dnf/cli/output.py:801 dnf/cli/output.py:840
-+#: dnf/cli/output.py:745 dnf/cli/output.py:784
- #, python-format
- msgid " Description: %s"
- msgstr " 描述:%s"
- 
--#: dnf/cli/output.py:803
-+#: dnf/cli/output.py:747
- #, python-format
- msgid " Language: %s"
- msgstr " 语言:%s"
- 
--#: dnf/cli/output.py:806
-+#: dnf/cli/output.py:750
- msgid " Mandatory Packages:"
- msgstr " 必要的软件包:"
- 
--#: dnf/cli/output.py:807
-+#: dnf/cli/output.py:751
- msgid " Default Packages:"
- msgstr " 默认的软件包:"
- 
--#: dnf/cli/output.py:808
-+#: dnf/cli/output.py:752
- msgid " Optional Packages:"
- msgstr " 可选的软件包:"
- 
--#: dnf/cli/output.py:809
-+#: dnf/cli/output.py:753
- msgid " Conditional Packages:"
- msgstr " 可能的软件包:"
- 
--#: dnf/cli/output.py:834
-+#: dnf/cli/output.py:778
- #, python-format
- msgid "Environment Group: %s"
- msgstr "环境组:%s"
- 
--#: dnf/cli/output.py:837
-+#: dnf/cli/output.py:781
- #, python-format
- msgid " Environment-Id: %s"
- msgstr " 环境-Id:%s"
- 
--#: dnf/cli/output.py:843
-+#: dnf/cli/output.py:787
- msgid " Mandatory Groups:"
- msgstr " 必选软件包组:"
- 
--#: dnf/cli/output.py:844
-+#: dnf/cli/output.py:788
- msgid " Optional Groups:"
- msgstr " 可选软件包组:"
- 
--#: dnf/cli/output.py:865
-+#: dnf/cli/output.py:809
- msgid "Matched from:"
- msgstr "匹配来源:"
- 
--#: dnf/cli/output.py:879
-+#: dnf/cli/output.py:823
- #, python-format
- msgid "Filename    : %s"
- msgstr "文件名    :%s"
- 
--#: dnf/cli/output.py:904
-+#: dnf/cli/output.py:848
- #, python-format
- msgid "Repo        : %s"
- msgstr "仓库        :%s"
- 
--#: dnf/cli/output.py:913
-+#: dnf/cli/output.py:857
- msgid "Description : "
- msgstr "描述: "
- 
--#: dnf/cli/output.py:917
-+#: dnf/cli/output.py:861
- #, python-format
- msgid "URL         : %s"
- msgstr "网址         :%s"
- 
--#: dnf/cli/output.py:921
-+#: dnf/cli/output.py:865
- #, python-format
- msgid "License     : %s"
- msgstr "协议     :%s"
- 
--#: dnf/cli/output.py:927
-+#: dnf/cli/output.py:871
- #, python-format
- msgid "Provide    : %s"
- msgstr "提供    : %s"
- 
--#: dnf/cli/output.py:947
-+#: dnf/cli/output.py:891
- #, python-format
- msgid "Other       : %s"
- msgstr "其它       : %s"
- 
--#: dnf/cli/output.py:996
-+#: dnf/cli/output.py:940
- msgid "There was an error calculating total download size"
- msgstr "计算总下载量时出错"
- 
--#: dnf/cli/output.py:1002
-+#: dnf/cli/output.py:946
- #, python-format
- msgid "Total size: %s"
- msgstr "总计:%s"
- 
--#: dnf/cli/output.py:1005
-+#: dnf/cli/output.py:949
- #, python-format
- msgid "Total download size: %s"
- msgstr "总下载:%s"
- 
--#: dnf/cli/output.py:1008
-+#: dnf/cli/output.py:952
- #, python-format
- msgid "Installed size: %s"
- msgstr "安装大小:%s"
- 
--#: dnf/cli/output.py:1026
-+#: dnf/cli/output.py:970
- msgid "There was an error calculating installed size"
- msgstr "计算安装大小时出错"
- 
--#: dnf/cli/output.py:1030
-+#: dnf/cli/output.py:974
- #, python-format
- msgid "Freed space: %s"
- msgstr "将会释放空间:%s"
- 
--#: dnf/cli/output.py:1039
-+#: dnf/cli/output.py:983
- msgid "Marking packages as installed by the group:"
- msgstr "标记软件包为遵循软件包组安装的:"
- 
--#: dnf/cli/output.py:1046
-+#: dnf/cli/output.py:990
- msgid "Marking packages as removed by the group:"
- msgstr "标记软件包为遵循软件包组移除的:"
- 
--#: dnf/cli/output.py:1056
-+#: dnf/cli/output.py:1000
- msgid "Group"
- msgstr "组"
- 
--#: dnf/cli/output.py:1056
-+#: dnf/cli/output.py:1000
- msgid "Packages"
- msgstr "软件包"
- 
--#: dnf/cli/output.py:1133
-+#: dnf/cli/output.py:1046
- msgid "Installing group/module packages"
- msgstr "安装组/模块包"
- 
--#: dnf/cli/output.py:1134
-+#: dnf/cli/output.py:1047
- msgid "Installing group packages"
- msgstr "安装软件包组"
- 
- #. TRANSLATORS: This is for a list of packages to be installed.
--#: dnf/cli/output.py:1138
-+#: dnf/cli/output.py:1051
- msgctxt "summary"
- msgid "Installing"
- msgstr "安装"
- 
- #. TRANSLATORS: This is for a list of packages to be upgraded.
--#: dnf/cli/output.py:1140
-+#: dnf/cli/output.py:1053
- msgctxt "summary"
- msgid "Upgrading"
- msgstr "升级"
- 
- #. TRANSLATORS: This is for a list of packages to be reinstalled.
--#: dnf/cli/output.py:1142
-+#: dnf/cli/output.py:1055
- msgctxt "summary"
- msgid "Reinstalling"
- msgstr "重新安装"
- 
--#: dnf/cli/output.py:1144
-+#: dnf/cli/output.py:1057
- msgid "Installing dependencies"
- msgstr "安装依赖关系"
- 
--#: dnf/cli/output.py:1145
-+#: dnf/cli/output.py:1058
- msgid "Installing weak dependencies"
- msgstr "安装弱的依赖"
- 
- #. TRANSLATORS: This is for a list of packages to be removed.
--#: dnf/cli/output.py:1147
-+#: dnf/cli/output.py:1060
- msgid "Removing"
- msgstr "移除"
- 
--#: dnf/cli/output.py:1148
-+#: dnf/cli/output.py:1061
- msgid "Removing dependent packages"
- msgstr "移除依赖的软件包"
- 
--#: dnf/cli/output.py:1149
-+#: dnf/cli/output.py:1062
- msgid "Removing unused dependencies"
- msgstr "清除未被使用的依赖关系"
- 
- #. TRANSLATORS: This is for a list of packages to be downgraded.
--#: dnf/cli/output.py:1151
-+#: dnf/cli/output.py:1064
- msgctxt "summary"
- msgid "Downgrading"
- msgstr "降级"
- 
--#: dnf/cli/output.py:1176
-+#: dnf/cli/output.py:1089
- msgid "Installing module profiles"
- msgstr "安装模块配置档案"
- 
--#: dnf/cli/output.py:1185
-+#: dnf/cli/output.py:1098
- msgid "Disabling module profiles"
- msgstr "禁用模块配置档案"
- 
--#: dnf/cli/output.py:1194
-+#: dnf/cli/output.py:1107
- msgid "Enabling module streams"
- msgstr "启用模块流"
- 
--#: dnf/cli/output.py:1202
-+#: dnf/cli/output.py:1115
- msgid "Switching module streams"
- msgstr "切换模块流"
- 
--#: dnf/cli/output.py:1210
-+#: dnf/cli/output.py:1123
- msgid "Disabling modules"
- msgstr "禁用模块"
- 
--#: dnf/cli/output.py:1218
-+#: dnf/cli/output.py:1131
- msgid "Resetting modules"
- msgstr "重置模块"
- 
--#: dnf/cli/output.py:1230
-+#: dnf/cli/output.py:1143
- msgid "Installing Environment Groups"
- msgstr "安装环境组"
- 
--#: dnf/cli/output.py:1237
-+#: dnf/cli/output.py:1150
- msgid "Upgrading Environment Groups"
- msgstr "升级环境组"
- 
--#: dnf/cli/output.py:1244
-+#: dnf/cli/output.py:1157
- msgid "Removing Environment Groups"
- msgstr "删除环境组"
- 
--#: dnf/cli/output.py:1251
-+#: dnf/cli/output.py:1164
- msgid "Installing Groups"
- msgstr "安装组"
- 
--#: dnf/cli/output.py:1258
-+#: dnf/cli/output.py:1171
- msgid "Upgrading Groups"
- msgstr "升级组"
- 
--#: dnf/cli/output.py:1265
-+#: dnf/cli/output.py:1178
- msgid "Removing Groups"
- msgstr "删除组"
- 
--#: dnf/cli/output.py:1281
-+#: dnf/cli/output.py:1194
- #, python-format
- msgid ""
- "Skipping packages with conflicts:\n"
-@@ -3107,12 +3085,12 @@ msgstr ""
- "跳过有冲突的软件包:\n"
- "(添加 '%s' 至命令行来强制升级)"
- 
--#: dnf/cli/output.py:1291
-+#: dnf/cli/output.py:1204
- #, python-format
- msgid "Skipping packages with broken dependencies%s"
- msgstr "跳过存在损坏依赖关系的软件包 %s"
- 
--#: dnf/cli/output.py:1295
-+#: dnf/cli/output.py:1208
- msgid " or part of a group"
- msgstr " 或一个组的一部分"
- 
-@@ -3120,22 +3098,22 @@ msgstr " 或一个组的一部分"
- #. use the full (unabbreviated) term 'Package' if you think that
- #. the translation to your language is not too long and will
- #. always fit to limited space.
--#: dnf/cli/output.py:1320
-+#: dnf/cli/output.py:1233
- msgctxt "short"
- msgid "Package"
- msgstr "软件包"
- 
- #. Translators: This is the full (unabbreviated) term 'Package'.
--#: dnf/cli/output.py:1322
-+#: dnf/cli/output.py:1235
- msgctxt "long"
- msgid "Package"
- msgstr "软件包"
- 
--#: dnf/cli/output.py:1371
-+#: dnf/cli/output.py:1284
- msgid "replacing"
- msgstr "替换"
- 
--#: dnf/cli/output.py:1378
-+#: dnf/cli/output.py:1291
- #, python-format
- msgid ""
- "\n"
-@@ -3147,287 +3125,271 @@ msgstr ""
- "%s\n"
- 
- #. TODO: remove
--#: dnf/cli/output.py:1383 dnf/cli/output.py:1932 dnf/cli/output.py:1933
-+#: dnf/cli/output.py:1296 dnf/cli/output.py:1812 dnf/cli/output.py:1813
- msgid "Install"
- msgstr "安装"
- 
--#: dnf/cli/output.py:1387 dnf/cli/output.py:1941
-+#: dnf/cli/output.py:1300 dnf/cli/output.py:1821
- msgid "Upgrade"
- msgstr "升级"
- 
--#: dnf/cli/output.py:1388
-+#: dnf/cli/output.py:1301
- msgid "Remove"
- msgstr "移除"
- 
--#: dnf/cli/output.py:1390 dnf/cli/output.py:1939
-+#: dnf/cli/output.py:1303 dnf/cli/output.py:1819
- msgid "Downgrade"
- msgstr "降级"
- 
--#: dnf/cli/output.py:1391
-+#: dnf/cli/output.py:1304
- msgid "Skip"
- msgstr "跳过"
- 
--#: dnf/cli/output.py:1400 dnf/cli/output.py:1416
-+#: dnf/cli/output.py:1313 dnf/cli/output.py:1329
- msgid "Package"
- msgid_plural "Packages"
- msgstr[0] "软件包"
- 
--#: dnf/cli/output.py:1418
-+#: dnf/cli/output.py:1331
- msgid "Dependent package"
- msgid_plural "Dependent packages"
- msgstr[0] "依赖软件包"
- 
--#: dnf/cli/output.py:1497 dnf/cli/output.py:1773 dnf/cli/output.py:1942
--msgid "Upgraded"
--msgstr "已升级"
--
--#: dnf/cli/output.py:1498 dnf/cli/output.py:1773 dnf/cli/output.py:1940
--msgid "Downgraded"
--msgstr "已降级"
--
--#: dnf/cli/output.py:1503
--msgid "Reinstalled"
--msgstr "已重装"
--
--#: dnf/cli/output.py:1504
--msgid "Skipped"
--msgstr "已跳过"
--
--#: dnf/cli/output.py:1505
--msgid "Removed"
--msgstr "已移除"
--
--#: dnf/cli/output.py:1508
--msgid "Failed"
--msgstr "失败"
--
--#: dnf/cli/output.py:1559
-+#: dnf/cli/output.py:1439
- msgid "Total"
- msgstr "总计"
- 
--#: dnf/cli/output.py:1587
-+#: dnf/cli/output.py:1467
- msgid "<unset>"
- msgstr "<空>"
- 
--#: dnf/cli/output.py:1588
-+#: dnf/cli/output.py:1468
- msgid "System"
- msgstr "系统"
- 
--#: dnf/cli/output.py:1638
-+#: dnf/cli/output.py:1518
- msgid "Command line"
- msgstr "命令行"
- 
- #. TRANSLATORS: user names who executed transaction in history command output
--#: dnf/cli/output.py:1649
-+#: dnf/cli/output.py:1529
- msgid "User name"
- msgstr "用户名"
- 
--#: dnf/cli/output.py:1651
-+#: dnf/cli/output.py:1531
- msgid "ID"
- msgstr "ID"
- 
--#: dnf/cli/output.py:1653
-+#: dnf/cli/output.py:1533
- msgid "Date and time"
- msgstr "日期和时间"
- 
--#: dnf/cli/output.py:1654
-+#: dnf/cli/output.py:1534
- msgid "Action(s)"
- msgstr "操作"
- 
--#: dnf/cli/output.py:1655
-+#: dnf/cli/output.py:1535
- msgid "Altered"
- msgstr "更改"
- 
--#: dnf/cli/output.py:1698
-+#: dnf/cli/output.py:1578
- msgid "No transactions"
- msgstr "没有事务"
- 
--#: dnf/cli/output.py:1699 dnf/cli/output.py:1715
-+#: dnf/cli/output.py:1579 dnf/cli/output.py:1595
- msgid "Failed history info"
- msgstr "失败的历史信息"
- 
--#: dnf/cli/output.py:1714
-+#: dnf/cli/output.py:1594
- msgid "No transaction ID, or package, given"
- msgstr "未指定事务 ID、或者软件包"
- 
--#: dnf/cli/output.py:1772
-+#: dnf/cli/output.py:1652
- msgid "Erased"
- msgstr "已删除"
- 
--#: dnf/cli/output.py:1774
-+#: dnf/cli/output.py:1653 dnf/cli/output.py:1820 dnf/util.py:590
-+msgid "Downgraded"
-+msgstr "已降级"
-+
-+#: dnf/cli/output.py:1653 dnf/cli/output.py:1822 dnf/util.py:589
-+msgid "Upgraded"
-+msgstr "已升级"
-+
-+#: dnf/cli/output.py:1654
- msgid "Not installed"
- msgstr "未安装"
- 
--#: dnf/cli/output.py:1775
-+#: dnf/cli/output.py:1655
- msgid "Newer"
- msgstr "较早的"
- 
--#: dnf/cli/output.py:1775
-+#: dnf/cli/output.py:1655
- msgid "Older"
- msgstr "较老的"
- 
--#: dnf/cli/output.py:1823 dnf/cli/output.py:1825
-+#: dnf/cli/output.py:1703 dnf/cli/output.py:1705
- msgid "Transaction ID :"
- msgstr "事务 ID:"
- 
--#: dnf/cli/output.py:1828
-+#: dnf/cli/output.py:1708
- msgid "Begin time     :"
- msgstr "起始时间    :"
- 
--#: dnf/cli/output.py:1831 dnf/cli/output.py:1833
-+#: dnf/cli/output.py:1711 dnf/cli/output.py:1713
- msgid "Begin rpmdb    :"
- msgstr "起始 RPM 数据库     :"
- 
--#: dnf/cli/output.py:1839
-+#: dnf/cli/output.py:1719
- #, python-format
- msgid "(%u seconds)"
- msgstr "(%u 秒)"
- 
--#: dnf/cli/output.py:1841
-+#: dnf/cli/output.py:1721
- #, python-format
- msgid "(%u minutes)"
- msgstr "(%u 分钟)"
- 
--#: dnf/cli/output.py:1843
-+#: dnf/cli/output.py:1723
- #, python-format
- msgid "(%u hours)"
- msgstr "(%u 小时)"
- 
--#: dnf/cli/output.py:1845
-+#: dnf/cli/output.py:1725
- #, python-format
- msgid "(%u days)"
- msgstr "(%u 天)"
- 
--#: dnf/cli/output.py:1846
-+#: dnf/cli/output.py:1726
- msgid "End time       :"
- msgstr "结束时间       :"
- 
--#: dnf/cli/output.py:1849 dnf/cli/output.py:1851
-+#: dnf/cli/output.py:1729 dnf/cli/output.py:1731
- msgid "End rpmdb      :"
- msgstr "结束 RPM 数据库      :"
- 
--#: dnf/cli/output.py:1858 dnf/cli/output.py:1860
-+#: dnf/cli/output.py:1738 dnf/cli/output.py:1740
- msgid "User           :"
- msgstr "用户           :"
- 
--#: dnf/cli/output.py:1864 dnf/cli/output.py:1871
-+#: dnf/cli/output.py:1744 dnf/cli/output.py:1751
- msgid "Aborted"
- msgstr "已终止"
- 
--#: dnf/cli/output.py:1864 dnf/cli/output.py:1867 dnf/cli/output.py:1869
--#: dnf/cli/output.py:1871 dnf/cli/output.py:1873 dnf/cli/output.py:1875
-+#: dnf/cli/output.py:1744 dnf/cli/output.py:1747 dnf/cli/output.py:1749
-+#: dnf/cli/output.py:1751 dnf/cli/output.py:1753 dnf/cli/output.py:1755
- msgid "Return-Code    :"
- msgstr "返回码    :"
- 
--#: dnf/cli/output.py:1867 dnf/cli/output.py:1875
-+#: dnf/cli/output.py:1747 dnf/cli/output.py:1755
- msgid "Success"
- msgstr "成功"
- 
--#: dnf/cli/output.py:1869
-+#: dnf/cli/output.py:1749
- msgid "Failures:"
- msgstr "失败:"
- 
--#: dnf/cli/output.py:1873
-+#: dnf/cli/output.py:1753
- msgid "Failure:"
- msgstr "失败:"
- 
--#: dnf/cli/output.py:1883 dnf/cli/output.py:1885
-+#: dnf/cli/output.py:1763 dnf/cli/output.py:1765
- msgid "Releasever     :"
- msgstr "Releasever     :"
- 
--#: dnf/cli/output.py:1890 dnf/cli/output.py:1892
-+#: dnf/cli/output.py:1770 dnf/cli/output.py:1772
- msgid "Command Line   :"
- msgstr "命令行   :"
- 
--#: dnf/cli/output.py:1897 dnf/cli/output.py:1899
-+#: dnf/cli/output.py:1777 dnf/cli/output.py:1779
- msgid "Comment        :"
- msgstr "注释        :"
- 
--#: dnf/cli/output.py:1903
-+#: dnf/cli/output.py:1783
- msgid "Transaction performed with:"
- msgstr "事务完成由:"
- 
--#: dnf/cli/output.py:1912
-+#: dnf/cli/output.py:1792
- msgid "Packages Altered:"
- msgstr "已改变的包:"
- 
--#: dnf/cli/output.py:1918
-+#: dnf/cli/output.py:1798
- msgid "Scriptlet output:"
- msgstr "Scriptlet 输出:"
- 
--#: dnf/cli/output.py:1925
-+#: dnf/cli/output.py:1805
- msgid "Errors:"
- msgstr "错误:"
- 
--#: dnf/cli/output.py:1934
-+#: dnf/cli/output.py:1814
- msgid "Dep-Install"
- msgstr "依赖安装"
- 
--#: dnf/cli/output.py:1935
-+#: dnf/cli/output.py:1815
- msgid "Obsoleted"
- msgstr "已废弃"
- 
--#: dnf/cli/output.py:1936 dnf/transaction.py:84 dnf/transaction.py:85
-+#: dnf/cli/output.py:1816 dnf/transaction.py:84 dnf/transaction.py:85
- msgid "Obsoleting"
- msgstr "废弃"
- 
--#: dnf/cli/output.py:1937
-+#: dnf/cli/output.py:1817
- msgid "Erase"
- msgstr "删除"
- 
--#: dnf/cli/output.py:1938
-+#: dnf/cli/output.py:1818
- msgid "Reinstall"
- msgstr "重装"
- 
--#: dnf/cli/output.py:2016
-+#: dnf/cli/output.py:1892
- #, python-format
- msgid "---> Package %s.%s %s will be installed"
- msgstr "---> 软件包 %s.%s %s 将会被安装"
- 
--#: dnf/cli/output.py:2018
-+#: dnf/cli/output.py:1894
- #, python-format
- msgid "---> Package %s.%s %s will be an upgrade"
- msgstr "---> 软件包 %s.%s %s 将作为一个更新"
- 
--#: dnf/cli/output.py:2020
-+#: dnf/cli/output.py:1896
- #, python-format
- msgid "---> Package %s.%s %s will be erased"
- msgstr "---> 软件包 %s.%s %s 将会被清除"
- 
--#: dnf/cli/output.py:2022
-+#: dnf/cli/output.py:1898
- #, python-format
- msgid "---> Package %s.%s %s will be reinstalled"
- msgstr "---> 软件包 %s.%s %s 将会被重新安装"
- 
--#: dnf/cli/output.py:2024
-+#: dnf/cli/output.py:1900
- #, python-format
- msgid "---> Package %s.%s %s will be a downgrade"
- msgstr "---> 软件包 %s.%s %s 将会被降级"
- 
--#: dnf/cli/output.py:2026
-+#: dnf/cli/output.py:1902
- #, python-format
- msgid "---> Package %s.%s %s will be obsoleting"
- msgstr "---> 软件包 %s.%s %s 将会废弃"
- 
--#: dnf/cli/output.py:2028
-+#: dnf/cli/output.py:1904
- #, python-format
- msgid "---> Package %s.%s %s will be upgraded"
- msgstr "---> 软件包 %s.%s %s 将会被升级"
- 
--#: dnf/cli/output.py:2030
-+#: dnf/cli/output.py:1906
- #, python-format
- msgid "---> Package %s.%s %s will be obsoleted"
- msgstr "---> 软件包 %s.%s %s 将会被废弃"
- 
--#: dnf/cli/output.py:2039
-+#: dnf/cli/output.py:1915
- msgid "--> Starting dependency resolution"
- msgstr "--> 开始解决依赖关系"
- 
--#: dnf/cli/output.py:2044
-+#: dnf/cli/output.py:1919
- msgid "--> Finished dependency resolution"
- msgstr "--> 依赖关系解决完成"
- 
--#: dnf/cli/output.py:2058 dnf/crypto.py:132
-+#: dnf/cli/output.py:1933 dnf/crypto.py:132
- #, python-format
- msgid ""
- "Importing GPG key 0x%s:\n"
-@@ -3509,16 +3471,14 @@ msgid "Module or Group '%s' does not exist."
- msgstr "模块或者组 '%s' 不存在。"
- 
- #: dnf/comps.py:599
--#, fuzzy, python-format
--#| msgid "Environment '%s' is not installed."
-+#, python-format
- msgid "Environment id '%s' does not exist."
--msgstr "环境组 '%s' 没有安装。"
-+msgstr "环境 id '%s' 不存在。"
- 
--#: dnf/comps.py:622 dnf/transaction_sr.py:443 dnf/transaction_sr.py:453
--#, fuzzy, python-format
--#| msgid "Environment '%s' is not installed."
-+#: dnf/comps.py:622 dnf/transaction_sr.py:477 dnf/transaction_sr.py:487
-+#, python-format
- msgid "Environment id '%s' is not installed."
--msgstr "环境组 '%s' 没有安装。"
-+msgstr "环境 id '%s' 没有安装。"
- 
- #: dnf/comps.py:639
- #, python-format
-@@ -3531,10 +3491,9 @@ msgid "Environment '%s' is not available."
- msgstr "环境 '%s' 不可用。"
- 
- #: dnf/comps.py:673
--#, fuzzy, python-format
--#| msgid "Group_id '%s' does not exist."
-+#, python-format
- msgid "Group id '%s' does not exist."
--msgstr "Group_id '%s' 不存在。"
-+msgstr "组 id '%s' 不存在。"
- 
- #: dnf/conf/config.py:136
- #, python-format
-@@ -3593,7 +3552,7 @@ msgstr "repo 的 id 无效: {} ({}), byte = {} {}"
- 
- #: dnf/conf/read.py:67
- msgid "Bad id for repo: {}, byte = {} {}"
--msgstr "repo 的 id 无效: %s, byte = %s %d"
-+msgstr "repo 的 id 无效: {}, byte = {} {}"
- 
- #: dnf/conf/read.py:75
- msgid "Repository '{}' ({}): Error parsing config: {}"
-@@ -3625,6 +3584,11 @@ msgstr "repo %s: 0x%s 已被导入"
- msgid "repo %s: imported key 0x%s."
- msgstr "repo %s: 已导入密钥 0x%s。"
- 
-+#: dnf/crypto.py:177
-+#, python-format
-+msgid "retrieving repo key for %s unencrypted from %s"
-+msgstr "为 %s 从 %s 获取的 repo 密钥未加密"
-+
- #: dnf/db/group.py:293
- msgid ""
- "No available modular metadata for modular package '{}', it cannot be "
-@@ -3707,7 +3671,7 @@ msgid "Modular dependency problem with Defaults:"
- msgid_plural "Modular dependency problems with Defaults:"
- msgstr[0] "默认设置中的模块依赖问题 :"
- 
--#: dnf/exceptions.py:131 dnf/module/module_base.py:686
-+#: dnf/exceptions.py:131 dnf/module/module_base.py:841
- msgid "Modular dependency problem:"
- msgid_plural "Modular dependency problems:"
- msgstr[0] "模块依赖问题:"
-@@ -3761,27 +3725,27 @@ msgstr ""
- "\n"
- "提示 : [d]默认, [e]启用, [x]禁用, [i]已安装的, [a]活跃的"
- 
--#: dnf/module/module_base.py:54 dnf/module/module_base.py:421
--#: dnf/module/module_base.py:477 dnf/module/module_base.py:543
-+#: dnf/module/module_base.py:54 dnf/module/module_base.py:547
-+#: dnf/module/module_base.py:603 dnf/module/module_base.py:669
- msgid "Ignoring unnecessary profile: '{}/{}'"
- msgstr "正在忽略无用的配置文件'{}/{}'"
- 
- #: dnf/module/module_base.py:84
- #, python-brace-format
- msgid "All matches for argument '{0}' in module '{1}:{2}' are not active"
--msgstr "模块 '{1}:{2}' 中参数 '{0}' 的所有匹配项目都未激活"
-+msgstr "模块 '{1}:{2}' 中的参数 '{0}' 的所有匹配项目都未激活"
- 
--#: dnf/module/module_base.py:92
-+#: dnf/module/module_base.py:92 dnf/module/module_base.py:202
- #, python-brace-format
- msgid "Installing module '{0}' from Fail-Safe repository {1} is not allowed"
--msgstr "不允许从失效保险仓库 {1} 安装模块 '{0}'"
-+msgstr "不允许从 Fail-Safe repository {1} 安装模块 '{0}'"
- 
--#: dnf/module/module_base.py:102
-+#: dnf/module/module_base.py:102 dnf/module/module_base.py:212
- msgid ""
- "Unable to match profile for argument {}. Available profiles for '{}:{}': {}"
- msgstr "不能为参数 {} 匹配配置文件。'{}:{}' 可用的配置文件为 : {}"
- 
--#: dnf/module/module_base.py:106
-+#: dnf/module/module_base.py:106 dnf/module/module_base.py:216
- msgid "Unable to match profile for argument {}"
- msgstr "无法配置参数 {} 中的配置档案"
- 
-@@ -3797,41 +3761,55 @@ msgstr "没有模块 {}:{} 的配置文件"
- msgid "Default profile {} not available in module {}:{}"
- msgstr "默认配置文件 {} 在模块 {}:{} 中不可用"
- 
--#: dnf/module/module_base.py:142
-+#: dnf/module/module_base.py:142 dnf/module/module_base.py:245
- msgid "Installing module from Fail-Safe repository is not allowed"
- msgstr "不允许从失效保险仓库中安装模块"
- 
--#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
--#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
--#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
--#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
-+#: dnf/module/module_base.py:194
-+#, python-brace-format
-+msgid "No active matches for argument '{0}' in module '{1}:{2}'"
-+msgstr "模块 '{1}:{2}' 中的参数 '{0}' 没有活跃的匹配"
-+
-+#: dnf/module/module_base.py:226
-+#, python-brace-format
-+msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'"
-+msgstr "在模块 '{1}' 流 '{2}' 中没有安装的配置集 '{0}'"
-+
-+#: dnf/module/module_base.py:265
-+msgid "No packages available to distrosync for package name '{}'"
-+msgstr "软件包名称 '{}' 没有可用的软件包用于 distrosync"
-+
-+#: dnf/module/module_base.py:308 dnf/module/module_base.py:452
-+#: dnf/module/module_base.py:477 dnf/module/module_base.py:496
-+#: dnf/module/module_base.py:543 dnf/module/module_base.py:599
-+#: dnf/module/module_base.py:665 dnf/module/module_base.py:827
- msgid "Unable to resolve argument {}"
- msgstr "无法解析参数 {}"
- 
--#: dnf/module/module_base.py:160
--msgid "No match for package {}"
--msgstr "没有和{}匹配的软件包"
--
--#: dnf/module/module_base.py:204
-+#: dnf/module/module_base.py:319
- #, python-brace-format
- msgid "Upgrading module '{0}' from Fail-Safe repository {1} is not allowed"
- msgstr "不允许从失效保险仓库 {1} 中升级模块 '{0}'"
- 
--#: dnf/module/module_base.py:223 dnf/module/module_base.py:251
-+#: dnf/module/module_base.py:338 dnf/module/module_base.py:366
- msgid "Unable to match profile in argument {}"
- msgstr "无法匹配参数 {} 中的配置档案"
- 
--#: dnf/module/module_base.py:231
-+#: dnf/module/module_base.py:346
- msgid "Upgrading module from Fail-Safe repository is not allowed"
- msgstr "不允许从失效保险仓库中升级模块"
- 
--#: dnf/module/module_base.py:367
-+#: dnf/module/module_base.py:500
- msgid ""
- "Only module name is required. Ignoring unneeded information in argument: "
- "'{}'"
- msgstr "只需要模块名。正在忽略'{}'中的无用信息"
- 
--#: dnf/package.py:298
-+#: dnf/module/module_base.py:828
-+msgid "No match for package {}"
-+msgstr "没有和{}匹配的软件包"
-+
-+#: dnf/package.py:333
- #, python-format
- msgid "%s: %s check failed: %s vs %s"
- msgstr "%s: %s 检查失败:%s vs %s"
-@@ -3845,12 +3823,12 @@ msgstr "%s 为空文件"
- #: dnf/persistor.py:91
- #, python-format
- msgid "Failed to load expired repos cache: %s"
--msgstr ""
-+msgstr "加载过期的仓库缓存失败: %s"
- 
- #: dnf/persistor.py:99
- #, python-format
- msgid "Failed to store expired repos cache: %s"
--msgstr ""
-+msgstr "存储已过期的仓库缓存失败: %s"
- 
- #: dnf/persistor.py:106
- msgid "Failed storing last makecache time."
-@@ -3912,6 +3890,12 @@ msgstr "已添加 %s 仓库来自 %s"
- msgid "Errors occurred during test transaction."
- msgstr "测试事务过程中出现错误。"
- 
-+#: dnf/sack.py:47
-+msgid ""
-+"allow_vendor_change is disabled. This option is currently not supported for "
-+"downgrade and distro-sync commands"
-+msgstr "allow_vendor_change 被禁用。目前不支持 downgrade 和 distro-sync 命令"
-+
- #. TRANSLATORS: This is for a single package currently being downgraded.
- #: dnf/transaction.py:80
- msgctxt "currently"
-@@ -3958,164 +3942,196 @@ msgstr "运行脚本"
- msgid "Preparing"
- msgstr "准备中"
- 
--#: dnf/transaction_sr.py:60
-+#: dnf/transaction_sr.py:66
- #, python-brace-format
--msgid "Errors in \"{filename}\":"
--msgstr ""
-+msgid ""
-+"The following problems occurred while replaying the transaction from file "
-+"\"{filename}\":"
-+msgstr "在从文件 \"{filename}\" replay 事务时发生以下问题:"
- 
--#: dnf/transaction_sr.py:70
--#, python-brace-format
--msgid "Error in \"{filename}\": {error}"
--msgstr ""
-+#: dnf/transaction_sr.py:68
-+msgid "The following problems occurred while running a transaction:"
-+msgstr "运行事务时发生以下问题:"
- 
--#: dnf/transaction_sr.py:87
-+#: dnf/transaction_sr.py:89
- #, python-brace-format
- msgid "Invalid major version \"{major}\", number expected."
--msgstr ""
-+msgstr "无效的主版本 \"{major}\",需要是数字。"
- 
--#: dnf/transaction_sr.py:95
-+#: dnf/transaction_sr.py:97
- #, python-brace-format
- msgid "Invalid minor version \"{minor}\", number expected."
--msgstr ""
-+msgstr "无效的次版本 \"{minor}\",需要是数字。"
- 
--#: dnf/transaction_sr.py:101
-+#: dnf/transaction_sr.py:103
- #, python-brace-format
- msgid ""
- "Incompatible major version \"{major}\", supported major version is "
- "\"{major_supp}\"."
--msgstr ""
-+msgstr "不兼容的主版本 \"{major}\",支持的主版本是 \"{major_supp}\"。"
- 
--#: dnf/transaction_sr.py:244
-+#: dnf/transaction_sr.py:224
-+msgid ""
-+"Conflicting TransactionReplay arguments have been specified: filename, data"
-+msgstr "指定了有冲突的 TransactionReplay 参数: filename、data"
-+
-+#: dnf/transaction_sr.py:265
- #, python-brace-format
- msgid "Unexpected type of \"{id}\", {exp} expected."
--msgstr ""
-+msgstr "意外类型 \"{id}\",需要是 {exp}。"
- 
--#: dnf/transaction_sr.py:250
-+#: dnf/transaction_sr.py:271
- #, python-brace-format
- msgid "Missing key \"{key}\"."
--msgstr ""
-+msgstr "缺少键 \"{key}\"。"
- 
--#: dnf/transaction_sr.py:263
-+#: dnf/transaction_sr.py:285
- #, python-brace-format
- msgid "Missing object key \"{key}\" in an rpm."
--msgstr ""
-+msgstr "在 rpm 中缺少对象键 \"{key}\"。"
- 
--#: dnf/transaction_sr.py:267
-+#: dnf/transaction_sr.py:289
- #, python-brace-format
- msgid "Unexpected value of package reason \"{reason}\" for rpm nevra \"{nevra}\"."
--msgstr ""
-+msgstr "rpm nevra \"{reason}\" 的软件包原因 \"{nevra}\" 的值无效。"
- 
--#: dnf/transaction_sr.py:275
-+#: dnf/transaction_sr.py:297
- #, python-brace-format
- msgid "Cannot parse NEVRA for package \"{nevra}\"."
--msgstr ""
-+msgstr "无法为软件包 \"{nevra}\" 解析 NEVRA。"
- 
--#: dnf/transaction_sr.py:286
-+#: dnf/transaction_sr.py:321
- #, python-brace-format
- msgid "Cannot find rpm nevra \"{nevra}\"."
--msgstr ""
-+msgstr "无法找到 rpm nevra \"{nevra}\"。"
- 
--#: dnf/transaction_sr.py:301
--#, fuzzy, python-brace-format
--#| msgid "Package %s is already installed."
-+#: dnf/transaction_sr.py:336
-+#, python-brace-format
- msgid "Package \"{na}\" is already installed for action \"{action}\"."
--msgstr "软件包 %s 已安装。"
-+msgstr "已为操作 \"{action}\" 安装了软件包 \"{na}\"。"
- 
--#: dnf/transaction_sr.py:311
-+#: dnf/transaction_sr.py:345
- #, python-brace-format
- msgid ""
- "Package nevra \"{nevra}\" not available in repositories for action "
- "\"{action}\"."
--msgstr ""
-+msgstr "对于操作 \"{action}\",软件包 nevra \"{nevra}\" 没有包括在仓库中。"
- 
--#: dnf/transaction_sr.py:322
-+#: dnf/transaction_sr.py:356
- #, python-brace-format
- msgid "Package nevra \"{nevra}\" not installed for action \"{action}\"."
--msgstr ""
-+msgstr "没有为操作 \"{action}\" 安装软件包 nevra \"{nevra}\"。"
- 
--#: dnf/transaction_sr.py:336
-+#: dnf/transaction_sr.py:370
- #, python-brace-format
- msgid "Unexpected value of package action \"{action}\" for rpm nevra \"{nevra}\"."
--msgstr ""
-+msgstr "rpm nevra \"{action}\" 的软件包操作 \"{nevra}\" 无效。"
- 
--#: dnf/transaction_sr.py:343
--#, fuzzy, python-format
--#| msgid "Module or Group '%s' is not available."
-+#: dnf/transaction_sr.py:377
-+#, python-format
- msgid "Group id '%s' is not available."
--msgstr "模块或者组 '%s' 不可用。"
-+msgstr "组 id '%s' 不可用。"
- 
--#: dnf/transaction_sr.py:364
-+#: dnf/transaction_sr.py:398
- #, python-brace-format
- msgid "Missing object key \"{key}\" in groups.packages."
--msgstr ""
-+msgstr "在 groups.packages 中缺少对象键 \"{key}\"。"
- 
--#: dnf/transaction_sr.py:377 dnf/transaction_sr.py:387
--#, fuzzy, python-format
--#| msgid "Module or Group '%s' is not installed."
-+#: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421
-+#, python-format
- msgid "Group id '%s' is not installed."
--msgstr "模块或者组 '%s' 未安装。"
-+msgstr "组 id '%s' 没有安装。"
- 
--#: dnf/transaction_sr.py:398
--#, fuzzy, python-format
--#| msgid "Environment '%s' is not available."
-+#: dnf/transaction_sr.py:432
-+#, python-format
- msgid "Environment id '%s' is not available."
--msgstr "环境 '%s' 不可用。"
-+msgstr "环境 id '%s' 不可用。"
- 
--#: dnf/transaction_sr.py:422
-+#: dnf/transaction_sr.py:456
- #, python-brace-format
- msgid ""
- "Invalid value \"{group_type}\" of environments.groups.group_type, only "
- "\"mandatory\" or \"optional\" is supported."
- msgstr ""
-+"environments.groups.group_type 无效的值 \"{group_type}\",只支持 \"mandatory\" 或 "
-+"\"optional\"。"
- 
--#: dnf/transaction_sr.py:430
-+#: dnf/transaction_sr.py:464
- #, python-brace-format
- msgid "Missing object key \"{key}\" in environments.groups."
--msgstr ""
-+msgstr "在 environment.groups 中缺少对象键 \"{key}\"。"
- 
--#: dnf/transaction_sr.py:508
-+#: dnf/transaction_sr.py:542
- #, python-brace-format
- msgid "Unexpected value of group action \"{action}\" for group \"{group}\"."
--msgstr ""
-+msgstr "组 \"{action}\" 的组操作 \"{group}\" 的值无效。"
- 
--#: dnf/transaction_sr.py:513
-+#: dnf/transaction_sr.py:547
- #, python-brace-format
- msgid "Missing object key \"{key}\" in a group."
--msgstr ""
-+msgstr "在一个组中缺少对象键 \"{key}\"。"
- 
--#: dnf/transaction_sr.py:537
-+#: dnf/transaction_sr.py:571
- #, python-brace-format
- msgid "Unexpected value of environment action \"{action}\" for environment \"{env}\"."
--msgstr ""
-+msgstr "环境 \"{env}\" 的环境操作 \"{action}\" 的值无效。"
- 
--#: dnf/transaction_sr.py:542
-+#: dnf/transaction_sr.py:576
- #, python-brace-format
- msgid "Missing object key \"{key}\" in an environment."
--msgstr ""
-+msgstr "在环境中缺少对象键 \"{key}\"。"
- 
--#: dnf/transaction_sr.py:581
-+#: dnf/transaction_sr.py:615
- #, python-brace-format
- msgid ""
- "Package nevra \"{nevra}\", which is not present in the transaction file, was"
- " pulled into the transaction."
--msgstr ""
-+msgstr "软件包 nevra \"{nevra}\" 没有包括在事务文件中,但它被拉取到事务中。"
- 
--#: dnf/util.py:391 dnf/util.py:393
-+#: dnf/util.py:393 dnf/util.py:395
- msgid "Problem"
- msgstr "问题"
- 
--#: dnf/util.py:444
-+#: dnf/util.py:446
- msgid "TransactionItem not found for key: {}"
- msgstr "找不到键的 TransactionItem: {}"
- 
--#: dnf/util.py:454
-+#: dnf/util.py:456
- msgid "TransactionSWDBItem not found for key: {}"
- msgstr "找不到键的 TransactionSWDBItem: {}"
- 
--#: dnf/util.py:457
-+#: dnf/util.py:459
- msgid "Errors occurred during transaction."
- msgstr "事务过程中出现错误。"
- 
-+#: dnf/util.py:595
-+msgid "Reinstalled"
-+msgstr "已重装"
-+
-+#: dnf/util.py:596
-+msgid "Skipped"
-+msgstr "已跳过"
-+
-+#: dnf/util.py:597
-+msgid "Removed"
-+msgstr "已移除"
-+
-+#: dnf/util.py:600
-+msgid "Failed"
-+msgstr "失败"
-+
-+#~ msgid "Action not handled: {}"
-+#~ msgstr "操作没被处理:{}"
-+
-+#~ msgid "no package matched"
-+#~ msgstr "没有能够与之匹配的软件包"
-+
-+#~ msgid "Not found given transaction ID"
-+#~ msgstr "未找到指定事务 ID"
-+
-+#~ msgid "Undoing transaction {}, from {}"
-+#~ msgstr "撤销事务 {},从 {}"
-+
- #~ msgid "format for displaying found packages"
- #~ msgstr "用于显示已查找到软件包的格式"
- 
--- 
-2.29.2
-
diff --git a/SPECS/dnf.spec b/SPECS/dnf.spec
index 24d28b1..f4a9d29 100644
--- a/SPECS/dnf.spec
+++ b/SPECS/dnf.spec
@@ -1,11 +1,14 @@
+# Always build out-of-source
+%define __cmake_in_source_build 1
+
 # default dependencies
-%global hawkey_version 0.55.0-5
+%global hawkey_version 0.61.1
 %global libcomps_version 0.1.8
-%global libmodulemd_version 1.4.0
+%global libmodulemd_version 2.9.3
 %global rpm_version 4.14.2-35
 
 # conflicts
-%global conflicts_dnf_plugins_core_version 4.0.16
+%global conflicts_dnf_plugins_core_version 4.0.20
 %global conflicts_dnf_plugins_extras_version 4.0.4
 %global conflicts_dnfdaemon_version 0.3.19
 
@@ -24,19 +27,6 @@
 %endif
 
 
-%if 0%{?rhel} && 0%{?rhel} <= 7
-%bcond_with python3
-%else
-%bcond_without python3
-%endif
-
-%if 0%{?rhel} >= 8 || 0%{?fedora} > 29
-# Disable python2 build
-%bcond_with python2
-%else
-%bcond_without python2
-%endif
-
 # YUM compat subpackage configuration
 #
 # level=full    -> deploy all compat symlinks (conflicts with yum < 4)
@@ -64,13 +54,7 @@
 %global confdir %{_sysconfdir}/%{name}
 %global pluginconfpath %{confdir}/plugins
 
-%if %{with python2}
-    %global py2pluginpath %{python2_sitelib}/%{name}-plugins
-%endif
-
-%if %{with python3}
-    %global py3pluginpath %{python3_sitelib}/%{name}-plugins
-%endif
+%global py3pluginpath %{python3_sitelib}/%{name}-plugins
 
 # Use the same directory of the main package for subpackage licence and docs
 %global _docdir_fmt %{name}
@@ -81,53 +65,19 @@
 It supports RPMs, modules and comps groups & environments.
 
 Name:           dnf
-Version:        4.4.2
-Release:        11%{?dist}
+Version:        4.7.0
+Release:        4%{?dist}
 Summary:        %{pkg_summary}
 # For a breakdown of the licensing, see PACKAGE-LICENSING
-License:        GPLv2+ and GPLv2 and GPL
+License:        GPLv2+
 URL:            https://github.com/rpm-software-management/dnf
 Source0:        %{url}/archive/%{version}/%{name}-%{version}.tar.gz
-# https://github.com/rpm-software-management/dnf/commit/f6d1e4308769efaa6175f70d52bfd784c62fbf98
-Patch1:         0001-tests-SQL-write-a-readonly-folder.patch
-# https://github.com/rpm-software-management/dnf/commit/c2e4901cec947e5be2e5ff5afa22691841d00bdc
-Patch2:         0002-Revert-Fix-setopt-cachedir-writing-outside-of-installroot.patch
-# https://github.com/rpm-software-management/dnf/pull/1675
-Patch3:         0003-Post-transaction-summary-is-logged-for-API-users-RhBug-1855158.patch
-# https://github.com/rpm-software-management/dnf/pull/1698
-Patch4:         0004-Log-scriptlets-output-also-for-API-users-RhBug-1847340.patch
-# https://github.com/rpm-software-management/dnf/pull/1659
-# https://github.com/rpm-software-management/dnf/pull/1689
-# https://github.com/rpm-software-management/dnf/pull/1709
-# https://github.com/rpm-software-management/dnf/pull/1690
-Patch5:         0005-dnf-history-operations-that-work-with-comps-correctly.patch
-# https://github.com/rpm-software-management/dnf/pull/1691
-Patch6:         0006-Remove-sourcepackages-from-install-upgrade-set.patch
-# https://github.com/rpm-software-management/dnf/pull/1710
-Patch7:         0007-Fix-documentation-of-globs-not-supporting-curly-brackets.patch
-# https://github.com/rpm-software-management/dnf/pull/1685
-Patch8:         0008-Module-switch-command.patch
-# https://github.com/rpm-software-management/dnf/pull/1702
-Patch9:         0009-yum.misc.decompress-to-handle-uncompressed-files-RhBug-1895059.patch
-# https://github.com/rpm-software-management/dnf/pull/1693
-Patch10:        0010-Make-log-rotated-permissions-match-initial-log-permissions-RhBug-1894344.patch
-# https://github.com/rpm-software-management/dnf/pull/1692
-Patch11:        0011-Add-new-attribute-for-Package--from-repo.patch
-# https://github.com/rpm-software-management/dnf/pull/1695
-Patch12:        0012-Change-behaviour-of-Package-.from-repo.patch
-# https://github.com/rpm-software-management/dnf/pull/1686
-Patch13:        0013-Package-add-a-get-header--method.patch
-# https://github.com/rpm-software-management/dnf/pull/1703
-Patch14:        0014-Add-api-function-fill-sack-from-repos-in-cache-RhBug-1865803.patch
-# https://github.com/rpm-software-management/dnf/pull/1711
-Patch15:        0015-Add-tests-and-docs-for-fill-sack-from-repos-in-cache-RhBug-1865803.patch
-# https://github.com/rpm-software-management/dnf/pull/1721
-Patch16:        0016-Run-tests-for-fill-sack-from-repos-in-cache-in-installroot..patch
-#https://github.com/rpm-software-management/dnf/pull/1723
-Patch17:        0017-Set-persistdir-for-fill-sack-from-repos-in-cache-tests-RhBug-1865803.patch
-# https://github.com/rpm-software-management/dnf/pull/1725
-Patch18:        0018-Allow-stream-switching-if-option-enabled.patch
-Patch19:        0019-Update-translations.patch
+Patch1:         0001-Set-top-level-directory-for-unittest.patch
+Patch2:         0002-dnfrpmmiscutilspy-fix-usage-of-_.patch
+Patch3:         0003-Pass-the-package-to-rpmkeys-stdin.patch
+Patch4:         0004-Use-rpmkeys-alone-to-verify-signature.patch
+Patch5:         0005-Lower-_pkgverify_level-to-signature-for-signature-checking-with-rpmkeys.patch
+Patch6:         0006-Update-translations.patch
 
 BuildArch:      noarch
 BuildRequires:  cmake
@@ -135,22 +85,13 @@ BuildRequires:  gettext
 # Documentation
 BuildRequires:  systemd
 BuildRequires:  bash-completion
-%if %{with python3}
 BuildRequires:  %{_bindir}/sphinx-build-3
 Requires:       python3-%{name} = %{version}-%{release}
-%else
-BuildRequires:  %{_bindir}/sphinx-build
-Requires:       python2-%{name} = %{version}-%{release}
-%endif
 %if 0%{?rhel} && 0%{?rhel} <= 7
 Requires:       python-dbus
 Requires:       %{_bindir}/sqlite3
 %else
-%if %{with python3}
 Recommends:     (python3-dbus if NetworkManager)
-%else
-Recommends:     (python2-dbus if NetworkManager)
-%endif
 Recommends:     (%{_bindir}/sqlite3 if bash-completion)
 %endif
 Provides:       dnf-command(alias)
@@ -176,9 +117,7 @@ Provides:       dnf-command(search)
 Provides:       dnf-command(updateinfo)
 Provides:       dnf-command(upgrade)
 Provides:       dnf-command(upgrade-to)
-Conflicts:      python2-dnf-plugins-core < %{conflicts_dnf_plugins_core_version}
 Conflicts:      python3-dnf-plugins-core < %{conflicts_dnf_plugins_core_version}
-Conflicts:      python2-dnf-plugins-extras-common < %{conflicts_dnf_plugins_extras_version}
 Conflicts:      python3-dnf-plugins-extras-common < %{conflicts_dnf_plugins_extras_version}
 
 %description
@@ -208,55 +147,6 @@ Conflicts:      yum < 3.4.3-505
 %description -n %{yum_subpackage_name}
 %{pkg_description}
 
-%if %{with python2}
-%package -n python2-%{name}
-Summary:        Python 2 interface to DNF
-%{?python_provide:%python_provide python2-%{name}}
-BuildRequires:  python2-devel
-BuildRequires:  python2-hawkey >= %{hawkey_version}
-BuildRequires:  python2-libdnf >= %{hawkey_version}
-BuildRequires:  python2-libcomps >= %{libcomps_version}
-BuildRequires:  python2-libdnf
-BuildRequires:  python2-nose
-BuildRequires:  libmodulemd >= %{libmodulemd_version}
-Requires:       libmodulemd >= %{libmodulemd_version}
-%if (0%{?rhel} && 0%{?rhel} <= 7)
-BuildRequires:  pygpgme
-Requires:       pygpgme
-BuildRequires:  python-enum34
-Requires:       python-enum34
-%else
-BuildRequires:  python2-gpg
-Requires:       python2-gpg
-BuildRequires:  python2-enum34
-Requires:       python2-enum34
-%endif
-Requires:       %{name}-data = %{version}-%{release}
-%if 0%{?fedora}
-Recommends:     deltarpm
-# required for DNSSEC main.gpgkey_dns_verification https://dnf.readthedocs.io/en/latest/conf_ref.html
-Recommends:     python2-unbound
-%endif
-Requires:       python2-hawkey >= %{hawkey_version}
-Requires:       python2-libdnf >= %{hawkey_version}
-Requires:       python2-libcomps >= %{libcomps_version}
-Requires:       python2-libdnf
-%if 0%{?rhel} && 0%{?rhel} <= 7
-BuildRequires:  rpm-python >= %{rpm_version}
-Requires:       rpm-python >= %{rpm_version}
-%else
-BuildRequires:  python2-rpm >= %{rpm_version}
-Requires:       python2-rpm >= %{rpm_version}
-Recommends:     rpm-plugin-systemd-inhibit
-%endif
-Conflicts:      dnfdaemon < %{conflicts_dnfdaemon_version}
-
-%description -n python2-%{name}
-Python 2 interface to DNF.
-%endif
-# ^ %%{with python2}
-
-%if %{with python3}
 %package -n python3-%{name}
 Summary:        Python 3 interface to DNF
 %{?python_provide:%python_provide python3-%{name}}
@@ -267,7 +157,6 @@ BuildRequires:  python3-libcomps >= %{libcomps_version}
 BuildRequires:  python3-libdnf
 BuildRequires:  libmodulemd >= %{libmodulemd_version}
 Requires:       libmodulemd >= %{libmodulemd_version}
-BuildRequires:  python3-nose
 BuildRequires:  python3-gpg
 Requires:       python3-gpg
 Requires:       %{name}-data = %{version}-%{release}
@@ -290,7 +179,6 @@ Recommends:     rpm-plugin-systemd-inhibit
 
 %description -n python3-%{name}
 Python 3 interface to DNF.
-%endif
 
 %package automatic
 Summary:        %{pkg_summary} - automated upgrades
@@ -304,40 +192,22 @@ Systemd units that can periodically download package upgrades and apply them.
 
 %prep
 %autosetup -p1
-mkdir build-py2
-mkdir build-py3
 
+mkdir build-py3
 
 %build
-%if %{with python2}
-    pushd build-py2
-    %cmake .. -DPYTHON_DESIRED:FILEPATH=%{__python2} -DDNF_VERSION=%{version}
-    %make_build
-    make doc-man
-    popd
-%endif
-
-%if %{with python3}
-    pushd build-py3
-    %cmake .. -DPYTHON_DESIRED:FILEPATH=%{__python3} -DDNF_VERSION=%{version}
-    %make_build
-    make doc-man
-    popd
-%endif
 
+pushd build-py3
+%cmake .. -DPYTHON_DESIRED:FILEPATH=%{__python3} -DDNF_VERSION=%{version}
+%make_build
+make doc-man
+popd
 
 %install
-%if %{with python2}
-    pushd build-py2
-    %make_install
-    popd
-%endif
 
-%if %{with python3}
-    pushd build-py3
-    %make_install
-    popd
-%endif
+pushd build-py3
+%make_install
+popd
 
 %find_lang %{name}
 mkdir -p %{buildroot}%{confdir}/vars
@@ -345,22 +215,12 @@ mkdir -p %{buildroot}%{confdir}/aliases.d
 mkdir -p %{buildroot}%{pluginconfpath}/
 mkdir -p %{buildroot}%{_sysconfdir}/%{name}/modules.d
 mkdir -p %{buildroot}%{_sysconfdir}/%{name}/modules.defaults.d
-%if %{with python2}
-mkdir -p %{buildroot}%{py2pluginpath}/
-%endif
-%if %{with python3}
 mkdir -p %{buildroot}%{py3pluginpath}/__pycache__/
-%endif
 mkdir -p %{buildroot}%{_localstatedir}/log/
 mkdir -p %{buildroot}%{_var}/cache/dnf/
 touch %{buildroot}%{_localstatedir}/log/%{name}.log
-%if %{with python3}
 ln -sr %{buildroot}%{_bindir}/dnf-3 %{buildroot}%{_bindir}/dnf
 mv %{buildroot}%{_bindir}/dnf-automatic-3 %{buildroot}%{_bindir}/dnf-automatic
-%else
-ln -sr %{buildroot}%{_bindir}/dnf-2 %{buildroot}%{_bindir}/dnf
-mv %{buildroot}%{_bindir}/dnf-automatic-2 %{buildroot}%{_bindir}/dnf-automatic
-%endif
 rm -vf %{buildroot}%{_bindir}/dnf-automatic-*
 
 # Strict conf distribution
@@ -372,17 +232,7 @@ rm -vf %{buildroot}%{confdir}/%{name}-strict.conf
 
 # YUM compat layer
 ln -sr  %{buildroot}%{confdir}/%{name}.conf %{buildroot}%{_sysconfdir}/yum.conf
-%if %{with python3}
 ln -sr  %{buildroot}%{_bindir}/dnf-3 %{buildroot}%{_bindir}/yum
-%else
-%if "%{yum_compat_level}" == "preview"
-ln -sr  %{buildroot}%{_bindir}/dnf-2 %{buildroot}%{_bindir}/yum4
-ln -sr  %{buildroot}%{_mandir}/man8/dnf.8.gz %{buildroot}%{_mandir}/man8/yum4.8.gz
-rm -f %{buildroot}%{_mandir}/man8/yum.8.gz
-%else
-ln -sr  %{buildroot}%{_bindir}/dnf-2 %{buildroot}%{_bindir}/yum
-%endif
-%endif
 %if "%{yum_compat_level}" == "full"
 mkdir -p %{buildroot}%{_sysconfdir}/yum
 ln -sr  %{buildroot}%{pluginconfpath} %{buildroot}%{_sysconfdir}/yum/pluginconf.d
@@ -392,17 +242,10 @@ ln -sr  %{buildroot}%{confdir}/vars %{buildroot}%{_sysconfdir}/yum/vars
 
 
 %check
-%if %{with python2}
-    pushd build-py2
-    ctest -VV
-    popd
-%endif
 
-%if %{with python3}
-    pushd build-py3
-    ctest -VV
-    popd
-%endif
+pushd build-py3
+ctest -VV
+popd
 
 
 %post
@@ -512,22 +355,12 @@ ln -sr  %{buildroot}%{confdir}/vars %{buildroot}%{_sysconfdir}/yum/vars
 %exclude %{_mandir}/man8/yum.8*
 %endif
 
-%if %{with python2}
-%files -n python2-%{name}
-%{_bindir}/%{name}-2
-%exclude %{python2_sitelib}/%{name}/automatic
-%{python2_sitelib}/%{name}/
-%dir %{py2pluginpath}
-%endif
-
-%if %{with python3}
 %files -n python3-%{name}
 %{_bindir}/%{name}-3
 %exclude %{python3_sitelib}/%{name}/automatic
 %{python3_sitelib}/%{name}/
 %dir %{py3pluginpath}
 %dir %{py3pluginpath}/__pycache__
-%endif
 
 %files automatic
 %{_bindir}/%{name}-automatic
@@ -541,15 +374,48 @@ ln -sr  %{buildroot}%{confdir}/vars %{buildroot}%{_sysconfdir}/yum/vars
 %{_unitdir}/%{name}-automatic-download.timer
 %{_unitdir}/%{name}-automatic-install.service
 %{_unitdir}/%{name}-automatic-install.timer
-%if %{with python3}
 %{python3_sitelib}/%{name}/automatic/
-%else
-%{python2_sitelib}/%{name}/automatic/
-%endif
 
 %changelog
-* Mon Mar 8 2021 Marek Blaha <mblaha@redhat.com> - 4.4.2-11
-- Update translations
+* Mon Sep 13 2021 Marek Blaha <mblaha@redhat.com> - 4.7.0-4
+- Update translations (RhBug:1961632)
+
+* Mon Aug 16 2021 Pavla Kratochvilova <pkratoch@redhat.com> - 4.7.0-3
+- Improve signature checking using rpmkeys (RhBug:1967454)
+
+* Tue Jul 27 2021 Pavla Kratochvilova <pkratoch@redhat.com> - 4.7.0-2
+- Fix covscan issue: dnf/rpm/miscutils.py: fix usage of _()
+
+* Wed May 19 2021 Pavla Kratochvilova <pkratoch@redhat.com> - 4.7.0-1
+- Update to 4.7.0
+- New optional parameter for filter_modules enables following modular obsoletes based on a config option module_obsoletes
+- Fix module remove --all when no match spec (RhBug:1904490)
+- Make an error message more informative (RhBug:1814831)
+- Expand history to full term size when output is redirected (RhBug:1852577) (RhBug:1852577,1906970)
+- Print additional information when verifying GPG key using DNS
+- Enhanced detection of plugins removed in transaction (RhBug:1929163)
+- Improve repo config path ordering to fix a comps merging issue (RhBug:1928181)
+- Keep reason when package is removed (RhBug:1921063)
+- Improve mechanism for application of security filters (RhBug:1918475)
+- [API] Add new method for reset of security filters
+- Remove hardcoded logfile permissions (RhBug:1910084)
+- Preserve file mode during log rotation (RhBug:1910084)
+- Increase loglevel in case of invalid config options
+- Prevent traceback (catch ValueError) if pkg is from cmdline
+- Check for specific key string when verifing signatures (RhBug:1915990)
+- Use rpmkeys binary to verify package signature (RhBug:1915990)
+- [doc] Improve description of modular filtering
+- [doc] deprecated alias for dnf repoquery --deplist <deplist_option-label>
+- [doc] Describe install with just a name and obsoletes (RhBug:1902279)
+- [doc] Fix: "sslcacert" contains path to the file
+- [doc] Added proxy ssl configuration options, increase libdnf require
+- [doc] Update documentation for module_obsoletes and module_stream_switch
+- [doc] Improve documentation for Hotfix repositories
+- [doc] fix: "makecache" command downloads only enabled repositories
+- [doc] Add info that maximum parallel downloads is 20
+- [doc] installonly_limit documentation follows behavior
+- [doc] Add documentation for config option sslverifystatus (RhBug:1814383)
+- The noroot plugin no longer exists, remove mention
 
 * Thu Feb 11 2021 Nicola Sella <nsella@redhat.com> - 4.4.2-10
 - Allow stream switching if option enabled