From 052499692279b7eed967159ca5040312de1fe146 Mon Sep 17 00:00:00 2001 From: chantra Date: Jun 01 2022 19:51:17 +0000 Subject: Merge remote-tracking branch 'origin/c8s' into c8s-sig-hyperscale-experimental --- diff --git a/SOURCES/0001-Set-top-level-directory-for-unittest.patch b/SOURCES/0001-Set-top-level-directory-for-unittest.patch index 7bb4f80..7415b1f 100644 --- a/SOURCES/0001-Set-top-level-directory-for-unittest.patch +++ b/SOURCES/0001-Set-top-level-directory-for-unittest.patch @@ -1,4 +1,4 @@ -From 6eff0fe7850624791f049a17a41d779915f30f94 Mon Sep 17 00:00:00 2001 +From 423c987b6b14ec0a6277181ac7c038b50033296d Mon Sep 17 00:00:00 2001 From: Pavla Kratochvilova Date: Wed, 19 May 2021 12:58:30 +0200 Subject: [PATCH] Set top-level directory for unittest @@ -10,7 +10,7 @@ the sys.path and the tests fail. This fixes the issue. 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt -index 77a4894..b7f4031 100644 +index b15cc62b..dedc46fd 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,6 +1,6 @@ @@ -21,6 +21,6 @@ index 77a4894..b7f4031 100644 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) # For libdnf built with sanitizers, has no effect otherwise. --- -libgit2 1.0.1 +-- +2.35.1 diff --git a/SOURCES/0002-dnf-rpm-miscutils.py-fix-usage-of-_.patch b/SOURCES/0002-dnf-rpm-miscutils.py-fix-usage-of-_.patch new file mode 100644 index 0000000..e2afab0 --- /dev/null +++ b/SOURCES/0002-dnf-rpm-miscutils.py-fix-usage-of-_.patch @@ -0,0 +1,36 @@ +From 8522c4651678097157fd9f133a451c892021d30b Mon Sep 17 00:00:00 2001 +From: Alexander Kanavin +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 235aaf28..7e33d4c4 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: +-- +2.35.1 + diff --git a/SOURCES/0002-dnfrpmmiscutilspy-fix-usage-of-_.patch b/SOURCES/0002-dnfrpmmiscutilspy-fix-usage-of-_.patch deleted file mode 100644 index 0089bc6..0000000 --- a/SOURCES/0002-dnfrpmmiscutilspy-fix-usage-of-_.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 8823feb5f42f8c579fdab80d9e22112b88d0ad2b Mon Sep 17 00:00:00 2001 -From: Alexander Kanavin -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 index f8de68f..524db46 100644 --- a/SOURCES/0003-Pass-the-package-to-rpmkeys-stdin.patch +++ b/SOURCES/0003-Pass-the-package-to-rpmkeys-stdin.patch @@ -1,4 +1,4 @@ -From 134b095b0833956cadfc02a9a1e7ca1344cd5aaa Mon Sep 17 00:00:00 2001 +From f109c57ab18d8b1a80e707df3c3f7ad8930bdd42 Mon Sep 17 00:00:00 2001 From: Demi Marie Obenour Date: Tue, 27 Apr 2021 21:07:19 -0400 Subject: [PATCH] Pass the package to rpmkeys stdin @@ -10,7 +10,7 @@ always be the constant "-: digests signatures OK\n". 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dnf/rpm/miscutils.py b/dnf/rpm/miscutils.py -index 7e33d4c..5f2621c 100644 +index 7e33d4c4..5f2621c2 100644 --- a/dnf/rpm/miscutils.py +++ b/dnf/rpm/miscutils.py @@ -29,7 +29,8 @@ from shutil import which @@ -51,6 +51,6 @@ index 7e33d4c..5f2621c 100644 value = 0 else: raise ValueError('Unexpected return value %r from hdr.sprintf when checking signature.' % siginfo) --- -libgit2 1.0.1 +-- +2.35.1 diff --git a/SOURCES/0004-Use-rpmkeys-alone-to-verify-signature.patch b/SOURCES/0004-Use-rpmkeys-alone-to-verify-signature.patch index 73daa7e..ceb0f7c 100644 --- a/SOURCES/0004-Use-rpmkeys-alone-to-verify-signature.patch +++ b/SOURCES/0004-Use-rpmkeys-alone-to-verify-signature.patch @@ -1,4 +1,4 @@ -From a21880fbac479968546304beeeae3ed3bb899373 Mon Sep 17 00:00:00 2001 +From 9798e9ee85f1ba39c816fa08fd3d6168cc8b29e8 Mon Sep 17 00:00:00 2001 From: Demi Marie Obenour Date: Fri, 9 Apr 2021 13:03:03 -0400 Subject: [PATCH] Use rpmkeys alone to verify signature @@ -7,14 +7,14 @@ 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 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------ + 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 +index 5f2621c2..9d5b2860 100644 --- a/dnf/rpm/miscutils.py +++ b/dnf/rpm/miscutils.py -@@ -13,90 +13,96 @@ +@@ -13,47 +13,84 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # Copyright 2003 Duke University @@ -124,9 +124,7 @@ index 5f2621c..9d5b286 100644 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 +@@ -63,40 +100,9 @@ def checkSig(ts, package): return 3 if the key is not trusted return 4 if the pkg is not gpg or pgp signed""" @@ -171,6 +169,6 @@ index 5f2621c..9d5b286 100644 + finally: + os.close(fdno) return value --- -libgit2 1.0.1 +-- +2.35.1 diff --git a/SOURCES/0005-Lower-_pkgverify_level-to-signature-for-signature-ch.patch b/SOURCES/0005-Lower-_pkgverify_level-to-signature-for-signature-ch.patch new file mode 100644 index 0000000..e2eda7d --- /dev/null +++ b/SOURCES/0005-Lower-_pkgverify_level-to-signature-for-signature-ch.patch @@ -0,0 +1,37 @@ +From 185330e5d5f5e07f40ed08c706fd997abffd5e78 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +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 9d5b2860..46ef4754 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, +-- +2.35.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 deleted file mode 100644 index f30ae63..0000000 --- a/SOURCES/0005-Lower-_pkgverify_level-to-signature-for-signature-checking-with-rpmkeys.patch +++ /dev/null @@ -1,36 +0,0 @@ -From b05f4589e4afb69240ae2001246a5ffb5d6b1b90 Mon Sep 17 00:00:00 2001 -From: Aleš Matěj -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/0006-Add-default-colors-to-documentation.patch b/SOURCES/0006-Add-default-colors-to-documentation.patch deleted file mode 100644 index aa773c2..0000000 --- a/SOURCES/0006-Add-default-colors-to-documentation.patch +++ /dev/null @@ -1,200 +0,0 @@ -From 6766d3af1993d48f5548746e68268e674e52bd1d Mon Sep 17 00:00:00 2001 -From: Gary Leydon -Date: Fri, 21 May 2021 14:13:59 -0400 -Subject: [PATCH 1/3] add default colors to documentation - ---- - doc/conf_ref.rst | 24 ++++++++++++------------ - 1 file changed, 12 insertions(+), 12 deletions(-) - -diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst -index ec5bac2ab..fcaa0319f 100644 ---- a/doc/conf_ref.rst -+++ b/doc/conf_ref.rst -@@ -498,72 +498,72 @@ configuration file by your distribution to override the DNF defaults. - :ref:`color ` - - Color of available packages that are older than installed packages. -- The option is used during list operations. -+ The option is used during list operations. Default is dim,cyan. - - ``color_list_available_install`` - :ref:`color ` - - Color of packages that are available for installation and none of their versions in installed. -- The option is used during list operations. -+ The option is used during list operations. Default is normal. - - ``color_list_available_reinstall`` - :ref:`color ` - -- Color of available packages that are identical to installed versions and are available for reinstalls. -+ Color of available packages that are identical to installed versions and are available for reinstalls. Default is bold,underline,green. - The option is used during list operations. - - ``color_list_available_upgrade`` - :ref:`color ` - -- Color of available packages that are newer than installed packages. -+ Color of available packages that are newer than installed packages. Default is bold,blue. - The option is used during list operations. - - ``color_list_installed_extra`` - :ref:`color ` - - Color of installed packages that do not have any version among available packages. -- The option is used during list operations. -+ The option is used during list operations. Default is bold,red. - - ``color_list_installed_newer`` - :ref:`color ` - - Color of installed packages that are newer than any version among available packages. -- The option is used during list operations. -+ The option is used during list operations. Default is bold,yellow. - - ``color_list_installed_older`` - :ref:`color ` - - Color of installed packages that are older than any version among available packages. -- The option is used during list operations. -+ The option is used during list operations. Default is bold. - - ``color_list_installed_reinstall`` - :ref:`color ` - - Color of installed packages that are among available packages and can be reinstalled. -- The option is used during list operations. -+ The option is used during list operations. Default is normal. - - ``color_search_match`` - :ref:`color ` - -- Color of patterns matched in search output. -+ Color of patterns matched in search output. Default is bold. - - ``color_update_installed`` - :ref:`color ` - -- Color of removed packages. -+ Color of removed packages. Default is normal. - This option is used during displaying transactions. - - ``color_update_local`` - :ref:`color ` - - Color of local packages that are installed from the @commandline repository. -- This option is used during displaying transactions. -+ This option is used during displaying transactions. Default is bold. - - ``color_update_remote`` - :ref:`color ` - - Color of packages that are installed/upgraded/downgraded from remote repositories. -- This option is used during displaying transactions. -+ This option is used during displaying transactions. Default is normal. - - - ============== --- -2.31.1 - - -From 276e3b1d19bfad2a72f75ecbcce478e4f1e575db Mon Sep 17 00:00:00 2001 -From: Gary Leydon -Date: Fri, 21 May 2021 14:16:21 -0400 -Subject: [PATCH 2/3] add author - ---- - AUTHORS | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/AUTHORS b/AUTHORS -index 1981dc4e7..f8c9eb832 100644 ---- a/AUTHORS -+++ b/AUTHORS -@@ -95,3 +95,4 @@ DNF CONTRIBUTORS - Vladan Kudlac - Will Woods - Furkan Karcıoğlu -+ Gary Leydon --- -2.31.1 - - -From 5cfe87de2ecd645c2aa8b210bd98171e8dd72fe5 Mon Sep 17 00:00:00 2001 -From: Gary Leydon -Date: Thu, 27 May 2021 11:52:42 -0400 -Subject: [PATCH 3/3] update colors according to - libdnf/libdnf/conf/ConfigMain.cpp - ---- - doc/conf_ref.rst | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) - -diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst -index fcaa0319f..016bd00c2 100644 ---- a/doc/conf_ref.rst -+++ b/doc/conf_ref.rst -@@ -498,13 +498,13 @@ configuration file by your distribution to override the DNF defaults. - :ref:`color ` - - Color of available packages that are older than installed packages. -- The option is used during list operations. Default is dim,cyan. -+ The option is used during list operations. Default is magenta. - - ``color_list_available_install`` - :ref:`color ` - - Color of packages that are available for installation and none of their versions in installed. -- The option is used during list operations. Default is normal. -+ The option is used during list operations. Default is bold,cyan. - - ``color_list_available_reinstall`` - :ref:`color ` -@@ -534,36 +534,36 @@ configuration file by your distribution to override the DNF defaults. - :ref:`color ` - - Color of installed packages that are older than any version among available packages. -- The option is used during list operations. Default is bold. -+ The option is used during list operations. Default is yellow. - - ``color_list_installed_reinstall`` - :ref:`color ` - - Color of installed packages that are among available packages and can be reinstalled. -- The option is used during list operations. Default is normal. -+ The option is used during list operations. Default is cyan. - - ``color_search_match`` - :ref:`color ` - -- Color of patterns matched in search output. Default is bold. -+ Color of patterns matched in search output. Default is bold,magenta. - - ``color_update_installed`` - :ref:`color ` - -- Color of removed packages. Default is normal. -+ Color of removed packages. Default is red. - This option is used during displaying transactions. - - ``color_update_local`` - :ref:`color ` - - Color of local packages that are installed from the @commandline repository. -- This option is used during displaying transactions. Default is bold. -+ This option is used during displaying transactions. Default is green. - - ``color_update_remote`` - :ref:`color ` - - Color of packages that are installed/upgraded/downgraded from remote repositories. -- This option is used during displaying transactions. Default is normal. -+ This option is used during displaying transactions. Default is bold,green. - - - ============== --- -2.31.1 - diff --git a/SOURCES/0006-add-default-colors-to-documentation.patch b/SOURCES/0006-add-default-colors-to-documentation.patch new file mode 100644 index 0000000..c6ff209 --- /dev/null +++ b/SOURCES/0006-add-default-colors-to-documentation.patch @@ -0,0 +1,101 @@ +From 6766d3af1993d48f5548746e68268e674e52bd1d Mon Sep 17 00:00:00 2001 +From: Gary Leydon +Date: Fri, 21 May 2021 14:13:59 -0400 +Subject: [PATCH] add default colors to documentation + +--- + doc/conf_ref.rst | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst +index ec5bac2a..fcaa0319 100644 +--- a/doc/conf_ref.rst ++++ b/doc/conf_ref.rst +@@ -498,72 +498,72 @@ configuration file by your distribution to override the DNF defaults. + :ref:`color ` + + Color of available packages that are older than installed packages. +- The option is used during list operations. ++ The option is used during list operations. Default is dim,cyan. + + ``color_list_available_install`` + :ref:`color ` + + Color of packages that are available for installation and none of their versions in installed. +- The option is used during list operations. ++ The option is used during list operations. Default is normal. + + ``color_list_available_reinstall`` + :ref:`color ` + +- Color of available packages that are identical to installed versions and are available for reinstalls. ++ Color of available packages that are identical to installed versions and are available for reinstalls. Default is bold,underline,green. + The option is used during list operations. + + ``color_list_available_upgrade`` + :ref:`color ` + +- Color of available packages that are newer than installed packages. ++ Color of available packages that are newer than installed packages. Default is bold,blue. + The option is used during list operations. + + ``color_list_installed_extra`` + :ref:`color ` + + Color of installed packages that do not have any version among available packages. +- The option is used during list operations. ++ The option is used during list operations. Default is bold,red. + + ``color_list_installed_newer`` + :ref:`color ` + + Color of installed packages that are newer than any version among available packages. +- The option is used during list operations. ++ The option is used during list operations. Default is bold,yellow. + + ``color_list_installed_older`` + :ref:`color ` + + Color of installed packages that are older than any version among available packages. +- The option is used during list operations. ++ The option is used during list operations. Default is bold. + + ``color_list_installed_reinstall`` + :ref:`color ` + + Color of installed packages that are among available packages and can be reinstalled. +- The option is used during list operations. ++ The option is used during list operations. Default is normal. + + ``color_search_match`` + :ref:`color ` + +- Color of patterns matched in search output. ++ Color of patterns matched in search output. Default is bold. + + ``color_update_installed`` + :ref:`color ` + +- Color of removed packages. ++ Color of removed packages. Default is normal. + This option is used during displaying transactions. + + ``color_update_local`` + :ref:`color ` + + Color of local packages that are installed from the @commandline repository. +- This option is used during displaying transactions. ++ This option is used during displaying transactions. Default is bold. + + ``color_update_remote`` + :ref:`color ` + + Color of packages that are installed/upgraded/downgraded from remote repositories. +- This option is used during displaying transactions. ++ This option is used during displaying transactions. Default is normal. + + + ============== +-- +2.35.1 + diff --git a/SOURCES/0007-Fix-reporting-irrecoverable-errors-on-packages-download.patch b/SOURCES/0007-Fix-reporting-irrecoverable-errors-on-packages-download.patch deleted file mode 100644 index 12f3972..0000000 --- a/SOURCES/0007-Fix-reporting-irrecoverable-errors-on-packages-download.patch +++ /dev/null @@ -1,81 +0,0 @@ -From f5cb86b83aedaa18fd784d06d8f1479b9127c6f5 Mon Sep 17 00:00:00 2001 -From: Marek Blaha -Date: Wed, 6 Oct 2021 09:43:37 +0200 -Subject: [PATCH] Fix reporting irrecoverable errors on packages download - -The original _irrecoverable property returns random dictionary - either -packages irrecoverable errors, or global fatal error or even new empty -dictionary. This makes it prone to programmer errors like: - -errs._irrecoverable[pkg] = [err] - -which may lead to setting the error into the newly created empty -dictionary instead of packages errors dictionary as intended. - -I turned the property to method which I consider more clear. ---- - dnf/base.py | 8 ++++---- - dnf/repo.py | 9 ++++----- - 2 files changed, 8 insertions(+), 9 deletions(-) - -diff --git a/dnf/base.py b/dnf/base.py -index 0949ddf..b0a378c 100644 ---- a/dnf/base.py -+++ b/dnf/base.py -@@ -1165,8 +1165,8 @@ class Base(object): - progress.start(len(payloads), est_remote_size) - errors = dnf.repo._download_payloads(payloads, drpm) - -- if errors._irrecoverable: -- raise dnf.exceptions.DownloadError(errors._irrecoverable) -+ if errors._irrecoverable(): -+ raise dnf.exceptions.DownloadError(errors._irrecoverable()) - - remote_size = sum(errors._bandwidth_used(pload) - for pload in payloads) -@@ -1191,8 +1191,8 @@ class Base(object): - progress.start(len(payloads), est_remote_size) - errors = dnf.repo._download_payloads(payloads, drpm) - -- if errors._irrecoverable: -- raise dnf.exceptions.DownloadError(errors._irrecoverable) -+ if errors._irrecoverable(): -+ raise dnf.exceptions.DownloadError(errors._irrecoverable()) - - remote_size += \ - sum(errors._bandwidth_used(pload) for pload in payloads) -diff --git a/dnf/repo.py b/dnf/repo.py -index b5c9849..b454e98 100644 ---- a/dnf/repo.py -+++ b/dnf/repo.py -@@ -112,7 +112,7 @@ def _download_payloads(payloads, drpm): - errs._skipped.add(pkg) - continue - pkg.repo._repo.expire() -- errs._irrecoverable[pkg] = [err] -+ errs._pkg_irrecoverable[pkg] = [err] - - return errs - -@@ -131,15 +131,14 @@ def _update_saving(saving, payloads, errs): - - class _DownloadErrors(object): - def __init__(self): -- self._val_irrecoverable = {} -+ self._pkg_irrecoverable = {} - self._val_recoverable = {} - self._fatal = None - self._skipped = set() - -- @property - def _irrecoverable(self): -- if self._val_irrecoverable: -- return self._val_irrecoverable -+ if self._pkg_irrecoverable: -+ return self._pkg_irrecoverable - if self._fatal: - return {'': [self._fatal]} - return {} --- -libgit2 1.0.1 - diff --git a/SOURCES/0007-add-author.patch b/SOURCES/0007-add-author.patch new file mode 100644 index 0000000..f2808d2 --- /dev/null +++ b/SOURCES/0007-add-author.patch @@ -0,0 +1,21 @@ +From 276e3b1d19bfad2a72f75ecbcce478e4f1e575db Mon Sep 17 00:00:00 2001 +From: Gary Leydon +Date: Fri, 21 May 2021 14:16:21 -0400 +Subject: [PATCH] add author + +--- + AUTHORS | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/AUTHORS b/AUTHORS +index 1981dc4e..f8c9eb83 100644 +--- a/AUTHORS ++++ b/AUTHORS +@@ -95,3 +95,4 @@ DNF CONTRIBUTORS + Vladan Kudlac + Will Woods + Furkan Karcıoğlu ++ Gary Leydon +-- +2.35.1 + diff --git a/SOURCES/0008-Add-fail_fast-parameter-to-download_payloads-methods.patch b/SOURCES/0008-Add-fail_fast-parameter-to-download_payloads-methods.patch deleted file mode 100644 index 6c01254..0000000 --- a/SOURCES/0008-Add-fail_fast-parameter-to-download_payloads-methods.patch +++ /dev/null @@ -1,70 +0,0 @@ -From ca3d7f06c8f4c1c901dc853ac33c06976b46c61e Mon Sep 17 00:00:00 2001 -From: Marek Blaha -Date: Wed, 6 Oct 2021 09:56:05 +0200 -Subject: [PATCH] Add fail_fast parameter to download_payloads methods - -Unlike in the rpm transaction, reposync needs to switch the fail_fast -off to download as much packages from repository as possible. ---- - dnf/base.py | 6 +++--- - dnf/repo.py | 4 ++-- - 2 files changed, 5 insertions(+), 5 deletions(-) - -diff --git a/dnf/base.py b/dnf/base.py -index b0a378c..c258a5a 100644 ---- a/dnf/base.py -+++ b/dnf/base.py -@@ -1151,7 +1151,7 @@ class Base(object): - timer() - self._trans_success = True - -- def _download_remote_payloads(self, payloads, drpm, progress, callback_total): -+ def _download_remote_payloads(self, payloads, drpm, progress, callback_total, fail_fast=True): - lock = dnf.lock.build_download_lock(self.conf.cachedir, self.conf.exit_on_lock) - with lock: - beg_download = time.time() -@@ -1163,7 +1163,7 @@ class Base(object): - progress.start(len(payloads), est_remote_size, total_drpms=total_drpm) - else: - progress.start(len(payloads), est_remote_size) -- errors = dnf.repo._download_payloads(payloads, drpm) -+ errors = dnf.repo._download_payloads(payloads, drpm, fail_fast) - - if errors._irrecoverable(): - raise dnf.exceptions.DownloadError(errors._irrecoverable()) -@@ -1189,7 +1189,7 @@ class Base(object): - est_remote_size = sum(pload.download_size - for pload in payloads) - progress.start(len(payloads), est_remote_size) -- errors = dnf.repo._download_payloads(payloads, drpm) -+ errors = dnf.repo._download_payloads(payloads, drpm, fail_fast) - - if errors._irrecoverable(): - raise dnf.exceptions.DownloadError(errors._irrecoverable()) -diff --git a/dnf/repo.py b/dnf/repo.py -index b454e98..bb42230 100644 ---- a/dnf/repo.py -+++ b/dnf/repo.py -@@ -84,17 +84,17 @@ def _pkg2payload(pkg, progress, *factories): - raise ValueError(_('no matching payload factory for %s') % pkg) - - --def _download_payloads(payloads, drpm): -+def _download_payloads(payloads, drpm, fail_fast=True): - # download packages - def _download_sort_key(payload): - return not hasattr(payload, 'delta') - - drpm.err.clear() - targets = [pload._librepo_target() - for pload in sorted(payloads, key=_download_sort_key)] - errs = _DownloadErrors() - try: -- libdnf.repo.PackageTarget.downloadPackages(libdnf.repo.VectorPPackageTarget(targets), True) -+ libdnf.repo.PackageTarget.downloadPackages(libdnf.repo.VectorPPackageTarget(targets), fail_fast) - except RuntimeError as e: - errs._fatal = str(e) - drpm.wait() --- -libgit2 1.0.1 - diff --git a/SOURCES/0008-update-colors-according-to-libdnf-libdnf-conf-Config.patch b/SOURCES/0008-update-colors-according-to-libdnf-libdnf-conf-Config.patch new file mode 100644 index 0000000..dd48060 --- /dev/null +++ b/SOURCES/0008-update-colors-according-to-libdnf-libdnf-conf-Config.patch @@ -0,0 +1,75 @@ +From 5cfe87de2ecd645c2aa8b210bd98171e8dd72fe5 Mon Sep 17 00:00:00 2001 +From: Gary Leydon +Date: Thu, 27 May 2021 11:52:42 -0400 +Subject: [PATCH] update colors according to libdnf/libdnf/conf/ConfigMain.cpp + +--- + doc/conf_ref.rst | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst +index fcaa0319..016bd00c 100644 +--- a/doc/conf_ref.rst ++++ b/doc/conf_ref.rst +@@ -498,13 +498,13 @@ configuration file by your distribution to override the DNF defaults. + :ref:`color ` + + Color of available packages that are older than installed packages. +- The option is used during list operations. Default is dim,cyan. ++ The option is used during list operations. Default is magenta. + + ``color_list_available_install`` + :ref:`color ` + + Color of packages that are available for installation and none of their versions in installed. +- The option is used during list operations. Default is normal. ++ The option is used during list operations. Default is bold,cyan. + + ``color_list_available_reinstall`` + :ref:`color ` +@@ -534,36 +534,36 @@ configuration file by your distribution to override the DNF defaults. + :ref:`color ` + + Color of installed packages that are older than any version among available packages. +- The option is used during list operations. Default is bold. ++ The option is used during list operations. Default is yellow. + + ``color_list_installed_reinstall`` + :ref:`color ` + + Color of installed packages that are among available packages and can be reinstalled. +- The option is used during list operations. Default is normal. ++ The option is used during list operations. Default is cyan. + + ``color_search_match`` + :ref:`color ` + +- Color of patterns matched in search output. Default is bold. ++ Color of patterns matched in search output. Default is bold,magenta. + + ``color_update_installed`` + :ref:`color ` + +- Color of removed packages. Default is normal. ++ Color of removed packages. Default is red. + This option is used during displaying transactions. + + ``color_update_local`` + :ref:`color ` + + Color of local packages that are installed from the @commandline repository. +- This option is used during displaying transactions. Default is bold. ++ This option is used during displaying transactions. Default is green. + + ``color_update_remote`` + :ref:`color ` + + Color of packages that are installed/upgraded/downgraded from remote repositories. +- This option is used during displaying transactions. Default is normal. ++ This option is used during displaying transactions. Default is bold,green. + + + ============== +-- +2.35.1 + diff --git a/SOURCES/0009-Fix-reporting-irrecoverable-errors-on-packages-downl.patch b/SOURCES/0009-Fix-reporting-irrecoverable-errors-on-packages-downl.patch new file mode 100644 index 0000000..5024802 --- /dev/null +++ b/SOURCES/0009-Fix-reporting-irrecoverable-errors-on-packages-downl.patch @@ -0,0 +1,81 @@ +From f5cb86b83aedaa18fd784d06d8f1479b9127c6f5 Mon Sep 17 00:00:00 2001 +From: Marek Blaha +Date: Wed, 6 Oct 2021 09:43:37 +0200 +Subject: [PATCH] Fix reporting irrecoverable errors on packages download + +The original _irrecoverable property returns random dictionary - either +packages irrecoverable errors, or global fatal error or even new empty +dictionary. This makes it prone to programmer errors like: + +errs._irrecoverable[pkg] = [err] + +which may lead to setting the error into the newly created empty +dictionary instead of packages errors dictionary as intended. + +I turned the property to method which I consider more clear. +--- + dnf/base.py | 8 ++++---- + dnf/repo.py | 9 ++++----- + 2 files changed, 8 insertions(+), 9 deletions(-) + +diff --git a/dnf/base.py b/dnf/base.py +index 0949ddf8..b0a378c2 100644 +--- a/dnf/base.py ++++ b/dnf/base.py +@@ -1165,8 +1165,8 @@ class Base(object): + progress.start(len(payloads), est_remote_size) + errors = dnf.repo._download_payloads(payloads, drpm) + +- if errors._irrecoverable: +- raise dnf.exceptions.DownloadError(errors._irrecoverable) ++ if errors._irrecoverable(): ++ raise dnf.exceptions.DownloadError(errors._irrecoverable()) + + remote_size = sum(errors._bandwidth_used(pload) + for pload in payloads) +@@ -1191,8 +1191,8 @@ class Base(object): + progress.start(len(payloads), est_remote_size) + errors = dnf.repo._download_payloads(payloads, drpm) + +- if errors._irrecoverable: +- raise dnf.exceptions.DownloadError(errors._irrecoverable) ++ if errors._irrecoverable(): ++ raise dnf.exceptions.DownloadError(errors._irrecoverable()) + + remote_size += \ + sum(errors._bandwidth_used(pload) for pload in payloads) +diff --git a/dnf/repo.py b/dnf/repo.py +index b5c9849e..b454e981 100644 +--- a/dnf/repo.py ++++ b/dnf/repo.py +@@ -112,7 +112,7 @@ def _download_payloads(payloads, drpm): + errs._skipped.add(pkg) + continue + pkg.repo._repo.expire() +- errs._irrecoverable[pkg] = [err] ++ errs._pkg_irrecoverable[pkg] = [err] + + return errs + +@@ -131,15 +131,14 @@ def _update_saving(saving, payloads, errs): + + class _DownloadErrors(object): + def __init__(self): +- self._val_irrecoverable = {} ++ self._pkg_irrecoverable = {} + self._val_recoverable = {} + self._fatal = None + self._skipped = set() + +- @property + def _irrecoverable(self): +- if self._val_irrecoverable: +- return self._val_irrecoverable ++ if self._pkg_irrecoverable: ++ return self._pkg_irrecoverable + if self._fatal: + return {'': [self._fatal]} + return {} +-- +2.35.1 + diff --git a/SOURCES/0009-comps-Make-the-install_or_skip-method-not-catch-CompsError-anymore.patch b/SOURCES/0009-comps-Make-the-install_or_skip-method-not-catch-CompsError-anymore.patch deleted file mode 100644 index 42a06db..0000000 --- a/SOURCES/0009-comps-Make-the-install_or_skip-method-not-catch-CompsError-anymore.patch +++ /dev/null @@ -1,138 +0,0 @@ -From f0f037db8219b1e74be4ed86f5eea53b63ca1d88 Mon Sep 17 00:00:00 2001 -From: Lukáš Hrázký -Date: Tue, 20 Jul 2021 15:29:59 +0200 -Subject: [PATCH] comps: Make the install_or_skip() method not catch CompsError anymore - -According to its docstring, the original intention of the method was to -not fail on installing an already installed group/environment. - -However, the CompsError is no longer thrown when attempting to install -an already installed group or environment. It was changed to logging a -warning directly in 5210b9dc and then the check was removed completely -in 217ca0fa. - -For the other case for which an instance of CompsError can be thrown -from the install_group() and install_environment() methods, which is -when a group or environment is not found, we certainly want to throw an -error (see the linked bugs), therefore there's no reason to catch the -exception anymore. - -The install_or_skip() method is preserved as part of the API so as not -to break compatibility any more than necessary. - -msg: API: Raise CompsError when group/env not found in install_group and install_environment -type: bugfix -resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1947958 -related: https://bugzilla.redhat.com/show_bug.cgi?id=1943206 ---- - dnf/base.py | 8 ++------ - dnf/cli/commands/group.py | 4 ++-- - dnf/comps.py | 20 ++++++++++---------- - doc/api_base.rst | 4 ++-- - 4 files changed, 16 insertions(+), 20 deletions(-) - -diff --git a/dnf/base.py b/dnf/base.py -index c258a5a..babca31 100644 ---- a/dnf/base.py -+++ b/dnf/base.py -@@ -1668,9 +1668,7 @@ class Base(object): - if not isinstance(types, int): - types = libdnf.transaction.listToCompsPackageType(types) - -- trans = dnf.comps.install_or_skip(solver._environment_install, -- env_id, types, exclude or set(), -- strict, exclude_groups) -+ trans = solver._environment_install(env_id, types, exclude or set(), strict, exclude_groups) - if not trans: - return 0 - return self._add_comps_trans(trans) -@@ -1713,9 +1711,7 @@ class Base(object): - if not isinstance(pkg_types, int): - pkg_types = libdnf.transaction.listToCompsPackageType(pkg_types) - -- trans = dnf.comps.install_or_skip(solver._group_install, -- grp_id, pkg_types, exclude_pkgnames, -- strict) -+ trans = solver._group_install(grp_id, pkg_types, exclude_pkgnames, strict) - if not trans: - return 0 - if strict: -diff --git a/dnf/cli/commands/group.py b/dnf/cli/commands/group.py -index cf54279..fd723c4 100644 ---- a/dnf/cli/commands/group.py -+++ b/dnf/cli/commands/group.py -@@ -244,9 +244,9 @@ class GroupCommand(commands.Command): - types = tuple(self.base.conf.group_package_types) - pkg_types = libdnf.transaction.listToCompsPackageType(types) - for env_id in res.environments: -- dnf.comps.install_or_skip(solver._environment_install, env_id, pkg_types) -+ solver._environment_install(env_id, pkg_types) - for group_id in res.groups: -- dnf.comps.install_or_skip(solver._group_install, group_id, pkg_types) -+ solver._group_install(group_id, pkg_types) - - def _mark_remove(self, patterns): - q = CompsQuery(self.base.comps, self.base.history, -diff --git a/dnf/comps.py b/dnf/comps.py -index 8976533..461eb27 100644 ---- a/dnf/comps.py -+++ b/dnf/comps.py -@@ -93,15 +93,15 @@ def _fn_display_order(group): - - def install_or_skip(install_fnc, grp_or_env_id, types, exclude=None, - strict=True, exclude_groups=None): -- """Either mark in persistor as installed given `grp_or_env` (group -- or environment) or skip it (if it's already installed). -- `install_fnc` has to be Solver._group_install -- or Solver._environment_install. -- """ -- try: -- return install_fnc(grp_or_env_id, types, exclude, strict, exclude_groups) -- except dnf.comps.CompsError as e: -- logger.warning("%s, %s", ucd(e)[:-1], _("skipping.")) -+ """ -+ Installs a group or an environment identified by grp_or_env_id. -+ This method is preserved for API compatibility. It used to catch an -+ exception thrown when a gorup or env was already installed, which is no -+ longer thrown. -+ `install_fnc` has to be Solver._group_install or -+ Solver._environment_install. -+ """ -+ return install_fnc(grp_or_env_id, types, exclude, strict, exclude_groups) - - - class _Langs(object): -@@ -592,7 +592,7 @@ class Solver(object): - assert dnf.util.is_string_type(group_id) - return self.history.env.is_removable_group(group_id) - -- def _environment_install(self, env_id, pkg_types, exclude, strict=True, exclude_groups=None): -+ def _environment_install(self, env_id, pkg_types, exclude=None, strict=True, exclude_groups=None): - assert dnf.util.is_string_type(env_id) - comps_env = self.comps._environment_by_id(env_id) - if not comps_env: -diff --git a/doc/api_base.rst b/doc/api_base.rst -index 20d7945..03396b6 100644 ---- a/doc/api_base.rst -+++ b/doc/api_base.rst -@@ -179,7 +179,7 @@ - - .. method:: group_install(group_id, pkg_types, exclude=None, strict=True) - -- Mark group with corresponding `group_id` installed and mark the packages in the group for installation. Return the number of packages that the operation has marked for installation. `pkg_types` is a sequence of strings determining the kinds of packages to be installed, where the respective groups can be selected by including ``"mandatory"``, ``"default"`` or ``"optional"`` in it. If `exclude` is given, it has to be an iterable of package name glob patterns: :meth:`.group_install` will then not mark the respective packages for installation whenever possible. Parameter `strict` is a boolean indicating whether group packages that exist but are non-installable due to e.g. dependency issues should be skipped (False) or cause transaction to fail to resolve (True). -+ Mark group with corresponding `group_id` installed and mark the packages in the group for installation. Return the number of packages that the operation has marked for installation. `pkg_types` is a sequence of strings determining the kinds of packages to be installed, where the respective groups can be selected by including ``"mandatory"``, ``"default"`` or ``"optional"`` in it. If `exclude` is given, it has to be an iterable of package name glob patterns: :meth:`.group_install` will then not mark the respective packages for installation whenever possible. Parameter `strict` is a boolean indicating whether group packages that exist but are non-installable due to e.g. dependency issues should be skipped (False) or cause transaction to fail to resolve (True). Raises :exc:`dnf.exceptions.CompsError` in case the group doesn't exist. - - .. method:: group_remove(group_id) - -@@ -191,7 +191,7 @@ - - .. method:: environment_install(env_id, types, exclude=None, strict=True, exclude_groups=None) - -- Similar to :meth:`.group_install` but operates on environmental groups. `exclude_groups` is an iterable of group IDs that will not be marked as installed. -+ Similar to :meth:`.group_install` but operates on environmental groups. `exclude_groups` is an iterable of group IDs that will not be marked as installed. Raises :exc:`dnf.exceptions.CompsError` in case the group doesn't exist. - - .. method:: environment_remove(env_id) - --- -libgit2 1.0.1 - diff --git a/SOURCES/0010-Add-fail_fast-parameter-to-download_payloads-methods.patch b/SOURCES/0010-Add-fail_fast-parameter-to-download_payloads-methods.patch new file mode 100644 index 0000000..3447fb9 --- /dev/null +++ b/SOURCES/0010-Add-fail_fast-parameter-to-download_payloads-methods.patch @@ -0,0 +1,68 @@ +From ca3d7f06c8f4c1c901dc853ac33c06976b46c61e Mon Sep 17 00:00:00 2001 +From: Marek Blaha +Date: Wed, 6 Oct 2021 09:56:05 +0200 +Subject: [PATCH] Add fail_fast parameter to download_payloads methods + +Unlike in the rpm transaction, reposync needs to switch the fail_fast +off to download as much packages from repository as possible. +--- + dnf/base.py | 6 +++--- + dnf/repo.py | 4 ++-- + 2 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/dnf/base.py b/dnf/base.py +index b0a378c2..c258a5a7 100644 +--- a/dnf/base.py ++++ b/dnf/base.py +@@ -1151,7 +1151,7 @@ class Base(object): + timer() + self._trans_success = True + +- def _download_remote_payloads(self, payloads, drpm, progress, callback_total): ++ def _download_remote_payloads(self, payloads, drpm, progress, callback_total, fail_fast=True): + lock = dnf.lock.build_download_lock(self.conf.cachedir, self.conf.exit_on_lock) + with lock: + beg_download = time.time() +@@ -1163,7 +1163,7 @@ class Base(object): + progress.start(len(payloads), est_remote_size, total_drpms=total_drpm) + else: + progress.start(len(payloads), est_remote_size) +- errors = dnf.repo._download_payloads(payloads, drpm) ++ errors = dnf.repo._download_payloads(payloads, drpm, fail_fast) + + if errors._irrecoverable(): + raise dnf.exceptions.DownloadError(errors._irrecoverable()) +@@ -1189,7 +1189,7 @@ class Base(object): + est_remote_size = sum(pload.download_size + for pload in payloads) + progress.start(len(payloads), est_remote_size) +- errors = dnf.repo._download_payloads(payloads, drpm) ++ errors = dnf.repo._download_payloads(payloads, drpm, fail_fast) + + if errors._irrecoverable(): + raise dnf.exceptions.DownloadError(errors._irrecoverable()) +diff --git a/dnf/repo.py b/dnf/repo.py +index b454e981..bb422309 100644 +--- a/dnf/repo.py ++++ b/dnf/repo.py +@@ -84,7 +84,7 @@ def _pkg2payload(pkg, progress, *factories): + raise ValueError(_('no matching payload factory for %s') % pkg) + + +-def _download_payloads(payloads, drpm): ++def _download_payloads(payloads, drpm, fail_fast=True): + # download packages + def _download_sort_key(payload): + return not hasattr(payload, 'delta') +@@ -94,7 +94,7 @@ def _download_payloads(payloads, drpm): + for pload in sorted(payloads, key=_download_sort_key)] + errs = _DownloadErrors() + try: +- libdnf.repo.PackageTarget.downloadPackages(libdnf.repo.VectorPPackageTarget(targets), True) ++ libdnf.repo.PackageTarget.downloadPackages(libdnf.repo.VectorPPackageTarget(targets), fail_fast) + except RuntimeError as e: + errs._fatal = str(e) + drpm.wait() +-- +2.35.1 + diff --git a/SOURCES/0010-doc-Improve-description-of-multilib_policyall-RhBug19966811995630.patch b/SOURCES/0010-doc-Improve-description-of-multilib_policyall-RhBug19966811995630.patch deleted file mode 100644 index c9abef0..0000000 --- a/SOURCES/0010-doc-Improve-description-of-multilib_policyall-RhBug19966811995630.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 683b92811abcb6cbbc00353010ec18e2cf655912 Mon Sep 17 00:00:00 2001 -From: Jaroslav Mracek -Date: Mon, 6 Sep 2021 12:40:59 +0200 -Subject: [PATCH] [doc] Improve description of multilib_policy=all (RhBug:1996681,1995630) - -https://bugzilla.redhat.com/show_bug.cgi?id=1996681 -https://bugzilla.redhat.com/show_bug.cgi?id=1995630 ---- - doc/conf_ref.rst | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst -index 016bd00..83b14ec 100644 ---- a/doc/conf_ref.rst -+++ b/doc/conf_ref.rst -@@ -351,7 +351,9 @@ configuration file by your distribution to override the DNF defaults. - ``multilib_policy`` - :ref:`string ` - -- Controls how multilib packages are treated during install operations. Can either be ``"best"`` (the default) for the depsolver to prefer packages which best match the system's architecture, or ``"all"`` to install all available packages with compatible architectures. -+ Controls how multilib packages are treated during install operations. Can either be ``"best"`` (the default) for -+ the depsolver to prefer packages which best match the system's architecture, or ``"all"`` to install packages for -+ all available architectures. - - .. _obsoletes_conf_option-label: - --- -libgit2 1.0.1 - diff --git a/SOURCES/0011-Fix-Python-dnf-API-does-not-respect-cacheonly-RhBug1862970.patch b/SOURCES/0011-Fix-Python-dnf-API-does-not-respect-cacheonly-RhBug1862970.patch deleted file mode 100644 index b1f2b86..0000000 --- a/SOURCES/0011-Fix-Python-dnf-API-does-not-respect-cacheonly-RhBug1862970.patch +++ /dev/null @@ -1,33 +0,0 @@ -From db52d259645daf8ca0ae06e829787d36171f2d5b Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Wed, 20 Oct 2021 09:20:03 +0200 -Subject: [PATCH] Fix: Python dnf API does not respect cacheonly (RhBug:1862970) - -`Repo` object has always been constructed with default synchronization -strategy. The configuration option `cacheonly` was ignored. DNF -application set synchronization strategy later in the `Cli` object -during processing demands. - -The fix takes into account the `cacheonly` option during the construction -of the `Repo` object. Synchronization strategy may still be overriden -during demand processing. ---- - dnf/repo.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/dnf/repo.py b/dnf/repo.py -index bb42230..1822cf0 100644 ---- a/dnf/repo.py -+++ b/dnf/repo.py -@@ -434,7 +434,7 @@ class Repo(dnf.conf.RepoConf): - self._pkgdir = None - self._key_import = _NullKeyImport() - self.metadata = None # :api -- self._repo.setSyncStrategy(self.DEFAULT_SYNC) -+ self._repo.setSyncStrategy(SYNC_ONLY_CACHE if parent_conf and parent_conf.cacheonly else self.DEFAULT_SYNC) - if parent_conf: - self._repo.setSubstitutions(parent_conf.substitutions) - self._substitutions = dnf.conf.substitutions.Substitutions() --- -libgit2 1.0.1 - diff --git a/SOURCES/0011-comps-Make-the-install_or_skip-method-not-catch-Comp.patch b/SOURCES/0011-comps-Make-the-install_or_skip-method-not-catch-Comp.patch new file mode 100644 index 0000000..b795c4f --- /dev/null +++ b/SOURCES/0011-comps-Make-the-install_or_skip-method-not-catch-Comp.patch @@ -0,0 +1,139 @@ +From f0f037db8219b1e74be4ed86f5eea53b63ca1d88 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hr=C3=A1zk=C3=BD?= +Date: Tue, 20 Jul 2021 15:29:59 +0200 +Subject: [PATCH] comps: Make the install_or_skip() method not catch CompsError + anymore + +According to its docstring, the original intention of the method was to +not fail on installing an already installed group/environment. + +However, the CompsError is no longer thrown when attempting to install +an already installed group or environment. It was changed to logging a +warning directly in 5210b9dc and then the check was removed completely +in 217ca0fa. + +For the other case for which an instance of CompsError can be thrown +from the install_group() and install_environment() methods, which is +when a group or environment is not found, we certainly want to throw an +error (see the linked bugs), therefore there's no reason to catch the +exception anymore. + +The install_or_skip() method is preserved as part of the API so as not +to break compatibility any more than necessary. + +msg: API: Raise CompsError when group/env not found in install_group and install_environment +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1947958 +related: https://bugzilla.redhat.com/show_bug.cgi?id=1943206 +--- + dnf/base.py | 8 ++------ + dnf/cli/commands/group.py | 4 ++-- + dnf/comps.py | 20 ++++++++++---------- + doc/api_base.rst | 4 ++-- + 4 files changed, 16 insertions(+), 20 deletions(-) + +diff --git a/dnf/base.py b/dnf/base.py +index c258a5a7..babca31d 100644 +--- a/dnf/base.py ++++ b/dnf/base.py +@@ -1668,9 +1668,7 @@ class Base(object): + if not isinstance(types, int): + types = libdnf.transaction.listToCompsPackageType(types) + +- trans = dnf.comps.install_or_skip(solver._environment_install, +- env_id, types, exclude or set(), +- strict, exclude_groups) ++ trans = solver._environment_install(env_id, types, exclude or set(), strict, exclude_groups) + if not trans: + return 0 + return self._add_comps_trans(trans) +@@ -1713,9 +1711,7 @@ class Base(object): + if not isinstance(pkg_types, int): + pkg_types = libdnf.transaction.listToCompsPackageType(pkg_types) + +- trans = dnf.comps.install_or_skip(solver._group_install, +- grp_id, pkg_types, exclude_pkgnames, +- strict) ++ trans = solver._group_install(grp_id, pkg_types, exclude_pkgnames, strict) + if not trans: + return 0 + if strict: +diff --git a/dnf/cli/commands/group.py b/dnf/cli/commands/group.py +index cf542799..fd723c48 100644 +--- a/dnf/cli/commands/group.py ++++ b/dnf/cli/commands/group.py +@@ -244,9 +244,9 @@ class GroupCommand(commands.Command): + types = tuple(self.base.conf.group_package_types) + pkg_types = libdnf.transaction.listToCompsPackageType(types) + for env_id in res.environments: +- dnf.comps.install_or_skip(solver._environment_install, env_id, pkg_types) ++ solver._environment_install(env_id, pkg_types) + for group_id in res.groups: +- dnf.comps.install_or_skip(solver._group_install, group_id, pkg_types) ++ solver._group_install(group_id, pkg_types) + + def _mark_remove(self, patterns): + q = CompsQuery(self.base.comps, self.base.history, +diff --git a/dnf/comps.py b/dnf/comps.py +index 89765337..461eb274 100644 +--- a/dnf/comps.py ++++ b/dnf/comps.py +@@ -93,15 +93,15 @@ def _fn_display_order(group): + + def install_or_skip(install_fnc, grp_or_env_id, types, exclude=None, + strict=True, exclude_groups=None): +- """Either mark in persistor as installed given `grp_or_env` (group +- or environment) or skip it (if it's already installed). +- `install_fnc` has to be Solver._group_install +- or Solver._environment_install. +- """ +- try: +- return install_fnc(grp_or_env_id, types, exclude, strict, exclude_groups) +- except dnf.comps.CompsError as e: +- logger.warning("%s, %s", ucd(e)[:-1], _("skipping.")) ++ """ ++ Installs a group or an environment identified by grp_or_env_id. ++ This method is preserved for API compatibility. It used to catch an ++ exception thrown when a gorup or env was already installed, which is no ++ longer thrown. ++ `install_fnc` has to be Solver._group_install or ++ Solver._environment_install. ++ """ ++ return install_fnc(grp_or_env_id, types, exclude, strict, exclude_groups) + + + class _Langs(object): +@@ -592,7 +592,7 @@ class Solver(object): + assert dnf.util.is_string_type(group_id) + return self.history.env.is_removable_group(group_id) + +- def _environment_install(self, env_id, pkg_types, exclude, strict=True, exclude_groups=None): ++ def _environment_install(self, env_id, pkg_types, exclude=None, strict=True, exclude_groups=None): + assert dnf.util.is_string_type(env_id) + comps_env = self.comps._environment_by_id(env_id) + if not comps_env: +diff --git a/doc/api_base.rst b/doc/api_base.rst +index 20d7945e..03396b69 100644 +--- a/doc/api_base.rst ++++ b/doc/api_base.rst +@@ -179,7 +179,7 @@ + + .. method:: group_install(group_id, pkg_types, exclude=None, strict=True) + +- Mark group with corresponding `group_id` installed and mark the packages in the group for installation. Return the number of packages that the operation has marked for installation. `pkg_types` is a sequence of strings determining the kinds of packages to be installed, where the respective groups can be selected by including ``"mandatory"``, ``"default"`` or ``"optional"`` in it. If `exclude` is given, it has to be an iterable of package name glob patterns: :meth:`.group_install` will then not mark the respective packages for installation whenever possible. Parameter `strict` is a boolean indicating whether group packages that exist but are non-installable due to e.g. dependency issues should be skipped (False) or cause transaction to fail to resolve (True). ++ Mark group with corresponding `group_id` installed and mark the packages in the group for installation. Return the number of packages that the operation has marked for installation. `pkg_types` is a sequence of strings determining the kinds of packages to be installed, where the respective groups can be selected by including ``"mandatory"``, ``"default"`` or ``"optional"`` in it. If `exclude` is given, it has to be an iterable of package name glob patterns: :meth:`.group_install` will then not mark the respective packages for installation whenever possible. Parameter `strict` is a boolean indicating whether group packages that exist but are non-installable due to e.g. dependency issues should be skipped (False) or cause transaction to fail to resolve (True). Raises :exc:`dnf.exceptions.CompsError` in case the group doesn't exist. + + .. method:: group_remove(group_id) + +@@ -191,7 +191,7 @@ + + .. method:: environment_install(env_id, types, exclude=None, strict=True, exclude_groups=None) + +- Similar to :meth:`.group_install` but operates on environmental groups. `exclude_groups` is an iterable of group IDs that will not be marked as installed. ++ Similar to :meth:`.group_install` but operates on environmental groups. `exclude_groups` is an iterable of group IDs that will not be marked as installed. Raises :exc:`dnf.exceptions.CompsError` in case the group doesn't exist. + + .. method:: environment_remove(env_id) + +-- +2.35.1 + diff --git a/SOURCES/0012-Documentation-API-notes-for-cacheonly.patch b/SOURCES/0012-Documentation-API-notes-for-cacheonly.patch deleted file mode 100644 index 8c3cef0..0000000 --- a/SOURCES/0012-Documentation-API-notes-for-cacheonly.patch +++ /dev/null @@ -1,26 +0,0 @@ -From f8025df597685a0bd0c347b1a60c280f03bdca6f Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Fri, 5 Nov 2021 08:52:56 +0100 -Subject: [PATCH] Documentation: API notes for cacheonly - ---- - doc/conf_ref.rst | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst -index 83b14ec..75bcdf7 100644 ---- a/doc/conf_ref.rst -+++ b/doc/conf_ref.rst -@@ -129,6 +129,9 @@ configuration file by your distribution to override the DNF defaults. - If set to ``True`` DNF will run entirely from system cache, will not update - the cache and will use it even in case it is expired. Default is ``False``. - -+ API Notes: Must be set before repository objects are created. Plugins must set -+ this in the pre_config hook. Later changes are ignored. -+ - .. _check_config_file_age-label: - - ``check_config_file_age`` --- -libgit2 1.0.1 - diff --git a/SOURCES/0012-doc-Improve-description-of-multilib_policy-all-RhBug.patch b/SOURCES/0012-doc-Improve-description-of-multilib_policy-all-RhBug.patch new file mode 100644 index 0000000..546dcc5 --- /dev/null +++ b/SOURCES/0012-doc-Improve-description-of-multilib_policy-all-RhBug.patch @@ -0,0 +1,30 @@ +From 683b92811abcb6cbbc00353010ec18e2cf655912 Mon Sep 17 00:00:00 2001 +From: Jaroslav Mracek +Date: Mon, 6 Sep 2021 12:40:59 +0200 +Subject: [PATCH] [doc] Improve description of multilib_policy=all + (RhBug:1996681,1995630) + +https://bugzilla.redhat.com/show_bug.cgi?id=1996681 +https://bugzilla.redhat.com/show_bug.cgi?id=1995630 +--- + doc/conf_ref.rst | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst +index 016bd00c..83b14ecd 100644 +--- a/doc/conf_ref.rst ++++ b/doc/conf_ref.rst +@@ -351,7 +351,9 @@ configuration file by your distribution to override the DNF defaults. + ``multilib_policy`` + :ref:`string ` + +- Controls how multilib packages are treated during install operations. Can either be ``"best"`` (the default) for the depsolver to prefer packages which best match the system's architecture, or ``"all"`` to install all available packages with compatible architectures. ++ Controls how multilib packages are treated during install operations. Can either be ``"best"`` (the default) for ++ the depsolver to prefer packages which best match the system's architecture, or ``"all"`` to install packages for ++ all available architectures. + + .. _obsoletes_conf_option-label: + +-- +2.35.1 + diff --git a/SOURCES/0013-Allow-destdir-option-with-modulesync-command.patch b/SOURCES/0013-Allow-destdir-option-with-modulesync-command.patch deleted file mode 100644 index d859553..0000000 --- a/SOURCES/0013-Allow-destdir-option-with-modulesync-command.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 6af9938c87cf409f886f21b59ec45c54eda6c8b2 Mon Sep 17 00:00:00 2001 -From: Jaroslav Mracek -Date: Tue, 2 Nov 2021 14:23:22 +0100 -Subject: [PATCH] Allow destdir option with modulesync command - ---- - dnf/cli/cli.py | 2 +- - doc/command_ref.rst | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/dnf/cli/cli.py b/dnf/cli/cli.py -index 6576997..a315201 100644 ---- a/dnf/cli/cli.py -+++ b/dnf/cli/cli.py -@@ -810,7 +810,7 @@ class Cli(object): - if opts.destdir is not None: - self.base.conf.destdir = opts.destdir - if not self.base.conf.downloadonly and opts.command not in ( -- 'download', 'system-upgrade', 'reposync'): -+ 'download', 'system-upgrade', 'reposync', 'modulesync'): - logger.critical(_('--destdir or --downloaddir must be used with --downloadonly ' - 'or download or system-upgrade command.') - ) -diff --git a/doc/command_ref.rst b/doc/command_ref.rst -index f96c0ea..42aec72 100644 ---- a/doc/command_ref.rst -+++ b/doc/command_ref.rst -@@ -182,7 +182,7 @@ Options - ``--downloaddir=, --destdir=`` - Redirect downloaded packages to provided directory. The option has to be used together with the \-\ - :ref:`-downloadonly ` command line option, with the -- ``download`` command (dnf-plugins-core) or with the ``system-upgrade`` command -+ ``download``, ``modulesync`` or ``reposync`` commands (dnf-plugins-core) or with the ``system-upgrade`` command - (dnf-plugins-extras). - - .. _downloadonly-label: --- -libgit2 1.1.0 - diff --git a/SOURCES/0013-Fix-Python-dnf-API-does-not-respect-cacheonly-RhBug-.patch b/SOURCES/0013-Fix-Python-dnf-API-does-not-respect-cacheonly-RhBug-.patch new file mode 100644 index 0000000..e910468 --- /dev/null +++ b/SOURCES/0013-Fix-Python-dnf-API-does-not-respect-cacheonly-RhBug-.patch @@ -0,0 +1,34 @@ +From db52d259645daf8ca0ae06e829787d36171f2d5b Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel +Date: Wed, 20 Oct 2021 09:20:03 +0200 +Subject: [PATCH] Fix: Python dnf API does not respect cacheonly + (RhBug:1862970) + +`Repo` object has always been constructed with default synchronization +strategy. The configuration option `cacheonly` was ignored. DNF +application set synchronization strategy later in the `Cli` object +during processing demands. + +The fix takes into account the `cacheonly` option during the construction +of the `Repo` object. Synchronization strategy may still be overriden +during demand processing. +--- + dnf/repo.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/dnf/repo.py b/dnf/repo.py +index bb422309..1822cf01 100644 +--- a/dnf/repo.py ++++ b/dnf/repo.py +@@ -434,7 +434,7 @@ class Repo(dnf.conf.RepoConf): + self._pkgdir = None + self._key_import = _NullKeyImport() + self.metadata = None # :api +- self._repo.setSyncStrategy(self.DEFAULT_SYNC) ++ self._repo.setSyncStrategy(SYNC_ONLY_CACHE if parent_conf and parent_conf.cacheonly else self.DEFAULT_SYNC) + if parent_conf: + self._repo.setSubstitutions(parent_conf.substitutions) + self._substitutions = dnf.conf.substitutions.Substitutions() +-- +2.35.1 + diff --git a/SOURCES/0014-Add-documentation-for-query-api-flags.patch b/SOURCES/0014-Add-documentation-for-query-api-flags.patch deleted file mode 100644 index e08d5b2..0000000 --- a/SOURCES/0014-Add-documentation-for-query-api-flags.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 27f26c607c44b8331b23c861241a8509c2452531 Mon Sep 17 00:00:00 2001 -From: sbluhm -Date: Sun, 9 Jan 2022 14:30:19 +0100 -Subject: [PATCH 14/19] Add documentation for query api flags - -= changelog = -msg: Add documentation for query api flags -type: enhancement -resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2035577 ---- - AUTHORS | 1 + - doc/api_sack.rst | 14 +++++++++++++- - 2 files changed, 14 insertions(+), 1 deletion(-) - -diff --git a/AUTHORS b/AUTHORS -index f8c9eb83..0077c7ea 100644 ---- a/AUTHORS -+++ b/AUTHORS -@@ -91,6 +91,7 @@ DNF CONTRIBUTORS - Petr Spacek - Rob Cutmore - Satoshi Matsumoto -+ Stefan Bluhm - Tomas Kasparek - Vladan Kudlac - Will Woods -diff --git a/doc/api_sack.rst b/doc/api_sack.rst -index 79719878..ac843fc9 100644 ---- a/doc/api_sack.rst -+++ b/doc/api_sack.rst -@@ -25,10 +25,22 @@ - - The package sack. Contains metadata information about all known packages, installed and available. - -- .. method:: query() -+ .. method:: query(flags=hawkey.APPLY_EXCLUDES) - - Return a :class:`Query` for querying packages contained in this sack. - -+ :ref:`Package filtering ` is applied when creating the query object. The behavior can be adapted using flags. Possible flags: -+ -+ -+ ============================== =========================================================================== -+ Flag Value meaning -+ ============================== =========================================================================== -+ hawkey.APPLY_EXCLUDES Apply all package filtering. -+ hawkey.IGNORE_EXCLUDES Ignore all package filtering. -+ hawkey.IGNORE_REGULAR_EXCLUDES Ignore regular excludes defined by configuration files or the command line. -+ hawkey.IGNORE_MODULAR_EXCLUDES Ignore modular filtering. -+ ============================== =========================================================================== -+ - .. function:: rpmdb_sack(base) - - Returns a new instance of sack containing only installed packages (@System repo). Useful to get list of the installed RPMs after transaction. --- -2.31.1 - diff --git a/SOURCES/0014-Documentation-API-notes-for-cacheonly.patch b/SOURCES/0014-Documentation-API-notes-for-cacheonly.patch new file mode 100644 index 0000000..111570f --- /dev/null +++ b/SOURCES/0014-Documentation-API-notes-for-cacheonly.patch @@ -0,0 +1,26 @@ +From f8025df597685a0bd0c347b1a60c280f03bdca6f Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel +Date: Fri, 5 Nov 2021 08:52:56 +0100 +Subject: [PATCH] Documentation: API notes for cacheonly + +--- + doc/conf_ref.rst | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst +index 83b14ecd..75bcdf75 100644 +--- a/doc/conf_ref.rst ++++ b/doc/conf_ref.rst +@@ -129,6 +129,9 @@ configuration file by your distribution to override the DNF defaults. + If set to ``True`` DNF will run entirely from system cache, will not update + the cache and will use it even in case it is expired. Default is ``False``. + ++ API Notes: Must be set before repository objects are created. Plugins must set ++ this in the pre_config hook. Later changes are ignored. ++ + .. _check_config_file_age-label: + + ``check_config_file_age`` +-- +2.35.1 + diff --git a/SOURCES/0015-Allow-destdir-option-with-modulesync-command.patch b/SOURCES/0015-Allow-destdir-option-with-modulesync-command.patch new file mode 100644 index 0000000..6989f1a --- /dev/null +++ b/SOURCES/0015-Allow-destdir-option-with-modulesync-command.patch @@ -0,0 +1,39 @@ +From 6af9938c87cf409f886f21b59ec45c54eda6c8b2 Mon Sep 17 00:00:00 2001 +From: Jaroslav Mracek +Date: Tue, 2 Nov 2021 14:23:22 +0100 +Subject: [PATCH] Allow destdir option with modulesync command + +--- + dnf/cli/cli.py | 2 +- + doc/command_ref.rst | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/dnf/cli/cli.py b/dnf/cli/cli.py +index 65769978..a315201c 100644 +--- a/dnf/cli/cli.py ++++ b/dnf/cli/cli.py +@@ -810,7 +810,7 @@ class Cli(object): + if opts.destdir is not None: + self.base.conf.destdir = opts.destdir + if not self.base.conf.downloadonly and opts.command not in ( +- 'download', 'system-upgrade', 'reposync'): ++ 'download', 'system-upgrade', 'reposync', 'modulesync'): + logger.critical(_('--destdir or --downloaddir must be used with --downloadonly ' + 'or download or system-upgrade command.') + ) +diff --git a/doc/command_ref.rst b/doc/command_ref.rst +index f96c0eac..42aec72c 100644 +--- a/doc/command_ref.rst ++++ b/doc/command_ref.rst +@@ -182,7 +182,7 @@ Options + ``--downloaddir=, --destdir=`` + Redirect downloaded packages to provided directory. The option has to be used together with the \-\ + :ref:`-downloadonly ` command line option, with the +- ``download`` command (dnf-plugins-core) or with the ``system-upgrade`` command ++ ``download``, ``modulesync`` or ``reposync`` commands (dnf-plugins-core) or with the ``system-upgrade`` command + (dnf-plugins-extras). + + .. _downloadonly-label: +-- +2.35.1 + diff --git a/SOURCES/0015-Fix-processing-of-download-errors-RhBug-2024527.patch b/SOURCES/0015-Fix-processing-of-download-errors-RhBug-2024527.patch deleted file mode 100644 index 4994175..0000000 --- a/SOURCES/0015-Fix-processing-of-download-errors-RhBug-2024527.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 9bd0423e1e543ed5f83924ec61aa253eced24cf8 Mon Sep 17 00:00:00 2001 -From: Marek Blaha -Date: Mon, 14 Mar 2022 09:49:52 +0100 -Subject: [PATCH 15/19] Fix processing of download errors (RhBug: 2024527) - -Users with different than english locale are not able to update their -systems in case that some of updates are already downloaded in the dnf -cache (e.g. using dnf-automatic). - -The error string is taken from librepo target where it is stored -untranslated. Therefore we need to compare untranslated versions of the -string. - -= changelog = -msg: Fix download errors handling in non-english locales -type: bugfix -resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2024527 ---- - dnf/repo.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/dnf/repo.py b/dnf/repo.py -index 1822cf01..ec1a2537 100644 ---- a/dnf/repo.py -+++ b/dnf/repo.py -@@ -108,7 +108,7 @@ def _download_payloads(payloads, drpm, fail_fast=True): - callbacks = tgt.getCallbacks() - payload = callbacks.package_pload - pkg = payload.pkg -- if err == _('Already downloaded'): -+ if err == 'Already downloaded': - errs._skipped.add(pkg) - continue - pkg.repo._repo.expire() --- -2.31.1 - diff --git a/SOURCES/0016-Fix-unittests-that-relied-on-checksum-being-at-the-e.patch b/SOURCES/0016-Fix-unittests-that-relied-on-checksum-being-at-the-e.patch deleted file mode 100644 index b65e37c..0000000 --- a/SOURCES/0016-Fix-unittests-that-relied-on-checksum-being-at-the-e.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 0da73ea1304005b796842d96679d6ea31cdeea3c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= -Date: Tue, 1 Mar 2022 12:42:23 +0100 -Subject: [PATCH 16/19] Fix unittests that relied on checksum being at the end - of solvfiles - ---- - tests/test_fill_sack_from_repos_in_cache.py | 26 +++++++++++---------- - 1 file changed, 14 insertions(+), 12 deletions(-) - -diff --git a/tests/test_fill_sack_from_repos_in_cache.py b/tests/test_fill_sack_from_repos_in_cache.py -index a8de287c..30d02cfe 100644 ---- a/tests/test_fill_sack_from_repos_in_cache.py -+++ b/tests/test_fill_sack_from_repos_in_cache.py -@@ -39,7 +39,7 @@ TEST_REPO_NAME = "test-repo" - - - class FillSackFromReposInCacheTest(unittest.TestCase): -- def _create_cache_for_repo(self, repopath, tmpdir): -+ def _create_cache_for_repo(self, repopath, tmpdir, repo_name=TEST_REPO_NAME): - conf = dnf.conf.MainConf() - conf.cachedir = os.path.join(tmpdir, "cache") - conf.installroot = tmpdir -@@ -49,7 +49,7 @@ class FillSackFromReposInCacheTest(unittest.TestCase): - - base = dnf.Base(conf=conf) - -- repoconf = dnf.repo.Repo(TEST_REPO_NAME, base.conf) -+ repoconf = dnf.repo.Repo(repo_name, base.conf) - repoconf.baseurl = repopath - repoconf.enable() - -@@ -194,6 +194,8 @@ class FillSackFromReposInCacheTest(unittest.TestCase): - - 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")) -+ self._create_cache_for_repo(os.path.join(os.path.abspath(os.path.dirname(__file__)), "repos/drpm"), -+ self.tmpdir, "drpm-repo") - - # Remove xml metadata except repomd - # repomd.xml is not compressed and doesn't end with .gz -@@ -201,12 +203,11 @@ class FillSackFromReposInCacheTest(unittest.TestCase): - 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") -+ # Replace solvfile of test-repo with solvfile from drpm-repo which has different data (different checksum) -+ shutil.move(os.path.join(self.tmpdir, "cache/drpm-repo.solv"), -+ os.path.join(self.tmpdir, "cache/test-repo.solv")) - -- # Now we only have cache with solvx, modified solv file and just repomd -+ # Now we only have cache with solvx, mismatching solv file and just repomd - # Since we don't have original xml metadata we cannot regenerate solv -> fail (exception) - - self.assertRaises(dnf.exceptions.RepoError, -@@ -214,13 +215,14 @@ class FillSackFromReposInCacheTest(unittest.TestCase): - - def test_checksum_mistmatch_regenerates_solv(self): - self._setUp_from_repo_path(os.path.join(os.path.abspath(os.path.dirname(__file__)), "repos/rpm")) -+ self._create_cache_for_repo(os.path.join(os.path.abspath(os.path.dirname(__file__)), "repos/drpm"), -+ self.tmpdir, "drpm-repo") - -- # 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") -+ # Replace solvfile of test-repo with solvfile from drpm-repo which has different data (different checksum) -+ shutil.move(os.path.join(self.tmpdir, "cache/drpm-repo.solv"), -+ os.path.join(self.tmpdir, "cache/test-repo.solv")) - -- # Now we only have cache with solvx, modified solv file and xml metadata. -+ # Now we only have cache with solvx, mismatching 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) --- -2.31.1 - diff --git a/SOURCES/0016-Update-translations-RhBug-2017270.patch b/SOURCES/0016-Update-translations-RhBug-2017270.patch new file mode 100644 index 0000000..dc72e4c --- /dev/null +++ b/SOURCES/0016-Update-translations-RhBug-2017270.patch @@ -0,0 +1,21203 @@ +From 688eefb336006b0b7f115ae110e97e1e59d1564b Mon Sep 17 00:00:00 2001 +From: Marek Blaha +Date: Fri, 18 Mar 2022 13:14:01 +0100 +Subject: [PATCH] Update translations (RhBug: 2017270) + +--- + po/dnf.pot | 1166 ++++++++++++++------------ + po/fr.po | 1523 +++++++++++++++++++--------------- + po/ja.po | 1739 +++++++++++++++++++++----------------- + po/ko.po | 2291 +++++++++++++++++++++++++++------------------------ + po/zh_CN.po | 1491 ++++++++++++++++++--------------- + po/zh_TW.po | 1345 ++++++++++++++++-------------- + 6 files changed, 5259 insertions(+), 4296 deletions(-) + +diff --git a/po/dnf.pot b/po/dnf.pot +index f7101537..62a8df83 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: 2022-02-28 11:24+0100\n" + "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" + "Last-Translator: FULL NAME \n" + "Language-Team: LANGUAGE \n" +@@ -63,7 +63,7 @@ msgstr "" + msgid "Failed to execute command '%s': returned %d" + msgstr "" + +-#: 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 "" +@@ -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:305 + 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,389 +101,375 @@ msgstr "" + msgid "Error: %s" + msgstr "" + +-#: 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 "" + +-#: dnf/base.py:350 ++#: dnf/base.py:357 + #, python-format + msgid "%s: has expired and will be refreshed." + msgstr "" + + #. 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 "" + +-#: dnf/base.py:358 ++#: dnf/base.py:365 + #, python-format + msgid "%s: will expire after %d seconds." + msgstr "" + + #. 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 "" + +-#: dnf/base.py:409 ++#: dnf/base.py:416 dnf/base.py:484 + #, python-format + msgid "Ignoring repositories: %s" + msgstr "" + +-#: dnf/base.py:412 ++#: dnf/base.py:419 + #, python-format + msgid "Last metadata expiration check: %s ago on %s." + msgstr "" + +-#: 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 "" + +-#: dnf/base.py:535 ++#: dnf/base.py:606 + #, python-format + msgid "Invalid tsflag in config file: %s" + msgstr "" + +-#: dnf/base.py:591 ++#: dnf/base.py:662 + #, python-format + msgid "Failed to add groups file for repository: %s - %s" + msgstr "" + +-#: 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 "" + +-#: 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] "" + msgstr[1] "" + +-#: 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 "" + +-#: 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 "" + +-#: 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 "" + +-#: 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 "" + +-#: 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 "" + +-#: dnf/base.py:1223 ++#: dnf/base.py:1313 + #, python-format + msgid "Problem opening package %s" + msgstr "" + +-#: dnf/base.py:1231 ++#: dnf/base.py:1321 + #, python-format + msgid "Public key for %s is not trusted" + msgstr "" + +-#: dnf/base.py:1235 ++#: dnf/base.py:1325 + #, python-format + msgid "Package %s is not signed" + msgstr "" + +-#: dnf/base.py:1265 ++#: dnf/base.py:1355 + #, python-format + msgid "Cannot remove %s" + msgstr "" + +-#: dnf/base.py:1269 ++#: dnf/base.py:1359 + #, python-format + msgid "%s removed" + msgstr "" + +-#: dnf/base.py:1549 ++#: dnf/base.py:1639 + msgid "No match for group package \"{}\"" + msgstr "" + +-#: dnf/base.py:1635 ++#: dnf/base.py:1721 + #, 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/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:1744 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:1762 + msgid "No groups marked for removal." + msgstr "" + +-#: dnf/base.py:1710 ++#: dnf/base.py:1796 + msgid "No group marked for upgrade." + msgstr "" + +-#: dnf/base.py:1925 ++#: dnf/base.py:2010 + #, 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/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:2012 dnf/base.py:2031 dnf/base.py:2044 dnf/base.py:2071 ++#: dnf/base.py:2124 dnf/base.py:2132 dnf/base.py:2266 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 "" + +-#: dnf/base.py:1934 ++#: dnf/base.py:2019 + #, python-format + msgid "Package %s of lower version already installed, cannot downgrade it." + msgstr "" + +-#: dnf/base.py:1957 ++#: dnf/base.py:2042 + #, python-format + msgid "Package %s not installed, cannot reinstall it." + msgstr "" + +-#: dnf/base.py:1972 ++#: dnf/base.py:2057 + #, python-format + msgid "File %s is a source package and cannot be updated, ignoring." + msgstr "" + +-#: dnf/base.py:1978 ++#: dnf/base.py:2068 + #, python-format + msgid "Package %s not installed, cannot update it." + msgstr "" + +-#: dnf/base.py:1987 ++#: dnf/base.py:2078 + #, 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:2121 dnf/cli/commands/reinstall.py:81 + #, python-format + msgid "Package %s available, but not installed." + msgstr "" + +-#: dnf/base.py:2032 ++#: dnf/base.py:2127 + #, 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:2152 + #, python-format + msgid "No package %s installed." + msgstr "" + +-#: dnf/base.py:2075 dnf/cli/commands/install.py:136 ++#: dnf/base.py:2170 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:2185 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:2273 dnf/cli/cli.py:428 + #, python-format + msgid "Packages for argument %s available, but not installed." + msgstr "" + +-#: dnf/base.py:2184 ++#: dnf/base.py:2278 + #, 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:2378 + msgid "No security updates needed, but {} update available" + msgstr "" + +-#: dnf/base.py:2292 ++#: dnf/base.py:2380 + msgid "No security updates needed, but {} updates available" + msgstr "" + +-#: dnf/base.py:2296 ++#: dnf/base.py:2384 + msgid "No security updates needed for \"{}\", but {} update available" + msgstr "" + +-#: dnf/base.py:2298 ++#: dnf/base.py:2386 + 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:2407 + #, python-format + msgid "Unable to retrieve a key for a commandline package: %s" + msgstr "" + +-#: dnf/base.py:2327 ++#: dnf/base.py:2415 + #, python-format + msgid ". Failing package is: %s" + msgstr "" + +-#: dnf/base.py:2328 ++#: dnf/base.py:2416 + #, python-format + msgid "GPG Keys are configured as: %s" + msgstr "" + +-#: dnf/base.py:2340 ++#: dnf/base.py:2428 + #, python-format + msgid "GPG key at %s (0x%s) is already installed" + msgstr "" + +-#: dnf/base.py:2373 ++#: dnf/base.py:2464 + msgid "The key has been approved." + msgstr "" + +-#: dnf/base.py:2376 ++#: dnf/base.py:2467 + msgid "The key has been rejected." + msgstr "" + +-#: dnf/base.py:2409 ++#: dnf/base.py:2500 + #, python-format + msgid "Key import failed (code %d)" + msgstr "" + +-#: dnf/base.py:2411 ++#: dnf/base.py:2502 + msgid "Key imported successfully" + msgstr "" + +-#: dnf/base.py:2415 ++#: dnf/base.py:2506 + msgid "Didn't install any keys" + msgstr "" + +-#: dnf/base.py:2418 ++#: dnf/base.py:2509 + #, 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:2520 + msgid "Import of key(s) didn't help, wrong key(s)?" + msgstr "" + +-#: dnf/base.py:2482 ++#: dnf/base.py:2573 + msgid " * Maybe you meant: {}" + msgstr "" + +-#: dnf/base.py:2514 ++#: dnf/base.py:2605 + msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum" + msgstr "" + +-#: dnf/base.py:2517 ++#: dnf/base.py:2608 + msgid "Some packages from local repository have incorrect checksum" + msgstr "" + +-#: dnf/base.py:2520 ++#: dnf/base.py:2611 + msgid "Package \"{}\" from repository \"{}\" has incorrect checksum" + msgstr "" + +-#: dnf/base.py:2523 ++#: dnf/base.py:2614 + 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:2632 dnf/base.py:2652 + msgid "No match for argument" + msgstr "" + +-#: dnf/base.py:2549 dnf/base.py:2569 ++#: dnf/base.py:2640 dnf/base.py:2660 + msgid "All matches were filtered out by exclude filtering for argument" + msgstr "" + +-#: dnf/base.py:2551 ++#: dnf/base.py:2642 + msgid "All matches were filtered out by modular filtering for argument" + msgstr "" + +-#: dnf/base.py:2567 ++#: dnf/base.py:2658 + msgid "All matches were installed from a different repository for argument" + msgstr "" + +-#: dnf/base.py:2583 ++#: dnf/base.py:2705 + #, 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:804 ++#: dnf/cli/cli.py:808 dnf/cli/commands/alias.py:108 + #, python-format + msgid "Config error: %s" + msgstr "" +@@ -584,208 +571,188 @@ 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" +-"It is recommended to remove all installed content from the module, and reset " +-"the module using '{prog} module reset ' 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 ' command. " ++"After you reset the module, you can install the other stream." + msgstr "" + +-#: dnf/cli/cli.py:210 ++#: dnf/cli/cli.py:212 + #, python-brace-format + msgid "{prog} will only download packages for the transaction." + msgstr "" + +-#: 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 "" + +-#: 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." + msgstr "" + +-#: 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 "" ++ ++#: 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 "" +- +-#: 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:671 dnf/cli/commands/shell.py:237 + #, python-format + msgid "Unknown repo: '%s'" + msgstr "" + +-#: dnf/cli/cli.py:783 ++#: dnf/cli/cli.py:685 + #, python-format + msgid "No repository match: %s" + msgstr "" + +-#: 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 "" + +-#: dnf/cli/cli.py:847 ++#: dnf/cli/cli.py:749 + #, python-format + msgid "No such command: %s. Please use %s --help" + msgstr "" + +-#: 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 "" + +-#: 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 "" + +-#: 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." + msgstr "" + +-#: 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 "" + +-#: 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 "" + +-#: 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 "" + +-#: 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 "" + +-#: dnf/cli/cli.py:1154 ++#: dnf/cli/cli.py:1043 + msgid "Excludes in dnf.conf: " + msgstr "" + +-#: dnf/cli/cli.py:1157 ++#: dnf/cli/cli.py:1046 + msgid "Includes in dnf.conf: " + msgstr "" + +-#: 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 "" + +@@ -826,38 +793,38 @@ msgstr "" + 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" +@@ -895,70 +862,70 @@ msgstr "" + msgid "show changelogs before update" + 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 "" + +-#: 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 "" + +-#: 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 "" + +-#: 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 "" + +-#: dnf/cli/commands/__init__.py:765 ++#: dnf/cli/commands/__init__.py:760 + msgid "Repository ID" + msgstr "" + +-#: 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 "" +@@ -1130,7 +1097,9 @@ msgid "Waiting for process with pid %d to finish." + msgstr "" + + #: 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 "" + + #: dnf/cli/commands/distrosync.py:32 +@@ -1157,78 +1126,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 "" + 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 +1241,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 '..'." + msgstr "" + +-#: dnf/cli/commands/history.py:226 ++#: dnf/cli/commands/history.py:283 + msgid "" + "Can't convert '{}' to transaction ID.\n" + "Use '', 'last', 'last-'." + 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 +1344,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 +1384,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 "" + +@@ -1403,89 +1393,93 @@ msgstr "" + msgid "Package %s is not installed." + msgstr "" + +-#: 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 "" ++ ++#: 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 "" + +@@ -1960,22 +1954,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 +2081,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 +2281,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 "" + +@@ -2609,13 +2603,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 +2617,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 +2657,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 +2690,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 +3011,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 +3035,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: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] "" + 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 "" + 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 "" + +-#: 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 "" + +-#: 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 "" + +-#: 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 "" + +-#: dnf/cli/output.py:1839 ++#: dnf/cli/output.py:1721 + #, python-format + msgid "(%u seconds)" + msgstr "" + +-#: dnf/cli/output.py:1841 ++#: dnf/cli/output.py:1723 + #, python-format + msgid "(%u minutes)" + msgstr "" + +-#: dnf/cli/output.py:1843 ++#: dnf/cli/output.py:1725 + #, python-format + msgid "(%u hours)" + msgstr "" + +-#: dnf/cli/output.py:1845 ++#: dnf/cli/output.py:1727 + #, python-format + msgid "(%u days)" + msgstr "" + +-#: 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 "" + +-#: 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 "" + +-#: 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 "" + +-#: 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 "" + +-#: dnf/cli/output.py:2018 ++#: dnf/cli/output.py:1896 + #, python-format + msgid "---> Package %s.%s %s will be an upgrade" + msgstr "" + +-#: dnf/cli/output.py:2020 ++#: dnf/cli/output.py:1898 + #, python-format + msgid "---> Package %s.%s %s will be erased" + msgstr "" + +-#: dnf/cli/output.py:2022 ++#: dnf/cli/output.py:1900 + #, python-format + msgid "---> Package %s.%s %s will be reinstalled" + msgstr "" + +-#: dnf/cli/output.py:2024 ++#: dnf/cli/output.py:1902 + #, python-format + msgid "---> Package %s.%s %s will be a downgrade" + msgstr "" + +-#: dnf/cli/output.py:2026 ++#: dnf/cli/output.py:1904 + #, python-format + msgid "---> Package %s.%s %s will be obsoleting" + msgstr "" + +-#: dnf/cli/output.py:2028 ++#: dnf/cli/output.py:1906 + #, python-format + msgid "---> Package %s.%s %s will be upgraded" + msgstr "" + +-#: dnf/cli/output.py:2030 ++#: dnf/cli/output.py:1908 + #, python-format + msgid "---> Package %s.%s %s will be obsoleted" + msgstr "" + +-#: 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" +@@ -3385,10 +3359,6 @@ msgstr "" + msgid " State : %s" + msgstr "" + +-#: dnf/comps.py:104 +-msgid "skipping." +-msgstr "" +- + #: dnf/comps.py:196 dnf/comps.py:692 dnf/comps.py:706 + #, python-format + msgid "Module or Group '%s' is not installed." +@@ -3409,7 +3379,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 "" +@@ -3434,6 +3404,11 @@ msgstr "" + msgid "Error parsing '%s': %s" + msgstr "" + ++#: dnf/conf/config.py:151 ++#, python-format ++msgid "Invalid configuration value: %s=%s in %s; %s" ++msgstr "" ++ + #: dnf/conf/config.py:226 + msgid "Could not set cachedir: {}" + msgstr "" +@@ -3473,36 +3448,36 @@ msgstr "" + msgid "Repo %s did not have a %s attr. before setopt" + msgstr "" + +-#: dnf/conf/read.py:51 ++#: dnf/conf/read.py:60 + #, python-format + msgid "Warning: failed loading '%s', skipping." + msgstr "" + +-#: dnf/conf/read.py:63 ++#: dnf/conf/read.py:72 + msgid "Bad id for repo: {} ({}), byte = {} {}" + msgstr "" + +-#: dnf/conf/read.py:67 ++#: dnf/conf/read.py:76 + msgid "Bad id for repo: {}, byte = {} {}" + msgstr "" + +-#: 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 "" + +-#: dnf/conf/read.py:87 ++#: dnf/conf/read.py:96 + msgid "Repository '{}' is missing name in configuration, using id." + msgstr "" + +-#: dnf/conf/read.py:104 ++#: dnf/conf/read.py:113 + msgid "Parsing file \"{}\" failed: {}" + msgstr "" + +@@ -3516,23 +3491,37 @@ msgstr "" + msgid "repo %s: imported key 0x%s." + msgstr "" + +-#: dnf/db/group.py:293 ++#: dnf/crypto.py:145 ++msgid "Verified using DNS record with DNSSEC signature." ++msgstr "" ++ ++#: dnf/crypto.py:147 ++msgid "NOT verified using DNS record." ++msgstr "" ++ ++#: dnf/crypto.py:184 ++#, python-format ++msgid "retrieving repo key for %s unencrypted from %s" ++msgstr "" ++ ++#: 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 "" + + #: dnf/dnssec.py:168 +-msgid "Configuration option 'gpgkey_dns_verification' requires libunbound ({})" ++msgid "" ++"Configuration option 'gpgkey_dns_verification' requires python3-unbound ({})" + msgstr "" + + #: dnf/dnssec.py:239 +@@ -3555,7 +3544,7 @@ msgstr "" + msgid "Testing already imported keys for their validity." + msgstr "" + +-#: dnf/drpm.py:62 dnf/repo.py:268 ++#: dnf/drpm.py:62 dnf/repo.py:267 + #, python-format + msgid "unsupported checksum type: %s" + msgstr "" +@@ -3598,7 +3587,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:854 + msgid "Modular dependency problem:" + msgid_plural "Modular dependency problems:" + msgstr[0] "" +@@ -3632,92 +3621,148 @@ 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" + "Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled" + msgstr "" + +-#: dnf/module/module_base.py:34 ++#: dnf/module/module_base.py:36 + msgid "" + "\n" + "\n" + "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: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 "" + +-#: 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 "" + +-#: 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 "" ++ ++#: dnf/module/module_base.py:228 ++#, python-brace-format ++msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'" ++msgstr "" ++ ++#: 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 "" + +-#: 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 "" ++ ++#: 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" ++#: dnf/module/module_base.py:841 ++msgid "No match for package {}" + msgstr "" + + #. empty file is invalid json format +@@ -3754,16 +3799,16 @@ msgstr "" + msgid "Loaded plugins: %s" + msgstr "" + +-#: dnf/plugin.py:199 ++#: dnf/plugin.py:211 + #, python-format + msgid "Failed loading plugin \"%s\": %s" + msgstr "" + +-#: 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 "" + +@@ -3777,7 +3822,7 @@ msgid "Already downloaded" + msgstr "" + + #. pinging mirrors, this might take a while +-#: dnf/repo.py:347 ++#: dnf/repo.py:346 + #, python-format + msgid "determining the fastest mirror (%s hosts).. " + msgstr "" +@@ -3792,10 +3837,25 @@ msgstr "" + msgid "Added %s repo from %s" + msgstr "" + ++#: dnf/rpm/miscutils.py:32 ++#, python-format ++msgid "Using rpmkeys executable at %s to verify signatures" ++msgstr "" ++ ++#: dnf/rpm/miscutils.py:66 ++msgid "Cannot find rpmkeys executable to verify signatures." ++msgstr "" ++ + #: 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 "" ++ + #. TRANSLATORS: This is for a single package currently being downgraded. + #: dnf/transaction.py:80 + msgctxt "currently" +@@ -3842,160 +3902,182 @@ 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:419 dnf/util.py:421 + msgid "Problem" + msgstr "" + +-#: dnf/util.py:444 ++#: dnf/util.py:472 + msgid "TransactionItem not found for key: {}" + msgstr "" + +-#: dnf/util.py:454 ++#: dnf/util.py:482 + msgid "TransactionSWDBItem not found for key: {}" + msgstr "" + +-#: 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 "" +diff --git a/po/fr.po b/po/fr.po +index 4e883335..bb2d3677 100644 +--- a/po/fr.po ++++ b/po/fr.po +@@ -15,23 +15,28 @@ + # José Fournier , 2017. #zanata + # Jérôme Fenal , 2017. #zanata + # Jean-Baptiste Holcroft , 2018. #zanata, 2020. +-# Ludek Janda , 2018. #zanata ++# Ludek Janda , 2018. #zanata, 2021. + # Jean-Baptiste Holcroft , 2019. #zanata, 2020. +-# Julien Humbert , 2020. ++# Julien Humbert , 2020, 2021. ++# Sundeep Anand , 2021. ++# Guillaume Jacob , 2021. ++# Titouan Bénard , 2021. ++# Transtats , 2022. + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2020-10-05 09:18-0400\n" +-"PO-Revision-Date: 2020-09-12 11:29+0000\n" +-"Last-Translator: Julien Humbert \n" +-"Language-Team: French \n" ++"POT-Creation-Date: 2022-02-28 11:24+0100\n" ++"PO-Revision-Date: 2022-03-09 12:39+0000\n" ++"Last-Translator: Transtats \n" ++"Language-Team: French \n" + "Language: fr\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=2; plural=n > 1;\n" +-"X-Generator: Weblate 4.2.2\n" ++"X-Generator: Weblate 4.11.2\n" + + #: dnf/automatic/emitter.py:32 + #, python-format +@@ -78,7 +83,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 +93,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 +121,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." ++"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 +206,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." +@@ -260,154 +266,154 @@ msgstr[0] "" + "Au moins {0} Mio supplémentaire est nécessaire sur le système de fichiers " + "{1}." + msgstr[1] "" +-"Au moins {0} Mio supplémentaires sont nécessaires sur le système de fichiers" +-" {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:1721 + #, 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:1744 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:1762 + msgid "No groups marked for removal." + msgstr "Aucun groupe marqué pour suppression." + +-#: dnf/base.py:1710 ++#: dnf/base.py:1796 + msgid "No group marked for upgrade." + msgstr "Aucun groupe marqué pour mise à jour." + +-#: dnf/base.py:1925 ++#: dnf/base.py:2010 + #, 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:2012 dnf/base.py:2031 dnf/base.py:2044 dnf/base.py:2071 ++#: dnf/base.py:2124 dnf/base.py:2132 dnf/base.py:2266 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:2019 + #, 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." ++"Le paquet %s est déjà installé dans une version inférieure, impossible de le " ++"rétrograder." + +-#: dnf/base.py:1957 ++#: dnf/base.py:2042 + #, 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:2057 + #, 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:2068 + #, 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:2078 + #, python-format + msgid "" + "The same or higher version of %s is already installed, cannot update it." +@@ -415,187 +421,176 @@ 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:2121 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:2127 + #, 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:2152 + #, 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:2170 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:2185 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:2273 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:2278 + #, 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:2378 + 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:2380 + 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:2384 + 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:2386 + 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:2407 + #, 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:2415 + #, python-format + msgid ". Failing package is: %s" + msgstr ". Le paquet en erreur est : %s" + +-#: dnf/base.py:2328 ++#: dnf/base.py:2416 + #, 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:2428 + #, 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:2464 + msgid "The key has been approved." + msgstr "La clef a été approuvée." + +-#: dnf/base.py:2376 ++#: dnf/base.py:2467 + msgid "The key has been rejected." + msgstr "La clef a été rejetée." + +-#: dnf/base.py:2409 ++#: dnf/base.py:2500 + #, 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:2502 + msgid "Key imported successfully" + msgstr "La clé a bien été importée" + +-#: dnf/base.py:2415 ++#: dnf/base.py:2506 + msgid "Didn't install any keys" + msgstr "Toutes les clés n’ont pas été installées" + +-#: dnf/base.py:2418 ++#: dnf/base.py:2509 + #, python-format + msgid "" +-"The GPG keys listed for the \"%s\" repository are already installed but they are not correct for this package.\n" ++"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 "" +-"Les clés GPG listées pour le dépôt « %s » sont déjà installées mais sont incorrectes pour ce paquet.\n" ++"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:2520 + 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:2573 + msgid " * Maybe you meant: {}" + msgstr " * Peut-être vouliez-vous dire : {}" + +-#: dnf/base.py:2514 ++#: dnf/base.py:2605 + msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum" +-msgstr "Le paquet \"{}\" du dépôt local \"{}\" a une somme de contrôle incorrecte" ++msgstr "" ++"Le paquet \"{}\" du dépôt local \"{}\" a une somme de contrôle incorrecte" + +-#: dnf/base.py:2517 ++#: dnf/base.py:2608 + 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:2611 + 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:2614 + msgid "" + "Some packages have invalid cache, but cannot be downloaded due to \"--" + "cacheonly\" option" + msgstr "" +-"Certains paquets ont un cache invalide, mais ne peuvent pas être téléchargés" +-" à cause de l’option « --cacheonly »" ++"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:2632 dnf/base.py:2652 + msgid "No match for argument" + msgstr "Aucune correspondance pour le paramètre" + +-#: dnf/base.py:2549 dnf/base.py:2569 ++#: dnf/base.py:2640 dnf/base.py:2660 + 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:2642 + 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:2658 + 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:2705 + #, python-format + msgid "Package %s is already installed." + msgstr "Le paquet %s est déjà installé." +@@ -616,8 +611,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" +@@ -647,24 +642,32 @@ msgid "" + "The operation would result in switching of module '{0}' stream '{1}' to " + "stream '{2}'" + msgstr "" +-"Le résulta de l’opération sera le basculement du flux« {1} » du module « {0}" +-" » vers le flux« {2} »" ++"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 ' 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 ' 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 ». 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 " ++" ». 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,128 +676,108 @@ 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." + msgstr "" +-"Refus de l’importation automatique des clés lors d’une exécution sans surveillance.\n" ++"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)." ++"This command has to be run with superuser privileges (under the root user on " ++"most systems)." + 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 +786,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,15 +795,15 @@ 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." + msgstr "" +-"--destdir ou --downloaddir doit être utilisé avec la commande --downloadonly" +-" ou download ou system-upgrade command." ++"--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 +811,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 +820,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 +832,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 " + +@@ -890,7 +873,8 @@ msgstr "" + #, python-brace-format + msgid "" + "You have enabled checking of packages via GPG keys. This is a good thing.\n" +-"However, you do not have any GPG public keys installed. You need to download\n" ++"However, you do not have any GPG public keys installed. You need to " ++"download\n" + "the keys for packages you wish to install and install them.\n" + "You can do that by running the command:\n" + " rpm --import public.gpg.key\n" +@@ -902,8 +886,10 @@ msgid "" + "\n" + "For more information contact your distribution or package provider." + msgstr "" +-"Vous avez activé la vérification des paquets par clés GPG. C’est une bonne chose.\n" +-"Cependant, vous n’avez aucune clé GPG publique installée. Vous devez télécharger\n" ++"Vous avez activé la vérification des paquets par clés GPG. C’est une bonne " ++"chose.\n" ++"Cependant, vous n’avez aucune clé GPG publique installée. Vous devez " ++"télécharger\n" + "et installer les clés pour les paquets que vous souhaitez installer..\n" + "Vous pouvez le faire en lançant la commande :\n" + "rpm --import public. gpg. key\n" +@@ -913,7 +899,8 @@ msgstr "" + "pour un dépôt dans l’option « gpgkey » dans une section de configuration du\n" + "dépôt et {prog} l’installera pour vous.\n" + "\n" +-"Pour plus de renseignements, contactez votre distribution ou le fournisseur du paquet." ++"Pour plus de renseignements, contactez votre distribution ou le fournisseur " ++"du paquet." + + #: dnf/cli/commands/__init__.py:71 + #, python-format +@@ -924,38 +911,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 +980,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 +1218,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 +1250,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 "" + msgstr "" + +-#: 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." + +@@ -1347,8 +1337,8 @@ msgstr "" + + #: dnf/cli/commands/history.py:68 + msgid "" +-"For the replay command, don't check for installed packages matching those in" +-" transaction" ++"For the replay command, don't check for installed packages matching those in " ++"transaction" + msgstr "" + "Pour la commande replay, ne vérifie pas si les paquets installés " + "correspondent à ceux en transaction" +@@ -1363,8 +1353,8 @@ msgstr "" + + #: dnf/cli/commands/history.py:74 + msgid "" +-"For the replay command, skip packages that are not available or have missing" +-" dependencies" ++"For the replay command, skip packages that are not available or have missing " ++"dependencies" + msgstr "" + "Pour la commande replay, saute les paquets qui ne sont pas disponibles ou " + "qui ont des dépendances manquantes" +@@ -1385,25 +1375,25 @@ 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" +-" database." ++"Cannot undo transaction %s, doing so would result in an inconsistent package " ++"database." + 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,15 +1402,43 @@ 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 '..'." + msgstr "" +-"La définition de la plage d’identifiants de transaction est invalide « {} ».\n" ++"La définition de la plage d’identifiants de transaction est invalide « {} " ++"».\n" + "Utilisez « .. »." + +-#: dnf/cli/commands/history.py:226 ++#: dnf/cli/commands/history.py:283 + msgid "" + "Can't convert '{}' to transaction ID.\n" + "Use '', 'last', 'last-'." +@@ -1428,36 +1446,30 @@ msgstr "" + "Impossible de convertir « {} » à ID transaction.\n" + "Utiliser « », « last », « last- »." + +-#: 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 +1489,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}" +@@ -1493,8 +1505,7 @@ msgstr "Création des fichiers de cache pour tous les fichiers de métadonnées. + #: dnf/cli/commands/mark.py:39 + msgid "mark or unmark installed packages as installed by user." + msgstr "" +-"marquer ou démarquer les paquets installés comme installés par " +-"l’utilisateur." ++"marquer ou démarquer les paquets installés comme installés par l’utilisateur." + + #: dnf/cli/commands/mark.py:44 + msgid "" +@@ -1522,7 +1533,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,91 +1542,95 @@ 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: '{}'" ++"Only module name, stream, architecture or profile is used. Ignoring unneeded " ++"information in argument: '{}'" + 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 : « {} »" ++"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" + +@@ -1868,8 +1883,8 @@ msgstr "" + #: dnf/cli/commands/repoquery.py:162 + msgid "check dependencies exactly as given, opposite of --alldeps" + msgstr "" +-"vérifie les dépendances exactement telles qu’indiquées, le contraire de " +-"--alldeps" ++"vérifie les dépendances exactement telles qu’indiquées, le contraire de --" ++"alldeps" + + #: dnf/cli/commands/repoquery.py:164 + msgid "" +@@ -1927,8 +1942,8 @@ msgstr "affiche les changelogs du paquet" + #: dnf/cli/commands/repoquery.py:194 + #, python-format, python-brace-format + msgid "" +-"display format for listing packages: \"%%{name} %%{version} ...\", use " +-"--querytags to view full tag list" ++"display format for listing packages: \"%%{name} %%{version} ...\", use --" ++"querytags to view full tag list" + msgstr "" + "format d'affichage pour la liste des paquets : « %%{name} %%{version}… », " + "utilisez --querytags pour voir la liste complète des étiquettes" +@@ -2076,23 +2091,23 @@ msgstr "la clé à chercher" + + #: dnf/cli/commands/repoquery.py:295 + msgid "" +-"Option '--resolve' has to be used together with one of the '--conflicts', '" +-"--depends', '--enhances', '--provides', '--recommends', '--requires', '--" ++"Option '--resolve' has to be used together with one of the '--conflicts', '--" ++"depends', '--enhances', '--provides', '--recommends', '--requires', '--" + "requires-pre', '--suggests' or '--supplements' options" + msgstr "" +-"Option « --resolve » doit être utilisée en conjonction avec « --conflicts »," +-" « --depends », « --enhances », « --provides », « --recommends », « " +-"--requires », « --requires-pre », « --suggests » ou « --supplements" ++"Option « --resolve » doit être utilisée en conjonction avec « --conflicts », " ++"« --depends », « --enhances », « --provides », « --recommends », « --" ++"requires », « --requires-pre », « --suggests » ou « --supplements" + + #: dnf/cli/commands/repoquery.py:305 + msgid "" + "Option '--recursive' has to be used with '--whatrequires ' (optionally " +-"with '--alldeps', but not with '--exactdeps'), or with '--requires " +-"--resolve'" ++"with '--alldeps', but not with '--exactdeps'), or with '--requires --" ++"resolve'" + msgstr "" +-"Option « --recursive » doit être utilisée avec « --whatrequires » " +-"(optionnellement avec « --alldeps », mais pas avec « --exactdeps »), ou avec" +-" « --requires --resolve »" ++"Option « --recursive » doit être utilisée avec « --whatrequires " ++"» (optionnellement avec « --alldeps », mais pas avec « --exactdeps »), ou " ++"avec « --requires --resolve »" + + #: dnf/cli/commands/repoquery.py:312 + msgid "argument {} requires --whatrequires or --whatdepends option" +@@ -2106,13 +2121,17 @@ msgstr "Le paquet {} ne contient aucun fichier" + #, python-brace-format + msgid "" + "No valid switch specified\n" +-"usage: {prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--tree]\n" ++"usage: {prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--" ++"recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--" ++"tree]\n" + "\n" + "description:\n" + " For the given packages print a tree of thepackages." + msgstr "" + "Aucune option valide spécifiée\n" +-"utilisation : {prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--tree]\n" ++"utilisation : {prog} repoquery [--conflicts|--enhances|--obsoletes|--" ++"provides|--recommends|--requires|--suggest|--supplements|--whatrequires] " ++"[key] [--tree]\n" + "\n" + "description :\n" + " Afficher une arborescence des paquets pour le paquet donné." +@@ -2133,27 +2152,26 @@ 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" + +-#. TRANSLATORS: separator used between package attributes (eg. Name & Summary +-#. & URL) ++#. TRANSLATORS: separator used between package attributes (eg. Name & Summary & URL) + #: dnf/cli/commands/search.py:76 + msgid " & " + msgstr " & " +@@ -2287,20 +2305,21 @@ msgstr "" + "help affiche l’aide\n" + "repository (ou repo) active, désactive ou liste les dépôts\n" + "resolvedep résout l’ensemble de transactions\n" +-"transaction (ou ts) liste, réinitialise ou exécute l’ensemble de transactions\n" ++"transaction (ou ts) liste, réinitialise ou exécute l’ensemble de " ++"transactions\n" + "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" + +@@ -2337,19 +2356,19 @@ msgstr "nouveau paquet" + + #: dnf/cli/commands/updateinfo.py:50 + msgid "Critical/Sec." +-msgstr "Sécurité/Niveau critique" ++msgstr "Sécurité/Niveau critique." + + #: dnf/cli/commands/updateinfo.py:51 + msgid "Important/Sec." +-msgstr "Sécurité/Niveau important" ++msgstr "Sécurité/Niveau important." + + #: dnf/cli/commands/updateinfo.py:52 + msgid "Moderate/Sec." +-msgstr "Sécurité/niveau modéré" ++msgstr "Sécurité/niveau modéré." + + #: dnf/cli/commands/updateinfo.py:53 + msgid "Low/Sec." +-msgstr "Sécurité/Niveau bas" ++msgstr "Sécurité/Niveau bas." + + #: dnf/cli/commands/updateinfo.py:63 + msgid "display advisories about packages" +@@ -2362,8 +2381,7 @@ msgstr "alertes pour les nouvelles versions de paquets installés (par défaut)" + #: dnf/cli/commands/updateinfo.py:80 + msgid "advisories about equal and older versions of installed packages" + msgstr "" +-"alertes pour des versions équivalentes ou plus anciennes de paquets " +-"installés" ++"alertes pour des versions équivalentes ou plus anciennes de paquets installés" + + #: dnf/cli/commands/updateinfo.py:83 + msgid "" +@@ -2459,7 +2477,7 @@ msgstr "autre(s) alertes)" + + #: dnf/cli/commands/updateinfo.py:316 + msgid "Unknown/Sec." +-msgstr "Sécurité/Niveau inconnu" ++msgstr "Sécurité/Niveau inconnu." + + #: dnf/cli/commands/updateinfo.py:357 + msgid "Bugs" +@@ -2497,8 +2515,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é" + +@@ -2533,8 +2551,8 @@ msgstr "Terminé." + #: dnf/cli/main.py:116 + msgid "No read/execute access in current directory, moving to /" + msgstr "" +-"Pas d’accès en lecture/exécution sur le répertoire courant, déplacement dans" +-" /" ++"Pas d’accès en lecture/exécution sur le répertoire courant, déplacement " ++"dans /" + + #: dnf/cli/main.py:135 + msgid "try to add '{}' to command line to replace conflicting packages" +@@ -2677,8 +2695,7 @@ msgstr "niveau de déboguage pour la sortie" + + #: dnf/cli/option_parser.py:236 + msgid "dumps detailed solving results into files" +-msgstr "" +-"détaille les résultats de résolution des dépendances dans des fichiers" ++msgstr "détaille les résultats de résolution des dépendances dans des fichiers" + + #: dnf/cli/option_parser.py:240 + msgid "show duplicates, in repos, in list/search commands" +@@ -2695,8 +2712,8 @@ msgid "" + "capabilities that the package obsoletes for info, list and repoquery" + msgstr "" + "active la mécanique de traitement des paquets obsolètes de {prog} pour les " +-"mises à jour ou affiche les fonctionnalités qu’un paquet rend obsolètes pour" +-" les commandes « info », « list » et « repoquery »" ++"mises à jour ou affiche les fonctionnalités qu’un paquet rend obsolètes pour " ++"les commandes « info », « list » et « repoquery »" + + #: dnf/cli/option_parser.py:251 + msgid "debugging output level for rpm" +@@ -2720,8 +2737,8 @@ msgstr "" + + #: dnf/cli/option_parser.py:266 + msgid "" +-"Disable repositories. List option. Supports globs, can be specified multiple" +-" times." ++"Disable repositories. List option. Supports globs, can be specified multiple " ++"times." + msgstr "" + "Désactive les dépôts. Option de liste. Prend en charge les globs, peut être " + "renseigné plusieurs fois." +@@ -2731,8 +2748,8 @@ msgid "" + "enable just specific repositories by an id or a glob, can be specified " + "multiple times" + msgstr "" +-"active seulement des dépôts spécifiques par id ou par le caractère générique" +-" (*), peut être spécifié plusieurs fois" ++"active seulement des dépôts spécifiques par id ou par le caractère générique " ++"(*), peut être spécifié plusieurs fois" + + #: dnf/cli/option_parser.py:275 + msgid "enable repos with config-manager command (automatically saves)" +@@ -2827,8 +2844,8 @@ msgstr "" + #: dnf/cli/option_parser.py:339 + msgid "Include packages needed to fix the given BZ, in updates" + msgstr "" +-"Inclut dans les mises à jour les paquets nécessaires pour résoudre le ticket" +-" BugZilla cité" ++"Inclut dans les mises à jour les paquets nécessaires pour résoudre le ticket " ++"BugZilla cité" + + #: dnf/cli/option_parser.py:342 + msgid "Include packages needed to fix the given CVE, in updates" +@@ -2862,13 +2879,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 +2893,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 +2933,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 +2966,311 @@ 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" ++msgstr "Fournir : %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" ++"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 +3279,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 +3292,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 +3319,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 "" + msgstr "" + +-#: 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 :" ++msgstr "Version :" + +-#: 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" +@@ -3630,8 +3626,8 @@ msgstr "Inconnu" + #, python-format + msgid "Unable to find information about the locking process (PID %d)" + msgstr "" +-"Impossible de trouver des informations sur le processus de verrouillage (PID" +-" %d)" ++"Impossible de trouver des informations sur le processus de verrouillage (PID " ++"%d)" + + #: dnf/cli/utils.py:117 + #, python-format +@@ -3653,10 +3649,6 @@ msgstr " A débuté  : %s - il y a %s" + msgid " State : %s" + msgstr " État : %s" + +-#: dnf/comps.py:104 +-msgid "skipping." +-msgstr "ignorer." +- + #: dnf/comps.py:196 dnf/comps.py:692 dnf/comps.py:706 + #, python-format + msgid "Module or Group '%s' is not installed." +@@ -3677,7 +3669,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 +3694,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 +3742,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 +3788,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 +3809,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 " +@@ -3835,7 +3845,7 @@ msgstr "extension DNSSEC : " + msgid "Testing already imported keys for their validity." + msgstr "Test de validité des clefs déjà importées." + +-#: dnf/drpm.py:62 dnf/repo.py:268 ++#: dnf/drpm.py:62 dnf/repo.py:267 + #, python-format + msgid "unsupported checksum type: %s" + msgstr "type de somme de contrôle non pris en charge : %s" +@@ -3878,7 +3888,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 :" +@@ -3888,10 +3898,12 @@ msgstr[1] "Problèmes de dépendance modulaire :" + #, python-format + msgid "" + "Malformed lock file found: %s.\n" +-"Ensure no other dnf/yum process is running and remove the lock file manually or run systemd-tmpfiles --remove dnf.conf." ++"Ensure no other dnf/yum process is running and remove the lock file manually " ++"or run systemd-tmpfiles --remove dnf.conf." + msgstr "" + "Fichier verrou malformé trouvé : %s.\n" +-"Assurez-vous qu’aucun autre processus {prog} n’est en cours d’exécution et supprimez le fichier verrou, ou exécutez systemd-tmpfiles --remove dnf.conf." ++"Assurez-vous qu’aucun autre processus {prog} n’est en cours d’exécution et " ++"supprimez le fichier verrou, ou exécutez systemd-tmpfiles --remove dnf.conf." + + #: dnf/module/__init__.py:26 + msgid "Enabling different stream for '{}'." +@@ -3915,7 +3927,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 +3977,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,93 +3987,112 @@ 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 « " +-"{1}:{2} » ne sont pas actives" ++"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 : {}" ++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: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 "" +-"L’installation du module à partir du dépôt Fail-Safe n’est pas permise" ++"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: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: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" ++"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 "" +-"Only module name is required. Ignoring unneeded information in argument: " +-"'{}'" ++"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: '{}'" + 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 +4103,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,21 +4128,21 @@ 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 " +-": {}" ++"Aucun élément correspondant aux modèles de plugin de désactivation " ++"suivants : {}" + + #: dnf/repo.py:84 + #, python-format +@@ -4083,7 +4154,7 @@ msgid "Already downloaded" + msgstr "Déjà téléchargé" + + #. pinging mirrors, this might take a while +-#: dnf/repo.py:347 ++#: dnf/repo.py:346 + #, python-format + msgid "determining the fastest mirror (%s hosts).. " + msgstr "détermination du miroir le plus rapide (%s hôtes).. " +@@ -4098,10 +4169,29 @@ 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:32 ++#, python-format ++msgid "Using rpmkeys executable at %s to verify signatures" ++msgstr "" ++"Utilisation de l'exécutable rpmkeys dans %s pour vérifier les signatures" ++ ++#: dnf/rpm/miscutils.py:66 ++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,177 +4238,252 @@ 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 " + "\"{major_supp}\"." + msgstr "" +-"Version majeure incompatible « {major} », la version majeure prise en charge" +-" est « {major_supp} »." ++"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}\"." ++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}\"." ++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}\"." ++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." ++"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 "skipping." ++#~ msgstr "ignorer." ++ ++#~ 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}." ++ ++#~ 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" + + #~ msgid "Available query-tags: use --queryformat \".. %{tag} ..\"" +-#~ msgstr "Balises de requêtes disponibles : utiliser --queryformat \"..%{tag}..\"" ++#~ msgstr "" ++#~ "Balises de requêtes disponibles : utiliser --queryformat \"..%{tag}..\"" + + #~ msgid "Bad transaction IDs, or package(s), given" + #~ msgstr "Des paquets ou identifiants de transaction fournis sont erronés" + + #~ msgid "" +-#~ "Display capabilities that the package depends on for running a %%pre script." ++#~ "Display capabilities that the package depends on for running a %%pre " ++#~ "script." + #~ msgstr "" + #~ "Affiche les fonctionnalités dont le paquet dépend pour le lancement d’un " + #~ "script %%pre." +diff --git a/po/ja.po b/po/ja.po +index 6435271c..05bbda02 100644 +--- a/po/ja.po ++++ b/po/ja.po +@@ -14,7 +14,7 @@ + # Hajime Taira , 2017. #zanata + # Ooyama Yosiyuki , 2017. #zanata + # Casey Jones , 2018. #zanata +-# Ludek Janda , 2018. #zanata ++# Ludek Janda , 2018. #zanata, 2021. + # Noriko Mizumoto , 2018. #zanata + # Ooyama Yosiyuki , 2018. #zanata + # Hajime Taira , 2019. #zanata +@@ -22,20 +22,23 @@ + # Julien Humbert , 2020. + # Casey Jones , 2020. + # Hajime Taira , 2020. ++# Sundeep Anand , 2021. ++# Transtats , 2022. + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2020-10-05 09:18-0400\n" +-"PO-Revision-Date: 2020-07-27 05:29+0000\n" +-"Last-Translator: Hajime Taira \n" +-"Language-Team: Japanese \n" ++"POT-Creation-Date: 2022-02-28 11:24+0100\n" ++"PO-Revision-Date: 2022-03-09 12:39+0000\n" ++"Last-Translator: Transtats \n" ++"Language-Team: Japanese \n" + "Language: ja\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=1; plural=0;\n" +-"X-Generator: Weblate 4.1.1\n" ++"X-Generator: Weblate 4.11.2\n" + + #: dnf/automatic/emitter.py:32 + #, python-format +@@ -45,7 +48,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 +85,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 +95,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 +108,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,439 +122,455 @@ 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 接続で実行する際、メタデータタイマーキャッシュは無効化されました。" ++msgstr "" ++"metered 接続で実行する際、メタデータタイマーキャッシュは無効化されました。" + +-#: 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 "メタデータタイマーキャッシュは無効化されました。" + +-#: 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 "ダウンロード済みのパッケージは、次の正常なトランザクションまでキャッシュに保存されました。" ++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%% がキャッシュされていました)" ++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%% が無駄になりました)" ++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 の公開鍵がインストールされていません" + +-#: 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:1721 + #, 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:1744 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:1762 + msgid "No groups marked for removal." + msgstr "削除対象のパッケージはありません。" + +-#: dnf/base.py:1710 ++#: dnf/base.py:1796 + msgid "No group marked for upgrade." + msgstr "アップグレード対象のグループはありません。" + +-#: dnf/base.py:1925 ++#: dnf/base.py:2010 + #, 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:2012 dnf/base.py:2031 dnf/base.py:2044 dnf/base.py:2071 ++#: dnf/base.py:2124 dnf/base.py:2132 dnf/base.py:2266 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:2019 + #, python-format + msgid "Package %s of lower version already installed, cannot downgrade it." +-msgstr "下位バージョンのパッケージ %s はインストール済みなので、ダウングレードできません。" ++msgstr "" ++"下位バージョンのパッケージ %s はインストール済みなので、ダウングレードできま" ++"せん。" + +-#: dnf/base.py:1957 ++#: dnf/base.py:2042 + #, python-format + msgid "Package %s not installed, cannot reinstall it." +-msgstr "パッケージ %s はインストールされていないのでの、再インストールできません。" ++msgstr "" ++"パッケージ %s はインストールされていないのでの、再インストールできません。" + +-#: dnf/base.py:1972 ++#: dnf/base.py:2057 + #, python-format + msgid "File %s is a source package and cannot be updated, ignoring." + msgstr "ファイル %s はソースパッケージで更新できません。無視します。" + +-#: dnf/base.py:1978 ++#: dnf/base.py:2068 + #, python-format + msgid "Package %s not installed, cannot update it." + msgstr "パッケージ %s はインストールされていないので、更新できません。" + +-#: dnf/base.py:1987 ++#: dnf/base.py:2078 + #, 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:2121 dnf/cli/commands/reinstall.py:81 + #, python-format + msgid "Package %s available, but not installed." + msgstr "パッケージ %s は利用可能ですが、インストールされていません。" + +-#: dnf/base.py:2032 ++#: dnf/base.py:2127 + #, 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:2152 + #, python-format + msgid "No package %s installed." + msgstr "パッケージ %s はインストールされていません。" + +-#: dnf/base.py:2075 dnf/cli/commands/install.py:136 ++#: dnf/base.py:2170 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:2185 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:2273 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:2278 + #, python-format + msgid "Package %s of lowest version already installed, cannot downgrade it." +-msgstr "最下位バージョンのパッケージ %s はインストール済みなので、ダウングレードできません。" ++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:2378 + msgid "No security updates needed, but {} update available" + msgstr "セキュリティー更新は必要ありませんが、{} 更新が利用可能です" + +-#: dnf/base.py:2292 ++#: dnf/base.py:2380 + msgid "No security updates needed, but {} updates available" + msgstr "セキュリティー更新は必要ありませんが、{} 更新が利用可能です" + +-#: dnf/base.py:2296 ++#: dnf/base.py:2384 + msgid "No security updates needed for \"{}\", but {} update available" + msgstr "\"{}\" のセキュリティー更新は必要ありませんが、{} 更新が利用可能です" + +-#: dnf/base.py:2298 ++#: dnf/base.py:2386 + 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:2407 + #, python-format + msgid "Unable to retrieve a key for a commandline package: %s" +-msgstr "" ++msgstr "コマンドラインパッケージのキーを取得できません: %s" + +-#: dnf/base.py:2327 ++#: dnf/base.py:2415 + #, python-format + msgid ". Failing package is: %s" + msgstr ". 失敗したパッケージは: %s" + +-#: dnf/base.py:2328 ++#: dnf/base.py:2416 + #, python-format + msgid "GPG Keys are configured as: %s" + msgstr "GPG 鍵が設定されています: %s" + +-#: dnf/base.py:2340 ++#: dnf/base.py:2428 + #, python-format + msgid "GPG key at %s (0x%s) is already installed" + msgstr "%s (0x%s) の GPG 鍵はインストール済みです" + +-#: dnf/base.py:2373 ++#: dnf/base.py:2464 + msgid "The key has been approved." + msgstr "鍵が承認されました。" + +-#: dnf/base.py:2376 ++#: dnf/base.py:2467 + msgid "The key has been rejected." + msgstr "鍵が拒否されました。" + +-#: dnf/base.py:2409 ++#: dnf/base.py:2500 + #, python-format + msgid "Key import failed (code %d)" + msgstr "鍵のインポートに失敗しました (コード: %d)" + +-#: dnf/base.py:2411 ++#: dnf/base.py:2502 + msgid "Key imported successfully" + msgstr "鍵のインポートに成功しました" + +-#: dnf/base.py:2415 ++#: dnf/base.py:2506 + msgid "Didn't install any keys" + msgstr "鍵を 1 つもインストールしませんでした" + +-#: dnf/base.py:2418 ++#: dnf/base.py:2509 + #, python-format + msgid "" +-"The GPG keys listed for the \"%s\" repository are already installed but they are not correct for this package.\n" ++"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 "" +-"\"%s\" リポジトリーに一覧表示されている GPG 鍵はインストール済みですが、このパッケージには適切ではありません。\n" ++"\"%s\" リポジトリーに一覧表示されている GPG 鍵はインストール済みですが、この" ++"パッケージには適切ではありません。\n" + "正しい鍵 URL がこのリポジトリー用に設定されているか確認してください。" + +-#: dnf/base.py:2429 ++#: dnf/base.py:2520 + msgid "Import of key(s) didn't help, wrong key(s)?" + msgstr "鍵をインポートしても役に立ちませんでした。鍵が間違っていませんか?" + +-#: dnf/base.py:2482 ++#: dnf/base.py:2573 + msgid " * Maybe you meant: {}" + msgstr " * おそらく: {}" + +-#: dnf/base.py:2514 ++#: dnf/base.py:2605 + msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum" +-msgstr "ローカルリポジトリー \"{}\" のパッケージ \"{}\" のチェックサムは正しくありません" ++msgstr "" ++"ローカルリポジトリー \"{}\" のパッケージ \"{}\" のチェックサムは正しくありま" ++"せん" + +-#: dnf/base.py:2517 ++#: dnf/base.py:2608 + msgid "Some packages from local repository have incorrect checksum" +-msgstr "ローカルリポジトリーのいくつかのパッケージのチェックサムは正しくありません" ++msgstr "" ++"ローカルリポジトリーのいくつかのパッケージのチェックサムは正しくありません" + +-#: dnf/base.py:2520 ++#: dnf/base.py:2611 + msgid "Package \"{}\" from repository \"{}\" has incorrect checksum" +-msgstr "リポジトリー \"{}\" のパッケージ \"{}\" のチェックサムは正しくありません" ++msgstr "" ++"リポジトリー \"{}\" のパッケージ \"{}\" のチェックサムは正しくありません" + +-#: dnf/base.py:2523 ++#: dnf/base.py:2614 + 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:2632 dnf/base.py:2652 + msgid "No match for argument" + msgstr "一致した引数がありません" + +-#: dnf/base.py:2549 dnf/base.py:2569 ++#: dnf/base.py:2640 dnf/base.py:2660 + msgid "All matches were filtered out by exclude filtering for argument" +-msgstr "すべての検索結果は引数の除外フィルタリングに一致しません(filter out)" ++msgstr "すべての検索結果は引数の除外フィルタリングに一致しません (filter out)" + +-#: dnf/base.py:2551 ++#: dnf/base.py:2642 + msgid "All matches were filtered out by modular filtering for argument" +-msgstr "すべての検出結果は引数のモジュラーフィルタリングに一致しません(filter out)" ++msgstr "" ++"すべての検出結果は引数のモジュラーフィルタリングに一致しません (filter out)" + +-#: dnf/base.py:2567 ++#: dnf/base.py:2658 + msgid "All matches were installed from a different repository for argument" +-msgstr "すべての検索結果は引数に対し異なるレポジトリからインストールされたものです" ++msgstr "" ++"すべての検索結果は引数に対し異なるレポジトリからインストールされたものです" + +-#: dnf/base.py:2583 ++#: dnf/base.py:2705 + #, python-format + msgid "Package %s is already installed." + msgstr "パッケージ %s は既にインストールされています。" +@@ -571,8 +590,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" +@@ -601,46 +620,56 @@ msgstr " ビルド : %s (日時: %s)" + msgid "" + "The operation would result in switching of module '{0}' stream '{1}' to " + "stream '{2}'" +-msgstr "オペレーションは、モジュール '{0}' ストリーム '{1}' を ストリーム '{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 ' 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 ' command. " ++"After you reset the module, you can install the other stream." + msgstr "" +-"モジュールの有効なストリームを切り替えることはできません。\n" +-"モジュールからインストールされた全てのコンテンツを削除し、 '{prog} module reset ' コマンドを使用してリセットすることが推奨されます。モジュールのリセット後、他のストリームをインストール可能です。" ++"設定オプション module_stream_switch から明示的に有効化されていない限り、モ" ++"ジュールの有効なストリームを切り替えることはできません。\n" ++"モジュールからインストールされた全てのコンテンツを削除し、'{prog} module " ++"reset ' コマンドを使用してリセットすることが推奨されます。モ" ++"ジュールのリセット後、他のストリームをインストール可能です。" + +-#: 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キーのインストール、トランザクションのチェックのみ行います。" ++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,171 +677,159 @@ 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: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 "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ユーザー)で実行しなければいけません。" ++"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)'\"" ++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} プラグインコマンドを実行できません、プラグインのロードが現在無効になっているようです。" ++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." + msgstr "" +-"--destdir または --downloaddir は、--downloadonly、download あるいは system-upgrade " +-"コマンドと共に使用する必要があります。" ++"--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 " +-"コマンドと共に使用しなければなりません。" ++"--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' を参照してください)" ++"警告: アクティブな 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' を使用してください)" ++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 に含めます " + +@@ -824,13 +841,16 @@ msgstr "問題を診断するには実行してみてください: '%s'." + #: dnf/cli/commands/__init__.py:40 + #, python-format + msgid "You probably have corrupted RPMDB, running '%s' might fix the issue." +-msgstr "RPMDB を破損させたかもしれませんが、'%s' を実行することでこの問題を解決できる可能性があります。" ++msgstr "" ++"RPMDB を破損させたかもしれませんが、'%s' を実行することでこの問題を解決できる" ++"可能性があります。" + + #: dnf/cli/commands/__init__.py:44 + #, python-brace-format + msgid "" + "You have enabled checking of packages via GPG keys. This is a good thing.\n" +-"However, you do not have any GPG public keys installed. You need to download\n" ++"However, you do not have any GPG public keys installed. You need to " ++"download\n" + "the keys for packages you wish to install and install them.\n" + "You can do that by running the command:\n" + " rpm --import public.gpg.key\n" +@@ -849,11 +869,13 @@ msgstr "" + " rpm --import public.gpg.key\n" + "\n" + "\n" +-"代わりにレポジトリーセクションの 'gpgkey' オプションにあるレポジトリーを使用し\n" ++"代わりにレポジトリーセクションの 'gpgkey' オプションにあるレポジトリーを使用" ++"し\n" + "キーのurlを特定したのち、 {prog} がインストールされます。\n" + "\n" + "\n" +-"詳細情報はディストリビューションまたはパッケージプロバイダーにコンタクトしてください。" ++"詳細情報はディストリビューションまたはパッケージプロバイダーにコンタクトして" ++"ください。" + + #: dnf/cli/commands/__init__.py:71 + #, python-format +@@ -864,38 +886,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 +955,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} コマンドでヘルプ表示" +@@ -1088,7 +1110,8 @@ 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" +@@ -1167,8 +1190,12 @@ 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 +1221,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 "" + 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 "利用可能なサブコマンド: {} (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 +1302,31 @@ 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" ++"For the replay command, don't check for installed packages matching those in " ++"transaction" + msgstr "" ++"replay コマンドの場合は、トランザクション内のパッケージに一致するインストール" ++"済みパッケージを確認しない" + + #: dnf/cli/commands/history.py:71 + msgid "" + "For the replay command, don't check for extra packages pulled into the " + "transaction" + msgstr "" ++"replay コマンドの場合は、トランザクションにプルされた追加パッケージを確認しな" ++"い" + + #: dnf/cli/commands/history.py:74 + msgid "" +-"For the replay command, skip packages that are not available or have missing" +-" dependencies" ++"For the replay command, skip packages that are not available or have missing " ++"dependencies" + msgstr "" ++"replay コマンドの場合は、利用できないパッケージや、依存関係が不足しているパッ" ++"ケージをスキップ" + + #: dnf/cli/commands/history.py:94 + msgid "" +@@ -1304,41 +1337,68 @@ 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 を取り消すことはできません。取り消すことで、パッケージデータベースに矛盾が生じます。" ++"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 をロールバックすることはできません。ロールバックすることで、パッケージデータベースに矛盾が生じます。" ++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 '..'." +@@ -1346,7 +1406,7 @@ msgstr "" + "無効なトランザクション ID の範囲の定義 '{}'。\n" + "'..' を使用してください。" + +-#: dnf/cli/commands/history.py:226 ++#: dnf/cli/commands/history.py:283 + msgid "" + "Can't convert '{}' to transaction ID.\n" + "Use '', 'last', 'last-'." +@@ -1354,40 +1414,29 @@ msgstr "" + "'{}' をトランザクション IDに変換できません。\n" + "'', 'last', 'last-' を使用してください。" + +-#: 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 +1455,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}" +@@ -1421,7 +1470,9 @@ 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 "" +@@ -1449,7 +1500,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 +1509,95 @@ 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 "モジュール名、ストリーム、アーキテクチャーまたはプロファイルのみが使用されています。引数: '{}' の不要な情報は無視します" ++"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 "{} {} {}: 引数が足りません" + +@@ -1729,7 +1786,9 @@ msgstr "キーワードに一致するパッケージを検索します" + 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)" +@@ -1751,7 +1810,9 @@ 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" +@@ -1793,7 +1854,9 @@ 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" +@@ -1815,7 +1878,9 @@ 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 がネガティブな場合は N 以外の最新のもの)" ++msgstr "" ++"特定の name.arch に最新パッケージ N を表示します (または N がネガティブな場合" ++"は N 以外の最新のもの)" + + #: dnf/cli/commands/repoquery.py:177 + msgid "list also packages of inactive module streams" +@@ -1840,9 +1905,11 @@ msgstr "パッケージの changelogs を表示します" + #: dnf/cli/commands/repoquery.py:194 + #, python-format, python-brace-format + msgid "" +-"display format for listing packages: \"%%{name} %%{version} ...\", use " +-"--querytags to view full tag list" ++"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,19 +1920,24 @@ 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 "" + "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" +@@ -1881,7 +1953,8 @@ msgstr "インストール済みの installonly パッケージへのクエリ + + #: 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" +@@ -1895,7 +1968,8 @@ msgstr "パッケージが競合する機能を表示します。" + 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." +@@ -1920,9 +1994,10 @@ 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." +@@ -1949,7 +2024,9 @@ msgstr "利用可能なリポジトリーに存在しないパッケージのみ + msgid "" + "Display only packages that provide an upgrade for some already installed " + "package." +-msgstr "インストール済みのパッケージの一部にアップグレードを提供するパッケージのみを表示します。" ++msgstr "" ++"インストール済みのパッケージの一部にアップグレードを提供するパッケージのみを" ++"表示します。" + + #: dnf/cli/commands/repoquery.py:256 + #, python-brace-format +@@ -1971,26 +2048,28 @@ msgstr "検索するための鍵" + + #: dnf/cli/commands/repoquery.py:295 + msgid "" +-"Option '--resolve' has to be used together with one of the '--conflicts', '" +-"--depends', '--enhances', '--provides', '--recommends', '--requires', '--" ++"Option '--resolve' has to be used together with one of the '--conflicts', '--" ++"depends', '--enhances', '--provides', '--recommends', '--requires', '--" + "requires-pre', '--suggests' or '--supplements' options" + msgstr "" +-"オプションの '--resolve' は、'--conflicts'、'--depends'、'--enhances'、'--provides'、'--" +-"recommends'、'--requires'、'--requires-pre'、'--suggests' または '--supplements' " +-"オプションのいずれか 1 つと使用する必要があります。" ++"オプションの '--resolve' は、'--conflicts'、'--depends'、'--enhances'、'--" ++"provides'、'--recommends'、'--requires'、'--requires-pre'、'--suggests' また" ++"は '--supplements' オプションのいずれか 1 つと使用する必要があります" + + #: dnf/cli/commands/repoquery.py:305 + msgid "" + "Option '--recursive' has to be used with '--whatrequires ' (optionally " +-"with '--alldeps', but not with '--exactdeps'), or with '--requires " +-"--resolve'" ++"with '--alldeps', but not with '--exactdeps'), or with '--requires --" ++"resolve'" + msgstr "" +-"オプションの '--recursive' は、'--whatrequires ' (オプションでは '--exactdeps' ではなく、'" +-"--alldeps' と共に使用) または '--requires --resolve' と共に使用する必要があります。" ++"オプションの '--recursive' は、'--whatrequires ' (オプションでは '--" ++"exactdeps' ではなく、'--alldeps' と共に使用) または '--requires --" ++"resolve' と共に使用する必要があります" + + #: dnf/cli/commands/repoquery.py:312 + msgid "argument {} requires --whatrequires or --whatdepends option" +-msgstr "引数 {} は --whatrequires または --whatdepends オプションを必要とします" ++msgstr "" ++"引数 {} は --whatrequires または --whatdepends オプションを必要とします" + + #: dnf/cli/commands/repoquery.py:344 + msgid "Package {} contains no files" +@@ -2000,13 +2079,17 @@ msgstr "パッケージ {} はファイルを含んでいません" + #, python-brace-format + msgid "" + "No valid switch specified\n" +-"usage: {prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--tree]\n" ++"usage: {prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--" ++"recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--" ++"tree]\n" + "\n" + "description:\n" + " For the given packages print a tree of thepackages." + msgstr "" + "正規のスイッチが特定されません\n" +-"usage: {prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--tree]\n" ++"usage: {prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--" ++"recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--" ++"tree]\n" + "\n" + "説明:\n" + " 与えられたパッケージではパッケージのツリーを表示します。" +@@ -2027,27 +2110,26 @@ 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" + +-#. TRANSLATORS: separator used between package attributes (eg. Name & Summary +-#. & URL) ++#. TRANSLATORS: separator used between package attributes (eg. Name & Summary & URL) + #: dnf/cli/commands/search.py:76 + msgid " & " + msgstr " & " +@@ -2123,7 +2205,8 @@ msgid "" + " disable: disable repositories. option = repository id" + msgstr "" + "{} arg [オプション]\n" +-" 一覧: リポジトリーとその状態を一覧表示します。オプション = [all | id | glob]\n" ++" 一覧: リポジトリーとその状態を一覧表示します。オプション = [all | id | " ++"glob]\n" + " 有効化: リポジトリーの有効化。オプション = リポジトリー id\n" + " 無効化: リポジトリーの無効化。オプション = リポジトリー id" + +@@ -2181,27 +2264,30 @@ msgstr "" + "ヘルプ ヘルプの印刷\n" + "リポジトリー (または repo) リポジトリーの有効化、無効化、または一覧表示\n" + "resolvedep トランザクションセットの解決\n" +-"トランザクション (または ts) トランザクションセットの一覧表示、再設定、または実行\n" ++"トランザクション (または ts) トランザクションセットの一覧表示、再設定、" ++"または実行\n" + "実行 トランザクションセットの解決および実行\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 "シェルを終了します" + + #: dnf/cli/commands/swap.py:35 + #, python-brace-format + msgid "run an interactive {prog} mod for remove and install one spec" +-msgstr "一つのspecを削除またはインストールするためインタラクティブ {prog} モジュールを実行" ++msgstr "" ++"一つのspecを削除またはインストールするためインタラクティブ {prog} モジュール" ++"を実行" + + #: dnf/cli/commands/swap.py:40 + msgid "The specs that will be removed" +@@ -2253,13 +2339,16 @@ 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" +@@ -2385,8 +2474,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 "インストール済み" + +@@ -2400,7 +2489,8 @@ msgstr "正" + + #: dnf/cli/commands/upgrade.py:40 + msgid "upgrade a package or packages on your system" +-msgstr "システム上の 1 つのパッケージまたは複数のパッケージをアップグレードします" ++msgstr "" ++"システム上の 1 つのパッケージまたは複数のパッケージをアップグレードします" + + #: dnf/cli/commands/upgrade.py:44 + msgid "Package to upgrade" +@@ -2410,7 +2500,9 @@ msgstr "アップグレードするパッケージ" + msgid "" + "upgrade, but only 'newest' package match which fixes a problem that affects " + "your system" +-msgstr "システムに影響する問題を修正する「最新の」パッケージに一致したもののみをアップグレードします" ++msgstr "" ++"システムに影響する問題を修正する「最新の」パッケージに一致したもののみをアッ" ++"プグレードします" + + #: dnf/cli/main.py:88 + msgid "Terminated." +@@ -2422,23 +2514,29 @@ 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." +@@ -2530,7 +2628,9 @@ 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" +@@ -2566,8 +2666,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" +@@ -2585,19 +2685,25 @@ msgstr "すべての質問に「いいえ」(no) と自動的に答えます" + msgid "" + "Enable additional repositories. List option. Supports globs, can be " + "specified multiple times." +-msgstr "追加レポジトリを有効化、オプションのリスト、globsのサポートは何度でも指定可能です。" ++msgstr "" ++"追加レポジトリを有効化、オプションのリスト、globsのサポートは何度でも指定可能" ++"です。" + + #: dnf/cli/option_parser.py:266 + msgid "" +-"Disable repositories. List option. Supports globs, can be specified multiple" +-" times." +-msgstr "追加レポジトリを無効化、オプションのリスト、globsのサポートは何度でも指定可能です。" ++"Disable repositories. List option. Supports globs, can be specified multiple " ++"times." ++msgstr "" ++"追加レポジトリを無効化、オプションのリスト、globsのサポートは何度でも指定可能" ++"です。" + + #: dnf/cli/option_parser.py:270 + msgid "" + "enable just specific repositories by an id or a glob, can be specified " + "multiple times" +-msgstr "id または glob により特定のリポジトリーだけを有効にします。複数回指定することが可能です" ++msgstr "" ++"id または glob により特定のリポジトリーだけを有効にします。複数回指定すること" ++"が可能です" + + #: dnf/cli/option_parser.py:275 + msgid "enable repos with config-manager command (automatically saves)" +@@ -2619,7 +2725,9 @@ 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" +@@ -2699,7 +2807,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 +2817,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 +2831,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 +2871,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 +2904,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 +3214,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 +3227,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 +3254,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 "" + 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" +@@ -3492,10 +3580,6 @@ msgstr " 開始しました : %s - %s 秒経過" + msgid " State : %s" + msgstr " 状態 : %s" + +-#: dnf/comps.py:104 +-msgid "skipping." +-msgstr "スキップします。" +- + #: dnf/comps.py:196 dnf/comps.py:692 dnf/comps.py:706 + #, python-format + msgid "Module or Group '%s' is not installed." +@@ -3512,16 +3596,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 +3616,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 +3671,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 +3712,43 @@ 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/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 "モジュラーパッケージ '{}' のモジュラーメタデータは利用不可です、システムにインストールはできません" ++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 " +@@ -3668,7 +3770,7 @@ msgstr "DNSSEC 拡張: " + msgid "Testing already imported keys for their validity." + msgstr "すでにインポートされた鍵の有効性をテストします。" + +-#: dnf/drpm.py:62 dnf/repo.py:268 ++#: dnf/drpm.py:62 dnf/repo.py:267 + #, python-format + msgid "unsupported checksum type: %s" + msgstr "サポートされていないチェックサム形式: %s" +@@ -3710,7 +3812,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] "モジュラーの依存に関する問題:" +@@ -3719,10 +3821,12 @@ msgstr[0] "モジュラーの依存に関する問題:" + #, python-format + msgid "" + "Malformed lock file found: %s.\n" +-"Ensure no other dnf/yum process is running and remove the lock file manually or run systemd-tmpfiles --remove dnf.conf." ++"Ensure no other dnf/yum process is running and remove the lock file manually " ++"or run systemd-tmpfiles --remove dnf.conf." + msgstr "" + "不正な形式のロックファイル: %s 。\n" +-"他のdnf/yum プロセスが実行されていないことを確認し、ロックファイルを手動削除するかsystemd-tmpfiles --remove dnf.conf を実行してください。" ++"他のdnf/yum プロセスが実行されていないことを確認し、ロックファイルを手動削除" ++"するかsystemd-tmpfiles --remove dnf.conf を実行してください。" + + #: dnf/module/__init__.py:26 + msgid "Enabling different stream for '{}'." +@@ -3734,7 +3838,8 @@ msgstr "表示するものがありません。" + + #: dnf/module/__init__.py:28 + msgid "Installing newer version of '{}' than specified. Reason: {}" +-msgstr "指定されたものよりも新しいバージョンの '{}' をインストールします。理由: {}" ++msgstr "" ++"指定されたものよりも新しいバージョンの '{}' をインストールします。理由: {}" + + #: dnf/module/__init__.py:29 + msgid "Enabled modules: {}." +@@ -3742,9 +3847,51 @@ msgstr "有効なモジュール: {}." + + #: dnf/module/__init__.py:30 + msgid "No profile specified for '{}', please specify profile." +-msgstr "'{}' に指定したプロファイルはありません。プロファイルを指定してください。" ++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 +3901,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 +3911,110 @@ 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}' に一致するものはすべて非アクティブです" ++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}' インストールは許可されていません" ++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 "モジュール {}:{} にデフォルトのプロファイルがありません。利用可能プロファイル: {}" ++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 "フェイルセーフレポジトリーからのモジュールインストールは許可されていません" ++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}' アップグレードは許可されていません" ++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 "フェイルセーフレポジトリーからのモジュールアップグレードは許可されていません" ++msgstr "" ++"フェイルセーフレポジトリーからのモジュールアップグレードは許可されていません" + +-#: dnf/module/module_base.py:367 ++#: dnf/module/module_base.py:422 ++#, python-brace-format + msgid "" +-"Only module name is required. Ignoring unneeded information in argument: " +-"'{}'" ++"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 +4025,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 +4050,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 "以下無効プラグインパターンが見つかりません: {}" + +@@ -3896,7 +4073,7 @@ msgid "Already downloaded" + msgstr "ダウンロード済み" + + #. pinging mirrors, this might take a while +-#: dnf/repo.py:347 ++#: dnf/repo.py:346 + #, python-format + msgid "determining the fastest mirror (%s hosts).. " + msgstr "最速のミラーを確定しています (%s hosts).. " +@@ -3911,10 +4088,27 @@ msgstr "%s リポジトリーの有効化" + msgid "Added %s repo from %s" + msgstr "%s から %s repo を追加しました" + ++#: dnf/rpm/miscutils.py:32 ++#, python-format ++msgid "Using rpmkeys executable at %s to verify signatures" ++msgstr "%s で rpmkeys 実行可能ファイルを使用して、署名を検証します" ++ ++#: dnf/rpm/miscutils.py:66 ++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 +4155,231 @@ 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 "" ++"ファイル \"{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 "" ++"互換性のないメジャーバージョン \"{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 "オブジェクトキー \"{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 "" ++msgid "" ++"Unexpected value of package reason \"{reason}\" for rpm nevra \"{nevra}\"." ++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 "" ++"アクション \"{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 "" ++"アクション \"{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}\"." ++msgid "" ++"Unexpected value of package action \"{action}\" for rpm nevra \"{nevra}\"." + 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 "" ++"グループ \"{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 "" ++msgid "" ++"Unexpected value of environment action \"{action}\" for environment " ++"\"{env}\"." ++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." ++"Package nevra \"{nevra}\", which is not present in the transaction file, was " ++"pulled into the transaction." + 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 "skipping." ++#~ msgstr "スキップします。" ++ ++#~ msgid "" ++#~ "Using rpmkeys executable from {path} to verify signature for package: " ++#~ "{package}." ++#~ msgstr "" ++#~ "{path} から実行可能ファイル rpmkeys を使用して、パッケージの署名を検証しま" ++#~ "す: {package}。" ++ ++#~ 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 "見つかったパッケージを表示する形式" + +@@ -4133,5 +4390,7 @@ msgstr "トランザクション中にエラーが発生しました。" + #~ msgstr "不正なトランザクション ID、またはパッケージが指定されました" + + #~ msgid "" +-#~ "Display capabilities that the package depends on for running a %%pre script." +-#~ msgstr "%%pre スクリプトを実行するためにパッケージが依存する機能を表示します。" ++#~ "Display capabilities that the package depends on for running a %%pre " ++#~ "script." ++#~ msgstr "" ++#~ "%%pre スクリプトを実行するためにパッケージが依存する機能を表示します。" +diff --git a/po/ko.po b/po/ko.po +index 449f6130..cf15d9cf 100644 +--- a/po/ko.po ++++ b/po/ko.po +@@ -1,68 +1,70 @@ + # MinWoo Joh , 2015. #zanata + # Eun-Ju Kim , 2016. #zanata + # Ludek Janda , 2018. #zanata, 2020. ++# simmon , 2021. ++# Kim InSoo , 2022. + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2020-10-05 09:18-0400\n" +-"PO-Revision-Date: 2020-09-12 11:29+0000\n" +-"Last-Translator: Ludek Janda \n" +-"Language-Team: Korean \n" ++"POT-Creation-Date: 2022-02-28 11:24+0100\n" ++"PO-Revision-Date: 2022-03-02 04:16+0000\n" ++"Last-Translator: Kim InSoo \n" ++"Language-Team: Korean \n" + "Language: ko\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=1; plural=0;\n" +-"X-Generator: Weblate 4.2.2\n" ++"X-Generator: Weblate 4.11\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 +74,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 +101,436 @@ 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:1721 + #, 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:1744 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:1762 + msgid "No groups marked for removal." +-msgstr "제거할 패키지 그룹이 없습니다" ++msgstr "제거할 꾸러미 그룹이 없습니다." + +-#: dnf/base.py:1710 ++#: dnf/base.py:1796 + msgid "No group marked for upgrade." +-msgstr "업그레이드용으로 표시된 그룹이 없습니다." ++msgstr "향상을 위해 표시된 그룹이 없습니다." + +-#: dnf/base.py:1925 ++#: dnf/base.py:2010 + #, 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:2012 dnf/base.py:2031 dnf/base.py:2044 dnf/base.py:2071 ++#: dnf/base.py:2124 dnf/base.py:2132 dnf/base.py:2266 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:2019 + #, python-format + msgid "Package %s of lower version already installed, cannot downgrade it." +-msgstr "%s 패키지의 하위 버전이 이미 설치되어 있으므로 다운 그레이드할 수 없습니다." ++msgstr "" ++"%s 꾸러미의 하위 버전이 이미 설치되어 있으므로 다운그레이드 할 수 없습니다." + +-#: dnf/base.py:1957 ++#: dnf/base.py:2042 + #, python-format + msgid "Package %s not installed, cannot reinstall it." +-msgstr "%s 패키지가 설치되어 있지 않기 때문에 다시 설치할 수 없습니다." ++msgstr "꾸러미 %s가 설치되지 않아서, 다시 설치 할 수 없습니다." + +-#: dnf/base.py:1972 ++#: dnf/base.py:2057 + #, 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:2068 + #, python-format + msgid "Package %s not installed, cannot update it." +-msgstr "%s 패키지가 설치되어 있지 않기 때문에 업데이트할 수 없습니다." ++msgstr "%s 꾸러미가 설치되어 있지 않기 때문에 최신화 할 수 없습니다." + +-#: dnf/base.py:1987 ++#: dnf/base.py:2078 + #, 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:2121 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:2127 + #, 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:2152 + #, python-format + msgid "No package %s installed." +-msgstr "%s 패키지는 설치되어 있지 않습니다" ++msgstr "%s 꾸러미는 설치되어 있지 않습니다." + +-#: dnf/base.py:2075 dnf/cli/commands/install.py:136 ++#: dnf/base.py:2170 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:2185 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:2273 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:2278 + #, python-format + msgid "Package %s of lowest version already installed, cannot downgrade it." +-msgstr "%s 패키지의 최하위 버전이 이미 설치되어 있으므로 다운 그레이드할 수 없습니다." ++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:2378 + msgid "No security updates needed, but {} update available" +-msgstr "보안 업데이트가 필요하지 않지만 {} 업데이트가 가능합니다" ++msgstr "보안 최신화가 필요하지 않지만, {} 최신화가 가능합니다" + +-#: dnf/base.py:2292 ++#: dnf/base.py:2380 + msgid "No security updates needed, but {} updates available" +-msgstr "보안 업데이트는 필요하지 않지만 {} 업데이트가 가능합니다" ++msgstr "보안 최신화는 필요하지 않지만 {} 최신화는 가능합니다" + +-#: dnf/base.py:2296 ++#: dnf/base.py:2384 + msgid "No security updates needed for \"{}\", but {} update available" +-msgstr "\"{}\"에는 보안 업데이트가 필요하지 않지만 {} 업데이트가 가능합니다" ++msgstr "\"{}\"에는 보안 최신화가 필요하지 않지만 {} 최신화가 가능합니다" + +-#: dnf/base.py:2298 ++#: dnf/base.py:2386 + 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:2407 + #, python-format + msgid "Unable to retrieve a key for a commandline package: %s" +-msgstr "" ++msgstr "명령줄 꾸러미: %s 대한 키를 검색 할 수 없습니다" + +-#: dnf/base.py:2327 ++#: dnf/base.py:2415 + #, python-format + msgid ". Failing package is: %s" +-msgstr "실패한 패키지는 다음과 같습니다. %s" ++msgstr "실패한 꾸러미는 다음과 같습니다. %s" + +-#: dnf/base.py:2328 ++#: dnf/base.py:2416 + #, python-format + msgid "GPG Keys are configured as: %s" + msgstr "GPG 키는 다음과 같이 설정되어 있습니다. %s" + +-#: dnf/base.py:2340 ++#: dnf/base.py:2428 + #, python-format + msgid "GPG key at %s (0x%s) is already installed" + msgstr "%s (0x%s)의 GPG 키가 이미 설치되어 있습니다" + +-#: dnf/base.py:2373 ++#: dnf/base.py:2464 + msgid "The key has been approved." + msgstr "키가 승인되었습니다." + +-#: dnf/base.py:2376 ++#: dnf/base.py:2467 + msgid "The key has been rejected." + msgstr "키가 거부되었습니다." + +-#: dnf/base.py:2409 ++#: dnf/base.py:2500 + #, python-format + msgid "Key import failed (code %d)" + msgstr "키 가져 오기에 실패했습니다 (코드 %d)" + +-#: dnf/base.py:2411 ++#: dnf/base.py:2502 + msgid "Key imported successfully" + msgstr "키 가져오기에 성공했습니다" + +-#: dnf/base.py:2415 ++#: dnf/base.py:2506 + msgid "Didn't install any keys" + msgstr "키를 하나도 설치하지 못했습니다" + +-#: dnf/base.py:2418 ++#: dnf/base.py:2509 + #, python-format + msgid "" +-"The GPG keys listed for the \"%s\" repository are already installed but they are not correct for this package.\n" ++"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:2520 + msgid "Import of key(s) didn't help, wrong key(s)?" + msgstr "가져온 키에 문제가 있습니다. 잘못된 키입니까?" + +-#: dnf/base.py:2482 ++#: dnf/base.py:2573 + msgid " * Maybe you meant: {}" +-msgstr " * 다음을 의미할 수도 있습니다: {}" ++msgstr " * 다음을 의미 할 수도 있습니다: {}" + +-#: dnf/base.py:2514 ++#: dnf/base.py:2605 + msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum" +-msgstr "로컬 저장소 \"{}\"의 \"{}\"패키지에 잘못된 체크섬이 있습니다" ++msgstr "로컬 저장소 \"{}\"의 \"{}\"꾸러미에 잘못된 체크섬이 있습니다" + +-#: dnf/base.py:2517 ++#: dnf/base.py:2608 + msgid "Some packages from local repository have incorrect checksum" +-msgstr "로컬 저장소의 일부 패키지에 잘못된 체크섬이 있습니다" ++msgstr "로컬 저장소의 일부 꾸러미에 잘못된 체크섬이 있습니다" + +-#: dnf/base.py:2520 ++#: dnf/base.py:2611 + msgid "Package \"{}\" from repository \"{}\" has incorrect checksum" +-msgstr "저장소 \"{}\"의 패키지 \"{}\"에 잘못된 체크섬이 있습니다" ++msgstr "저장소 \"{}\"의 꾸러미 \"{}\"에 잘못된 체크섬이 있습니다" + +-#: dnf/base.py:2523 ++#: dnf/base.py:2614 + 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:2632 dnf/base.py:2652 + msgid "No match for argument" + msgstr "일치하는 인수가 없습니다" + +-#: dnf/base.py:2549 dnf/base.py:2569 ++#: dnf/base.py:2640 dnf/base.py:2660 + msgid "All matches were filtered out by exclude filtering for argument" + msgstr "모든 일치 항목이 인수의 제외 필터로 필터링되었습니다" + +-#: dnf/base.py:2551 ++#: dnf/base.py:2642 + msgid "All matches were filtered out by modular filtering for argument" + msgstr "모든 일치 항목이 인수의 모듈식 필터로 필터링되었습니다" + +-#: dnf/base.py:2567 ++#: dnf/base.py:2658 + msgid "All matches were installed from a different repository for argument" + msgstr "모든 일치 항목이 인수의 다른 리포지토리에서 설치되었습니다" + +-#: dnf/base.py:2583 ++#: dnf/base.py:2705 + #, python-format + msgid "Package %s is already installed." +-msgstr "패키지 %s이/가 이미 설치되어 있습니다." ++msgstr "꾸러미 %s가 이미 설치되어 있습니다." + + #: dnf/cli/aliases.py:96 + #, python-format +@@ -551,8 +547,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 +560,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 +579,50 @@ 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 ' 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 ' command. " ++"After you reset the module, you can install the other stream." + msgstr "" +-"활성화된 모듈 스트림을 전환 할 수 없습니다.\n" +-"설치된 모든 내용을 모듈에서 제거하고 ‘{prog} module reset ' 명령을 사용하여 모듈을 재설정하는 것이 좋습니다. 모듈을 재설정한 후 다른 스트림을 설치할 수 있습니다." ++"구성 옵션 module_stream_switch를 통해 명시적으로 활성화하지 않는 한 활성화된 " ++"모듈 스트림을 전환 할 수 없습니다.\n" ++"설치된 모든 내용을 모듈에서 제거하고 ‘{prog} module reset ' 명령" ++"을 사용하여 모듈을 재설정하는 것이 좋습니다. 모듈을 재설정한 후 다른 스트림" ++"을 설치 할 수 있습니다." + +-#: 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,172 +630,156 @@ 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:428 ++#: 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: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 사용자로 실행)." ++"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} '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} 플러그인 명령일 수 있지만 플러그인 로딩은 현재 비활성화되어 있습니다." ++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." + msgstr "" +-"--destdir 또는 --downloaddir은 --downloadonly 또는 download 또는 system-upgrade 명령과" +-" 함께 사용해야합니다." ++"--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 명령과 함께 " +-"사용해야합니다." ++"--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' 참조)" ++"경고: 활성화된 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 "리포지토리에 포함 " + +@@ -805,13 +791,15 @@ msgstr "문제를 진단하려면 다음을 실행하십시오. '%s'." + #: dnf/cli/commands/__init__.py:40 + #, python-format + msgid "You probably have corrupted RPMDB, running '%s' might fix the issue." +-msgstr "RPMDB가 손상되었을 수 있습니다 '%s'를 실행하여 문제를 해결할 수 있습니다." ++msgstr "" ++"RPMDB가 손상되었을 수 있습니다 '%s'를 실행하여 문제를 해결할 수 있습니다." + + #: dnf/cli/commands/__init__.py:44 + #, python-brace-format + msgid "" + "You have enabled checking of packages via GPG keys. This is a good thing.\n" +-"However, you do not have any GPG public keys installed. You need to download\n" ++"However, you do not have any GPG public keys installed. You need to " ++"download\n" + "the keys for packages you wish to install and install them.\n" + "You can do that by running the command:\n" + " rpm --import public.gpg.key\n" +@@ -823,17 +811,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 +831,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 +892,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 +1057,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 +1081,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 +1110,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 +1122,7 @@ msgstr "데이터 정리 중: " + + #: dnf/cli/commands/clean.py:111 + msgid "Cache was expired" +-msgstr "캐시가 만료되었습니다" ++msgstr "캐쉬가 만료되었습니다" + + #: dnf/cli/commands/clean.py:115 + #, python-format +@@ -1147,24 +1136,28 @@ 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 +1167,227 @@ 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 "" + 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 "그룹의 선택 패키지를 포함합니다" ++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" ++"For the replay command, don't check for installed packages matching those in " ++"transaction" + 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" ++"For the replay command, skip packages that are not available or have missing " ++"dependencies" + 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 트랜잭션을 취소할 수 없습니다. 취소하면 패키지 데이터베이스가 일치하지 않게 됩니다." ++"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 트랜잭션을 롤백할 수 없습니다. 이렇게하면 패키지 데이터베이스가 일치하지 않게 됩니다." ++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 "Transaction 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 '..'." + msgstr "" +-"잘못된 트랜잭션 ID 범위 정의 '{}'. \n" ++"잘못된 연결 ID 범위 정의 '{}'.\n" + "'..' 사용." + +-#: dnf/cli/commands/history.py:226 ++#: dnf/cli/commands/history.py:283 + msgid "" + "Can't convert '{}' to transaction ID.\n" + "Use '', 'last', 'last-'." + msgstr "" +-"'{}'을 (를) 트랜잭션 ID로 변환할 수 없습니다. \n" ++"'{}'을 (를) 연결 ID로 변환 할 수 없습니다.\n" + "'', 'last', 'last-' 사용." + +-#: 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 +1398,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 +1428,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 +1438,137 @@ 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 "모듈 이름, 스트림, 아키텍처 또는 프로파일만 사용됩니다. '{}'인수에서 불필요한 정보는 무시하십시오" ++"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 "패키지를 포함한 모듈 프로파일 설치" ++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:277 ++#: 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: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 +1612,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 +1624,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 +1713,26 @@ 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 +1750,9 @@ 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 +1764,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 +1794,21 @@ 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,34 +1818,38 @@ 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 + msgid "" +-"display format for listing packages: \"%%{name} %%{version} ...\", use " +-"--querytags to view full tag list" ++"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 +1859,73 @@ 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 +1934,50 @@ 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" +@@ -1948,22 +1985,23 @@ msgstr "검색에 사용되는 키워드" + + #: dnf/cli/commands/repoquery.py:295 + msgid "" +-"Option '--resolve' has to be used together with one of the '--conflicts', '" +-"--depends', '--enhances', '--provides', '--recommends', '--requires', '--" ++"Option '--resolve' has to be used together with one of the '--conflicts', '--" ++"depends', '--enhances', '--provides', '--recommends', '--requires', '--" + "requires-pre', '--suggests' or '--supplements' options" + msgstr "" +-"옵션 '--resolve'는 '--conflicts', '--depends', '--enhances', '--provides', '--" +-"recommends', '--requires'중 하나와 함께 사용해야합니다. , '--requires-pre', '--" +-"suggests'또는 '--supplements'옵션들" ++"옵션 '--resolve'는 '--conflicts', '--depends', '--enhances', '--provides', " ++"'--recommends', '--requires'중 하나와 함께 사용해야합니다. , '--requires-" ++"pre', '--suggests'또는 '--supplements'옵션들" + + #: dnf/cli/commands/repoquery.py:305 + msgid "" + "Option '--recursive' has to be used with '--whatrequires ' (optionally " +-"with '--alldeps', but not with '--exactdeps'), or with '--requires " +-"--resolve'" ++"with '--alldeps', but not with '--exactdeps'), or with '--requires --" ++"resolve'" + msgstr "" +-"옵션 '--reative'를 '--whatrequires ' (선택 옵션으로 '--exactdeps' 대신 '--" +-"alldeps'와 함께 사용), 또는 '--requires --resolve'와 함께 사용해야 합니다." ++"옵션 '--reative'를 '--whatrequires ' (선택 옵션으로 '--exactdeps' 대신 " ++"'--alldeps'와 함께 사용), 또는 '--requires --resolve'와 함께 사용해야 " ++"합니다" + + #: dnf/cli/commands/repoquery.py:312 + msgid "argument {} requires --whatrequires or --whatdepends option" +@@ -1971,30 +2009,34 @@ 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 + msgid "" + "No valid switch specified\n" +-"usage: {prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--tree]\n" ++"usage: {prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--" ++"recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--" ++"tree]\n" + "\n" + "description:\n" + " For the given packages print a tree of thepackages." + msgstr "" + "유효한 매개 변수를 지정하지 않았습니다.\n" +-"사용법: {prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--tree]\n" ++"사용법: {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,27 +2046,26 @@ 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" + +-#. TRANSLATORS: separator used between package attributes (eg. Name & Summary +-#. & URL) ++#. TRANSLATORS: separator used between package attributes (eg. Name & Summary & URL) + #: dnf/cli/commands/search.py:76 + msgid " & " + msgstr " & " +@@ -2034,18 +2075,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 +2151,7 @@ msgid "" + " resolve the transaction set" + msgstr "" + "{}\n" +-" 트랜잭션 집합을 분석합니다" ++" 연결 집합을 분석합니다" + + #: dnf/cli/commands/shell.py:195 + msgid "" +@@ -2120,9 +2161,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 +2171,7 @@ msgid "" + " run the transaction" + msgstr "" + "{}\n" +-" 트랜잭션을 실행합니다." ++"연결을 실행합니다" + + #: dnf/cli/commands/shell.py:205 + msgid "" +@@ -2154,24 +2195,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 +2243,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 +2305,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 +2321,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 +2365,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 +2377,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 +2405,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 +2420,19 @@ 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 +2444,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." +@@ -2493,11 +2536,11 @@ msgstr "설정 파일 및 리포지토리 파일에서 $releasever 값을 무시 + + #: dnf/cli/option_parser.py:207 + msgid "set arbitrary config and repo options" +-msgstr "임의의 설정 옵션 및 리포지토리 옵션 설정" ++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 +2548,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 +2572,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 +2588,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" +@@ -2564,19 +2607,25 @@ msgstr "모든 질문에 대해 \"아니오\"(no)로 자동 응답합니다" + msgid "" + "Enable additional repositories. List option. Supports globs, can be " + "specified multiple times." +-msgstr "추가 리포지토리를 활성화하십시오. 옵션이 나열됩니다. glob를 지원하며 여러 번 지정할 수 있습니다." ++msgstr "" ++"추가 저장소를 활성화하십시오. 옵션이 나열됩니다. glob를 지원하며 여러 번 지" ++"정 할 수 있습니다." + + #: dnf/cli/option_parser.py:266 + msgid "" +-"Disable repositories. List option. Supports globs, can be specified multiple" +-" times." +-msgstr "리포지토리를 비활성화합니다. 옵션이 나열됩니다. glob를 지원하며 여러 번 지정할 수 있습니다." ++"Disable repositories. List option. Supports globs, can be specified multiple " ++"times." ++msgstr "" ++"저장소를 비활성화 합니다. 옵션이 나열됩니다. glob를 지원하며 여러 번 지정 할 " ++"수 있습니다." + + #: dnf/cli/option_parser.py:270 + msgid "" + "enable just specific repositories by an id or a glob, can be specified " + "multiple times" +-msgstr "id 나 glob로 특정 리포지토리를 활성화할 수 있습니다. 여러 번 지정할 수 있습니다" ++msgstr "" ++"id 나 glob로 특정 리포지토리를 활성화할 수 있습니다. 여러 번 지정할 수 있습니" ++"다" + + #: dnf/cli/option_parser.py:275 + msgid "enable repos with config-manager command (automatically saves)" +@@ -2588,7 +2637,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 +2647,9 @@ 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 +2677,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 +2739,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 +2753,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 +2793,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 "취약한 종속 꾸러미 설치 중" + ++# translation auto-copied from project subscription-manager, version 1.11.X, ++# document keys + #. 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 +3151,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 +3174,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 "" + 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 "사용자 이름" + + # 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: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 :" ++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 +3456,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" +@@ -3478,36 +3509,30 @@ msgstr " 시작됨: %s - %s 전" + msgid " State : %s" + msgstr " 상태 : %s" + +-#: dnf/comps.py:104 +-msgid "skipping." +-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 +3542,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 +3568,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 +3579,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 +3593,92 @@ 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를 사용하십시오." ++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 " +@@ -3654,7 +3700,7 @@ msgstr "DNSSEC 확장: " + msgid "Testing already imported keys for their validity." + msgstr "유효성 검사를 위해 이미 가져온 키를 테스트 중입니다." + +-#: dnf/drpm.py:62 dnf/repo.py:268 ++#: dnf/drpm.py:62 dnf/repo.py:267 + #, python-format + msgid "unsupported checksum type: %s" + msgstr "지원되지 않는 검사 유형: %s" +@@ -3679,11 +3725,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 +3744,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] "모듈 종속성 문제 :" +@@ -3707,10 +3753,12 @@ msgstr[0] "모듈 종속성 문제 :" + #, python-format + msgid "" + "Malformed lock file found: %s.\n" +-"Ensure no other dnf/yum process is running and remove the lock file manually or run systemd-tmpfiles --remove dnf.conf." ++"Ensure no other dnf/yum process is running and remove the lock file manually " ++"or run systemd-tmpfiles --remove dnf.conf." + msgstr "" + "잘못된 잠금 파일이 발견되었습니다. %s \n" +-"다른 dnf / yum 프로세스가 실행되고 있는지 확인하고 잠금 파일을 수동으로 제거하거나 systemd-tmpfiles --remove dnf.conf를 실행하십시오." ++"다른 dnf / yum 프로세스가 실행되고 있는지 확인하고 잠금 파일을 수동으로 제거" ++"하거나 systemd-tmpfiles --remove dnf.conf를 실행하십시오." + + #: dnf/module/__init__.py:26 + msgid "Enabling different stream for '{}'." +@@ -3722,7 +3770,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 +3780,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 +3830,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 +3840,99 @@ 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}'에 대한 모든 일치 항목이 활성화되지 않았습니다" ++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 "" +-"Only module name is required. Ignoring unneeded information in argument: " +-"'{}'" ++"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 +3943,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,30 +3968,30 @@ 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 ++#: dnf/repo.py:346 + #, python-format + msgid "determining the fastest mirror (%s hosts).. " + msgstr "가장 빠른 미러 지정 (%s 호스트).. " +@@ -3899,15 +4006,32 @@ msgstr "%s 리포지토리 활성화" + msgid "Added %s repo from %s" + msgstr "%s 에서 %s repo를 추가했습니다" + ++#: dnf/rpm/miscutils.py:32 ++#, python-format ++msgid "Using rpmkeys executable at %s to verify signatures" ++msgstr "%s에 실행 할 수 있는 rpmkey를 사용하여 서명을 확인합니다" ++ ++#: dnf/rpm/miscutils.py:66 ++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 +4059,7 @@ msgstr "삭제 중" + #: dnf/transaction.py:92 + msgctxt "currently" + msgid "Upgrading" +-msgstr "업그레이드 중" ++msgstr "향상 중" + + #: dnf/transaction.py:96 + msgid "Verifying" +@@ -3943,168 +4067,223 @@ 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 "" ++"호환되지 않는 주요 버전 \"{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}\"." ++msgid "" ++"Unexpected value of package reason \"{reason}\" for rpm nevra \"{nevra}\"." + 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 "" ++"꾸러미 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}\"." ++msgid "" ++"Unexpected value of package action \"{action}\" for rpm nevra \"{nevra}\"." + 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 "" ++"잘못된 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 "" ++msgid "" ++"Unexpected value of environment action \"{action}\" for environment " ++"\"{env}\"." ++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." ++"Package nevra \"{nevra}\", which is not present in the transaction file, was " ++"pulled into the transaction." + 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 "skipping." ++#~ msgstr "건너 뛰기." ++ ++#~ msgid "" ++#~ "Using rpmkeys executable from {path} to verify signature for package: " ++#~ "{package}." ++#~ msgstr "" ++#~ "{path}에서 실행 할 수 있는 rpmkeys를 사용하여 꾸러미 서명 확인: {package}." ++ ++#~ 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..af6396c3 100644 +--- a/po/zh_CN.po ++++ b/po/zh_CN.po +@@ -13,33 +13,37 @@ + # Qi Fan , 2016. #zanata + # Tommy He , 2016. #zanata + # mosquito , 2016. #zanata +-# Charles Lee , 2017. #zanata, 2020. ++# Charles Lee , 2017. #zanata, 2020, 2021. + # Pany , 2017. #zanata + # cheng ye <18969068329@163.com>, 2017. #zanata + # lexuge , 2017. #zanata + # n0vad3v , 2017. #zanata + # zhouxiaobo , 2017. #zanata +-# Ludek Janda , 2018. #zanata ++# Ludek Janda , 2018. #zanata, 2021. + # Pany , 2018. #zanata + # Qiyu Yan , 2018. #zanata + # Qiyu Yan , 2019. #zanata + # Anonymous , 2020. + # Hongqiao Chen , 2020. + # Harry Chen , 2020. ++# Sundeep Anand , 2021. ++# weidong , 2021. ++# Transtats , 2022. + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2020-10-05 09:18-0400\n" +-"PO-Revision-Date: 2020-08-02 08:29+0000\n" +-"Last-Translator: Charles Lee \n" +-"Language-Team: Chinese (Simplified) \n" ++"POT-Creation-Date: 2022-02-28 11:24+0100\n" ++"PO-Revision-Date: 2022-03-09 12:39+0000\n" ++"Last-Translator: Transtats \n" ++"Language-Team: Chinese (Simplified) \n" + "Language: zh_CN\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=1; plural=0;\n" +-"X-Generator: Weblate 4.1.1\n" ++"X-Generator: Weblate 4.11.2\n" + + #: dnf/automatic/emitter.py:32 + #, python-format +@@ -86,7 +90,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 +100,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 +113,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,439 +127,426 @@ 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的可用空间。" ++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:1721 + #, 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:1744 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:1762 + msgid "No groups marked for removal." + msgstr "没有软件包组需要移除。" + +-#: dnf/base.py:1710 ++#: dnf/base.py:1796 + msgid "No group marked for upgrade." + msgstr "没有标记为要升级的组。" + +-#: dnf/base.py:1925 ++#: dnf/base.py:2010 + #, 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:2012 dnf/base.py:2031 dnf/base.py:2044 dnf/base.py:2071 ++#: dnf/base.py:2124 dnf/base.py:2132 dnf/base.py:2266 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:2019 + #, python-format + msgid "Package %s of lower version already installed, cannot downgrade it." + msgstr "软件包 %s 的低版本已经安装,无法进行降级。" + +-#: dnf/base.py:1957 ++#: dnf/base.py:2042 + #, python-format + msgid "Package %s not installed, cannot reinstall it." + msgstr "软件包 %s 未能够安装成功,无法进行重新安装。" + +-#: dnf/base.py:1972 ++#: dnf/base.py:2057 + #, python-format + msgid "File %s is a source package and cannot be updated, ignoring." + msgstr "%s 文件无法被升级,已忽略。" + +-#: dnf/base.py:1978 ++#: dnf/base.py:2068 + #, python-format + msgid "Package %s not installed, cannot update it." + msgstr "软件包 %s 未安装,无法更新。" + +-#: dnf/base.py:1987 ++#: dnf/base.py:2078 + #, 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:2121 dnf/cli/commands/reinstall.py:81 + #, python-format + msgid "Package %s available, but not installed." + msgstr "软件包 %s 可用,但没有被安装。" + +-#: dnf/base.py:2032 ++#: dnf/base.py:2127 + #, 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:2152 + #, python-format + msgid "No package %s installed." + msgstr "没有软件包 %s 安装。" + +-#: dnf/base.py:2075 dnf/cli/commands/install.py:136 ++#: dnf/base.py:2170 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:2185 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:2273 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:2278 + #, 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:2378 + msgid "No security updates needed, but {} update available" + msgstr "没有必须的安全更新, 但是 {} 的更新可用" + +-#: dnf/base.py:2292 ++#: dnf/base.py:2380 + msgid "No security updates needed, but {} updates available" + msgstr "没有必须的安全更新, 但是 {} 的更新可用" + +-#: dnf/base.py:2296 ++#: dnf/base.py:2384 + msgid "No security updates needed for \"{}\", but {} update available" + msgstr "没有针对于\"{}\" 所必须的安全更新, 但是 {} 的更新可用" + +-#: dnf/base.py:2298 ++#: dnf/base.py:2386 + 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:2407 + #, python-format + msgid "Unable to retrieve a key for a commandline package: %s" +-msgstr "" ++msgstr "无法获取来自命令行的软件包的密钥:%s" + +-#: dnf/base.py:2327 ++#: dnf/base.py:2415 + #, python-format + msgid ". Failing package is: %s" + msgstr ". 失败的软件包是:%s" + +-#: dnf/base.py:2328 ++#: dnf/base.py:2416 + #, python-format + msgid "GPG Keys are configured as: %s" + msgstr "GPG密钥配置为:%s" + +-#: dnf/base.py:2340 ++#: dnf/base.py:2428 + #, python-format + msgid "GPG key at %s (0x%s) is already installed" + msgstr "%s 的 GPG 公钥(0x%s)已安装" + +-#: dnf/base.py:2373 ++#: dnf/base.py:2464 + msgid "The key has been approved." + msgstr "密钥已被确认。" + +-#: dnf/base.py:2376 ++#: dnf/base.py:2467 + msgid "The key has been rejected." + msgstr "密钥已被拒绝。" + +-#: dnf/base.py:2409 ++#: dnf/base.py:2500 + #, python-format + msgid "Key import failed (code %d)" + msgstr "导入公钥失败(代码 %d)" + +-#: dnf/base.py:2411 ++#: dnf/base.py:2502 + msgid "Key imported successfully" + msgstr "导入公钥成功" + +-#: dnf/base.py:2415 ++#: dnf/base.py:2506 + msgid "Didn't install any keys" + msgstr "没有安装任何公钥" + +-#: dnf/base.py:2418 ++#: dnf/base.py:2509 + #, python-format + msgid "" +-"The GPG keys listed for the \"%s\" repository are already installed but they are not correct for this package.\n" ++"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 "" + "仓库 \"%s\" 的 GPG 公钥已安装,但是不适用于此软件包。\n" + "请检查此仓库的公钥 URL 是否配置正确。" + +-#: dnf/base.py:2429 ++#: dnf/base.py:2520 + msgid "Import of key(s) didn't help, wrong key(s)?" + msgstr "导入的密钥没有公钥,错误的公钥?" + +-#: dnf/base.py:2482 ++#: dnf/base.py:2573 + msgid " * Maybe you meant: {}" + msgstr " * 可能您的意思是:{}" + +-#: dnf/base.py:2514 ++#: dnf/base.py:2605 + msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum" + msgstr "软件包 \"{}\"(来自于本地仓库 \"{}\")的 checksum 不正确" + +-#: dnf/base.py:2517 ++#: dnf/base.py:2608 + msgid "Some packages from local repository have incorrect checksum" + msgstr "本地仓库的一些软件包校验值(checksum)不正确,无法确定软件包完整" + +-#: dnf/base.py:2520 ++#: dnf/base.py:2611 + msgid "Package \"{}\" from repository \"{}\" has incorrect checksum" + msgstr "软件包 \"{}\"(来自仓库 \"{}\")的 checksum 不正确" + +-#: dnf/base.py:2523 ++#: dnf/base.py:2614 + 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:2632 dnf/base.py:2652 + msgid "No match for argument" + msgstr "未找到匹配的参数" + +-#: dnf/base.py:2549 dnf/base.py:2569 ++#: dnf/base.py:2640 dnf/base.py:2660 + msgid "All matches were filtered out by exclude filtering for argument" + msgstr "由于您的搜索参数,所有相关结果都已被滤掉" + +-#: dnf/base.py:2551 ++#: dnf/base.py:2642 + msgid "All matches were filtered out by modular filtering for argument" + msgstr "所有的匹配结果均已经被参数的模块化过滤条件筛除" + +-#: dnf/base.py:2567 ++#: dnf/base.py:2658 + msgid "All matches were installed from a different repository for argument" + msgstr "已从另一个仓库安装了参数的所有匹配" + +-#: dnf/base.py:2583 ++#: dnf/base.py:2705 + #, python-format + msgid "Package %s is already installed." + msgstr "软件包 %s 已安装。" +@@ -575,8 +566,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 +598,48 @@ 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 ' 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 ' command. " ++"After you reset the module, you can install the other stream." + msgstr "" +-"无法切换已启用模块的流。\n" +-"推荐移除来自模块的所有已安装内容,然后通过 '{prog} module reset ' 命令重置模块。在您重置模块之后,就可以安装其他的流。" ++"无法切换已启用模块的流,除非显式的通过配置选项 module_stream_switch 启用。\n" ++"推荐直接移除来自模块的所有已安装内容,然后通过 '{prog} module reset " ++"' 命令重置模块。在您重置模块之后,就可以安装其他的流。" + +-#: 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,168 +647,150 @@ 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)." ++"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." + msgstr "" +-"--destdir 或 --downloaddir 必须和 --downloadonly 或 download 或 system-upgrade " +-"命令一起使用。" ++"--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 命令一起使用。" ++"--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'以了解如何阻止这条信息)" ++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 中包括 " + +@@ -831,7 +808,8 @@ msgstr "RPM 数据库可能出错,请尝试运行'%s'进行恢复。" + #, python-brace-format + msgid "" + "You have enabled checking of packages via GPG keys. This is a good thing.\n" +-"However, you do not have any GPG public keys installed. You need to download\n" ++"However, you do not have any GPG public keys installed. You need to " ++"download\n" + "the keys for packages you wish to install and install them.\n" + "You can do that by running the command:\n" + " rpm --import public.gpg.key\n" +@@ -865,38 +843,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 +912,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 +1146,11 @@ 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 +1176,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 "" +-msgstr "<名称-未设定>" ++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 +1257,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 "" ++"For the replay command, don't check for installed packages matching those in " ++"transaction" ++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 "" ++"For the replay command, skip packages that are not available or have missing " ++"dependencies" ++msgstr "对于 replay 命令,跳过不可用或者缺少依赖项的软件包" + + #: dnf/cli/commands/history.py:94 + msgid "" +@@ -1305,41 +1286,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." ++"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 '..'." +@@ -1347,7 +1351,7 @@ msgstr "" + "无效的事务 ID 范围定义 '{}'。\n" + "使用 '..'。" + +-#: dnf/cli/commands/history.py:226 ++#: dnf/cli/commands/history.py:283 + msgid "" + "Can't convert '{}' to transaction ID.\n" + "Use '', 'last', 'last-'." +@@ -1355,40 +1359,29 @@ msgstr "" + "无法将 '{}' 转换为事务 ID。\n" + "请使用 ''、'last'、'last-'。" + +-#: 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 +1400,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 +1443,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 +1452,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: '{}'" ++"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 "{} {} {}: 参数太少" + +@@ -1627,15 +1624,15 @@ msgstr "禁用" + + #: dnf/cli/commands/repolist.py:162 + msgid "Repo-id : " +-msgstr "Repo-id : " ++msgstr "仓库ID : " + + #: dnf/cli/commands/repolist.py:163 + msgid "Repo-name : " +-msgstr "Repo-name : " ++msgstr "仓库名称 : " + + #: dnf/cli/commands/repolist.py:166 + msgid "Repo-status : " +-msgstr "Repo-status : " ++msgstr "仓库状态 : " + + #: dnf/cli/commands/repolist.py:169 + msgid "Repo-revision : " +@@ -1697,11 +1694,11 @@ msgstr "Repo-include : " + #. TRANSLATORS: Number of packages that where excluded (5) + #: dnf/cli/commands/repolist.py:232 + msgid "Repo-excluded : " +-msgstr "Repo-excluded : " ++msgstr "排除的仓库 : " + + #: dnf/cli/commands/repolist.py:236 + msgid "Repo-filename : " +-msgstr "Repo-filename : " ++msgstr "仓库文件名 : " + + #. Work out the first (id) and last (enabled/disabled/count), + #. then chop the middle (name)... +@@ -1752,7 +1749,9 @@ msgstr "只显示与 REQ 冲突的结果" + msgid "" + "shows results that requires, suggests, supplements, enhances,or recommends " + "package provides and files REQ" +-msgstr "选择 requires、suggest、supplement、enhance 或 recommend 软件包提供和文件 REQ 的结果" ++msgstr "" ++"选择 requires、suggest、supplement、enhance 或 recommend 软件包提供和文件 " ++"REQ 的结果" + + #: dnf/cli/commands/repoquery.py:139 + msgid "show only results that obsolete REQ" +@@ -1841,9 +1840,11 @@ msgstr "显示软件包的 changelogs" + #: dnf/cli/commands/repoquery.py:194 + #, python-format, python-brace-format + msgid "" +-"display format for listing packages: \"%%{name} %%{version} ...\", use " +-"--querytags to view full tag list" +-msgstr "软件包列表的显示格式 : \"%%{name} %%{version} ...\", 使用 --querytags 参数来查看完整的标签列表" ++"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,13 +1854,16 @@ 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 "" +@@ -1895,7 +1899,9 @@ msgstr "显示与该软件包冲突的功能。" + msgid "" + "Display capabilities that the package can depend on, enhance, recommend, " + "suggest, and supplement." +-msgstr "显示软件包可用在其中 depend on、enhance、recommend、suggest 和 supplement 的功能。" ++msgstr "" ++"显示软件包可用在其中 depend on、enhance、recommend、suggest 和 supplement 的" ++"功能。" + + #: dnf/cli/commands/repoquery.py:236 + msgid "Display capabilities that the package can enhance." +@@ -1920,8 +1926,8 @@ 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." +@@ -1970,22 +1976,23 @@ msgstr "搜索所用的关键词" + + #: dnf/cli/commands/repoquery.py:295 + msgid "" +-"Option '--resolve' has to be used together with one of the '--conflicts', '" +-"--depends', '--enhances', '--provides', '--recommends', '--requires', '--" ++"Option '--resolve' has to be used together with one of the '--conflicts', '--" ++"depends', '--enhances', '--provides', '--recommends', '--requires', '--" + "requires-pre', '--suggests' or '--supplements' options" + msgstr "" +-"选项 '--resolve' 需要和 '--conflicts'、'--depends'、'--enhances'、'--provides'、'--" +-"recommends'、'--requires'、'--requires-pre'、'--suggests' 或 '--supplements' " +-"选项之一一起使用" ++"选项 '--resolve' 需要和 '--conflicts'、'--depends'、'--enhances'、'--" ++"provides'、'--recommends'、'--requires'、'--requires-pre'、'--suggests' 或 " ++"'--supplements' 选项之一一起使用" + + #: dnf/cli/commands/repoquery.py:305 + msgid "" + "Option '--recursive' has to be used with '--whatrequires ' (optionally " +-"with '--alldeps', but not with '--exactdeps'), or with '--requires " +-"--resolve'" ++"with '--alldeps', but not with '--exactdeps'), or with '--requires --" ++"resolve'" + msgstr "" +-"选项 '--recursive' 需要和 '--whatrequires ' 一起使用(以及可选的 '--alldeps',但不能是 '--" +-"exactdeps'),或和 '--requires --resolve' 一起使用" ++"选项 '--recursive' 需要和 '--whatrequires ' 一起使用(以及可选的 '--" ++"alldeps',但不能是 '--exactdeps'),或和 '--requires --resolve' 一起使" ++"用" + + #: dnf/cli/commands/repoquery.py:312 + msgid "argument {} requires --whatrequires or --whatdepends option" +@@ -1999,13 +2006,17 @@ msgstr "软件包 {} 不包含文件" + #, python-brace-format + msgid "" + "No valid switch specified\n" +-"usage: {prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--tree]\n" ++"usage: {prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--" ++"recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--" ++"tree]\n" + "\n" + "description:\n" + " For the given packages print a tree of thepackages." + msgstr "" + "没有指定有效参数\n" +-"用法:{prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--tree]\n" ++"用法:{prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--" ++"recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--" ++"tree]\n" + "\n" + "描述:\n" + " 对于指定的软件包,打印此软件包的树状图。" +@@ -2026,27 +2037,26 @@ 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" + +-#. TRANSLATORS: separator used between package attributes (eg. Name & Summary +-#. & URL) ++#. TRANSLATORS: separator used between package attributes (eg. Name & Summary & URL) + #: dnf/cli/commands/search.py:76 + msgid " & " + msgstr " 和 " +@@ -2184,16 +2194,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 +2394,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 "已安装" + +@@ -2564,7 +2574,9 @@ msgstr "错误输出级别" + msgid "" + "enables {prog}'s obsoletes processing logic for upgrade or display " + "capabilities that the package obsoletes for info, list and repoquery" +-msgstr "对 upgrade 启用 {prog} 的过期处理逻辑,或对 info、list 和 repoquery 启用软件包过期的显示功能" ++msgstr "" ++"对 upgrade 启用 {prog} 的过期处理逻辑,或对 info、list 和 repoquery 启用软件" ++"包过期的显示功能" + + #: dnf/cli/option_parser.py:251 + msgid "debugging output level for rpm" +@@ -2586,8 +2598,8 @@ msgstr "启用附加仓库。列出选项。支持通配符,可以指定多次 + + #: dnf/cli/option_parser.py:266 + msgid "" +-"Disable repositories. List option. Supports globs, can be specified multiple" +-" times." ++"Disable repositories. List option. Supports globs, can be specified multiple " ++"times." + msgstr "停用仓库。列出选项。支持通配符,可指定多次。" + + #: dnf/cli/option_parser.py:270 +@@ -2616,7 +2628,8 @@ 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" +@@ -2706,13 +2719,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 +2733,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 +2773,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 +2806,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 +3116,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 +3129,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 +3156,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 "" +-msgstr "<空>" ++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" +@@ -3489,10 +3482,6 @@ msgstr " 已启动: %s - %s之前" + msgid " State : %s" + msgstr " 状态 : %s" + +-#: dnf/comps.py:104 +-msgid "skipping." +-msgstr "正在跳过。" +- + #: dnf/comps.py:196 dnf/comps.py:692 dnf/comps.py:706 + #, python-format + msgid "Module or Group '%s' is not installed." +@@ -3509,16 +3498,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 +3518,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 +3573,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 +3616,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 " +@@ -3665,7 +3669,7 @@ msgstr "DNSSEC 扩展 : " + msgid "Testing already imported keys for their validity." + msgstr "测试已导入的密钥以检查有效性。" + +-#: dnf/drpm.py:62 dnf/repo.py:268 ++#: dnf/drpm.py:62 dnf/repo.py:267 + #, python-format + msgid "unsupported checksum type: %s" + msgstr "不支持的校验类型: %s" +@@ -3707,7 +3711,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] "模块依赖问题:" +@@ -3716,10 +3720,12 @@ msgstr[0] "模块依赖问题:" + #, python-format + msgid "" + "Malformed lock file found: %s.\n" +-"Ensure no other dnf/yum process is running and remove the lock file manually or run systemd-tmpfiles --remove dnf.conf." ++"Ensure no other dnf/yum process is running and remove the lock file manually " ++"or run systemd-tmpfiles --remove dnf.conf." + msgstr "" + "发现损坏的锁文件 : %s。\n" +-"请确保没有其他 dnf/yum 进程正在运行,并手工删除锁文件,或执行 systemd-tmpfiles --remove dnf.conf 。" ++"请确保没有其他 dnf/yum 进程正在运行,并手工删除锁文件,或执行 systemd-" ++"tmpfiles --remove dnf.conf 。" + + #: dnf/module/__init__.py:26 + msgid "Enabling different stream for '{}'." +@@ -3741,7 +3747,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 +3797,7 @@ msgstr "" + "\n" + "提示:[d]默认,[e]已启用,[x]已禁用,[i]已安装" + +-#: dnf/module/module_base.py:34 ++#: dnf/module/module_base.py:36 + msgid "" + "\n" + "\n" +@@ -3761,80 +3807,97 @@ 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}' 的所有匹配项目都未激活" ++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}'" ++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 "不允许从失效保险仓库中安装模块" ++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}'" ++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 "不允许从失效保险仓库中升级模块" ++msgstr "不允许从自动防故障仓库升级模块" + +-#: dnf/module/module_base.py:367 ++#: dnf/module/module_base.py:422 ++#, python-brace-format + msgid "" +-"Only module name is required. Ignoring unneeded information in argument: " +-"'{}'" ++"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 +3908,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 +3933,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 "没有以下已停用插件模式的匹配项 : {}" + +@@ -3893,7 +3956,7 @@ msgid "Already downloaded" + msgstr "已下载" + + #. pinging mirrors, this might take a while +-#: dnf/repo.py:347 ++#: dnf/repo.py:346 + #, python-format + msgid "determining the fastest mirror (%s hosts).. " + msgstr "正在查找最快的镜像(%s 的主机) " +@@ -3908,10 +3971,26 @@ msgstr "正在启用 %s 仓库" + msgid "Added %s repo from %s" + msgstr "已添加 %s 仓库来自 %s" + ++#: dnf/rpm/miscutils.py:32 ++#, python-format ++msgid "Using rpmkeys executable at %s to verify signatures" ++msgstr "使用 %s 处的 rpmkeys 可执行文件来验证签名" ++ ++#: dnf/rpm/miscutils.py:66 ++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 +4037,211 @@ 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: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 "" ++msgid "" ++"Unexpected value of package reason \"{reason}\" for rpm nevra \"{nevra}\"." ++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 "没有为操作 \"{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 "" ++msgid "" ++"Unexpected value of package action \"{action}\" for rpm nevra \"{nevra}\"." ++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 "" ++msgid "" ++"Unexpected value of environment action \"{action}\" for environment " ++"\"{env}\"." ++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 "" ++"Package nevra \"{nevra}\", which is not present in the transaction file, was " ++"pulled into the transaction." ++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 "skipping." ++#~ msgstr "正在跳过。" ++ ++#~ msgid "" ++#~ "Using rpmkeys executable from {path} to verify signature for package: " ++#~ "{package}." ++#~ msgstr "使用来自 {path} 的 rpmkeys 可执行代码验证软件包的签名:{package}。" ++ ++#~ 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 "用于显示已查找到软件包的格式" + +@@ -4126,5 +4252,6 @@ msgstr "事务过程中出现错误。" + #~ msgstr "错误的事务 ID 或软件包" + + #~ msgid "" +-#~ "Display capabilities that the package depends on for running a %%pre script." ++#~ "Display capabilities that the package depends on for running a %%pre " ++#~ "script." + #~ msgstr "显示软件包运行一个 %%pre 脚本所依赖的功能" +diff --git a/po/zh_TW.po b/po/zh_TW.po +index b991c4f0..c43c0d5f 100644 +--- a/po/zh_TW.po ++++ b/po/zh_TW.po +@@ -11,10 +11,11 @@ msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2020-10-05 09:18-0400\n" ++"POT-Creation-Date: 2022-02-28 11:24+0100\n" + "PO-Revision-Date: 2020-09-08 22:00+0000\n" + "Last-Translator: Cheng-Chia Tseng \n" +-"Language-Team: Chinese (Traditional) \n" ++"Language-Team: Chinese (Traditional) \n" + "Language: zh_TW\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" +@@ -67,7 +68,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" +@@ -77,7 +78,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 檢查失敗" + +@@ -90,9 +91,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." +@@ -104,439 +107,426 @@ 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 "在 config 檔案中無效的 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 "錯誤:處理事項 check 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 "需要磁碟:" + +-#: 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 "找不到符合「{}」軟體包群組的項目" + +-#: dnf/base.py:1635 ++#: dnf/base.py:1721 + #, 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:1744 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:1762 + msgid "No groups marked for removal." + msgstr "沒有標記為移除的群組。" + +-#: dnf/base.py:1710 ++#: dnf/base.py:1796 + msgid "No group marked for upgrade." + msgstr "沒有標記為升級的群組。" + +-#: dnf/base.py:1925 ++#: dnf/base.py:2010 + #, 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:2012 dnf/base.py:2031 dnf/base.py:2044 dnf/base.py:2071 ++#: dnf/base.py:2124 dnf/base.py:2132 dnf/base.py:2266 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:2019 + #, python-format + msgid "Package %s of lower version already installed, cannot downgrade it." + msgstr "已經安裝較舊版本的軟體包 %s,所以無法降級。" + +-#: dnf/base.py:1957 ++#: dnf/base.py:2042 + #, python-format + msgid "Package %s not installed, cannot reinstall it." + msgstr "尚未安裝軟體包 %s,所以無法重新安裝。" + +-#: dnf/base.py:1972 ++#: dnf/base.py:2057 + #, python-format + msgid "File %s is a source package and cannot be updated, ignoring." + msgstr "檔案 %s 為來源軟體包且無法更新,忽略。" + +-#: dnf/base.py:1978 ++#: dnf/base.py:2068 + #, python-format + msgid "Package %s not installed, cannot update it." + msgstr "尚未安裝軟體包 %s,所以無法更新。" + +-#: dnf/base.py:1987 ++#: dnf/base.py:2078 + #, 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:2121 dnf/cli/commands/reinstall.py:81 + #, python-format + msgid "Package %s available, but not installed." + msgstr "軟體包 %s 可用,但尚未安裝。" + +-#: dnf/base.py:2032 ++#: dnf/base.py:2127 + #, 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:2152 + #, python-format + msgid "No package %s installed." + msgstr "軟體包 %s 未安裝。" + +-#: dnf/base.py:2075 dnf/cli/commands/install.py:136 ++#: dnf/base.py:2170 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:2185 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:2273 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:2278 + #, 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:2378 + msgid "No security updates needed, but {} update available" + msgstr "不需要任何的安全性更新,但有 {} 個更新可用" + +-#: dnf/base.py:2292 ++#: dnf/base.py:2380 + msgid "No security updates needed, but {} updates available" + msgstr "不需要任何的安全性更新,但有 {} 個更新可用" + +-#: dnf/base.py:2296 ++#: dnf/base.py:2384 + msgid "No security updates needed for \"{}\", but {} update available" + msgstr "不需要「{}」的任何安全性更新,但有 {} 個更新可用" + +-#: dnf/base.py:2298 ++#: dnf/base.py:2386 + 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:2407 + #, python-format + msgid "Unable to retrieve a key for a commandline package: %s" + msgstr "無法擷取命令列軟體包的金鑰:%s" + +-#: dnf/base.py:2327 ++#: dnf/base.py:2415 + #, python-format + msgid ". Failing package is: %s" + msgstr "失敗的軟體包為:%s" + +-#: dnf/base.py:2328 ++#: dnf/base.py:2416 + #, python-format + msgid "GPG Keys are configured as: %s" + msgstr "GPG 金鑰已經設定為:%s" + +-#: dnf/base.py:2340 ++#: dnf/base.py:2428 + #, python-format + msgid "GPG key at %s (0x%s) is already installed" + msgstr "於 %s (0x%s) 的 GPG 密鑰已經安裝" + +-#: dnf/base.py:2373 ++#: dnf/base.py:2464 + msgid "The key has been approved." + msgstr "金鑰已經核可。" + +-#: dnf/base.py:2376 ++#: dnf/base.py:2467 + msgid "The key has been rejected." + msgstr "金鑰已被拒絕。" + +-#: dnf/base.py:2409 ++#: dnf/base.py:2500 + #, python-format + msgid "Key import failed (code %d)" + msgstr "密鑰匯入失敗(錯誤代碼 %d)" + +-#: dnf/base.py:2411 ++#: dnf/base.py:2502 + msgid "Key imported successfully" + msgstr "密鑰匯入成功" + +-#: dnf/base.py:2415 ++#: dnf/base.py:2506 + msgid "Didn't install any keys" + msgstr "無法安裝任何密鑰" + +-#: dnf/base.py:2418 ++#: dnf/base.py:2509 + #, python-format + msgid "" +-"The GPG keys listed for the \"%s\" repository are already installed but they are not correct for this package.\n" ++"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 "" + "列出的「%s」軟體庫 GPG 金鑰已經安裝,但這些金鑰對這個軟體包都不正確。\n" + "檢查這個軟體庫的不正確金鑰之網址設定。" + +-#: dnf/base.py:2429 ++#: dnf/base.py:2520 + msgid "Import of key(s) didn't help, wrong key(s)?" + msgstr "匯入的金鑰沒有作用,可能是因為金鑰是錯誤的?" + +-#: dnf/base.py:2482 ++#: dnf/base.py:2573 + msgid " * Maybe you meant: {}" + msgstr " * 或許您想要:{}" + +-#: dnf/base.py:2514 ++#: dnf/base.py:2605 + msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum" + msgstr "「{}」軟體包來自本機「{}」軟體庫有不正確的 checksum" + +-#: dnf/base.py:2517 ++#: dnf/base.py:2608 + msgid "Some packages from local repository have incorrect checksum" + msgstr "來自本機軟體庫的部份軟體包有不正確的 checksum" + +-#: dnf/base.py:2520 ++#: dnf/base.py:2611 + msgid "Package \"{}\" from repository \"{}\" has incorrect checksum" + msgstr "「{}」軟體包來自「{}」軟體庫有不正確的 checksum" + +-#: dnf/base.py:2523 ++#: dnf/base.py:2614 + 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:2632 dnf/base.py:2652 + msgid "No match for argument" + msgstr "沒有符合引數的項目" + +-#: dnf/base.py:2549 dnf/base.py:2569 ++#: dnf/base.py:2640 dnf/base.py:2660 + msgid "All matches were filtered out by exclude filtering for argument" + msgstr "所有符合項目皆被引數的排除過濾器濾掉" + +-#: dnf/base.py:2551 ++#: dnf/base.py:2642 + msgid "All matches were filtered out by modular filtering for argument" + msgstr "所有符合項目皆被引數的模組化過濾器濾掉" + +-#: dnf/base.py:2567 ++#: dnf/base.py:2658 + msgid "All matches were installed from a different repository for argument" + msgstr "所有符合項目皆從引數的不同軟體庫安裝" + +-#: dnf/base.py:2583 ++#: dnf/base.py:2705 + #, python-format + msgid "Package %s is already installed." + msgstr "已安裝 %s 軟體包。" +@@ -556,8 +546,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" +@@ -588,44 +578,53 @@ msgid "" + "stream '{2}'" + msgstr "動作可能會導致「{0}」模組的「{1}」串流被切換到「{2}」串流" + +-#: dnf/cli/cli.py:172 +-#, python-brace-format ++#: dnf/cli/cli.py:173 ++#, fuzzy, 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 ' command. After " ++#| "you reset the module, you can install the other stream." + 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 ' 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 ' command. " ++"After you reset the module, you can install the other stream." + msgstr "" + "無法切換模組的已啟用串流。\n" +-"建議移除模組的所有已安裝內容,並使用 '{prog} module reset ' 命令重設模組。重設完模組後,就可以安裝其他串流。" ++"建議移除模組的所有已安裝內容,並使用 '{prog} module reset ' 命令" ++"重設模組。重設完模組後,就可以安裝其他串流。" + +-#: 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." +@@ -633,116 +632,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 "棄用軟體包" + +-#: 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 "沒有提供處理事項識別碼" +- +-#: 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 "在 %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)." ++"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)'」" ++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." +@@ -750,52 +729,54 @@ 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 命令一起使用。" ++"--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」以了解如何隱藏此則訊息)" ++"警告:因為作用中的 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 "排除於軟體庫 " + +-#: dnf/cli/cli.py:1163 ++#: dnf/cli/cli.py:1052 + msgid "Includes in repo " + msgstr "包含於軟體庫 " + +@@ -813,7 +794,8 @@ msgstr "您的 RPMDB 可能損壞,可執行「%s」可能會修復這個問題 + #, python-brace-format + msgid "" + "You have enabled checking of packages via GPG keys. This is a good thing.\n" +-"However, you do not have any GPG public keys installed. You need to download\n" ++"However, you do not have any GPG public keys installed. You need to " ++"download\n" + "the keys for packages you wish to install and install them.\n" + "You can do that by running the command:\n" + " rpm --import public.gpg.key\n" +@@ -847,38 +829,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" +@@ -916,70 +898,70 @@ msgstr "檢查可用的軟體包升級" + msgid "show changelogs before update" + 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 "沒有可用的軟體包。" + +-#: 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} 命令" +@@ -1150,7 +1132,11 @@ 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" ++#, fuzzy ++#| 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 "列出軟體包的依賴關係以及由何軟體包提供" + + #: dnf/cli/commands/distrosync.py:32 +@@ -1177,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 "" + 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 "找不到強制群組軟體包。" + +@@ -1262,8 +1248,8 @@ msgstr "" + + #: dnf/cli/commands/history.py:68 + msgid "" +-"For the replay command, don't check for installed packages matching those in" +-" transaction" ++"For the replay command, don't check for installed packages matching those in " ++"transaction" + msgstr "" + + #: dnf/cli/commands/history.py:71 +@@ -1274,8 +1260,8 @@ msgstr "" + + #: dnf/cli/commands/history.py:74 + msgid "" +-"For the replay command, skip packages that are not available or have missing" +-" dependencies" ++"For the replay command, skip packages that are not available or have missing " ++"dependencies" + msgstr "" + + #: dnf/cli/commands/history.py:94 +@@ -1298,30 +1284,58 @@ msgstr "沒有提供處理事項識別碼或軟體包名稱。" + 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 "沒有提供處理事項識別碼或軟體包名稱。" + +-#: 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." ++"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 "沒有提供處理事項識別碼" ++ ++#: 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 "找到超過一個處理事項識別碼!" ++ ++#: 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 '..'." +@@ -1329,7 +1343,7 @@ msgstr "" + "無效的處理事項識別碼範圍定義「{}」。\n" + "使用「..」。" + +-#: dnf/cli/commands/history.py:226 ++#: dnf/cli/commands/history.py:283 + msgid "" + "Can't convert '{}' to transaction ID.\n" + "Use '', 'last', 'last-'." +@@ -1337,39 +1351,32 @@ msgstr "" + "無法將「{}」轉為處理事項 ID。\n" + "請使用 '<數字>'、'last'、'last-<數字>'。" + +-#: 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 "" + +-#: 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 failed" + 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 +@@ -1389,7 +1396,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}" +@@ -1432,7 +1439,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 "錯誤:" + +@@ -1441,89 +1448,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: '{}'" ++"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 "" ++ ++#: 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 "{} {} {}:引數過少" + +@@ -1712,7 +1723,8 @@ msgstr "搜尋軟體包符合的關鍵詞" + msgid "" + "Query all packages (shorthand for repoquery '*' or repoquery without " + "argument)" +-msgstr "查詢所有軟體包(為軟體包查詢「*」或不包含引數的軟體包查詢的 shorthand)" ++msgstr "" ++"查詢所有軟體包(為軟體包查詢「*」或不包含引數的軟體包查詢的 shorthand)" + + #: dnf/cli/commands/repoquery.py:124 + msgid "Query all versions of packages (default)" +@@ -1798,7 +1810,8 @@ 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 如果 N 是否定的)" ++msgstr "" ++"為提供的 name.arch 顯示 N 個最新的軟體包(或最新、除了 N 如果 N 是否定的)" + + #: dnf/cli/commands/repoquery.py:177 + msgid "list also packages of inactive module streams" +@@ -1823,9 +1836,11 @@ msgstr "顯示軟體包的變更紀錄" + #: dnf/cli/commands/repoquery.py:194 + #, python-format, python-brace-format + msgid "" +-"display format for listing packages: \"%%{name} %%{version} ...\", use " +-"--querytags to view full tag list" +-msgstr "軟體包清單的顯示格式:「%%{name} %%{version} ...」,使用 --querytags 檢視完整標籤清單" ++"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" +@@ -1835,7 +1850,8 @@ 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 "" +@@ -1902,8 +1918,8 @@ 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." +@@ -1952,23 +1968,23 @@ msgstr "要搜尋的關鍵詞:" + + #: dnf/cli/commands/repoquery.py:295 + msgid "" +-"Option '--resolve' has to be used together with one of the '--conflicts', '" +-"--depends', '--enhances', '--provides', '--recommends', '--requires', '--" ++"Option '--resolve' has to be used together with one of the '--conflicts', '--" ++"depends', '--enhances', '--provides', '--recommends', '--requires', '--" + "requires-pre', '--suggests' or '--supplements' options" + msgstr "" +-"選項 '--resolve' 需要與 '--conflicts', '--depends', '--enhances', '--provides', '" +-"--recommends', '--requires', '--requires-pre', '--suggests' 或 '--" +-"supplements' 選項一起使用" ++"選項 '--resolve' 需要與 '--conflicts', '--depends', '--enhances', '--" ++"provides', '--recommends', '--requires', '--requires-pre', '--suggests' 或 " ++"'--supplements' 選項一起使用" + + #: dnf/cli/commands/repoquery.py:305 + msgid "" + "Option '--recursive' has to be used with '--whatrequires ' (optionally " +-"with '--alldeps', but not with '--exactdeps'), or with '--requires " +-"--resolve'" ++"with '--alldeps', but not with '--exactdeps'), or with '--requires --" ++"resolve'" + msgstr "" +-"「--recursive」選項必須與「--whatrequires " +-"」一起使用(可以選擇與「--alldeps」一起使用,但不可以是「--exactdeps」),或是與「--requires " +-"--resolve」一起使用" ++"「--recursive」選項必須與「--whatrequires 」一起使用(可以選擇與「--" ++"alldeps」一起使用,但不可以是「--exactdeps」),或是與「--requires --" ++"resolve」一起使用" + + #: dnf/cli/commands/repoquery.py:312 + msgid "argument {} requires --whatrequires or --whatdepends option" +@@ -1982,13 +1998,17 @@ msgstr "軟體包 {} 不包含任何檔案" + #, python-brace-format + msgid "" + "No valid switch specified\n" +-"usage: {prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--tree]\n" ++"usage: {prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--" ++"recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--" ++"tree]\n" + "\n" + "description:\n" + " For the given packages print a tree of thepackages." + msgstr "" + "未指定有效的開關選項\n" +-"用法:{prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--tree]\n" ++"用法:{prog} repoquery [--conflicts|--enhances|--obsoletes|--provides|--" ++"recommends|--requires|--suggest|--supplements|--whatrequires] [key] [--" ++"tree]\n" + "\n" + "描述:\n" + " 列出提供軟體包的樹狀圖。" +@@ -2009,27 +2029,26 @@ 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" + +-#. TRANSLATORS: separator used between package attributes (eg. Name & Summary +-#. & URL) ++#. TRANSLATORS: separator used between package attributes (eg. Name & Summary & URL) + #: dnf/cli/commands/search.py:76 + msgid " & " + msgstr " & " +@@ -2167,16 +2186,16 @@ msgstr "" + "run 解析並執行處理事項集\n" + "exit (or 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 "離開 Shell" + +@@ -2367,8 +2386,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 "已安裝" + +@@ -2547,7 +2566,9 @@ msgstr "錯誤輸出等級" + msgid "" + "enables {prog}'s obsoletes processing logic for upgrade or display " + "capabilities that the package obsoletes for info, list and repoquery" +-msgstr "啟用 {prog} 中 upgrade 的棄用處理邏輯,或啟用 info、list 和 repoquery 顯示軟體包棄用的功能" ++msgstr "" ++"啟用 {prog} 中 upgrade 的棄用處理邏輯,或啟用 info、list 和 repoquery 顯示軟" ++"體包棄用的功能" + + #: dnf/cli/option_parser.py:251 + msgid "debugging output level for rpm" +@@ -2569,8 +2590,8 @@ msgstr "啟用額外軟體庫。列出選項。支援 Glob,可多次指定。" + + #: dnf/cli/option_parser.py:266 + msgid "" +-"Disable repositories. List option. Supports globs, can be specified multiple" +-" times." ++"Disable repositories. List option. Supports globs, can be specified multiple " ++"times." + msgstr "停用軟體庫。列出選項。支援 Glob,可多次指定。" + + #: dnf/cli/option_parser.py:270 +@@ -2599,7 +2620,8 @@ msgstr "停用 excludepkgs" + msgid "" + "label and path to an additional repository to use (same path as in a " + "baseurl), can be specified multiple times." +-msgstr "要使用之額外軟體庫的標籤與路徑(跟基礎 URL 中的路徑一致),可多次指定。" ++msgstr "" ++"要使用之額外軟體庫的標籤與路徑(跟基礎 URL 中的路徑一致),可多次指定。" + + #: dnf/cli/option_parser.py:297 + msgid "disable removal of dependencies that are no longer used" +@@ -2689,13 +2711,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 "Epoch" + +@@ -2703,38 +2725,38 @@ msgstr "Epoch" + #. 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 "大小" +@@ -2743,32 +2765,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 "來源軟體庫" + +@@ -2776,312 +2798,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 "yes" + +-#: 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 "no" + +-#: 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. +-#: 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" +@@ -3090,12 +3108,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 " 或群組的一部分" + +@@ -3103,22 +3121,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" +@@ -3130,287 +3148,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 "" + 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 "發行版本 :" + +-#: 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 "小令稿輸出:" + +-#: 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" +@@ -3472,10 +3474,6 @@ msgstr " 開始於:%s - %s 之前" + msgid " State : %s" + msgstr " 狀態:%s" + +-#: dnf/comps.py:104 +-msgid "skipping." +-msgstr "略過。" +- + #: dnf/comps.py:196 dnf/comps.py:692 dnf/comps.py:706 + #, python-format + msgid "Module or Group '%s' is not installed." +@@ -3497,7 +3495,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." +@@ -3524,6 +3522,12 @@ msgstr "Group_id「%s」不存在。" + msgid "Error parsing '%s': %s" + msgstr "無法解析「%s」:%s" + ++#: dnf/conf/config.py:151 ++#, fuzzy, python-format ++#| msgid "Unknown configuration value: %s=%s in %s; %s" ++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:{}" +@@ -3565,36 +3569,36 @@ msgstr "以「%s.%s」鍵,「%s」值解析 --setopt 時發生錯誤:%s" + msgid "Repo %s did not have a %s attr. before setopt" + msgstr "%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 "軟體庫的 ID 無效:{} ({}),位元組 = {} {}" + +-#: dnf/conf/read.py:67 ++#: dnf/conf/read.py:76 + msgid "Bad id for repo: {}, byte = {} {}" + msgstr "軟體庫的 ID 無效:{},位元組 = {} {}" + +-#: 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 "解析「{}」檔案失敗:{}" + +@@ -3608,24 +3612,40 @@ msgstr "%s 軟體庫:0x%s 早已匯入" + msgid "repo %s: imported key 0x%s." + msgstr "%s 軟體庫:已匯入 0x%s 金鑰。" + +-#: dnf/db/group.py:293 ++#: dnf/crypto.py:145 ++msgid "Verified using DNS record with DNSSEC signature." ++msgstr "" ++ ++#: dnf/crypto.py:147 ++msgid "NOT verified using DNS record." ++msgstr "" ++ ++#: dnf/crypto.py:184 ++#, python-format ++msgid "retrieving repo key for %s unencrypted from %s" ++msgstr "" ++ ++#: 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 ++#, fuzzy ++#| msgid "" ++#| "Configuration option 'gpgkey_dns_verification' requires libunbound ({})" + msgid "" +-"Configuration option 'gpgkey_dns_verification' requires libunbound ({})" ++"Configuration option 'gpgkey_dns_verification' requires python3-unbound ({})" + msgstr "「gpgkey_dns_verification」設定選項需要 libunbound ({})" + + #: dnf/dnssec.py:239 +@@ -3648,7 +3668,7 @@ msgstr "DNSSEC 擴充: " + msgid "Testing already imported keys for their validity." + msgstr "測試已經匯入的金鑰其有效性。" + +-#: dnf/drpm.py:62 dnf/repo.py:268 ++#: dnf/drpm.py:62 dnf/repo.py:267 + #, python-format + msgid "unsupported checksum type: %s" + msgstr "未支援的查核碼類型:%s" +@@ -3690,7 +3710,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] "模組化的依賴關係問題:" +@@ -3699,10 +3719,12 @@ msgstr[0] "模組化的依賴關係問題:" + #, python-format + msgid "" + "Malformed lock file found: %s.\n" +-"Ensure no other dnf/yum process is running and remove the lock file manually or run systemd-tmpfiles --remove dnf.conf." ++"Ensure no other dnf/yum process is running and remove the lock file manually " ++"or run systemd-tmpfiles --remove dnf.conf." + msgstr "" + "發現格式錯誤的鎖定檔:%s。\n" +-"請確定沒有其他正在執行的 dnf/yum 處理程序,然後手動移除鎖定檔或執行 systemd-tmpfiles --remove dnf.conf。" ++"請確定沒有其他正在執行的 dnf/yum 處理程序,然後手動移除鎖定檔或執行 systemd-" ++"tmpfiles --remove dnf.conf。" + + #: dnf/module/__init__.py:26 + msgid "Enabling different stream for '{}'." +@@ -3724,7 +3746,57 @@ msgstr "已啟用模組:{}。" + msgid "No profile specified for '{}', please specify profile." + msgstr "沒有為 {} 指定的設定檔,請指定設定檔。" + +-#: dnf/module/module_base.py:33 ++#: dnf/module/exceptions.py:27 ++#, fuzzy ++#| msgid "No profiles for module {}:{}" ++msgid "No such module: {}" ++msgstr "沒有 {}:{} 模組的設定檔" ++ ++#: dnf/module/exceptions.py:33 ++msgid "No such stream: {}" ++msgstr "" ++ ++#: dnf/module/exceptions.py:39 ++#, fuzzy ++#| msgid "No profiles for module {}:{}" ++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 ++#, fuzzy ++#| msgid "No profile specified for '{}', please specify profile." ++msgid "No stream specified for '{}', please specify stream" ++msgstr "沒有為 {} 指定的設定檔,請指定設定檔。" ++ ++#: dnf/module/exceptions.py:82 ++#, fuzzy ++#| msgid "No repositories available" ++msgid "No such profile: {}. No profiles available" ++msgstr "沒有可用的軟體庫" ++ ++#: dnf/module/exceptions.py:88 ++#, fuzzy ++#| msgid "No profiles for module {}:{}" ++msgid "No profile to remove for '{}'" ++msgstr "沒有 {}:{} 模組的設定檔" ++ ++#: dnf/module/module_base.py:35 + msgid "" + "\n" + "\n" +@@ -3734,7 +3806,7 @@ msgstr "" + "\n" + "提示:預設[d]、已啟用[e]、已停用[x]、已安裝[i]" + +-#: dnf/module/module_base.py:34 ++#: dnf/module/module_base.py:36 + msgid "" + "\n" + "\n" +@@ -3744,80 +3816,97 @@ 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 ++#, 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:228 ++#, 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: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 "不允許從 {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 "" +-"Only module name is required. Ignoring unneeded information in argument: " +-"'{}'" ++"Argument '{argument}' matches {stream_count} streams ('{streams}') of module " ++"'{module}', but none of the streams are enabled or default" ++msgstr "" ++ ++#: 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 +@@ -3853,16 +3942,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 "找不到下述停用之插件模式的符合項目:{}" + +@@ -3876,7 +3965,7 @@ msgid "Already downloaded" + msgstr "已經下載" + + #. pinging mirrors, this might take a while +-#: dnf/repo.py:347 ++#: dnf/repo.py:346 + #, python-format + msgid "determining the fastest mirror (%s hosts).. " + msgstr "正在決定最快速的鏡像站 (%s 主機)… " +@@ -3891,10 +3980,25 @@ msgstr "正在啟用 %s 軟體庫" + msgid "Added %s repo from %s" + msgstr "已從 %s 增加 %s 軟體庫" + ++#: dnf/rpm/miscutils.py:32 ++#, python-format ++msgid "Using rpmkeys executable at %s to verify signatures" ++msgstr "" ++ ++#: dnf/rpm/miscutils.py:66 ++msgid "Cannot find rpmkeys executable to verify signatures." ++msgstr "" ++ + #: 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 "" ++ + #. TRANSLATORS: This is for a single package currently being downgraded. + #: dnf/transaction.py:80 + msgctxt "currently" +@@ -3941,164 +4045,210 @@ 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}" +-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}\"." ++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 + #, fuzzy, python-brace-format + #| msgid "Package %s is already installed." + msgid "Package \"{na}\" is already installed for action \"{action}\"." + msgstr "已安裝 %s 軟體包。" + +-#: 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}\"." ++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 "Module or Group '%s' is not available." + msgid "Group id '%s' is not available." + msgstr "無法使用「%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 "Module or Group '%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 available." + 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}\"." ++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." ++"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: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 "skipping." ++#~ 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 "找不到提供的處理事項識別碼" ++ ++#~ msgid "Undoing transaction {}, from {}" ++#~ msgstr "取消變更處理事項 {},從 {}" ++ + #~ msgid "format for displaying found packages" + #~ msgstr "顯示找到的軟體包格式" + +@@ -4109,5 +4259,6 @@ msgstr "在處理事項時發生錯誤。" + #~ msgstr "給予的處理事項 ID、或軟體包不良" + + #~ msgid "" +-#~ "Display capabilities that the package depends on for running a %%pre script." ++#~ "Display capabilities that the package depends on for running a %%pre " ++#~ "script." + #~ msgstr "顯示軟體包執行在 %%pre 指令上的功能。" +-- +2.35.1 + diff --git a/SOURCES/0017-Add-documentation-for-query-api-flags.patch b/SOURCES/0017-Add-documentation-for-query-api-flags.patch new file mode 100644 index 0000000..2cc9884 --- /dev/null +++ b/SOURCES/0017-Add-documentation-for-query-api-flags.patch @@ -0,0 +1,57 @@ +From 27f26c607c44b8331b23c861241a8509c2452531 Mon Sep 17 00:00:00 2001 +From: sbluhm +Date: Sun, 9 Jan 2022 14:30:19 +0100 +Subject: [PATCH] Add documentation for query api flags + += changelog = +msg: Add documentation for query api flags +type: enhancement +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2035577 +--- + AUTHORS | 1 + + doc/api_sack.rst | 14 +++++++++++++- + 2 files changed, 14 insertions(+), 1 deletion(-) + +diff --git a/AUTHORS b/AUTHORS +index f8c9eb83..0077c7ea 100644 +--- a/AUTHORS ++++ b/AUTHORS +@@ -91,6 +91,7 @@ DNF CONTRIBUTORS + Petr Spacek + Rob Cutmore + Satoshi Matsumoto ++ Stefan Bluhm + Tomas Kasparek + Vladan Kudlac + Will Woods +diff --git a/doc/api_sack.rst b/doc/api_sack.rst +index 79719878..ac843fc9 100644 +--- a/doc/api_sack.rst ++++ b/doc/api_sack.rst +@@ -25,10 +25,22 @@ + + The package sack. Contains metadata information about all known packages, installed and available. + +- .. method:: query() ++ .. method:: query(flags=hawkey.APPLY_EXCLUDES) + + Return a :class:`Query` for querying packages contained in this sack. + ++ :ref:`Package filtering ` is applied when creating the query object. The behavior can be adapted using flags. Possible flags: ++ ++ ++ ============================== =========================================================================== ++ Flag Value meaning ++ ============================== =========================================================================== ++ hawkey.APPLY_EXCLUDES Apply all package filtering. ++ hawkey.IGNORE_EXCLUDES Ignore all package filtering. ++ hawkey.IGNORE_REGULAR_EXCLUDES Ignore regular excludes defined by configuration files or the command line. ++ hawkey.IGNORE_MODULAR_EXCLUDES Ignore modular filtering. ++ ============================== =========================================================================== ++ + .. function:: rpmdb_sack(base) + + Returns a new instance of sack containing only installed packages (@System repo). Useful to get list of the installed RPMs after transaction. +-- +2.35.1 + diff --git a/SOURCES/0017-cli-commands-history-Fix-history-undo-on-a-Reason-Ch.patch b/SOURCES/0017-cli-commands-history-Fix-history-undo-on-a-Reason-Ch.patch deleted file mode 100644 index 9f2ec34..0000000 --- a/SOURCES/0017-cli-commands-history-Fix-history-undo-on-a-Reason-Ch.patch +++ /dev/null @@ -1,65 +0,0 @@ -From fe87499e6745795b1dc6225fa102a1242eb9ffc8 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hr=C3=A1zk=C3=BD?= -Date: Thu, 17 Feb 2022 18:46:22 +0100 -Subject: [PATCH 17/19] cli/commands/history: Fix history undo on a Reason - Change - -The previous reason needs to be fetched from the history db. It's -inefficient to parse the nevra after it was serialized in a previous -step, but that would need bigger code restructuring. - -= changelog = -msg: Fix history undo on a Reason Change -type: bugfix -resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2053014 -resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2010259 ---- - dnf.spec | 2 +- - dnf/cli/commands/history.py | 11 +++++++++++ - 2 files changed, 12 insertions(+), 1 deletion(-) - -diff --git a/dnf.spec b/dnf.spec -index 02c8b577..36c3932e 100644 ---- a/dnf.spec -+++ b/dnf.spec -@@ -2,7 +2,7 @@ - %define __cmake_in_source_build 1 - - # default dependencies --%global hawkey_version 0.61.1 -+%global hawkey_version 0.66.0 - %global libcomps_version 0.1.8 - %global libmodulemd_version 2.9.3 - %global rpm_version 4.14.0 -diff --git a/dnf/cli/commands/history.py b/dnf/cli/commands/history.py -index 293d93fc..21d04a1a 100644 ---- a/dnf/cli/commands/history.py -+++ b/dnf/cli/commands/history.py -@@ -223,6 +223,7 @@ class HistoryCommand(commands.Command): - "Reinstall": "Reinstalled", - "Obsoleted": "Install", - "Obsolete": "Obsoleted", -+ "Reason Change": "Reason Change", - } - - data = serialize_transaction(trans) -@@ -235,6 +236,16 @@ class HistoryCommand(commands.Command): - if ti["action"] == "Install" and ti.get("reason", None) == "clean": - ti["reason"] = "dependency" - -+ if ti["action"] == "Reason Change" and "nevra" in ti: -+ subj = hawkey.Subject(ti["nevra"]) -+ nevra = subj.get_nevra_possibilities(forms=[hawkey.FORM_NEVRA])[0] -+ reason = self.output.history.swdb.resolveRPMTransactionItemReason( -+ nevra.name, -+ nevra.arch, -+ trans.tids()[0] - 1 -+ ) -+ ti["reason"] = libdnf.transaction.TransactionItemReasonToString(reason) -+ - 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 --- -2.31.1 - diff --git a/SOURCES/0018-Fix-processing-of-download-errors-RhBug-2024527.patch b/SOURCES/0018-Fix-processing-of-download-errors-RhBug-2024527.patch new file mode 100644 index 0000000..534e6e5 --- /dev/null +++ b/SOURCES/0018-Fix-processing-of-download-errors-RhBug-2024527.patch @@ -0,0 +1,37 @@ +From 9bd0423e1e543ed5f83924ec61aa253eced24cf8 Mon Sep 17 00:00:00 2001 +From: Marek Blaha +Date: Mon, 14 Mar 2022 09:49:52 +0100 +Subject: [PATCH] Fix processing of download errors (RhBug: 2024527) + +Users with different than english locale are not able to update their +systems in case that some of updates are already downloaded in the dnf +cache (e.g. using dnf-automatic). + +The error string is taken from librepo target where it is stored +untranslated. Therefore we need to compare untranslated versions of the +string. + += changelog = +msg: Fix download errors handling in non-english locales +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2024527 +--- + dnf/repo.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/dnf/repo.py b/dnf/repo.py +index 1822cf01..ec1a2537 100644 +--- a/dnf/repo.py ++++ b/dnf/repo.py +@@ -108,7 +108,7 @@ def _download_payloads(payloads, drpm, fail_fast=True): + callbacks = tgt.getCallbacks() + payload = callbacks.package_pload + pkg = payload.pkg +- if err == _('Already downloaded'): ++ if err == 'Already downloaded': + errs._skipped.add(pkg) + continue + pkg.repo._repo.expire() +-- +2.35.1 + diff --git a/SOURCES/0018-Fix-remove-when-no-repos-are-enabled-RhBz-2064341.patch b/SOURCES/0018-Fix-remove-when-no-repos-are-enabled-RhBz-2064341.patch deleted file mode 100644 index ff4ec12..0000000 --- a/SOURCES/0018-Fix-remove-when-no-repos-are-enabled-RhBz-2064341.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 55f6691d5663c59b675064b04e19288365e92d24 Mon Sep 17 00:00:00 2001 -From: Nicola Sella -Date: Tue, 15 Mar 2022 16:26:10 +0100 -Subject: [PATCH 18/19] Fix remove when no repos are enabled (RhBz:2064341) - -msg: When no repositories are enabled, dnf group exits and does not -remove an installed group. -resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2064341 -type: bugfix ---- - dnf/cli/commands/group.py | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/dnf/cli/commands/group.py b/dnf/cli/commands/group.py -index fd723c48..c5c23230 100644 ---- a/dnf/cli/commands/group.py -+++ b/dnf/cli/commands/group.py -@@ -358,7 +358,8 @@ class GroupCommand(commands.Command): - else: - demands.available_repos = True - -- commands._checkEnabledRepo(self.base) -+ if cmd not in ('remove'): -+ commands._checkEnabledRepo(self.base) - - if cmd in ('install', 'upgrade'): - commands._checkGPGKey(self.base, self.cli) --- -2.31.1 - diff --git a/SOURCES/0019-Fix-unittests-that-relied-on-checksum-being-at-the-e.patch b/SOURCES/0019-Fix-unittests-that-relied-on-checksum-being-at-the-e.patch new file mode 100644 index 0000000..1a330f0 --- /dev/null +++ b/SOURCES/0019-Fix-unittests-that-relied-on-checksum-being-at-the-e.patch @@ -0,0 +1,81 @@ +From 0da73ea1304005b796842d96679d6ea31cdeea3c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Tue, 1 Mar 2022 12:42:23 +0100 +Subject: [PATCH] Fix unittests that relied on checksum being at the end of + solvfiles + +--- + tests/test_fill_sack_from_repos_in_cache.py | 26 +++++++++++---------- + 1 file changed, 14 insertions(+), 12 deletions(-) + +diff --git a/tests/test_fill_sack_from_repos_in_cache.py b/tests/test_fill_sack_from_repos_in_cache.py +index a8de287c..30d02cfe 100644 +--- a/tests/test_fill_sack_from_repos_in_cache.py ++++ b/tests/test_fill_sack_from_repos_in_cache.py +@@ -39,7 +39,7 @@ TEST_REPO_NAME = "test-repo" + + + class FillSackFromReposInCacheTest(unittest.TestCase): +- def _create_cache_for_repo(self, repopath, tmpdir): ++ def _create_cache_for_repo(self, repopath, tmpdir, repo_name=TEST_REPO_NAME): + conf = dnf.conf.MainConf() + conf.cachedir = os.path.join(tmpdir, "cache") + conf.installroot = tmpdir +@@ -49,7 +49,7 @@ class FillSackFromReposInCacheTest(unittest.TestCase): + + base = dnf.Base(conf=conf) + +- repoconf = dnf.repo.Repo(TEST_REPO_NAME, base.conf) ++ repoconf = dnf.repo.Repo(repo_name, base.conf) + repoconf.baseurl = repopath + repoconf.enable() + +@@ -194,6 +194,8 @@ class FillSackFromReposInCacheTest(unittest.TestCase): + + 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")) ++ self._create_cache_for_repo(os.path.join(os.path.abspath(os.path.dirname(__file__)), "repos/drpm"), ++ self.tmpdir, "drpm-repo") + + # Remove xml metadata except repomd + # repomd.xml is not compressed and doesn't end with .gz +@@ -201,12 +203,11 @@ class FillSackFromReposInCacheTest(unittest.TestCase): + 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") ++ # Replace solvfile of test-repo with solvfile from drpm-repo which has different data (different checksum) ++ shutil.move(os.path.join(self.tmpdir, "cache/drpm-repo.solv"), ++ os.path.join(self.tmpdir, "cache/test-repo.solv")) + +- # Now we only have cache with solvx, modified solv file and just repomd ++ # Now we only have cache with solvx, mismatching solv file and just repomd + # Since we don't have original xml metadata we cannot regenerate solv -> fail (exception) + + self.assertRaises(dnf.exceptions.RepoError, +@@ -214,13 +215,14 @@ class FillSackFromReposInCacheTest(unittest.TestCase): + + def test_checksum_mistmatch_regenerates_solv(self): + self._setUp_from_repo_path(os.path.join(os.path.abspath(os.path.dirname(__file__)), "repos/rpm")) ++ self._create_cache_for_repo(os.path.join(os.path.abspath(os.path.dirname(__file__)), "repos/drpm"), ++ self.tmpdir, "drpm-repo") + +- # 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") ++ # Replace solvfile of test-repo with solvfile from drpm-repo which has different data (different checksum) ++ shutil.move(os.path.join(self.tmpdir, "cache/drpm-repo.solv"), ++ os.path.join(self.tmpdir, "cache/test-repo.solv")) + +- # Now we only have cache with solvx, modified solv file and xml metadata. ++ # Now we only have cache with solvx, mismatching 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) +-- +2.35.1 + diff --git a/SOURCES/0019-doc-Improve-proxy-configuration-option-documentation.patch b/SOURCES/0019-doc-Improve-proxy-configuration-option-documentation.patch deleted file mode 100644 index 948c0b5..0000000 --- a/SOURCES/0019-doc-Improve-proxy-configuration-option-documentation.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 8f05ee29b7398fa6d18c7113a533f1d8726239df Mon Sep 17 00:00:00 2001 -From: Jaroslav Rohel -Date: Tue, 12 Apr 2022 12:25:05 +0200 -Subject: [PATCH 19/19] [doc] Improve "proxy" configuration option - documentation (RhBug:2072332) - ---- - doc/conf_ref.rst | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst -index 75bcdf75..885a4560 100644 ---- a/doc/conf_ref.rst -+++ b/doc/conf_ref.rst -@@ -833,10 +833,10 @@ configuration. - ``proxy`` - :ref:`string ` - -- URL of a proxy server to connect through. Set to an empty string to disable the proxy setting inherited from the main section and use direct connection instead. The expected format of this option is ``://[:port]``. -+ URL of a proxy server to connect through. Set to an empty string in the repository configuration to disable proxy setting inherited from the main section. The expected format of this option is ``://[:port]``. - (For backward compatibility, '_none_' can be used instead of the empty string.) - -- Note: The curl environment variables (such as ``http_proxy``) are effective if this option is unset. See the ``curl`` man page for details. -+ Note: The curl environment variables (such as ``http_proxy``) are effective if this option is unset (or '_none_' is set in the repository configuration). See the ``curl`` man page for details. - - ``proxy_username`` - :ref:`string ` --- -2.31.1 - diff --git a/SOURCES/0020-cli-commands-history-Fix-history-undo-on-a-Reason-Ch.patch b/SOURCES/0020-cli-commands-history-Fix-history-undo-on-a-Reason-Ch.patch new file mode 100644 index 0000000..4300537 --- /dev/null +++ b/SOURCES/0020-cli-commands-history-Fix-history-undo-on-a-Reason-Ch.patch @@ -0,0 +1,64 @@ +From fe87499e6745795b1dc6225fa102a1242eb9ffc8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hr=C3=A1zk=C3=BD?= +Date: Thu, 17 Feb 2022 18:46:22 +0100 +Subject: [PATCH] cli/commands/history: Fix history undo on a Reason Change + +The previous reason needs to be fetched from the history db. It's +inefficient to parse the nevra after it was serialized in a previous +step, but that would need bigger code restructuring. + += changelog = +msg: Fix history undo on a Reason Change +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2053014 +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2010259 +--- + dnf.spec | 2 +- + dnf/cli/commands/history.py | 11 +++++++++++ + 2 files changed, 12 insertions(+), 1 deletion(-) + +diff --git a/dnf.spec b/dnf.spec +index 02c8b577..36c3932e 100644 +--- a/dnf.spec ++++ b/dnf.spec +@@ -2,7 +2,7 @@ + %define __cmake_in_source_build 1 + + # default dependencies +-%global hawkey_version 0.61.1 ++%global hawkey_version 0.66.0 + %global libcomps_version 0.1.8 + %global libmodulemd_version 2.9.3 + %global rpm_version 4.14.0 +diff --git a/dnf/cli/commands/history.py b/dnf/cli/commands/history.py +index 293d93fc..21d04a1a 100644 +--- a/dnf/cli/commands/history.py ++++ b/dnf/cli/commands/history.py +@@ -223,6 +223,7 @@ class HistoryCommand(commands.Command): + "Reinstall": "Reinstalled", + "Obsoleted": "Install", + "Obsolete": "Obsoleted", ++ "Reason Change": "Reason Change", + } + + data = serialize_transaction(trans) +@@ -235,6 +236,16 @@ class HistoryCommand(commands.Command): + if ti["action"] == "Install" and ti.get("reason", None) == "clean": + ti["reason"] = "dependency" + ++ if ti["action"] == "Reason Change" and "nevra" in ti: ++ subj = hawkey.Subject(ti["nevra"]) ++ nevra = subj.get_nevra_possibilities(forms=[hawkey.FORM_NEVRA])[0] ++ reason = self.output.history.swdb.resolveRPMTransactionItemReason( ++ nevra.name, ++ nevra.arch, ++ trans.tids()[0] - 1 ++ ) ++ ti["reason"] = libdnf.transaction.TransactionItemReasonToString(reason) ++ + 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 +-- +2.35.1 + diff --git a/SOURCES/0021-Fix-remove-when-no-repos-are-enabled-RhBz-2064341.patch b/SOURCES/0021-Fix-remove-when-no-repos-are-enabled-RhBz-2064341.patch new file mode 100644 index 0000000..d2d48a1 --- /dev/null +++ b/SOURCES/0021-Fix-remove-when-no-repos-are-enabled-RhBz-2064341.patch @@ -0,0 +1,30 @@ +From 55f6691d5663c59b675064b04e19288365e92d24 Mon Sep 17 00:00:00 2001 +From: Nicola Sella +Date: Tue, 15 Mar 2022 16:26:10 +0100 +Subject: [PATCH] Fix remove when no repos are enabled (RhBz:2064341) + +msg: When no repositories are enabled, dnf group exits and does not +remove an installed group. +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2064341 +type: bugfix +--- + dnf/cli/commands/group.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/dnf/cli/commands/group.py b/dnf/cli/commands/group.py +index fd723c48..c5c23230 100644 +--- a/dnf/cli/commands/group.py ++++ b/dnf/cli/commands/group.py +@@ -358,7 +358,8 @@ class GroupCommand(commands.Command): + else: + demands.available_repos = True + +- commands._checkEnabledRepo(self.base) ++ if cmd not in ('remove'): ++ commands._checkEnabledRepo(self.base) + + if cmd in ('install', 'upgrade'): + commands._checkGPGKey(self.base, self.cli) +-- +2.35.1 + diff --git a/SOURCES/0022-doc-Improve-proxy-configuration-option-documentation.patch b/SOURCES/0022-doc-Improve-proxy-configuration-option-documentation.patch new file mode 100644 index 0000000..134238c --- /dev/null +++ b/SOURCES/0022-doc-Improve-proxy-configuration-option-documentation.patch @@ -0,0 +1,30 @@ +From 8f05ee29b7398fa6d18c7113a533f1d8726239df Mon Sep 17 00:00:00 2001 +From: Jaroslav Rohel +Date: Tue, 12 Apr 2022 12:25:05 +0200 +Subject: [PATCH] [doc] Improve "proxy" configuration option documentation + (RhBug:2072332) + +--- + doc/conf_ref.rst | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst +index 75bcdf75..885a4560 100644 +--- a/doc/conf_ref.rst ++++ b/doc/conf_ref.rst +@@ -833,10 +833,10 @@ configuration. + ``proxy`` + :ref:`string ` + +- URL of a proxy server to connect through. Set to an empty string to disable the proxy setting inherited from the main section and use direct connection instead. The expected format of this option is ``://[:port]``. ++ URL of a proxy server to connect through. Set to an empty string in the repository configuration to disable proxy setting inherited from the main section. The expected format of this option is ``://[:port]``. + (For backward compatibility, '_none_' can be used instead of the empty string.) + +- Note: The curl environment variables (such as ``http_proxy``) are effective if this option is unset. See the ``curl`` man page for details. ++ Note: The curl environment variables (such as ``http_proxy``) are effective if this option is unset (or '_none_' is set in the repository configuration). See the ``curl`` man page for details. + + ``proxy_username`` + :ref:`string ` +-- +2.35.1 + diff --git a/SOURCES/0023-Base.reset-plug-temporary-leak-of-libsolv-s-page-fil.patch b/SOURCES/0023-Base.reset-plug-temporary-leak-of-libsolv-s-page-fil.patch new file mode 100644 index 0000000..063f2c0 --- /dev/null +++ b/SOURCES/0023-Base.reset-plug-temporary-leak-of-libsolv-s-page-fil.patch @@ -0,0 +1,318 @@ +From 88a6289a4f72b11253c01a5a5d834b74d5abb6c3 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Sun, 24 Apr 2022 09:08:28 +0200 +Subject: [PATCH] Base.reset: plug (temporary) leak of libsolv's page file + descriptors + +Consider the following call paths (mixed Python and C), extending from +livecd-creator down to libsolv: + + main [livecd-tools/tools/livecd-creator] + install() [livecd-tools/imgcreate/creator.py] + fill_sack() [dnf/dnf/base.py] + _add_repo_to_sack() [dnf/dnf/base.py] + load_repo() [libdnf/python/hawkey/sack-py.cpp] + dnf_sack_load_repo() [libdnf/libdnf/dnf-sack.cpp] + write_main() [libdnf/libdnf/dnf-sack.cpp] + repo_add_solv() [libsolv/src/repo_solv.c] + repopagestore_read_or_setup_pages() [libsolv/src/repopage.c] + dup() + write_ext() [libdnf/libdnf/dnf-sack.cpp] + repo_add_solv() [libsolv/src/repo_solv.c] + repopagestore_read_or_setup_pages() [libsolv/src/repopage.c] + dup() + +The dup() calls create the following file descriptors (output from +"lsof"): + +> COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME +> python3 6500 root 7r REG 8,1 25320727 395438 /var/tmp/imgcreate-mytcghah/install_root/var/cache/dnf/fedora.solv (deleted) +> python3 6500 root 8r REG 8,1 52531426 395450 /var/tmp/imgcreate-mytcghah/install_root/var/cache/dnf/fedora-filenames.solvx + +These file descriptors are *owned* by the DnfSack object (which is derived +from GObject), as follows: + + sack->priv->pool->repos[1]->repodata[1]->store.pagefd = 7 + sack->priv->pool->repos[1]->repodata[2]->store.pagefd = 8 + ^ ^ ^ ^ ^ ^ ^ + | | | | | | | + | | | | | | int + | | | | | Repopagestore [libsolv/src/repopage.h] + | | | | Repodata [libsolv/src/repodata.h] + | | | struct s_Repo [libsolv/src/repo.h] + | | struct s_Pool (aka Pool) [libsolv/src/pool.h] + | DnfSackPrivate [libdnf/libdnf/dnf-sack.cpp] + DnfSack [libdnf/libdnf/dnf-sack.h] + +The file descriptors are *supposed* to be closed on the following call +path: + + main [livecd-tools/tools/livecd-creator] + install() [livecd-tools/imgcreate/creator.py] + close() [livecd-tools/imgcreate/dnfinst.py] + close() [dnf/dnf/base.py] + reset() [dnf/dnf/base.py] + _sack = None + _goal = None + _transaction = None + ... + dnf_sack_finalize() [libdnf/libdnf/dnf-sack.cpp] + pool_free() [libsolv/src/pool.c] + pool_freeallrepos() [libsolv/src/pool.c] + repo_freedata() [libsolv/src/repo.c] + repodata_freedata() [libsolv/src/repodata.c] + repopagestore_free() [libsolv/src/repopage.c] + close() + +Namely, when dnf.Base.reset() [dnf/dnf/base.py] is called with (sack=True, +goal=True), the reference counts of the objects pointed to by the "_sack", +"_goal" and "_transaction" fields are supposed to reach zero, and then, as +part of the DnfSack object's finalization, the libsolv file descriptors +are supposed to be closed. + +Now, while this *may* happen immediately in dnf.Base.reset(), it may as +well not. The reason is that there is a multitude of *circular references* +between DnfSack and the packages that it contains. When dnf.Base.reset() +is entered, we have the following picture: + + _sack _goal + | | + v v + +----------------+ +-------------+ + | DnfSack object | <--- | Goal object | + +----------------+ +-------------+ + |^ |^ |^ + || || || + || || || + +--||----||----||---+ + | v| v| v| | <-- _transaction + | Pkg1 Pkg2 PkgN | + | | + | Transaction oject | + +-------------------+ + +That is, the reference count of the DnfSack object is (1 + 1 + N), where N +is the number of packages in the transaction. Details: + +(a) The first reference comes from the "_sack" field, established like + this: + + main [livecd-tools/tools/livecd-creator] + install() [livecd-tools/imgcreate/creator.py] + fill_sack() [dnf/dnf/base.py] + _build_sack() [dnf/dnf/sack.py] + Sack() + sack_init() [libdnf/python/hawkey/sack-py.cpp] + dnf_sack_new() [libdnf/libdnf/dnf-sack.cpp] + +(b) The second reference on the DnfSack object comes from "_goal": + + main [livecd-tools/tools/livecd-creator] + install() [livecd-tools/imgcreate/creator.py] + fill_sack() [dnf/dnf/base.py] + _goal = Goal(_sack) + goal_init() [libdnf/python/hawkey/goal-py.cpp] + Py_INCREF(_sack) + +(c) Then there is one reference to "_sack" *per package* in the + transaction: + + main [livecd-tools/tools/livecd-creator] + install() [livecd-tools/imgcreate/creator.py] + runInstall() [livecd-tools/imgcreate/dnfinst.py] + resolve() [dnf/dnf/base.py] + _goal2transaction() [dnf/dnf/base.py] + list_installs() [libdnf/python/hawkey/goal-py.cpp] + list_generic() [libdnf/python/hawkey/goal-py.cpp] + packagelist_to_pylist() [libdnf/python/hawkey/iutil-py.cpp] + new_package() [libdnf/python/hawkey/sack-py.cpp] + Py_BuildValue() + ts.add_install() + + list_installs() creates a list of packages that need to be installed + by DNF. Inside the loop in packagelist_to_pylist(), which constructs + the elements of that list, Py_BuildValue() is called with the "O" + format specifier, and that increases the reference count on "_sack". + + Subsequently, in the _goal2transaction() method, we iterate over the + package list created by list_installs(), and add each package to the + transaction (ts.add_install()). After _goal2transaction() returns, + this transaction is assigned to "self._transaction" in resolve(). This + is where the last N (back-)references on the DnfSack object come from. + +(d) Now, to quote the defintion of the DnfSack object + ("libdnf/docs/hawkey/tutorial-py.rst"): + +> *Sack* is an abstraction for a collection of packages. + + That's why the DnfSack object references all the Pkg1 through PkgN + packages. + +So, when the dnf.Base.reset() method completes, the picture changes like +this: + + _sack _goal + | | + -- [CUT] -- -- [CUT] -- + | | + v | v + +----------------+ [C] +-------------+ + | DnfSack object | <-[U]- | Goal object | + +----------------+ [T] +-------------+ + |^ |^ |^ | + || || || + || || || | + +--||----||----||---+ [C] + | v| v| v| | <--[U]-- _transaction + | Pkg1 Pkg2 PkgN | [T] + | | | + | Transaction oject | + +-------------------+ + +and we are left with N reference cycles (one between each package and the +same DnfSack object). + +This set of cycles can only be cleaned up by Python's generational garbage +collector . The GC will +collect the DnfSack object, and consequently close the libsolv page file +descriptors via dnf_sack_finalize() -- but garbage collection will happen +*only eventually*, unpredictably. + +This means that the dnf.Base.reset() method breaks its interface contract: + +> Make the Base object forget about various things. + +because the libsolv file descriptors can (and frequently do, in practice) +survive dnf.Base.reset(). + +In general, as long as the garbage collector only tracks process-private +memory blocks, there's nothing wrong; however, file descriptors are +visible to the kernel. When dnf.Base.reset() *temporarily* leaks file +descriptors as explained above, then immediately subsequent operations +that depend on those file descriptors having been closed, can fail. + +An example is livecd-creator's unmounting of: + + /var/tmp/imgcreate-mytcghah/install_root/var/cache/dnf + +which the kernel refuses, due to libsolv's still open file descriptors +pointing into that filesystem: + +> umount: /var/tmp/imgcreate-mytcghah/install_root/var/cache/dnf: target +> is busy. +> Unable to unmount /var/tmp/imgcreate-mytcghah/install_root/var/cache/dnf +> normally, using lazy unmount + +(Unfortunately, the whole lazy umount idea is misguided in livecd-tools; +it's a misfeature that should be removed, as it permits the corruption of +the loop-backed filesystem. Now that the real bug is being fixed in DNF, +lazy umount is not needed as a (broken) workaround in livecd-tools. But +that's a separate patch for livecd-tools: +.) + +Plug the fd leak by forcing a garbage collection in dnf.Base.reset() +whenever we cut the "_sack", "_goal" and "_transaction" links -- that is, +when the "sack" and "goal" parameters are True. + +Note that precisely due to the unpredictable behavior of the garbage +collector, reproducing the bug may prove elusive. In order to reproduce it +deterministically, through usage with livecd-creator, disabling automatic +garbage collection with the following patch (for livecd-tools) is +sufficient: + +> diff --git a/tools/livecd-creator b/tools/livecd-creator +> index 291de10cbbf9..8d2c740c238b 100755 +> --- a/tools/livecd-creator +> +++ b/tools/livecd-creator +> @@ -31,6 +31,8 @@ from dnf.exceptions import Error as DnfBaseError +> import imgcreate +> from imgcreate.errors import KickstartError +> +> +import gc +> + +> class Usage(Exception): +> def __init__(self, msg = None, no_error = False): +> Exception.__init__(self, msg, no_error) +> @@ -261,5 +263,6 @@ def do_nss_libs_hack(): +> return hack +> +> if __name__ == "__main__": +> + gc.disable() +> hack = do_nss_libs_hack() +> sys.exit(main()) + +Also note that you need to use livecd-tools at git commit 4afde9352e82 or +later, for this fix to make any difference: said commit fixes a different +(independent) bug in livecd-tools that produces identical symptoms, but +from a different origin. In other words, if you don't have commit +4afde9352e82 in your livecd-tools install, then said bug in livecd-tools +will mask this DNF fix. + +Signed-off-by: Laszlo Ersek +(cherry picked from commit 5ce5ed1ea08ad6e198c1c1642c4d9ea2db6eab86) +--- + dnf/base.py | 41 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 41 insertions(+) + +diff --git a/dnf/base.py b/dnf/base.py +index babca31d..852fcdd8 100644 +--- a/dnf/base.py ++++ b/dnf/base.py +@@ -72,6 +72,7 @@ import dnf.transaction + import dnf.util + import dnf.yum.rpmtrans + import functools ++import gc + import hawkey + import itertools + import logging +@@ -568,6 +569,46 @@ class Base(object): + self._comps_trans = dnf.comps.TransactionBunch() + self._transaction = None + self._update_security_filters = [] ++ if sack and goal: ++ # We've just done this, above: ++ # ++ # _sack _goal ++ # | | ++ # -- [CUT] -- -- [CUT] -- ++ # | | ++ # v | v ++ # +----------------+ [C] +-------------+ ++ # | DnfSack object | <-[U]- | Goal object | ++ # +----------------+ [T] +-------------+ ++ # |^ |^ |^ | ++ # || || || ++ # || || || | ++ # +--||----||----||---+ [C] ++ # | v| v| v| | <--[U]-- _transaction ++ # | Pkg1 Pkg2 PkgN | [T] ++ # | | | ++ # | Transaction oject | ++ # +-------------------+ ++ # ++ # At this point, the DnfSack object would be released only ++ # eventually, by Python's generational garbage collector, due to the ++ # cyclic references DnfSack<->Pkg1 ... DnfSack<->PkgN. ++ # ++ # The delayed release is a problem: the DnfSack object may ++ # (indirectly) own "page file" file descriptors in libsolv, via ++ # libdnf. For example, ++ # ++ # sack->priv->pool->repos[1]->repodata[1]->store.pagefd = 7 ++ # sack->priv->pool->repos[1]->repodata[2]->store.pagefd = 8 ++ # ++ # These file descriptors are closed when the DnfSack object is ++ # eventually released, that is, when dnf_sack_finalize() (in libdnf) ++ # calls pool_free() (in libsolv). ++ # ++ # We need that to happen right now, as callers may want to unmount ++ # the filesystems which those file descriptors refer to immediately ++ # after reset() returns. Therefore, force a garbage collection here. ++ gc.collect() + + def _closeRpmDB(self): + """Closes down the instances of rpmdb that could be open.""" +-- +2.35.1 + diff --git a/SPECS/dnf.spec b/SPECS/dnf.spec index 055068b..0cd2570 100644 --- a/SPECS/dnf.spec +++ b/SPECS/dnf.spec @@ -66,31 +66,39 @@ It supports RPMs, modules and comps groups & environments. Name: dnf Version: 4.7.0 -Release: 9.1%{?dist} +Release: 10.1%{?dist} Summary: %{pkg_summary} # For a breakdown of the licensing, see PACKAGE-LICENSING License: GPLv2+ URL: https://github.com/rpm-software-management/dnf Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz -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-Add-default-colors-to-documentation.patch -Patch7: 0007-Fix-reporting-irrecoverable-errors-on-packages-download.patch -Patch8: 0008-Add-fail_fast-parameter-to-download_payloads-methods.patch -Patch9: 0009-comps-Make-the-install_or_skip-method-not-catch-CompsError-anymore.patch -Patch10: 0010-doc-Improve-description-of-multilib_policyall-RhBug19966811995630.patch -Patch11: 0011-Fix-Python-dnf-API-does-not-respect-cacheonly-RhBug1862970.patch -Patch12: 0012-Documentation-API-notes-for-cacheonly.patch -Patch13: 0013-Allow-destdir-option-with-modulesync-command.patch -Patch14: 0014-Add-documentation-for-query-api-flags.patch -Patch15: 0015-Fix-processing-of-download-errors-RhBug-2024527.patch -Patch16: 0016-Fix-unittests-that-relied-on-checksum-being-at-the-e.patch -Patch17: 0017-cli-commands-history-Fix-history-undo-on-a-Reason-Ch.patch -Patch18: 0018-Fix-remove-when-no-repos-are-enabled-RhBz-2064341.patch -Patch19: 0019-doc-Improve-proxy-configuration-option-documentation.patch + +# Patches are stored in the upstream repository in this branch: +# https://github.com/rpm-software-management/dnf/tree/rhel-8.7 +# Use "git format-patch -N" to regenerate the patch files. +Patch0001: 0001-Set-top-level-directory-for-unittest.patch +Patch0002: 0002-dnf-rpm-miscutils.py-fix-usage-of-_.patch +Patch0003: 0003-Pass-the-package-to-rpmkeys-stdin.patch +Patch0004: 0004-Use-rpmkeys-alone-to-verify-signature.patch +Patch0005: 0005-Lower-_pkgverify_level-to-signature-for-signature-ch.patch +Patch0006: 0006-add-default-colors-to-documentation.patch +Patch0007: 0007-add-author.patch +Patch0008: 0008-update-colors-according-to-libdnf-libdnf-conf-Config.patch +Patch0009: 0009-Fix-reporting-irrecoverable-errors-on-packages-downl.patch +Patch0010: 0010-Add-fail_fast-parameter-to-download_payloads-methods.patch +Patch0011: 0011-comps-Make-the-install_or_skip-method-not-catch-Comp.patch +Patch0012: 0012-doc-Improve-description-of-multilib_policy-all-RhBug.patch +Patch0013: 0013-Fix-Python-dnf-API-does-not-respect-cacheonly-RhBug-.patch +Patch0014: 0014-Documentation-API-notes-for-cacheonly.patch +Patch0015: 0015-Allow-destdir-option-with-modulesync-command.patch +Patch0016: 0016-Update-translations-RhBug-2017270.patch +Patch0017: 0017-Add-documentation-for-query-api-flags.patch +Patch0018: 0018-Fix-processing-of-download-errors-RhBug-2024527.patch +Patch0019: 0019-Fix-unittests-that-relied-on-checksum-being-at-the-e.patch +Patch0020: 0020-cli-commands-history-Fix-history-undo-on-a-Reason-Ch.patch +Patch0021: 0021-Fix-remove-when-no-repos-are-enabled-RhBz-2064341.patch +Patch0022: 0022-doc-Improve-proxy-configuration-option-documentation.patch +Patch0023: 0023-Base.reset-plug-temporary-leak-of-libsolv-s-page-fil.patch Patch9998: https://github.com/rpm-software-management/dnf/pull/1761.patch Provides: dnf(pr1761) @@ -395,6 +403,14 @@ popd %{python3_sitelib}/%{name}/automatic/ %changelog +* Wed Jun 01 2022 Manu Bretelle - 4.7.0-10.1 +- Rebuild for Hyperscale + +* Tue May 24 2022 Richard W.M. Jones - 4.7.0-10 +- Backport fix for leaks of libsolv's page file descriptors in Base object + resolves: rhbz#2087734 +- Include instructions for regenerating patches. + * Mon May 16 2022 Manu Bretelle - 4.7.0-9.1 - Rebuild for Hyperscale