From 6fcd77d89f857dbc2ab9fba768c0d26641ad1a82 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 16 May 2023 06:13:35 +0000 Subject: [PATCH] import dnf-4.7.0-16.el8_8 --- ...solved-advisories-for-obsoletes-with.patch | 47 + ...e-for-variable-to-prevent-crash-RhBu.patch | 35 + ...to-destdir-and-downloadonly-options-.patch | 31 + ...n-unload-method-to-API-RhBug-2047251.patch | 79 + ...group-upgrade-rollback-RhBug-2016070.patch | 105 + ...rom-file-to-noarch-pkg-RhBug-2006018.patch | 34 + ...ugin-parameters-with-dashes-in-names.patch | 62 + ...-tests-unload-plugins-upon-their-del.patch | 97 + ...upgrade-plugin-to-core-RhBug-2054235.patch | 31 + ...rollback-of-group-upgrade-rollback-R.patch | 58 + ...t-changes-to-offline-upgrade-command.patch | 95 + ...lain-traceback-of-rpm.error-with-dnf.patch | 114 + ...g-variable-files-with-unsupported-en.patch | 50 + SOURCES/0040-Update-translations.patch | 5161 +++++++++++++++++ SPECS/dnf.spec | 42 +- 15 files changed, 6040 insertions(+), 1 deletion(-) create mode 100644 SOURCES/0027-Don-t-include-resolved-advisories-for-obsoletes-with.patch create mode 100644 SOURCES/0028-Set-default-value-for-variable-to-prevent-crash-RhBu.patch create mode 100644 SOURCES/0029-Add-doc-related-to-destdir-and-downloadonly-options-.patch create mode 100644 SOURCES/0030-Expose-plugin-unload-method-to-API-RhBug-2047251.patch create mode 100644 SOURCES/0031-Add-support-for-group-upgrade-rollback-RhBug-2016070.patch create mode 100644 SOURCES/0032-Fix-upgrade-from-file-to-noarch-pkg-RhBug-2006018.patch create mode 100644 SOURCES/0033-Allow-passing-plugin-parameters-with-dashes-in-names.patch create mode 100644 SOURCES/0034-Fix-plugins-unit-tests-unload-plugins-upon-their-del.patch create mode 100644 SOURCES/0035-Move-system-upgrade-plugin-to-core-RhBug-2054235.patch create mode 100644 SOURCES/0036-Add-support-for-rollback-of-group-upgrade-rollback-R.patch create mode 100644 SOURCES/0037-Document-changes-to-offline-upgrade-command.patch create mode 100644 SOURCES/0038-Better-explain-traceback-of-rpm.error-with-dnf.patch create mode 100644 SOURCES/0039-Ignore-processing-variable-files-with-unsupported-en.patch create mode 100644 SOURCES/0040-Update-translations.patch diff --git a/SOURCES/0027-Don-t-include-resolved-advisories-for-obsoletes-with.patch b/SOURCES/0027-Don-t-include-resolved-advisories-for-obsoletes-with.patch new file mode 100644 index 0000000..a0d20ce --- /dev/null +++ b/SOURCES/0027-Don-t-include-resolved-advisories-for-obsoletes-with.patch @@ -0,0 +1,47 @@ +From 66a37245e82c60b972ee35879f9c29c27466a27b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Mon, 25 Jul 2022 12:44:17 +0200 +Subject: [PATCH] Don't include resolved advisories for obsoletes with sec. + filters (RhBug:2101421) + +This makes the obsoletes security filters consistent with upgrade +security filters. + +This API is used from check-update and from Info and List commands. +- For check-update we don't want to include resolved advisories to have + identical result to the actual update. That is bz2101421 use case. +- For Info and List commands the --obsoletes switch: "List packages + installed on the system that are obsoleted by packages in any known + repository." Given this specification in makes sense not to + consider resolved advisories when we also use security filters. + +There is still a general case when someone uses the API or any potential +future use and I think it is best to have the behavior unified for +"upgrades" and "obsoletes". + += changelog = +msg: Don't include resolved advisories for obsoletes filtering with security filters +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2101421 + +Tests: https://github.com/rpm-software-management/ci-dnf-stack/pull/1134 +--- + dnf/base.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/dnf/base.py b/dnf/base.py +index e606d9fa..e623d98e 100644 +--- a/dnf/base.py ++++ b/dnf/base.py +@@ -1565,7 +1565,7 @@ class Base(object): + obsoletes = query_for_repo( + self.sack.query()).filter(obsoletes_by_priority=inst) + # reduce a query to security upgrades if they are specified +- obsoletes = self._merge_update_filters(obsoletes, warning=False) ++ obsoletes = self._merge_update_filters(obsoletes, warning=False, upgrade=True) + obsoletesTuples = [] + for new in obsoletes: + obsoleted_reldeps = new.obsoletes +-- +2.37.1 + diff --git a/SOURCES/0028-Set-default-value-for-variable-to-prevent-crash-RhBu.patch b/SOURCES/0028-Set-default-value-for-variable-to-prevent-crash-RhBu.patch new file mode 100644 index 0000000..d5e8b5a --- /dev/null +++ b/SOURCES/0028-Set-default-value-for-variable-to-prevent-crash-RhBu.patch @@ -0,0 +1,35 @@ +From 553a2c585db50599d5028ea6bb6462281bb88d02 Mon Sep 17 00:00:00 2001 +From: Jaroslav Mracek +Date: Mon, 11 Jul 2022 12:27:14 +0200 +Subject: [PATCH] Set default value for variable to prevent crash + (RhBug:2091636) + +It ensure that read of file ended successfully. + +https://bugzilla.redhat.com/show_bug.cgi?id=2091636 +--- + dnf/conf/substitutions.py | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/dnf/conf/substitutions.py b/dnf/conf/substitutions.py +index 703e4a4f..1281bdf0 100644 +--- a/dnf/conf/substitutions.py ++++ b/dnf/conf/substitutions.py +@@ -53,6 +53,7 @@ class Substitutions(dict): + continue + for fsvar in fsvars: + filepath = os.path.join(dir_fsvars, fsvar) ++ val = None + if os.path.isfile(filepath): + try: + with open(filepath) as fp: +@@ -61,4 +62,5 @@ class Substitutions(dict): + val = val[:-1] + except (OSError, IOError): + continue +- self[fsvar] = val ++ if val is not None: ++ self[fsvar] = val +-- +2.37.1 + diff --git a/SOURCES/0029-Add-doc-related-to-destdir-and-downloadonly-options-.patch b/SOURCES/0029-Add-doc-related-to-destdir-and-downloadonly-options-.patch new file mode 100644 index 0000000..0d582cc --- /dev/null +++ b/SOURCES/0029-Add-doc-related-to-destdir-and-downloadonly-options-.patch @@ -0,0 +1,31 @@ +From 96a5bd61ab3b35f00f0b52bcd6428c7aea7d1ca5 Mon Sep 17 00:00:00 2001 +From: Jan Kolarik +Date: Wed, 7 Sep 2022 14:27:07 +0200 +Subject: [PATCH] Add doc related to --destdir and --downloadonly options + (RhBug:2100811) + += changelog = +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2100811 +--- + doc/command_ref.rst | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/doc/command_ref.rst b/doc/command_ref.rst +index 42aec72c..7a02448c 100644 +--- a/doc/command_ref.rst ++++ b/doc/command_ref.rst +@@ -190,6 +190,10 @@ Options + ``--downloadonly`` + Download the resolved package set without performing any rpm transaction (install/upgrade/erase). + ++ Packages are removed after the next successful transaction. This applies also when used together ++ with ``--destdir`` option as the directory is considered as a part of the DNF cache. To persist ++ the packages, use the ``download`` command instead. ++ + ``-e , --errorlevel=`` + Error output level. This is an integer value between 0 (no error output) and + 10 (shows all error messages), default is 3. Deprecated, use ``-v`` instead. +-- +2.37.1 + diff --git a/SOURCES/0030-Expose-plugin-unload-method-to-API-RhBug-2047251.patch b/SOURCES/0030-Expose-plugin-unload-method-to-API-RhBug-2047251.patch new file mode 100644 index 0000000..8742fb0 --- /dev/null +++ b/SOURCES/0030-Expose-plugin-unload-method-to-API-RhBug-2047251.patch @@ -0,0 +1,79 @@ +From aa724a639a641943ecf39038fd694abc2037e66d Mon Sep 17 00:00:00 2001 +From: Jan Kolarik +Date: Mon, 22 Aug 2022 10:38:30 +0200 +Subject: [PATCH] Expose plugin unload method to API (RhBug:2047251) + += changelog = +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2047251 +--- + dnf/base.py | 5 +++++ + dnf/plugin.py | 1 + + doc/api_base.rst | 4 ++++ + tests/api/test_dnf_base.py | 7 +++++++ + 4 files changed, 17 insertions(+) + +diff --git a/dnf/base.py b/dnf/base.py +index e623d98e..4ddfae15 100644 +--- a/dnf/base.py ++++ b/dnf/base.py +@@ -316,6 +316,11 @@ class Base(object): + """Run plugins configure() method.""" + self._plugins._run_config() + ++ def unload_plugins(self): ++ # :api ++ """Run plugins unload() method.""" ++ self._plugins._unload() ++ + def update_cache(self, timer=False): + # :api + +diff --git a/dnf/plugin.py b/dnf/plugin.py +index 06066e79..87c1f08f 100644 +--- a/dnf/plugin.py ++++ b/dnf/plugin.py +@@ -164,6 +164,7 @@ class Plugins(object): + self._caller('transaction') + + def _unload(self): ++ logger.debug(_('Plugins were unloaded')) + del sys.modules[DYNAMIC_PACKAGE] + + def unload_removed_plugins(self, transaction): +diff --git a/doc/api_base.rst b/doc/api_base.rst +index 03396b69..35cbeef5 100644 +--- a/doc/api_base.rst ++++ b/doc/api_base.rst +@@ -97,6 +97,10 @@ + + Configure plugins by running their configure() method. + ++ .. method:: unload_plugins() ++ ++ Unload all plugins. ++ + .. method:: fill_sack([load_system_repo=True, load_available_repos=True]) + + Setup the package sack. If `load_system_repo` is ``True``, load information about packages in the local RPMDB into the sack. Else no package is considered installed during dependency solving. If `load_available_repos` is ``True``, load information about packages from the available repositories into the sack. +diff --git a/tests/api/test_dnf_base.py b/tests/api/test_dnf_base.py +index 33598189..e84e272b 100644 +--- a/tests/api/test_dnf_base.py ++++ b/tests/api/test_dnf_base.py +@@ -95,6 +95,13 @@ class DnfBaseApiTest(TestCase): + + self.base.configure_plugins() + ++ def test_unload_plugins(self): ++ # Base.unload_plugins() ++ self.assertHasAttr(self.base, "unload_plugins") ++ ++ self.base.init_plugins() ++ self.base.unload_plugins() ++ + def test_update_cache(self): + # Base.update_cache(self, timer=False) + self.assertHasAttr(self.base, "update_cache") +-- +2.37.1 + diff --git a/SOURCES/0031-Add-support-for-group-upgrade-rollback-RhBug-2016070.patch b/SOURCES/0031-Add-support-for-group-upgrade-rollback-RhBug-2016070.patch new file mode 100644 index 0000000..d5eb6f3 --- /dev/null +++ b/SOURCES/0031-Add-support-for-group-upgrade-rollback-RhBug-2016070.patch @@ -0,0 +1,105 @@ +From 7ba2cd6a86945e0ec6f9ed866e2ef6b6759ee092 Mon Sep 17 00:00:00 2001 +From: Jan Kolarik +Date: Thu, 25 Aug 2022 08:06:34 +0200 +Subject: [PATCH] Add support for group upgrade rollback (RhBug:2016070) + += changelog = +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2016070 +--- + dnf/db/group.py | 8 +++++++- + dnf/transaction_sr.py | 24 ++++++++++++++++++++++++ + 2 files changed, 31 insertions(+), 1 deletion(-) + +diff --git a/dnf/db/group.py b/dnf/db/group.py +index 4dc8cb06..312e3b98 100644 +--- a/dnf/db/group.py ++++ b/dnf/db/group.py +@@ -34,14 +34,16 @@ class PersistorBase(object): + self._installed = {} + self._removed = {} + self._upgraded = {} ++ self._downgraded = {} + + def __len__(self): +- return len(self._installed) + len(self._removed) + len(self._upgraded) ++ return len(self._installed) + len(self._removed) + len(self._upgraded) + len(self._downgraded) + + def clean(self): + self._installed = {} + self._removed = {} + self._upgraded = {} ++ self._downgraded = {} + + def _get_obj_id(self, obj): + raise NotImplementedError +@@ -62,6 +64,10 @@ class PersistorBase(object): + self._upgraded[self._get_obj_id(obj)] = obj + self._add_to_history(obj, libdnf.transaction.TransactionItemAction_UPGRADE) + ++ def downgrade(self, obj): ++ self._downgraded[self._get_obj_id(obj)] = obj ++ self._add_to_history(obj, libdnf.transaction.TransactionItemAction_DOWNGRADE) ++ + def new(self, obj_id, name, translated_name, pkg_types): + raise NotImplementedError + +diff --git a/dnf/transaction_sr.py b/dnf/transaction_sr.py +index dae8d300..5d403a3e 100644 +--- a/dnf/transaction_sr.py ++++ b/dnf/transaction_sr.py +@@ -416,6 +416,16 @@ class TransactionReplay(object): + if swdb_group is not None: + self._base.history.group.upgrade(swdb_group) + ++ def _swdb_group_downgrade(self, group_id, pkg_types, pkgs): ++ if not self._base.history.group.get(group_id): ++ self._raise_or_warn(self._ignore_installed, _("Group id '%s' is not installed.") % group_id) ++ return ++ ++ swdb_group = self._create_swdb_group(group_id, pkg_types, pkgs) ++ ++ if swdb_group is not None: ++ self._base.history.group.downgrade(swdb_group) ++ + def _swdb_group_remove(self, group_id, pkg_types, pkgs): + if not self._base.history.group.get(group_id): + self._raise_or_warn(self._ignore_installed, _("Group id '%s' is not installed.") % group_id) +@@ -482,6 +492,16 @@ class TransactionReplay(object): + if swdb_env is not None: + self._base.history.env.upgrade(swdb_env) + ++ def _swdb_environment_downgrade(self, env_id, pkg_types, groups): ++ if not self._base.history.env.get(env_id): ++ self._raise_or_warn(self._ignore_installed, _("Environment id '%s' is not installed.") % env_id) ++ return ++ ++ swdb_env = self._create_swdb_environment(env_id, pkg_types, groups) ++ ++ if swdb_env is not None: ++ self._base.history.env.downgrade(swdb_env) ++ + def _swdb_environment_remove(self, env_id, pkg_types, groups): + if not self._base.history.env.get(env_id): + self._raise_or_warn(self._ignore_installed, _("Environment id '%s' is not installed.") % env_id) +@@ -535,6 +555,8 @@ class TransactionReplay(object): + self._swdb_group_install(group_id, pkg_types, group_data["packages"]) + elif action == "Upgrade": + self._swdb_group_upgrade(group_id, pkg_types, group_data["packages"]) ++ elif action == "Downgraded": ++ self._swdb_group_downgrade(group_id, pkg_types, group_data["packages"]) + elif action == "Removed": + self._swdb_group_remove(group_id, pkg_types, group_data["packages"]) + else: +@@ -564,6 +586,8 @@ class TransactionReplay(object): + self._swdb_environment_install(env_id, pkg_types, env_data["groups"]) + elif action == "Upgrade": + self._swdb_environment_upgrade(env_id, pkg_types, env_data["groups"]) ++ elif action == "Downgraded": ++ self._swdb_environment_downgrade(env_id, pkg_types, env_data["groups"]) + elif action == "Removed": + self._swdb_environment_remove(env_id, pkg_types, env_data["groups"]) + else: +-- +2.37.1 + diff --git a/SOURCES/0032-Fix-upgrade-from-file-to-noarch-pkg-RhBug-2006018.patch b/SOURCES/0032-Fix-upgrade-from-file-to-noarch-pkg-RhBug-2006018.patch new file mode 100644 index 0000000..2f37124 --- /dev/null +++ b/SOURCES/0032-Fix-upgrade-from-file-to-noarch-pkg-RhBug-2006018.patch @@ -0,0 +1,34 @@ +From 46562dc76e50d86eed99a102af74a1187a4303e4 Mon Sep 17 00:00:00 2001 +From: Nicola Sella +Date: Thu, 11 Aug 2022 13:56:11 +0200 +Subject: [PATCH] Fix upgrade from file to noarch pkg (RhBug:2006018) + += changelog = +msg: Fix upgrade pkg from file when installed pkg is noarch and upgrades +to a different arch +type: bugfix +resolves: https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=2006018 +--- + dnf/base.py | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/dnf/base.py b/dnf/base.py +index 4ddfae15..aba411ea 100644 +--- a/dnf/base.py ++++ b/dnf/base.py +@@ -2109,7 +2109,11 @@ class Base(object): + sltr.set(pkg=[pkg]) + self._goal.upgrade(select=sltr) + return 1 +- q = installed.filter(name=pkg.name, arch=[pkg.arch, "noarch"]) ++ # do not filter by arch if the package is noarch ++ if pkg.arch == "noarch": ++ q = installed.filter(name=pkg.name) ++ else: ++ q = installed.filter(name=pkg.name, arch=[pkg.arch, "noarch"]) + if not q: + msg = _("Package %s not installed, cannot update it.") + logger.warning(msg, pkg.name) +-- +2.37.1 + diff --git a/SOURCES/0033-Allow-passing-plugin-parameters-with-dashes-in-names.patch b/SOURCES/0033-Allow-passing-plugin-parameters-with-dashes-in-names.patch new file mode 100644 index 0000000..be3fc55 --- /dev/null +++ b/SOURCES/0033-Allow-passing-plugin-parameters-with-dashes-in-names.patch @@ -0,0 +1,62 @@ +From 7a265cf17fe3531e45dde8ae622c496bef1e17ae Mon Sep 17 00:00:00 2001 +From: Jan Kolarik +Date: Wed, 10 Aug 2022 16:24:08 +0200 +Subject: [PATCH] Allow passing plugin parameters with dashes in names + (RhBug:1980712) + += changelog = +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1980712 +--- + dnf/plugin.py | 20 +++++++++++++++++--- + 1 file changed, 17 insertions(+), 3 deletions(-) + +diff --git a/dnf/plugin.py b/dnf/plugin.py +index 87c1f08f..b083727d 100644 +--- a/dnf/plugin.py ++++ b/dnf/plugin.py +@@ -225,17 +225,17 @@ def _get_plugins_files(paths, disable_plugins, enable_plugins): + matched = True + enable_pattern_tested = False + for pattern_skip in disable_plugins: +- if fnmatch.fnmatch(plugin_name, pattern_skip): ++ if _plugin_name_matches_pattern(plugin_name, pattern_skip): + pattern_disable_found.add(pattern_skip) + matched = False + for pattern_enable in enable_plugins: +- if fnmatch.fnmatch(plugin_name, pattern_enable): ++ if _plugin_name_matches_pattern(plugin_name, pattern_enable): + matched = True + pattern_enable_found.add(pattern_enable) + enable_pattern_tested = True + if not enable_pattern_tested: + for pattern_enable in enable_plugins: +- if fnmatch.fnmatch(plugin_name, pattern_enable): ++ if _plugin_name_matches_pattern(plugin_name, pattern_enable): + pattern_enable_found.add(pattern_enable) + if matched: + plugins.append(fn) +@@ -250,6 +250,20 @@ def _get_plugins_files(paths, disable_plugins, enable_plugins): + return plugins + + ++def _plugin_name_matches_pattern(plugin_name, pattern): ++ """ ++ Checks plugin name matches the pattern. ++ ++ The alternative plugin name using dashes instead of underscores is tried ++ in case of original name is not matched. ++ ++ (see https://bugzilla.redhat.com/show_bug.cgi?id=1980712) ++ """ ++ ++ try_names = set((plugin_name, plugin_name.replace('_', '-'))) ++ return any(fnmatch.fnmatch(name, pattern) for name in try_names) ++ ++ + def register_command(command_class): + # :api + """A class decorator for automatic command registration.""" +-- +2.37.1 + diff --git a/SOURCES/0034-Fix-plugins-unit-tests-unload-plugins-upon-their-del.patch b/SOURCES/0034-Fix-plugins-unit-tests-unload-plugins-upon-their-del.patch new file mode 100644 index 0000000..040c3d2 --- /dev/null +++ b/SOURCES/0034-Fix-plugins-unit-tests-unload-plugins-upon-their-del.patch @@ -0,0 +1,97 @@ +From 9700b8fabd102fcf289281c3c04238da90d7b28e Mon Sep 17 00:00:00 2001 +From: Jan Kolarik +Date: Tue, 13 Sep 2022 14:35:10 +0200 +Subject: [PATCH] Fix plugins unit tests + unload plugins upon their deletion + +=changelog= +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2134309 +--- + dnf/plugin.py | 8 ++++++-- + tests/api/test_dnf_base.py | 24 +++++++++++++++++++----- + 2 files changed, 25 insertions(+), 7 deletions(-) + +diff --git a/dnf/plugin.py b/dnf/plugin.py +index b083727d..d2f46ce3 100644 +--- a/dnf/plugin.py ++++ b/dnf/plugin.py +@@ -98,6 +98,9 @@ class Plugins(object): + self.plugin_cls = [] + self.plugins = [] + ++ def __del__(self): ++ self._unload() ++ + def _caller(self, method): + for plugin in self.plugins: + try: +@@ -164,8 +167,9 @@ class Plugins(object): + self._caller('transaction') + + def _unload(self): +- logger.debug(_('Plugins were unloaded')) +- del sys.modules[DYNAMIC_PACKAGE] ++ if DYNAMIC_PACKAGE in sys.modules: ++ logger.log(dnf.logging.DDEBUG, 'Plugins were unloaded.') ++ del sys.modules[DYNAMIC_PACKAGE] + + def unload_removed_plugins(self, transaction): + """ +diff --git a/tests/api/test_dnf_base.py b/tests/api/test_dnf_base.py +index e84e272b..19754b07 100644 +--- a/tests/api/test_dnf_base.py ++++ b/tests/api/test_dnf_base.py +@@ -7,10 +7,23 @@ from __future__ import unicode_literals + import dnf + import dnf.conf + ++import tests.support ++ + from .common import TestCase + from .common import TOUR_4_4 + + ++def conf_with_empty_plugins(): ++ """ ++ Use empty configuration to avoid importing plugins from default paths ++ which would lead to crash of other tests. ++ """ ++ conf = tests.support.FakeConf() ++ conf.plugins = True ++ conf.pluginpath = [] ++ return conf ++ ++ + class DnfBaseApiTest(TestCase): + def setUp(self): + self.base = dnf.Base(dnf.conf.Conf()) +@@ -75,13 +88,12 @@ class DnfBaseApiTest(TestCase): + self.assertHasType(self.base.transaction, dnf.db.group.RPMTransaction) + + def test_init_plugins(self): +- # Base.init_plugins(disabled_glob=(), enable_plugins=(), cli=None) ++ # Base.init_plugins() + self.assertHasAttr(self.base, "init_plugins") + +- # disable plugins to avoid calling dnf.plugin.Plugins._load() multiple times +- # which causes the tests to crash +- self.base.conf.plugins = False +- self.base.init_plugins(disabled_glob=(), enable_plugins=(), cli=None) ++ self.base._conf = conf_with_empty_plugins() ++ ++ self.base.init_plugins() + + def test_pre_configure_plugins(self): + # Base.pre_configure_plugins() +@@ -99,6 +111,8 @@ class DnfBaseApiTest(TestCase): + # Base.unload_plugins() + self.assertHasAttr(self.base, "unload_plugins") + ++ self.base._conf = conf_with_empty_plugins() ++ + self.base.init_plugins() + self.base.unload_plugins() + +-- +2.37.3 + diff --git a/SOURCES/0035-Move-system-upgrade-plugin-to-core-RhBug-2054235.patch b/SOURCES/0035-Move-system-upgrade-plugin-to-core-RhBug-2054235.patch new file mode 100644 index 0000000..0fdb121 --- /dev/null +++ b/SOURCES/0035-Move-system-upgrade-plugin-to-core-RhBug-2054235.patch @@ -0,0 +1,31 @@ +From c9251d182be0bfa66345220cffe0842b44a061a8 Mon Sep 17 00:00:00 2001 +From: Jan Kolarik +Date: Wed, 31 Aug 2022 07:49:39 +0200 +Subject: [PATCH] Move system-upgrade plugin to core (RhBug:2054235) + +Just doc fix. + += changelog = +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2054235 +--- + doc/command_ref.rst | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/doc/command_ref.rst b/doc/command_ref.rst +index 7a02448c..bee6a109 100644 +--- a/doc/command_ref.rst ++++ b/doc/command_ref.rst +@@ -182,8 +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``, ``modulesync`` or ``reposync`` commands (dnf-plugins-core) or with the ``system-upgrade`` command +- (dnf-plugins-extras). ++ ``download``, ``modulesync``, ``reposync`` or ``system-upgrade`` commands (dnf-plugins-core). + + .. _downloadonly-label: + +-- +2.37.3 + diff --git a/SOURCES/0036-Add-support-for-rollback-of-group-upgrade-rollback-R.patch b/SOURCES/0036-Add-support-for-rollback-of-group-upgrade-rollback-R.patch new file mode 100644 index 0000000..f8a1d4d --- /dev/null +++ b/SOURCES/0036-Add-support-for-rollback-of-group-upgrade-rollback-R.patch @@ -0,0 +1,58 @@ +From a32b2f7d596247124ad6ff5ab71bc83bf78f0518 Mon Sep 17 00:00:00 2001 +From: Jan Kolarik +Date: Tue, 13 Sep 2022 13:55:35 +0200 +Subject: [PATCH] Add support for rollback of group upgrade rollback + (RhBug:2016070) + += changelog = +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2016070 +--- + dnf/transaction_sr.py | 20 ++++++++++++-------- + 1 file changed, 12 insertions(+), 8 deletions(-) + +diff --git a/dnf/transaction_sr.py b/dnf/transaction_sr.py +index 5d403a3e..b389f152 100644 +--- a/dnf/transaction_sr.py ++++ b/dnf/transaction_sr.py +@@ -553,12 +553,14 @@ class TransactionReplay(object): + + if action == "Install": + self._swdb_group_install(group_id, pkg_types, group_data["packages"]) +- elif action == "Upgrade": +- self._swdb_group_upgrade(group_id, pkg_types, group_data["packages"]) +- elif action == "Downgraded": +- self._swdb_group_downgrade(group_id, pkg_types, group_data["packages"]) + elif action == "Removed": + self._swdb_group_remove(group_id, pkg_types, group_data["packages"]) ++ # Groups are not versioned, but a reverse transaction could be applied, ++ # therefore we treat both actions the same way ++ elif action == "Upgrade" or action == "Upgraded": ++ self._swdb_group_upgrade(group_id, pkg_types, group_data["packages"]) ++ elif action == "Downgrade" or action == "Downgraded": ++ self._swdb_group_downgrade(group_id, pkg_types, group_data["packages"]) + else: + errors.append(TransactionError( + _('Unexpected value of group action "{action}" for group "{group}".') +@@ -584,12 +586,14 @@ class TransactionReplay(object): + + if action == "Install": + self._swdb_environment_install(env_id, pkg_types, env_data["groups"]) +- elif action == "Upgrade": +- self._swdb_environment_upgrade(env_id, pkg_types, env_data["groups"]) +- elif action == "Downgraded": +- self._swdb_environment_downgrade(env_id, pkg_types, env_data["groups"]) + elif action == "Removed": + self._swdb_environment_remove(env_id, pkg_types, env_data["groups"]) ++ # Environments are not versioned, but a reverse transaction could be applied, ++ # therefore we treat both actions the same way ++ elif action == "Upgrade" or action == "Upgraded": ++ self._swdb_environment_upgrade(env_id, pkg_types, env_data["groups"]) ++ elif action == "Downgrade" or action == "Downgraded": ++ self._swdb_environment_downgrade(env_id, pkg_types, env_data["groups"]) + else: + errors.append(TransactionError( + _('Unexpected value of environment action "{action}" for environment "{env}".') +-- +2.37.3 + diff --git a/SOURCES/0037-Document-changes-to-offline-upgrade-command.patch b/SOURCES/0037-Document-changes-to-offline-upgrade-command.patch new file mode 100644 index 0000000..80ff1ad --- /dev/null +++ b/SOURCES/0037-Document-changes-to-offline-upgrade-command.patch @@ -0,0 +1,95 @@ +From 97fe94c94f030f5596a3a3ac52748bdd7544ad52 Mon Sep 17 00:00:00 2001 +From: Jan Kolarik +Date: Tue, 1 Nov 2022 09:15:08 +0000 +Subject: [PATCH] Document changes to offline-upgrade command (RhBug:1939975) + +A support for security filters was added to the offline-upgrade command. This commit adds the documentation into the man pages. + += changelog = +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1939975 +--- + doc/command_ref.rst | 28 ++++++++++++++-------------- + 1 file changed, 14 insertions(+), 14 deletions(-) + +diff --git a/doc/command_ref.rst b/doc/command_ref.rst +index bee6a109..7279b3a4 100644 +--- a/doc/command_ref.rst ++++ b/doc/command_ref.rst +@@ -113,7 +113,7 @@ Options + + ``--advisory=, --advisories=`` + Include packages corresponding to the advisory ID, Eg. FEDORA-2201-123. +- Applicable for the install, repoquery, updateinfo and upgrade commands. ++ Applicable for the ``install``, ``repoquery``, ``updateinfo``, ``upgrade`` and ``offline-upgrade`` (dnf-plugins-core) commands. + + ``--allowerasing`` + Allow erasing of installed packages to resolve dependencies. This option could be used as an alternative to the ``yum swap`` command where packages to remove are not explicitly defined. +@@ -125,12 +125,12 @@ Options + Try the best available package versions in transactions. Specifically during :ref:`dnf upgrade `, which by default skips over updates that can not be installed for dependency reasons, the switch forces DNF to only consider the latest packages. When running into packages with broken dependencies, DNF will fail giving a reason why the latest version can not be installed. + + ``--bugfix`` +- Include packages that fix a bugfix issue. Applicable for the install, repoquery, updateinfo and +- upgrade commands. ++ Include packages that fix a bugfix issue. ++ Applicable for the ``install``, ``repoquery``, ``updateinfo``, ``upgrade`` and ``offline-upgrade`` (dnf-plugins-core) commands. + + ``--bz=, --bzs=`` +- Include packages that fix a Bugzilla ID, Eg. 123123. Applicable for the install, repoquery, +- updateinfo and upgrade commands. ++ Include packages that fix a Bugzilla ID, Eg. 123123. ++ Applicable for the ``install``, ``repoquery``, ``updateinfo``, ``upgrade`` and ``offline-upgrade`` (dnf-plugins-core) commands. + + ``-C, --cacheonly`` + Run entirely from system cache, don't update the cache and use it even in case it is expired. +@@ -148,8 +148,8 @@ Options + + ``--cve=, --cves=`` + Include packages that fix a CVE (Common Vulnerabilities and Exposures) ID +- (http://cve.mitre.org/about/), Eg. CVE-2201-0123. Applicable for the install, repoquery, updateinfo, +- and upgrade commands. ++ (http://cve.mitre.org/about/), Eg. CVE-2201-0123. ++ Applicable for the ``install``, ``repoquery``, ``updateinfo``, ``upgrade`` and ``offline-upgrade`` (dnf-plugins-core) commands. + + ``-d , --debuglevel=`` + Debugging output level. This is an integer value between 0 (no additional information strings) and 10 (shows all debugging information, even that not understandable to the user), default is 2. Deprecated, use ``-v`` instead. +@@ -208,8 +208,8 @@ Options + Enable additional repositories by an id or a glob. + + ``--enhancement`` +- Include enhancement relevant packages. Applicable for the install, repoquery, updateinfo and +- upgrade commands. ++ Include enhancement relevant packages. ++ Applicable for the ``install``, ``repoquery``, ``updateinfo``, ``upgrade`` and ``offline-upgrade`` (dnf-plugins-core) commands. + + .. _exclude_option-label: + +@@ -280,8 +280,8 @@ Options + ``--setopt`` using configuration from ``/path/dnf.conf``. + + ``--newpackage`` +- Include newpackage relevant packages. Applicable for the install, repoquery, updateinfo and +- upgrade commands. ++ Include newpackage relevant packages. ++ Applicable for the ``install``, ``repoquery``, ``updateinfo``, ``upgrade`` and ``offline-upgrade`` (dnf-plugins-core) commands. + + ``--noautoremove`` + Disable removal of dependencies that are no longer used. It sets +@@ -353,11 +353,11 @@ Options + + ``--sec-severity=, --secseverity=`` + Includes packages that provide a fix for an issue of the specified severity. +- Applicable for the install, repoquery, updateinfo and upgrade commands. ++ Applicable for the ``install``, ``repoquery``, ``updateinfo``, ``upgrade`` and ``offline-upgrade`` (dnf-plugins-core) commands. + + ``--security`` +- Includes packages that provide a fix for a security issue. Applicable for the +- upgrade command. ++ Includes packages that provide a fix for a security issue. ++ Applicable for the ``install``, ``repoquery``, ``updateinfo``, ``upgrade`` and ``offline-upgrade`` (dnf-plugins-core) commands. + + .. _setopt_option-label: + +-- +2.38.1 + diff --git a/SOURCES/0038-Better-explain-traceback-of-rpm.error-with-dnf.patch b/SOURCES/0038-Better-explain-traceback-of-rpm.error-with-dnf.patch new file mode 100644 index 0000000..2282e18 --- /dev/null +++ b/SOURCES/0038-Better-explain-traceback-of-rpm.error-with-dnf.patch @@ -0,0 +1,114 @@ +From f1fbef17862e033bf9518bd318339b405f2664dd Mon Sep 17 00:00:00 2001 +From: Nicola Sella +Date: Mon, 22 Mar 2021 17:37:51 +0100 +Subject: [PATCH 1/2] Better explain traceback of rpm.error with dnf + +=changelog= +msg: Add dnf.error message to explain rpm.error traceback when package not found after resolving a transaction +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1815327 +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1887293 +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1909845 +--- + dnf/db/group.py | 78 ++++++++++++++++++++++++++----------------------- + 1 file changed, 41 insertions(+), 37 deletions(-) + +diff --git a/dnf/db/group.py b/dnf/db/group.py +index 312e3b98..3a17019a 100644 +--- a/dnf/db/group.py ++++ b/dnf/db/group.py +@@ -26,6 +26,7 @@ import dnf.exceptions + from dnf.i18n import _ + from dnf.util import logger + ++import rpm + + class PersistorBase(object): + def __init__(self, history): +@@ -316,43 +317,46 @@ class RPMTransaction(object): + modular_problems = 0 + + for tsi in self: +- if tsi.action == libdnf.transaction.TransactionItemAction_DOWNGRADE: +- hdr = tsi.pkg._header +- modular_problems += self._test_fail_safe(hdr, tsi.pkg) +- ts.addInstall(hdr, tsi, 'u') +- elif tsi.action == libdnf.transaction.TransactionItemAction_DOWNGRADED: +- ts.addErase(tsi.pkg.idx) +- elif tsi.action == libdnf.transaction.TransactionItemAction_INSTALL: +- hdr = tsi.pkg._header +- modular_problems += self._test_fail_safe(hdr, tsi.pkg) +- ts.addInstall(hdr, tsi, 'i') +- elif tsi.action == libdnf.transaction.TransactionItemAction_OBSOLETE: +- hdr = tsi.pkg._header +- modular_problems += self._test_fail_safe(hdr, tsi.pkg) +- ts.addInstall(hdr, tsi, 'u') +- elif tsi.action == libdnf.transaction.TransactionItemAction_OBSOLETED: +- ts.addErase(tsi.pkg.idx) +- elif tsi.action == libdnf.transaction.TransactionItemAction_REINSTALL: +- # note: in rpm 4.12 there should not be set +- # rpm.RPMPROB_FILTER_REPLACEPKG to work +- hdr = tsi.pkg._header +- modular_problems += self._test_fail_safe(hdr, tsi.pkg) +- ts.addReinstall(hdr, tsi) +- elif tsi.action == libdnf.transaction.TransactionItemAction_REINSTALLED: +- # Required when multiple packages with the same NEVRA marked as installed +- ts.addErase(tsi.pkg.idx) +- elif tsi.action == libdnf.transaction.TransactionItemAction_REMOVE: +- ts.addErase(tsi.pkg.idx) +- elif tsi.action == libdnf.transaction.TransactionItemAction_UPGRADE: +- hdr = tsi.pkg._header +- modular_problems += self._test_fail_safe(hdr, tsi.pkg) +- ts.addInstall(hdr, tsi, 'u') +- elif tsi.action == libdnf.transaction.TransactionItemAction_UPGRADED: +- ts.addErase(tsi.pkg.idx) +- elif tsi.action == libdnf.transaction.TransactionItemAction_REASON_CHANGE: +- pass +- else: +- raise RuntimeError("TransactionItemAction not handled: %s" % tsi.action) ++ try: ++ if tsi.action == libdnf.transaction.TransactionItemAction_DOWNGRADE: ++ hdr = tsi.pkg._header ++ modular_problems += self._test_fail_safe(hdr, tsi.pkg) ++ ts.addInstall(hdr, tsi, 'u') ++ elif tsi.action == libdnf.transaction.TransactionItemAction_DOWNGRADED: ++ ts.addErase(tsi.pkg.idx) ++ elif tsi.action == libdnf.transaction.TransactionItemAction_INSTALL: ++ hdr = tsi.pkg._header ++ modular_problems += self._test_fail_safe(hdr, tsi.pkg) ++ ts.addInstall(hdr, tsi, 'i') ++ elif tsi.action == libdnf.transaction.TransactionItemAction_OBSOLETE: ++ hdr = tsi.pkg._header ++ modular_problems += self._test_fail_safe(hdr, tsi.pkg) ++ ts.addInstall(hdr, tsi, 'u') ++ elif tsi.action == libdnf.transaction.TransactionItemAction_OBSOLETED: ++ ts.addErase(tsi.pkg.idx) ++ elif tsi.action == libdnf.transaction.TransactionItemAction_REINSTALL: ++ # note: in rpm 4.12 there should not be set ++ # rpm.RPMPROB_FILTER_REPLACEPKG to work ++ hdr = tsi.pkg._header ++ modular_problems += self._test_fail_safe(hdr, tsi.pkg) ++ ts.addReinstall(hdr, tsi) ++ elif tsi.action == libdnf.transaction.TransactionItemAction_REINSTALLED: ++ # Required when multiple packages with the same NEVRA marked as installed ++ ts.addErase(tsi.pkg.idx) ++ elif tsi.action == libdnf.transaction.TransactionItemAction_REMOVE: ++ ts.addErase(tsi.pkg.idx) ++ elif tsi.action == libdnf.transaction.TransactionItemAction_UPGRADE: ++ hdr = tsi.pkg._header ++ modular_problems += self._test_fail_safe(hdr, tsi.pkg) ++ ts.addInstall(hdr, tsi, 'u') ++ elif tsi.action == libdnf.transaction.TransactionItemAction_UPGRADED: ++ ts.addErase(tsi.pkg.idx) ++ elif tsi.action == libdnf.transaction.TransactionItemAction_REASON_CHANGE: ++ pass ++ else: ++ raise RuntimeError("TransactionItemAction not handled: %s" % tsi.action) ++ except rpm.error as e: ++ raise dnf.exceptions.Error(_("An rpm exception occurred: %s" % e)) + if modular_problems: + raise dnf.exceptions.Error(_("No available modular metadata for modular package")) + +-- +2.39.0 + diff --git a/SOURCES/0039-Ignore-processing-variable-files-with-unsupported-en.patch b/SOURCES/0039-Ignore-processing-variable-files-with-unsupported-en.patch new file mode 100644 index 0000000..ef476b6 --- /dev/null +++ b/SOURCES/0039-Ignore-processing-variable-files-with-unsupported-en.patch @@ -0,0 +1,50 @@ +From 23742561dcb168604d9668815a8c1ebbdf516d39 Mon Sep 17 00:00:00 2001 +From: Jan Kolarik +Date: Wed, 23 Nov 2022 08:44:41 +0000 +Subject: [PATCH 2/2] Ignore processing variable files with unsupported + encoding (RhBug:2141215) + +This issue could be seen for example when there are some temporary files stored by text editors in the `/etc/dnf/vars` folder. These files could be in the binary format and causes `UnicodeDecodeError` exception to be thrown during processing of the var files. + += changelog = +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2141215 +--- + dnf/conf/substitutions.py | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/dnf/conf/substitutions.py b/dnf/conf/substitutions.py +index 1281bdf0..4d0f0d55 100644 +--- a/dnf/conf/substitutions.py ++++ b/dnf/conf/substitutions.py +@@ -18,13 +18,15 @@ + # Red Hat, Inc. + # + ++import logging + import os + import re + +-import dnf +-import dnf.exceptions ++from dnf.i18n import _ + + ENVIRONMENT_VARS_RE = re.compile(r'^DNF_VAR_[A-Za-z0-9_]+$') ++logger = logging.getLogger('dnf') ++ + + class Substitutions(dict): + # :api +@@ -60,7 +62,8 @@ class Substitutions(dict): + val = fp.readline() + if val and val[-1] == '\n': + val = val[:-1] +- except (OSError, IOError): ++ except (OSError, IOError, UnicodeDecodeError) as e: ++ logger.warning(_("Error when parsing a variable from file '{0}': {1}").format(filepath, e)) + continue + if val is not None: + self[fsvar] = val +-- +2.39.0 + diff --git a/SOURCES/0040-Update-translations.patch b/SOURCES/0040-Update-translations.patch new file mode 100644 index 0000000..f80c1e2 --- /dev/null +++ b/SOURCES/0040-Update-translations.patch @@ -0,0 +1,5161 @@ +From b13ed420455910c0ca92102eee2bbc47ac76987c Mon Sep 17 00:00:00 2001 +From: Marek Blaha +Date: Wed, 8 Mar 2023 11:09:37 +0100 +Subject: [PATCH] Update translations + +--- + po/dnf.pot | 252 ++++++++++++------------ + po/fr.po | 269 +++++++++++++------------ + po/ja.po | 303 +++++++++++++++-------------- + po/ko.po | 549 +++++++++++++++++++++++++++------------------------- + po/zh_CN.po | 319 +++++++++++++++--------------- + 5 files changed, 874 insertions(+), 818 deletions(-) + +diff --git a/po/dnf.pot b/po/dnf.pot +index 62a8df83..72a98197 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: 2022-02-28 11:24+0100\n" ++"POT-Creation-Date: 2023-02-28 10:03+0100\n" + "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" + "Last-Translator: FULL NAME \n" + "Language-Team: LANGUAGE \n" +@@ -101,245 +101,245 @@ msgstr "" + msgid "Error: %s" + msgstr "" + +-#: dnf/base.py:148 dnf/base.py:477 dnf/base.py:479 ++#: dnf/base.py:149 dnf/base.py:483 dnf/base.py:485 + msgid "loading repo '{}' failure: {}" + msgstr "" + +-#: dnf/base.py:150 ++#: dnf/base.py:151 + msgid "Loading repository '{}' has failed" + msgstr "" + +-#: dnf/base.py:327 ++#: dnf/base.py:333 + msgid "Metadata timer caching disabled when running on metered connection." + msgstr "" + +-#: dnf/base.py:332 ++#: dnf/base.py:338 + msgid "Metadata timer caching disabled when running on a battery." + msgstr "" + +-#: dnf/base.py:337 ++#: dnf/base.py:343 + msgid "Metadata timer caching disabled." + msgstr "" + +-#: dnf/base.py:342 ++#: dnf/base.py:348 + msgid "Metadata cache refreshed recently." + msgstr "" + +-#: dnf/base.py:348 dnf/cli/commands/__init__.py:91 ++#: dnf/base.py:354 dnf/cli/commands/__init__.py:91 + msgid "There are no enabled repositories in \"{}\"." + msgstr "" + +-#: dnf/base.py:355 ++#: dnf/base.py:361 + #, python-format + msgid "%s: will never be expired and will not be refreshed." + msgstr "" + +-#: dnf/base.py:357 ++#: dnf/base.py:363 + #, python-format + msgid "%s: has expired and will be refreshed." + msgstr "" + + #. expires within the checking period: +-#: dnf/base.py:361 ++#: dnf/base.py:367 + #, python-format + msgid "%s: metadata will expire after %d seconds and will be refreshed now" + msgstr "" + +-#: dnf/base.py:365 ++#: dnf/base.py:371 + #, python-format + msgid "%s: will expire after %d seconds." + msgstr "" + + #. performs the md sync +-#: dnf/base.py:371 ++#: dnf/base.py:377 + msgid "Metadata cache created." + msgstr "" + +-#: dnf/base.py:404 dnf/base.py:471 ++#: dnf/base.py:410 dnf/base.py:477 + #, python-format + msgid "%s: using metadata from %s." + msgstr "" + +-#: dnf/base.py:416 dnf/base.py:484 ++#: dnf/base.py:422 dnf/base.py:490 + #, python-format + msgid "Ignoring repositories: %s" + msgstr "" + +-#: dnf/base.py:419 ++#: dnf/base.py:425 + #, python-format + msgid "Last metadata expiration check: %s ago on %s." + msgstr "" + +-#: dnf/base.py:512 ++#: dnf/base.py:518 + msgid "" + "The downloaded packages were saved in cache until the next successful " + "transaction." + msgstr "" + +-#: dnf/base.py:514 ++#: dnf/base.py:520 + #, python-format + msgid "You can remove cached packages by executing '%s'." + msgstr "" + +-#: dnf/base.py:606 ++#: dnf/base.py:652 + #, python-format + msgid "Invalid tsflag in config file: %s" + msgstr "" + +-#: dnf/base.py:662 ++#: dnf/base.py:708 + #, python-format + msgid "Failed to add groups file for repository: %s - %s" + msgstr "" + +-#: dnf/base.py:904 ++#: dnf/base.py:950 + msgid "Running transaction check" + msgstr "" + +-#: dnf/base.py:912 ++#: dnf/base.py:958 + msgid "Error: transaction check vs depsolve:" + msgstr "" + +-#: dnf/base.py:918 ++#: dnf/base.py:964 + msgid "Transaction check succeeded." + msgstr "" + +-#: dnf/base.py:921 ++#: dnf/base.py:967 + msgid "Running transaction test" + msgstr "" + +-#: dnf/base.py:931 dnf/base.py:1082 ++#: dnf/base.py:977 dnf/base.py:1128 + msgid "RPM: {}" + msgstr "" + +-#: dnf/base.py:932 ++#: dnf/base.py:978 + msgid "Transaction test error:" + msgstr "" + +-#: dnf/base.py:943 ++#: dnf/base.py:989 + msgid "Transaction test succeeded." + msgstr "" + +-#: dnf/base.py:964 ++#: dnf/base.py:1010 + msgid "Running transaction" + msgstr "" + +-#: dnf/base.py:1001 ++#: dnf/base.py:1047 + msgid "Disk Requirements:" + msgstr "" + +-#: dnf/base.py:1004 ++#: dnf/base.py:1050 + #, 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:1011 ++#: dnf/base.py:1057 + msgid "Error Summary" + msgstr "" + +-#: dnf/base.py:1037 ++#: dnf/base.py:1083 + #, python-brace-format + msgid "RPMDB altered outside of {prog}." + msgstr "" + +-#: dnf/base.py:1083 dnf/base.py:1091 ++#: dnf/base.py:1129 dnf/base.py:1137 + msgid "Could not run transaction." + msgstr "" + +-#: dnf/base.py:1086 ++#: dnf/base.py:1132 + msgid "Transaction couldn't start:" + msgstr "" + +-#: dnf/base.py:1100 ++#: dnf/base.py:1146 + #, python-format + msgid "Failed to remove transaction file %s" + msgstr "" + +-#: dnf/base.py:1182 ++#: dnf/base.py:1228 + msgid "Some packages were not downloaded. Retrying." + msgstr "" + +-#: dnf/base.py:1212 ++#: dnf/base.py:1258 + #, python-format + msgid "Delta RPMs reduced %.1f MB of updates to %.1f MB (%d.1%% saved)" + msgstr "" + +-#: dnf/base.py:1215 ++#: dnf/base.py:1261 + #, python-format + msgid "" + "Failed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)" + msgstr "" + +-#: dnf/base.py:1257 ++#: dnf/base.py:1303 + msgid "Cannot add local packages, because transaction job already exists" + msgstr "" + +-#: dnf/base.py:1271 ++#: dnf/base.py:1317 + msgid "Could not open: {}" + msgstr "" + +-#: dnf/base.py:1309 ++#: dnf/base.py:1355 + #, python-format + msgid "Public key for %s is not installed" + msgstr "" + +-#: dnf/base.py:1313 ++#: dnf/base.py:1359 + #, python-format + msgid "Problem opening package %s" + msgstr "" + +-#: dnf/base.py:1321 ++#: dnf/base.py:1367 + #, python-format + msgid "Public key for %s is not trusted" + msgstr "" + +-#: dnf/base.py:1325 ++#: dnf/base.py:1371 + #, python-format + msgid "Package %s is not signed" + msgstr "" + +-#: dnf/base.py:1355 ++#: dnf/base.py:1401 + #, python-format + msgid "Cannot remove %s" + msgstr "" + +-#: dnf/base.py:1359 ++#: dnf/base.py:1405 + #, python-format + msgid "%s removed" + msgstr "" + +-#: dnf/base.py:1639 ++#: dnf/base.py:1685 + msgid "No match for group package \"{}\"" + msgstr "" + +-#: dnf/base.py:1721 ++#: dnf/base.py:1767 + #, python-format + msgid "Adding packages from group '%s': %s" + msgstr "" + +-#: dnf/base.py:1744 dnf/cli/cli.py:221 dnf/cli/commands/__init__.py:437 ++#: dnf/base.py:1790 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:1762 ++#: dnf/base.py:1808 + msgid "No groups marked for removal." + msgstr "" + +-#: dnf/base.py:1796 ++#: dnf/base.py:1842 + msgid "No group marked for upgrade." + msgstr "" + +-#: dnf/base.py:2010 ++#: dnf/base.py:2056 + #, python-format + msgid "Package %s not installed, cannot downgrade it." + msgstr "" + +-#: 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/base.py:2058 dnf/base.py:2077 dnf/base.py:2090 dnf/base.py:2121 ++#: dnf/base.py:2191 dnf/base.py:2199 dnf/base.py:2333 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 +@@ -349,127 +349,127 @@ msgstr "" + msgid "No match for argument: %s" + msgstr "" + +-#: dnf/base.py:2019 ++#: dnf/base.py:2065 + #, python-format + msgid "Package %s of lower version already installed, cannot downgrade it." + msgstr "" + +-#: dnf/base.py:2042 ++#: dnf/base.py:2088 + #, python-format + msgid "Package %s not installed, cannot reinstall it." + msgstr "" + +-#: dnf/base.py:2057 ++#: dnf/base.py:2103 + #, python-format + msgid "File %s is a source package and cannot be updated, ignoring." + msgstr "" + +-#: dnf/base.py:2068 ++#: dnf/base.py:2118 + #, python-format + msgid "Package %s not installed, cannot update it." + msgstr "" + +-#: dnf/base.py:2078 ++#: dnf/base.py:2128 + #, python-format + msgid "" + "The same or higher version of %s is already installed, cannot update it." + msgstr "" + +-#: dnf/base.py:2121 dnf/cli/commands/reinstall.py:81 ++#: dnf/base.py:2188 dnf/cli/commands/reinstall.py:81 + #, python-format + msgid "Package %s available, but not installed." + msgstr "" + +-#: dnf/base.py:2127 ++#: dnf/base.py:2194 + #, python-format + msgid "Package %s available, but installed for different architecture." + msgstr "" + +-#: dnf/base.py:2152 ++#: dnf/base.py:2219 + #, python-format + msgid "No package %s installed." + msgstr "" + +-#: dnf/base.py:2170 dnf/cli/commands/install.py:136 ++#: dnf/base.py:2237 dnf/cli/commands/install.py:136 + #: dnf/cli/commands/remove.py:133 + #, python-format + msgid "Not a valid form: %s" + msgstr "" + +-#: dnf/base.py:2185 dnf/cli/commands/__init__.py:676 ++#: dnf/base.py:2252 dnf/cli/commands/__init__.py:676 + #: dnf/cli/commands/remove.py:162 + msgid "No packages marked for removal." + msgstr "" + +-#: dnf/base.py:2273 dnf/cli/cli.py:428 ++#: dnf/base.py:2340 dnf/cli/cli.py:428 + #, python-format + msgid "Packages for argument %s available, but not installed." + msgstr "" + +-#: dnf/base.py:2278 ++#: dnf/base.py:2345 + #, python-format + msgid "Package %s of lowest version already installed, cannot downgrade it." + msgstr "" + +-#: dnf/base.py:2378 ++#: dnf/base.py:2445 + msgid "No security updates needed, but {} update available" + msgstr "" + +-#: dnf/base.py:2380 ++#: dnf/base.py:2447 + msgid "No security updates needed, but {} updates available" + msgstr "" + +-#: dnf/base.py:2384 ++#: dnf/base.py:2451 + msgid "No security updates needed for \"{}\", but {} update available" + msgstr "" + +-#: dnf/base.py:2386 ++#: dnf/base.py:2453 + msgid "No security updates needed for \"{}\", but {} updates available" + msgstr "" + + #. raise an exception, because po.repoid is not in self.repos +-#: dnf/base.py:2407 ++#: dnf/base.py:2474 + #, python-format + msgid "Unable to retrieve a key for a commandline package: %s" + msgstr "" + +-#: dnf/base.py:2415 ++#: dnf/base.py:2482 + #, python-format + msgid ". Failing package is: %s" + msgstr "" + +-#: dnf/base.py:2416 ++#: dnf/base.py:2483 + #, python-format + msgid "GPG Keys are configured as: %s" + msgstr "" + +-#: dnf/base.py:2428 ++#: dnf/base.py:2495 + #, python-format + msgid "GPG key at %s (0x%s) is already installed" + msgstr "" + +-#: dnf/base.py:2464 ++#: dnf/base.py:2531 + msgid "The key has been approved." + msgstr "" + +-#: dnf/base.py:2467 ++#: dnf/base.py:2534 + msgid "The key has been rejected." + msgstr "" + +-#: dnf/base.py:2500 ++#: dnf/base.py:2567 + #, python-format + msgid "Key import failed (code %d)" + msgstr "" + +-#: dnf/base.py:2502 ++#: dnf/base.py:2569 + msgid "Key imported successfully" + msgstr "" + +-#: dnf/base.py:2506 ++#: dnf/base.py:2573 + msgid "Didn't install any keys" + msgstr "" + +-#: dnf/base.py:2509 ++#: dnf/base.py:2576 + #, python-format + msgid "" + "The GPG keys listed for the \"%s\" repository are already installed but they " +@@ -477,49 +477,49 @@ msgid "" + "Check that the correct key URLs are configured for this repository." + msgstr "" + +-#: dnf/base.py:2520 ++#: dnf/base.py:2587 + msgid "Import of key(s) didn't help, wrong key(s)?" + msgstr "" + +-#: dnf/base.py:2573 ++#: dnf/base.py:2640 + msgid " * Maybe you meant: {}" + msgstr "" + +-#: dnf/base.py:2605 ++#: dnf/base.py:2672 + msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum" + msgstr "" + +-#: dnf/base.py:2608 ++#: dnf/base.py:2675 + msgid "Some packages from local repository have incorrect checksum" + msgstr "" + +-#: dnf/base.py:2611 ++#: dnf/base.py:2678 + msgid "Package \"{}\" from repository \"{}\" has incorrect checksum" + msgstr "" + +-#: dnf/base.py:2614 ++#: dnf/base.py:2681 + msgid "" + "Some packages have invalid cache, but cannot be downloaded due to \"--" + "cacheonly\" option" + msgstr "" + +-#: dnf/base.py:2632 dnf/base.py:2652 ++#: dnf/base.py:2699 dnf/base.py:2719 + msgid "No match for argument" + msgstr "" + +-#: dnf/base.py:2640 dnf/base.py:2660 ++#: dnf/base.py:2707 dnf/base.py:2727 + msgid "All matches were filtered out by exclude filtering for argument" + msgstr "" + +-#: dnf/base.py:2642 ++#: dnf/base.py:2709 + msgid "All matches were filtered out by modular filtering for argument" + msgstr "" + +-#: dnf/base.py:2658 ++#: dnf/base.py:2725 + msgid "All matches were installed from a different repository for argument" + msgstr "" + +-#: dnf/base.py:2705 ++#: dnf/base.py:2772 + #, python-format + msgid "Package %s is already installed." + msgstr "" +@@ -627,7 +627,7 @@ msgstr "" + msgid "No packages marked for distribution synchronization." + msgstr "" + +-#: dnf/cli/cli.py:425 dnf/cli/commands/group.py:395 ++#: dnf/cli/cli.py:425 dnf/cli/commands/group.py:396 + #, python-format + msgid "No package %s available." + msgstr "" +@@ -1197,7 +1197,7 @@ msgstr "" + msgid "Invalid groups sub-command, use: %s." + msgstr "" + +-#: dnf/cli/commands/group.py:398 ++#: dnf/cli/commands/group.py:399 + msgid "Unable to find a mandatory group package." + msgstr "" + +@@ -1287,43 +1287,43 @@ msgstr "" + msgid "Transaction history is incomplete, after %u." + msgstr "" + +-#: dnf/cli/commands/history.py:256 ++#: dnf/cli/commands/history.py:267 + msgid "No packages to list" + msgstr "" + +-#: dnf/cli/commands/history.py:279 ++#: dnf/cli/commands/history.py:290 + msgid "" + "Invalid transaction ID range definition '{}'.\n" + "Use '..'." + msgstr "" + +-#: dnf/cli/commands/history.py:283 ++#: dnf/cli/commands/history.py:294 + msgid "" + "Can't convert '{}' to transaction ID.\n" + "Use '', 'last', 'last-'." + msgstr "" + +-#: dnf/cli/commands/history.py:312 ++#: dnf/cli/commands/history.py:323 + msgid "No transaction which manipulates package '{}' was found." + msgstr "" + +-#: dnf/cli/commands/history.py:357 ++#: dnf/cli/commands/history.py:368 + msgid "{} exists, overwrite?" + msgstr "" + +-#: dnf/cli/commands/history.py:360 ++#: dnf/cli/commands/history.py:371 + msgid "Not overwriting {}, exiting." + msgstr "" + +-#: dnf/cli/commands/history.py:367 ++#: dnf/cli/commands/history.py:378 + msgid "Transaction saved to {}." + msgstr "" + +-#: dnf/cli/commands/history.py:370 ++#: dnf/cli/commands/history.py:381 + msgid "Error storing transaction: {}" + msgstr "" + +-#: dnf/cli/commands/history.py:386 ++#: dnf/cli/commands/history.py:397 + msgid "Warning, the following problems occurred while running a transaction:" + msgstr "" + +@@ -3379,7 +3379,8 @@ msgstr "" + msgid "Environment id '%s' does not exist." + msgstr "" + +-#: dnf/comps.py:622 dnf/transaction_sr.py:477 dnf/transaction_sr.py:487 ++#: dnf/comps.py:622 dnf/transaction_sr.py:487 dnf/transaction_sr.py:497 ++#: dnf/transaction_sr.py:507 + #, python-format + msgid "Environment id '%s' is not installed." + msgstr "" +@@ -3481,6 +3482,11 @@ msgstr "" + msgid "Parsing file \"{}\" failed: {}" + msgstr "" + ++#: dnf/conf/substitutions.py:66 ++#, python-brace-format ++msgid "Error when parsing a variable from file '{0}': {1}" ++msgstr "" ++ + #: dnf/crypto.py:108 + #, python-format + msgid "repo %s: 0x%s already imported" +@@ -3504,17 +3510,22 @@ msgstr "" + msgid "retrieving repo key for %s unencrypted from %s" + msgstr "" + +-#: dnf/db/group.py:301 ++#: dnf/db/group.py:308 + msgid "" + "No available modular metadata for modular package '{}', it cannot be " + "installed on the system" + msgstr "" + +-#: dnf/db/group.py:351 ++#: dnf/db/group.py:359 ++#, python-format ++msgid "An rpm exception occurred: %s" ++msgstr "" ++ ++#: dnf/db/group.py:361 + msgid "No available modular metadata for modular package" + msgstr "" + +-#: dnf/db/group.py:385 ++#: dnf/db/group.py:395 + #, python-format + msgid "Will not install a source rpm package (%s)." + msgstr "" +@@ -3794,21 +3805,21 @@ msgstr "" + msgid "Parsing file failed: %s" + msgstr "" + +-#: dnf/plugin.py:141 ++#: dnf/plugin.py:144 + #, python-format + msgid "Loaded plugins: %s" + msgstr "" + +-#: dnf/plugin.py:211 ++#: dnf/plugin.py:216 + #, python-format + msgid "Failed loading plugin \"%s\": %s" + msgstr "" + +-#: dnf/plugin.py:243 ++#: dnf/plugin.py:248 + msgid "No matches found for the following enable plugin patterns: {}" + msgstr "" + +-#: dnf/plugin.py:247 ++#: dnf/plugin.py:252 + msgid "No matches found for the following disable plugin patterns: {}" + msgstr "" + +@@ -3817,10 +3828,6 @@ msgstr "" + msgid "no matching payload factory for %s" + msgstr "" + +-#: dnf/repo.py:111 +-msgid "Already downloaded" +-msgstr "" +- + #. pinging mirrors, this might take a while + #: dnf/repo.py:346 + #, python-format +@@ -4000,50 +4007,51 @@ msgid "Missing object key \"{key}\" in groups.packages." + msgstr "" + + #: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421 ++#: dnf/transaction_sr.py:431 + #, python-format + msgid "Group id '%s' is not installed." + msgstr "" + +-#: dnf/transaction_sr.py:432 ++#: dnf/transaction_sr.py:442 + #, python-format + msgid "Environment id '%s' is not available." + msgstr "" + +-#: dnf/transaction_sr.py:456 ++#: dnf/transaction_sr.py:466 + #, python-brace-format + msgid "" + "Invalid value \"{group_type}\" of environments.groups.group_type, only " + "\"mandatory\" or \"optional\" is supported." + msgstr "" + +-#: dnf/transaction_sr.py:464 ++#: dnf/transaction_sr.py:474 + #, python-brace-format + msgid "Missing object key \"{key}\" in environments.groups." + msgstr "" + +-#: dnf/transaction_sr.py:542 ++#: dnf/transaction_sr.py:566 + #, python-brace-format + msgid "Unexpected value of group action \"{action}\" for group \"{group}\"." + msgstr "" + +-#: dnf/transaction_sr.py:547 ++#: dnf/transaction_sr.py:571 + #, python-brace-format + msgid "Missing object key \"{key}\" in a group." + msgstr "" + +-#: dnf/transaction_sr.py:571 ++#: dnf/transaction_sr.py:599 + #, python-brace-format + msgid "" + "Unexpected value of environment action \"{action}\" for environment " + "\"{env}\"." + msgstr "" + +-#: dnf/transaction_sr.py:576 ++#: dnf/transaction_sr.py:604 + #, python-brace-format + msgid "Missing object key \"{key}\" in an environment." + msgstr "" + +-#: dnf/transaction_sr.py:615 ++#: dnf/transaction_sr.py:643 + #, python-brace-format + msgid "" + "Package nevra \"{nevra}\", which is not present in the transaction file, was " +diff --git a/po/fr.po b/po/fr.po +index bb2d3677..f11ffdc8 100644 +--- a/po/fr.po ++++ b/po/fr.po +@@ -15,19 +15,19 @@ + # José Fournier , 2017. #zanata + # Jérôme Fenal , 2017. #zanata + # Jean-Baptiste Holcroft , 2018. #zanata, 2020. +-# Ludek Janda , 2018. #zanata, 2021. ++# Ludek Janda , 2018. #zanata, 2021, 2022, 2023. + # Jean-Baptiste Holcroft , 2019. #zanata, 2020. + # Julien Humbert , 2020, 2021. + # Sundeep Anand , 2021. + # Guillaume Jacob , 2021. + # Titouan Bénard , 2021. +-# Transtats , 2022. ++# Transtats , 2022, 2023. + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2022-02-28 11:24+0100\n" +-"PO-Revision-Date: 2022-03-09 12:39+0000\n" ++"POT-Creation-Date: 2023-02-28 10:03+0100\n" ++"PO-Revision-Date: 2023-03-06 13:20+0000\n" + "Last-Translator: Transtats \n" + "Language-Team: French \n" +@@ -36,7 +36,7 @@ msgstr "" + "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.11.2\n" ++"X-Generator: Weblate 4.15.2\n" + + #: dnf/automatic/emitter.py:32 + #, python-format +@@ -121,84 +121,84 @@ msgstr "Le système est hors-ligne." + msgid "Error: %s" + msgstr "Erreur : %s" + +-#: dnf/base.py:148 dnf/base.py:477 dnf/base.py:479 ++#: dnf/base.py:149 dnf/base.py:483 dnf/base.py:485 + msgid "loading repo '{}' failure: {}" + msgstr "Erreur lors du chargement du dépôt « {} » : {}" + +-#: dnf/base.py:150 ++#: dnf/base.py:151 + msgid "Loading repository '{}' has failed" + msgstr "Échec du chargement du dépôt « {} »" + +-#: dnf/base.py:327 ++#: dnf/base.py:333 + 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:332 ++#: dnf/base.py:338 + 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:337 ++#: dnf/base.py:343 + msgid "Metadata timer caching disabled." + msgstr "Mise en cache temporisée des métadonnées désactivée." + +-#: dnf/base.py:342 ++#: dnf/base.py:348 + msgid "Metadata cache refreshed recently." + msgstr "Cache des métadonnées mis à jour récemment." + +-#: dnf/base.py:348 dnf/cli/commands/__init__.py:91 ++#: dnf/base.py:354 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:355 ++#: dnf/base.py:361 + #, 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:357 ++#: dnf/base.py:363 + #, 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:361 ++#: dnf/base.py:367 + #, 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:365 ++#: dnf/base.py:371 + #, python-format + msgid "%s: will expire after %d seconds." + msgstr "%s : expireront après %d secondes." + + #. performs the md sync +-#: dnf/base.py:371 ++#: dnf/base.py:377 + msgid "Metadata cache created." + msgstr "Cache des métadonnées créé." + +-#: dnf/base.py:404 dnf/base.py:471 ++#: dnf/base.py:410 dnf/base.py:477 + #, python-format + msgid "%s: using metadata from %s." + msgstr "%s : utilisation des métadonnées depuis le %s." + +-#: dnf/base.py:416 dnf/base.py:484 ++#: dnf/base.py:422 dnf/base.py:490 + #, python-format + msgid "Ignoring repositories: %s" + msgstr "Dépôts ignorés : %s" + +-#: dnf/base.py:419 ++#: dnf/base.py:425 + #, python-format + msgid "Last metadata expiration check: %s ago on %s." + msgstr "" + "Dernière vérification de l’expiration des métadonnées effectuée il y a %s le " + "%s." + +-#: dnf/base.py:512 ++#: dnf/base.py:518 + msgid "" + "The downloaded packages were saved in cache until the next successful " + "transaction." +@@ -206,59 +206,59 @@ msgstr "" + "Les paquets téléchargés ont été mis en cache jusqu’à la prochaine " + "transaction réussie." + +-#: dnf/base.py:514 ++#: dnf/base.py:520 + #, 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:606 ++#: dnf/base.py:652 + #, python-format + msgid "Invalid tsflag in config file: %s" + msgstr "tsflag invalide dans le fichier de configuration : %s" + +-#: dnf/base.py:662 ++#: dnf/base.py:708 + #, 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:904 ++#: dnf/base.py:950 + msgid "Running transaction check" + msgstr "Test de la transaction" + +-#: dnf/base.py:912 ++#: dnf/base.py:958 + msgid "Error: transaction check vs depsolve:" + msgstr "" + "Erreur : vérification de transaction contre résolution des dépendances :" + +-#: dnf/base.py:918 ++#: dnf/base.py:964 + msgid "Transaction check succeeded." + msgstr "La vérification de la transaction a réussi." + +-#: dnf/base.py:921 ++#: dnf/base.py:967 + msgid "Running transaction test" + msgstr "Lancement de la transaction de test" + +-#: dnf/base.py:931 dnf/base.py:1082 ++#: dnf/base.py:977 dnf/base.py:1128 + msgid "RPM: {}" + msgstr "RPM : {}" + +-#: dnf/base.py:932 ++#: dnf/base.py:978 + msgid "Transaction test error:" + msgstr "Erreur de la transaction de test :" + +-#: dnf/base.py:943 ++#: dnf/base.py:989 + msgid "Transaction test succeeded." + msgstr "Transaction de test réussie." + +-#: dnf/base.py:964 ++#: dnf/base.py:1010 + msgid "Running transaction" + msgstr "Exécution de la transaction" + +-#: dnf/base.py:1001 ++#: dnf/base.py:1047 + msgid "Disk Requirements:" + msgstr "Besoins en espace disque :" + +-#: dnf/base.py:1004 ++#: dnf/base.py:1050 + #, 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." +@@ -269,40 +269,40 @@ msgstr[1] "" + "Au moins {0} Mio supplémentaires sont nécessaires sur le système de fichiers " + "{1}." + +-#: dnf/base.py:1011 ++#: dnf/base.py:1057 + msgid "Error Summary" + msgstr "Résumé des erreurs" + +-#: dnf/base.py:1037 ++#: dnf/base.py:1083 + #, python-brace-format + msgid "RPMDB altered outside of {prog}." + msgstr "RPMDB modifié en dehors de {prog}." + +-#: dnf/base.py:1083 dnf/base.py:1091 ++#: dnf/base.py:1129 dnf/base.py:1137 + msgid "Could not run transaction." + msgstr "Impossible d’exécuter la transaction." + +-#: dnf/base.py:1086 ++#: dnf/base.py:1132 + msgid "Transaction couldn't start:" + msgstr "La transaction n’a pas pu démarrer :" + +-#: dnf/base.py:1100 ++#: dnf/base.py:1146 + #, python-format + msgid "Failed to remove transaction file %s" + msgstr "Échec de la suppression du fichier de transaction %s" + +-#: dnf/base.py:1182 ++#: dnf/base.py:1228 + msgid "Some packages were not downloaded. Retrying." + msgstr "Certains paquets n’ont pas été téléchargés. Nouvel essai." + +-#: dnf/base.py:1212 ++#: dnf/base.py:1258 + #, 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:1215 ++#: dnf/base.py:1261 + #, python-format + msgid "" + "Failed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)" +@@ -310,77 +310,77 @@ msgstr "" + "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:1257 ++#: dnf/base.py:1303 + 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:1271 ++#: dnf/base.py:1317 + msgid "Could not open: {}" + msgstr "Impossible d’ouvrir : {}" + +-#: dnf/base.py:1309 ++#: dnf/base.py:1355 + #, python-format + msgid "Public key for %s is not installed" + msgstr "La clé publique pour %s n’est pas installée" + +-#: dnf/base.py:1313 ++#: dnf/base.py:1359 + #, python-format + msgid "Problem opening package %s" + msgstr "Problème à l’ouverture du paquet %s" + +-#: dnf/base.py:1321 ++#: dnf/base.py:1367 + #, python-format + msgid "Public key for %s is not trusted" + msgstr "La clé publique pour %s n’est pas de confiance" + +-#: dnf/base.py:1325 ++#: dnf/base.py:1371 + #, python-format + msgid "Package %s is not signed" + msgstr "Le paquet %s n’est pas signé" + +-#: dnf/base.py:1355 ++#: dnf/base.py:1401 + #, python-format + msgid "Cannot remove %s" + msgstr "Impossible de supprimer %s" + +-#: dnf/base.py:1359 ++#: dnf/base.py:1405 + #, python-format + msgid "%s removed" + msgstr "%s supprimé" + +-#: dnf/base.py:1639 ++#: dnf/base.py:1685 + msgid "No match for group package \"{}\"" + msgstr "Aucune correspondance pour le paquet du groupe « {} »" + +-#: dnf/base.py:1721 ++#: dnf/base.py:1767 + #, python-format + msgid "Adding packages from group '%s': %s" + msgstr "Ajout de paquets en provenance du groupe « %s » : %s" + +-#: dnf/base.py:1744 dnf/cli/cli.py:221 dnf/cli/commands/__init__.py:437 ++#: dnf/base.py:1790 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:1762 ++#: dnf/base.py:1808 + msgid "No groups marked for removal." + msgstr "Aucun groupe marqué pour suppression." + +-#: dnf/base.py:1796 ++#: dnf/base.py:1842 + msgid "No group marked for upgrade." + msgstr "Aucun groupe marqué pour mise à jour." + +-#: dnf/base.py:2010 ++#: dnf/base.py:2056 + #, 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: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/base.py:2058 dnf/base.py:2077 dnf/base.py:2090 dnf/base.py:2121 ++#: dnf/base.py:2191 dnf/base.py:2199 dnf/base.py:2333 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 +@@ -390,30 +390,30 @@ msgstr "Le paquet %s n’est pas installé, impossible de le rétrograder." + msgid "No match for argument: %s" + msgstr "Aucune correspondance pour l’argument : %s" + +-#: dnf/base.py:2019 ++#: dnf/base.py:2065 + #, python-format + msgid "Package %s of lower version already installed, cannot downgrade it." + msgstr "" + "Le paquet %s est déjà installé dans une version inférieure, impossible de le " + "rétrograder." + +-#: dnf/base.py:2042 ++#: dnf/base.py:2088 + #, 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:2057 ++#: dnf/base.py:2103 + #, 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:2068 ++#: dnf/base.py:2118 + #, 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:2078 ++#: dnf/base.py:2128 + #, python-format + msgid "" + "The same or higher version of %s is already installed, cannot update it." +@@ -421,113 +421,113 @@ msgstr "" + "La même une ou version supérieure de %s est déjà installée, mise à jour " + "impossible." + +-#: dnf/base.py:2121 dnf/cli/commands/reinstall.py:81 ++#: dnf/base.py:2188 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:2127 ++#: dnf/base.py:2194 + #, 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:2152 ++#: dnf/base.py:2219 + #, python-format + msgid "No package %s installed." + msgstr "Aucun paquet %s installé." + +-#: dnf/base.py:2170 dnf/cli/commands/install.py:136 ++#: dnf/base.py:2237 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:2185 dnf/cli/commands/__init__.py:676 ++#: dnf/base.py:2252 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:2273 dnf/cli/cli.py:428 ++#: dnf/base.py:2340 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:2278 ++#: dnf/base.py:2345 + #, 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:2378 ++#: dnf/base.py:2445 + 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:2380 ++#: dnf/base.py:2447 + 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:2384 ++#: dnf/base.py:2451 + 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:2386 ++#: dnf/base.py:2453 + 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:2407 ++#: dnf/base.py:2474 + #, 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:2415 ++#: dnf/base.py:2482 + #, python-format + msgid ". Failing package is: %s" + msgstr ". Le paquet en erreur est : %s" + +-#: dnf/base.py:2416 ++#: dnf/base.py:2483 + #, python-format + msgid "GPG Keys are configured as: %s" + msgstr "Les clés GPG sont configurées comme : %s" + +-#: dnf/base.py:2428 ++#: dnf/base.py:2495 + #, 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:2464 ++#: dnf/base.py:2531 + msgid "The key has been approved." + msgstr "La clef a été approuvée." + +-#: dnf/base.py:2467 ++#: dnf/base.py:2534 + msgid "The key has been rejected." + msgstr "La clef a été rejetée." + +-#: dnf/base.py:2500 ++#: dnf/base.py:2567 + #, python-format + msgid "Key import failed (code %d)" + msgstr "L’import de la clé a échoué (code %d)" + +-#: dnf/base.py:2502 ++#: dnf/base.py:2569 + msgid "Key imported successfully" + msgstr "La clé a bien été importée" + +-#: dnf/base.py:2506 ++#: dnf/base.py:2573 + msgid "Didn't install any keys" + msgstr "Toutes les clés n’ont pas été installées" + +-#: dnf/base.py:2509 ++#: dnf/base.py:2576 + #, python-format + msgid "" + "The GPG keys listed for the \"%s\" repository are already installed but they " +@@ -538,29 +538,29 @@ msgstr "" + "incorrectes pour ce paquet.\n" + "Vérifiez que les URL des clés pour ce dépôt soient correctes." + +-#: dnf/base.py:2520 ++#: dnf/base.py:2587 + 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:2573 ++#: dnf/base.py:2640 + msgid " * Maybe you meant: {}" + msgstr " * Peut-être vouliez-vous dire : {}" + +-#: dnf/base.py:2605 ++#: dnf/base.py:2672 + msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum" + msgstr "" + "Le paquet \"{}\" du dépôt local \"{}\" a une somme de contrôle incorrecte" + +-#: dnf/base.py:2608 ++#: dnf/base.py:2675 + 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:2611 ++#: dnf/base.py:2678 + msgid "Package \"{}\" from repository \"{}\" has incorrect checksum" + msgstr "Le paquet \"{}\" du dépôt \"{}\" a une somme de contrôle incorrecte" + +-#: dnf/base.py:2614 ++#: dnf/base.py:2681 + msgid "" + "Some packages have invalid cache, but cannot be downloaded due to \"--" + "cacheonly\" option" +@@ -568,29 +568,29 @@ msgstr "" + "Certains paquets ont un cache invalide, mais ne peuvent pas être téléchargés " + "à cause de l’option « --cacheonly »" + +-#: dnf/base.py:2632 dnf/base.py:2652 ++#: dnf/base.py:2699 dnf/base.py:2719 + msgid "No match for argument" + msgstr "Aucune correspondance pour le paramètre" + +-#: dnf/base.py:2640 dnf/base.py:2660 ++#: dnf/base.py:2707 dnf/base.py:2727 + 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:2642 ++#: dnf/base.py:2709 + 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:2658 ++#: dnf/base.py:2725 + 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:2705 ++#: dnf/base.py:2772 + #, python-format + msgid "Package %s is already installed." + msgstr "Le paquet %s est déjà installé." +@@ -659,8 +659,8 @@ msgstr "" + "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." ++" ». Après la réinitialisation, vous pouvez installer les autres " ++"flux." + + #: dnf/cli/cli.py:212 + #, python-brace-format +@@ -713,7 +713,7 @@ msgstr "Passage de paquets en obsolètes" + msgid "No packages marked for distribution synchronization." + msgstr "Aucun paquet marqué pour la synchronisation de la distribution." + +-#: dnf/cli/cli.py:425 dnf/cli/commands/group.py:395 ++#: dnf/cli/cli.py:425 dnf/cli/commands/group.py:396 + #, python-format + msgid "No package %s available." + msgstr "Aucun paquet %s n’est disponible." +@@ -1321,7 +1321,7 @@ msgstr "paramètre pour la sous-commande group" + msgid "Invalid groups sub-command, use: %s." + msgstr "Sous-commande de groupes invalide, utilisez : %s." + +-#: dnf/cli/commands/group.py:398 ++#: dnf/cli/commands/group.py:399 + msgid "Unable to find a mandatory group package." + msgstr "Impossible de trouver un paquet obligatoire du groupe." + +@@ -1425,11 +1425,11 @@ msgstr "L’historique des transactions est incomplet, avant %u." + msgid "Transaction history is incomplete, after %u." + msgstr "L’historique des transactions est incomplet, après %u." + +-#: dnf/cli/commands/history.py:256 ++#: dnf/cli/commands/history.py:267 + msgid "No packages to list" + msgstr "Aucun paquet à lister" + +-#: dnf/cli/commands/history.py:279 ++#: dnf/cli/commands/history.py:290 + msgid "" + "Invalid transaction ID range definition '{}'.\n" + "Use '..'." +@@ -1438,7 +1438,7 @@ msgstr "" + "».\n" + "Utilisez « .. »." + +-#: dnf/cli/commands/history.py:283 ++#: dnf/cli/commands/history.py:294 + msgid "" + "Can't convert '{}' to transaction ID.\n" + "Use '', 'last', 'last-'." +@@ -1446,27 +1446,27 @@ msgstr "" + "Impossible de convertir « {} » à ID transaction.\n" + "Utiliser « », « last », « last- »." + +-#: dnf/cli/commands/history.py:312 ++#: dnf/cli/commands/history.py:323 + msgid "No transaction which manipulates package '{}' was found." + msgstr "Aucune transaction manipulant le paquet « {} » n’a été trouvée." + +-#: dnf/cli/commands/history.py:357 ++#: dnf/cli/commands/history.py:368 + msgid "{} exists, overwrite?" + msgstr "{} existe, l’écraser ?" + +-#: dnf/cli/commands/history.py:360 ++#: dnf/cli/commands/history.py:371 + msgid "Not overwriting {}, exiting." + msgstr "{} non écrasé, sortie." + +-#: dnf/cli/commands/history.py:367 ++#: dnf/cli/commands/history.py:378 + msgid "Transaction saved to {}." + msgstr "Transaction enregistrée vers {}." + +-#: dnf/cli/commands/history.py:370 ++#: dnf/cli/commands/history.py:381 + msgid "Error storing transaction: {}" + msgstr "Erreur lors du stockage de la transaction : {}" + +-#: dnf/cli/commands/history.py:386 ++#: dnf/cli/commands/history.py:397 + msgid "Warning, the following problems occurred while running a transaction:" + msgstr "" + "Attention, les problèmes suivants sont survenus lors de l'exécution d’une " +@@ -3669,7 +3669,8 @@ 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:477 dnf/transaction_sr.py:487 ++#: dnf/comps.py:622 dnf/transaction_sr.py:487 dnf/transaction_sr.py:497 ++#: dnf/transaction_sr.py:507 + #, python-format + msgid "Environment id '%s' is not installed." + msgstr "L’id d’environnement « %s » n’est pas installé." +@@ -3778,6 +3779,11 @@ msgstr "" + msgid "Parsing file \"{}\" failed: {}" + msgstr "La lecture du fichier « {} » a échoué : {}" + ++#: dnf/conf/substitutions.py:66 ++#, python-brace-format ++msgid "Error when parsing a variable from file '{0}': {1}" ++msgstr "Erreur lors de l'analyse d'une variable du fichier '{0}' : {1}" ++ + #: dnf/crypto.py:108 + #, python-format + msgid "repo %s: 0x%s already imported" +@@ -3801,7 +3807,7 @@ msgstr "NON vérifié avec un enregistrement DNS." + 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 ++#: dnf/db/group.py:308 + msgid "" + "No available modular metadata for modular package '{}', it cannot be " + "installed on the system" +@@ -3809,11 +3815,16 @@ 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:351 ++#: dnf/db/group.py:359 ++#, python-format ++msgid "An rpm exception occurred: %s" ++msgstr "Une exception rpm s'est produite : %s" ++ ++#: dnf/db/group.py:361 + msgid "No available modular metadata for modular package" + msgstr "Aucune métadonnée de module disponible pour le paquet modulaire" + +-#: dnf/db/group.py:385 ++#: dnf/db/group.py:395 + #, python-format + msgid "Will not install a source rpm package (%s)." + msgstr "Un paquet source rpm ne sera pas installé (%s)." +@@ -3902,7 +3913,7 @@ msgid "" + "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 " ++"Assurez-vous qu’aucun autre processus dnf/yum 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 +@@ -4123,22 +4134,22 @@ msgstr "N’a pas pu déterminer l’heure du dernier makecache." + msgid "Parsing file failed: %s" + msgstr "La lecture du fichier a échoué : %s" + +-#: dnf/plugin.py:141 ++#: dnf/plugin.py:144 + #, python-format + msgid "Loaded plugins: %s" + msgstr "Plugins chargés : %s" + +-#: dnf/plugin.py:211 ++#: dnf/plugin.py:216 + #, python-format + msgid "Failed loading plugin \"%s\": %s" + msgstr "Échec lors du chargement du module « %s » : %s" + +-#: dnf/plugin.py:243 ++#: dnf/plugin.py:248 + 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:247 ++#: dnf/plugin.py:252 + msgid "No matches found for the following disable plugin patterns: {}" + msgstr "" + "Aucun élément correspondant aux modèles de plugin de désactivation " +@@ -4149,10 +4160,6 @@ msgstr "" + msgid "no matching payload factory for %s" + msgstr "aucune fabrique de contenu ne correspond à %s" + +-#: dnf/repo.py:111 +-msgid "Already downloaded" +-msgstr "Déjà téléchargé" +- + #. pinging mirrors, this might take a while + #: dnf/repo.py:346 + #, python-format +@@ -4350,16 +4357,17 @@ msgid "Missing object key \"{key}\" in groups.packages." + msgstr "Clé d’objet « {key} » manquante dans groups.packages." + + #: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421 ++#: dnf/transaction_sr.py:431 + #, python-format + msgid "Group id '%s' is not installed." + msgstr "ID de groupe « %s » non installé." + +-#: dnf/transaction_sr.py:432 ++#: dnf/transaction_sr.py:442 + #, python-format + msgid "Environment id '%s' is not available." + msgstr "ID d’environnement « %s » non disponible." + +-#: dnf/transaction_sr.py:456 ++#: dnf/transaction_sr.py:466 + #, python-brace-format + msgid "" + "Invalid value \"{group_type}\" of environments.groups.group_type, only " +@@ -4368,24 +4376,24 @@ msgstr "" + "Valeur invalide « {group_type} » pour environments.groups.group_type, seuls " + "« mandatory » ou « optional » sont pris en charge." + +-#: dnf/transaction_sr.py:464 ++#: dnf/transaction_sr.py:474 + #, python-brace-format + msgid "Missing object key \"{key}\" in environments.groups." + msgstr "Clé d’objet « {key} » manquante dans environments.groups." + +-#: dnf/transaction_sr.py:542 ++#: dnf/transaction_sr.py:566 + #, 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:547 ++#: dnf/transaction_sr.py:571 + #, python-brace-format + msgid "Missing object key \"{key}\" in a group." + msgstr "Clé d’objet « {key} » manquante dans un groupe." + +-#: dnf/transaction_sr.py:571 ++#: dnf/transaction_sr.py:599 + #, python-brace-format + msgid "" + "Unexpected value of environment action \"{action}\" for environment " +@@ -4394,12 +4402,12 @@ msgstr "" + "Valeur inattendue pour l’action d’environnement « {action} » pour " + "l’environnement « {env} »." + +-#: dnf/transaction_sr.py:576 ++#: dnf/transaction_sr.py:604 + #, python-brace-format + msgid "Missing object key \"{key}\" in an environment." + msgstr "Clé d’objet « {key} » manquante dans un environnement." + +-#: dnf/transaction_sr.py:615 ++#: dnf/transaction_sr.py:643 + #, python-brace-format + msgid "" + "Package nevra \"{nevra}\", which is not present in the transaction file, was " +@@ -4440,6 +4448,9 @@ msgstr "Supprimé" + msgid "Failed" + msgstr "Échec" + ++#~ msgid "Already downloaded" ++#~ msgstr "Déjà téléchargé" ++ + #~ msgid "skipping." + #~ msgstr "ignorer." + +diff --git a/po/ja.po b/po/ja.po +index 05bbda02..fcb04973 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, 2021. ++# Ludek Janda , 2018. #zanata, 2021, 2023. + # Noriko Mizumoto , 2018. #zanata + # Ooyama Yosiyuki , 2018. #zanata + # Hajime Taira , 2019. #zanata +@@ -23,13 +23,14 @@ + # Casey Jones , 2020. + # Hajime Taira , 2020. + # Sundeep Anand , 2021. +-# Transtats , 2022. ++# Transtats , 2022, 2023. ++# middlingphys , 2023. + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2022-02-28 11:24+0100\n" +-"PO-Revision-Date: 2022-03-09 12:39+0000\n" ++"POT-Creation-Date: 2023-02-28 10:03+0100\n" ++"PO-Revision-Date: 2023-03-06 13:20+0000\n" + "Last-Translator: Transtats \n" + "Language-Team: Japanese \n" +@@ -38,7 +39,7 @@ msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=1; plural=0;\n" +-"X-Generator: Weblate 4.11.2\n" ++"X-Generator: Weblate 4.15.2\n" + + #: dnf/automatic/emitter.py:32 + #, python-format +@@ -122,78 +123,78 @@ msgstr "システムはオフラインです。" + msgid "Error: %s" + msgstr "エラー: %s" + +-#: dnf/base.py:148 dnf/base.py:477 dnf/base.py:479 ++#: dnf/base.py:149 dnf/base.py:483 dnf/base.py:485 + msgid "loading repo '{}' failure: {}" + msgstr "repo '{}' のロードに失敗しました: {}" + +-#: dnf/base.py:150 ++#: dnf/base.py:151 + msgid "Loading repository '{}' has failed" + msgstr "repository '{}' のロードに失敗しました" + +-#: dnf/base.py:327 ++#: dnf/base.py:333 + msgid "Metadata timer caching disabled when running on metered connection." + msgstr "" + "metered 接続で実行する際、メタデータタイマーキャッシュは無効化されました。" + +-#: dnf/base.py:332 ++#: dnf/base.py:338 + msgid "Metadata timer caching disabled when running on a battery." + msgstr "" + "バッテリーで実行する際、メタデータタイマーキャッシュは無効化されました。" + +-#: dnf/base.py:337 ++#: dnf/base.py:343 + msgid "Metadata timer caching disabled." + msgstr "メタデータタイマーキャッシュは無効化されました。" + +-#: dnf/base.py:342 ++#: dnf/base.py:348 + msgid "Metadata cache refreshed recently." + msgstr "メタデータキャッシュは最近、リフレッシュされました。" + +-#: dnf/base.py:348 dnf/cli/commands/__init__.py:91 ++#: dnf/base.py:354 dnf/cli/commands/__init__.py:91 + msgid "There are no enabled repositories in \"{}\"." + msgstr "\"{}\" には有効化されたリポジトリーがありません。" + +-#: dnf/base.py:355 ++#: dnf/base.py:361 + #, python-format + msgid "%s: will never be expired and will not be refreshed." + msgstr "%s: は期限切れになることはなく、リフレッシュされることもありません。" + +-#: dnf/base.py:357 ++#: dnf/base.py:363 + #, python-format + msgid "%s: has expired and will be refreshed." + msgstr "%s: は期限切れとなったのでリフレッシュされます。" + + #. expires within the checking period: +-#: dnf/base.py:361 ++#: dnf/base.py:367 + #, python-format + msgid "%s: metadata will expire after %d seconds and will be refreshed now" + msgstr "%s: メタデータは %d 秒後に期限切れとなり、すぐにリフレッシュされます" + +-#: dnf/base.py:365 ++#: dnf/base.py:371 + #, python-format + msgid "%s: will expire after %d seconds." + msgstr "%s: は %d 秒後に期限切れとなります。" + + #. performs the md sync +-#: dnf/base.py:371 ++#: dnf/base.py:377 + msgid "Metadata cache created." + msgstr "メタデータキャッシュを作成しました。" + +-#: dnf/base.py:404 dnf/base.py:471 ++#: dnf/base.py:410 dnf/base.py:477 + #, python-format + msgid "%s: using metadata from %s." + msgstr "%s: は %s から取得したメタデータを使用中。" + +-#: dnf/base.py:416 dnf/base.py:484 ++#: dnf/base.py:422 dnf/base.py:490 + #, python-format + msgid "Ignoring repositories: %s" + msgstr "リポジトリーを無視します: %s" + +-#: dnf/base.py:419 ++#: dnf/base.py:425 + #, python-format + msgid "Last metadata expiration check: %s ago on %s." +-msgstr "メタデータの期限切れの最終確認: %s 時間前の %s に実施しました。" ++msgstr "メタデータの期限切れの最終確認: %s 前の %s に実施しました。" + +-#: dnf/base.py:512 ++#: dnf/base.py:518 + msgid "" + "The downloaded packages were saved in cache until the next successful " + "transaction." +@@ -201,97 +202,97 @@ msgstr "" + "ダウンロード済みのパッケージは、次の正常なトランザクションまでキャッシュに保" + "存されました。" + +-#: dnf/base.py:514 ++#: dnf/base.py:520 + #, python-format + msgid "You can remove cached packages by executing '%s'." + msgstr "'%s' を実行することでキャッシュパッケージを削除できます。" + +-#: dnf/base.py:606 ++#: dnf/base.py:652 + #, python-format + msgid "Invalid tsflag in config file: %s" + msgstr "設定ファイルの tsflag が無効です: %s" + +-#: dnf/base.py:662 ++#: dnf/base.py:708 + #, python-format + msgid "Failed to add groups file for repository: %s - %s" + msgstr "リポジトリーのグループファイルを追加できませんでした: %s - %s" + +-#: dnf/base.py:904 ++#: dnf/base.py:950 + msgid "Running transaction check" + msgstr "トランザクションの確認を実行中" + +-#: dnf/base.py:912 ++#: dnf/base.py:958 + msgid "Error: transaction check vs depsolve:" + msgstr "エラー: トランザクションの確認 vs depsolve:" + +-#: dnf/base.py:918 ++#: dnf/base.py:964 + msgid "Transaction check succeeded." + msgstr "トランザクションの確認に成功しました。" + +-#: dnf/base.py:921 ++#: dnf/base.py:967 + msgid "Running transaction test" + msgstr "トランザクションのテストを実行中" + +-#: dnf/base.py:931 dnf/base.py:1082 ++#: dnf/base.py:977 dnf/base.py:1128 + msgid "RPM: {}" + msgstr "RPM: {}" + +-#: dnf/base.py:932 ++#: dnf/base.py:978 + msgid "Transaction test error:" + msgstr "トランザクションテストエラー:" + +-#: dnf/base.py:943 ++#: dnf/base.py:989 + msgid "Transaction test succeeded." + msgstr "トランザクションのテストに成功しました。" + +-#: dnf/base.py:964 ++#: dnf/base.py:1010 + msgid "Running transaction" + msgstr "トランザクションを実行中" + +-#: dnf/base.py:1001 ++#: dnf/base.py:1047 + msgid "Disk Requirements:" + msgstr "ディスク要件:" + +-#: dnf/base.py:1004 ++#: dnf/base.py:1050 + #, 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:1011 ++#: dnf/base.py:1057 + msgid "Error Summary" + msgstr "エラーの概要" + +-#: dnf/base.py:1037 ++#: dnf/base.py:1083 + #, python-brace-format + msgid "RPMDB altered outside of {prog}." + msgstr "RPMDBは {prog} のサポート外に変更されました。" + +-#: dnf/base.py:1083 dnf/base.py:1091 ++#: dnf/base.py:1129 dnf/base.py:1137 + msgid "Could not run transaction." + msgstr "トランザクションを実行できませんでした。" + +-#: dnf/base.py:1086 ++#: dnf/base.py:1132 + msgid "Transaction couldn't start:" + msgstr "トランザクションを開始できませんでした:" + +-#: dnf/base.py:1100 ++#: dnf/base.py:1146 + #, python-format + msgid "Failed to remove transaction file %s" + msgstr "トランザクションファイル %s の削除に失敗しました" + +-#: dnf/base.py:1182 ++#: dnf/base.py:1228 + msgid "Some packages were not downloaded. Retrying." + msgstr "一部のパッケージはダウンロードされませんでした。再試行中です。" + +-#: dnf/base.py:1212 ++#: dnf/base.py:1258 + #, 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:1215 ++#: dnf/base.py:1261 + #, python-format + msgid "" + "Failed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)" +@@ -299,78 +300,78 @@ msgstr "" + "非効率な Delta RPM により %.1f MB の更新が増加し、%.1f MB となりました。" + "(%d.1%% が無駄になりました)" + +-#: dnf/base.py:1257 ++#: dnf/base.py:1303 + msgid "Cannot add local packages, because transaction job already exists" + msgstr "" + "ローカルパッケージを追加できません、トランザクションジョブがすでに存在するた" + "めです" + +-#: dnf/base.py:1271 ++#: dnf/base.py:1317 + msgid "Could not open: {}" + msgstr "開くことができませんでした: {}" + +-#: dnf/base.py:1309 ++#: dnf/base.py:1355 + #, python-format + msgid "Public key for %s is not installed" + msgstr "%s の公開鍵がインストールされていません" + +-#: dnf/base.py:1313 ++#: dnf/base.py:1359 + #, python-format + msgid "Problem opening package %s" + msgstr "パッケージ %s を開くことができません" + +-#: dnf/base.py:1321 ++#: dnf/base.py:1367 + #, python-format + msgid "Public key for %s is not trusted" + msgstr "%s の公開鍵は信頼されていません" + +-#: dnf/base.py:1325 ++#: dnf/base.py:1371 + #, python-format + msgid "Package %s is not signed" + msgstr "パッケージ %s は署名されていません" + +-#: dnf/base.py:1355 ++#: dnf/base.py:1401 + #, python-format + msgid "Cannot remove %s" + msgstr "%s を削除できません" + +-#: dnf/base.py:1359 ++#: dnf/base.py:1405 + #, python-format + msgid "%s removed" + msgstr "%s を削除しました" + +-#: dnf/base.py:1639 ++#: dnf/base.py:1685 + msgid "No match for group package \"{}\"" + msgstr "グループパッケージ \"{}\" に一致するものはありません" + +-#: dnf/base.py:1721 ++#: dnf/base.py:1767 + #, python-format + msgid "Adding packages from group '%s': %s" + msgstr "グループ '%s' からのパッケージを追加します: %s" + +-#: dnf/base.py:1744 dnf/cli/cli.py:221 dnf/cli/commands/__init__.py:437 ++#: dnf/base.py:1790 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:1762 ++#: dnf/base.py:1808 + msgid "No groups marked for removal." + msgstr "削除対象のパッケージはありません。" + +-#: dnf/base.py:1796 ++#: dnf/base.py:1842 + msgid "No group marked for upgrade." + msgstr "アップグレード対象のグループはありません。" + +-#: dnf/base.py:2010 ++#: dnf/base.py:2056 + #, python-format + msgid "Package %s not installed, cannot downgrade it." + msgstr "" + "パッケージ %s はインストールされていないので、ダウングレードできません。" + +-#: 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/base.py:2058 dnf/base.py:2077 dnf/base.py:2090 dnf/base.py:2121 ++#: dnf/base.py:2191 dnf/base.py:2199 dnf/base.py:2333 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 +@@ -380,30 +381,30 @@ msgstr "" + msgid "No match for argument: %s" + msgstr "一致した引数がありません: %s" + +-#: dnf/base.py:2019 ++#: dnf/base.py:2065 + #, python-format + msgid "Package %s of lower version already installed, cannot downgrade it." + msgstr "" + "下位バージョンのパッケージ %s はインストール済みなので、ダウングレードできま" + "せん。" + +-#: dnf/base.py:2042 ++#: dnf/base.py:2088 + #, python-format + msgid "Package %s not installed, cannot reinstall it." + msgstr "" + "パッケージ %s はインストールされていないのでの、再インストールできません。" + +-#: dnf/base.py:2057 ++#: dnf/base.py:2103 + #, python-format + msgid "File %s is a source package and cannot be updated, ignoring." + msgstr "ファイル %s はソースパッケージで更新できません。無視します。" + +-#: dnf/base.py:2068 ++#: dnf/base.py:2118 + #, python-format + msgid "Package %s not installed, cannot update it." + msgstr "パッケージ %s はインストールされていないので、更新できません。" + +-#: dnf/base.py:2078 ++#: dnf/base.py:2128 + #, python-format + msgid "" + "The same or higher version of %s is already installed, cannot update it." +@@ -411,105 +412,105 @@ msgstr "" + "同じまたはさらに新しいバージョンの %s が既にインストールされています、アップ" + "デートできません。" + +-#: dnf/base.py:2121 dnf/cli/commands/reinstall.py:81 ++#: dnf/base.py:2188 dnf/cli/commands/reinstall.py:81 + #, python-format + msgid "Package %s available, but not installed." + msgstr "パッケージ %s は利用可能ですが、インストールされていません。" + +-#: dnf/base.py:2127 ++#: dnf/base.py:2194 + #, python-format + msgid "Package %s available, but installed for different architecture." + msgstr "" + "パッケージ %s は利用可能ですが、他のアーキテクチャー用にインストールされてい" + "ます。" + +-#: dnf/base.py:2152 ++#: dnf/base.py:2219 + #, python-format + msgid "No package %s installed." + msgstr "パッケージ %s はインストールされていません。" + +-#: dnf/base.py:2170 dnf/cli/commands/install.py:136 ++#: dnf/base.py:2237 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:2185 dnf/cli/commands/__init__.py:676 ++#: dnf/base.py:2252 dnf/cli/commands/__init__.py:676 + #: dnf/cli/commands/remove.py:162 + msgid "No packages marked for removal." + msgstr "削除対象のパッケージはありません。" + +-#: dnf/base.py:2273 dnf/cli/cli.py:428 ++#: dnf/base.py:2340 dnf/cli/cli.py:428 + #, python-format + msgid "Packages for argument %s available, but not installed." + msgstr "引数 %s のパッケージは利用可能ですが、インストールされていません。" + +-#: dnf/base.py:2278 ++#: dnf/base.py:2345 + #, python-format + msgid "Package %s of lowest version already installed, cannot downgrade it." + msgstr "" + "最下位バージョンのパッケージ %s はインストール済みなので、ダウングレードでき" + "ません。" + +-#: dnf/base.py:2378 ++#: dnf/base.py:2445 + msgid "No security updates needed, but {} update available" + msgstr "セキュリティー更新は必要ありませんが、{} 更新が利用可能です" + +-#: dnf/base.py:2380 ++#: dnf/base.py:2447 + msgid "No security updates needed, but {} updates available" + msgstr "セキュリティー更新は必要ありませんが、{} 更新が利用可能です" + +-#: dnf/base.py:2384 ++#: dnf/base.py:2451 + msgid "No security updates needed for \"{}\", but {} update available" + msgstr "\"{}\" のセキュリティー更新は必要ありませんが、{} 更新が利用可能です" + +-#: dnf/base.py:2386 ++#: dnf/base.py:2453 + msgid "No security updates needed for \"{}\", but {} updates available" + msgstr "\"{}\" のセキュリティー更新は必要ありませんが、{} 更新が利用可能です" + + #. raise an exception, because po.repoid is not in self.repos +-#: dnf/base.py:2407 ++#: dnf/base.py:2474 + #, python-format + msgid "Unable to retrieve a key for a commandline package: %s" + msgstr "コマンドラインパッケージのキーを取得できません: %s" + +-#: dnf/base.py:2415 ++#: dnf/base.py:2482 + #, python-format + msgid ". Failing package is: %s" + msgstr ". 失敗したパッケージは: %s" + +-#: dnf/base.py:2416 ++#: dnf/base.py:2483 + #, python-format + msgid "GPG Keys are configured as: %s" + msgstr "GPG 鍵が設定されています: %s" + +-#: dnf/base.py:2428 ++#: dnf/base.py:2495 + #, python-format + msgid "GPG key at %s (0x%s) is already installed" + msgstr "%s (0x%s) の GPG 鍵はインストール済みです" + +-#: dnf/base.py:2464 ++#: dnf/base.py:2531 + msgid "The key has been approved." + msgstr "鍵が承認されました。" + +-#: dnf/base.py:2467 ++#: dnf/base.py:2534 + msgid "The key has been rejected." + msgstr "鍵が拒否されました。" + +-#: dnf/base.py:2500 ++#: dnf/base.py:2567 + #, python-format + msgid "Key import failed (code %d)" + msgstr "鍵のインポートに失敗しました (コード: %d)" + +-#: dnf/base.py:2502 ++#: dnf/base.py:2569 + msgid "Key imported successfully" + msgstr "鍵のインポートに成功しました" + +-#: dnf/base.py:2506 ++#: dnf/base.py:2573 + msgid "Didn't install any keys" + msgstr "鍵を 1 つもインストールしませんでした" + +-#: dnf/base.py:2509 ++#: dnf/base.py:2576 + #, python-format + msgid "" + "The GPG keys listed for the \"%s\" repository are already installed but they " +@@ -520,31 +521,31 @@ msgstr "" + "パッケージには適切ではありません。\n" + "正しい鍵 URL がこのリポジトリー用に設定されているか確認してください。" + +-#: dnf/base.py:2520 ++#: dnf/base.py:2587 + msgid "Import of key(s) didn't help, wrong key(s)?" + msgstr "鍵をインポートしても役に立ちませんでした。鍵が間違っていませんか?" + +-#: dnf/base.py:2573 ++#: dnf/base.py:2640 + msgid " * Maybe you meant: {}" + msgstr " * おそらく: {}" + +-#: dnf/base.py:2605 ++#: dnf/base.py:2672 + msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum" + msgstr "" + "ローカルリポジトリー \"{}\" のパッケージ \"{}\" のチェックサムは正しくありま" + "せん" + +-#: dnf/base.py:2608 ++#: dnf/base.py:2675 + msgid "Some packages from local repository have incorrect checksum" + msgstr "" + "ローカルリポジトリーのいくつかのパッケージのチェックサムは正しくありません" + +-#: dnf/base.py:2611 ++#: dnf/base.py:2678 + msgid "Package \"{}\" from repository \"{}\" has incorrect checksum" + msgstr "" + "リポジトリー \"{}\" のパッケージ \"{}\" のチェックサムは正しくありません" + +-#: dnf/base.py:2614 ++#: dnf/base.py:2681 + msgid "" + "Some packages have invalid cache, but cannot be downloaded due to \"--" + "cacheonly\" option" +@@ -552,25 +553,24 @@ msgstr "" + "いくつかのパッケージには無効なキャッシュがありますが、\"--cacheonly\" オプ" + "ションによりダウンロードできません" + +-#: dnf/base.py:2632 dnf/base.py:2652 ++#: dnf/base.py:2699 dnf/base.py:2719 + msgid "No match for argument" +-msgstr "一致した引数がありません" ++msgstr "引数に一致する結果がありません" + +-#: dnf/base.py:2640 dnf/base.py:2660 ++#: dnf/base.py:2707 dnf/base.py:2727 + msgid "All matches were filtered out by exclude filtering for argument" +-msgstr "すべての検索結果は引数の除外フィルタリングに一致しません (filter out)" ++msgstr "引数に一致する結果はすべて除外フィルタによって除外されました" + +-#: dnf/base.py:2642 ++#: dnf/base.py:2709 + msgid "All matches were filtered out by modular filtering for argument" +-msgstr "" +-"すべての検出結果は引数のモジュラーフィルタリングに一致しません (filter out)" ++msgstr "引数に一致する結果はすべてモジュールのフィルタによって除外されました" + +-#: dnf/base.py:2658 ++#: dnf/base.py:2725 + msgid "All matches were installed from a different repository for argument" + msgstr "" +-"すべての検索結果は引数に対し異なるレポジトリからインストールされたものです" ++"引数に一致する結果はすべて異なるリポジトリーからインストールされたものです" + +-#: dnf/base.py:2705 ++#: dnf/base.py:2772 + #, python-format + msgid "Package %s is already installed." + msgstr "パッケージ %s は既にインストールされています。" +@@ -689,7 +689,7 @@ msgstr "パッケージの廃止" + msgid "No packages marked for distribution synchronization." + msgstr "ディストリビューション同期対象のパッケージがありません。" + +-#: dnf/cli/cli.py:425 dnf/cli/commands/group.py:395 ++#: dnf/cli/cli.py:425 dnf/cli/commands/group.py:396 + #, python-format + msgid "No package %s available." + msgstr "利用可能なパッケージ %s はありません。" +@@ -1292,7 +1292,7 @@ msgstr "グループサブコマンドの引数" + msgid "Invalid groups sub-command, use: %s." + msgstr "groups のサブコマンドが無効です: %s を使用します。" + +-#: dnf/cli/commands/group.py:398 ++#: dnf/cli/commands/group.py:399 + msgid "Unable to find a mandatory group package." + msgstr "必須のグループパッケージを見つけることができません。" + +@@ -1394,11 +1394,11 @@ msgstr "%u の前のトランザクション履歴が不完全です。" + msgid "Transaction history is incomplete, after %u." + msgstr "%u の後のトランザクション履歴が不完全です。" + +-#: dnf/cli/commands/history.py:256 ++#: dnf/cli/commands/history.py:267 + msgid "No packages to list" + msgstr "一覧表示するパッケージはありません" + +-#: dnf/cli/commands/history.py:279 ++#: dnf/cli/commands/history.py:290 + msgid "" + "Invalid transaction ID range definition '{}'.\n" + "Use '..'." +@@ -1406,7 +1406,7 @@ msgstr "" + "無効なトランザクション ID の範囲の定義 '{}'。\n" + "'..' を使用してください。" + +-#: dnf/cli/commands/history.py:283 ++#: dnf/cli/commands/history.py:294 + msgid "" + "Can't convert '{}' to transaction ID.\n" + "Use '', 'last', 'last-'." +@@ -1414,27 +1414,27 @@ msgstr "" + "'{}' をトランザクション IDに変換できません。\n" + "'', 'last', 'last-' を使用してください。" + +-#: dnf/cli/commands/history.py:312 ++#: dnf/cli/commands/history.py:323 + msgid "No transaction which manipulates package '{}' was found." + msgstr "パッケージ '{}' を操作するトランザクションが見つかりません。" + +-#: dnf/cli/commands/history.py:357 ++#: dnf/cli/commands/history.py:368 + msgid "{} exists, overwrite?" + msgstr "{} は存在します。上書きしますか?" + +-#: dnf/cli/commands/history.py:360 ++#: dnf/cli/commands/history.py:371 + msgid "Not overwriting {}, exiting." + msgstr "{} は存在するため上書きしません。" + +-#: dnf/cli/commands/history.py:367 ++#: dnf/cli/commands/history.py:378 + msgid "Transaction saved to {}." + msgstr "{} に保存されているトランザクション。" + +-#: dnf/cli/commands/history.py:370 ++#: dnf/cli/commands/history.py:381 + msgid "Error storing transaction: {}" + msgstr "トランザクションの保存エラー: {}" + +-#: dnf/cli/commands/history.py:386 ++#: dnf/cli/commands/history.py:397 + msgid "Warning, the following problems occurred while running a transaction:" + msgstr "警告: トランザクションの実行中に以下の問題が発生しました:" + +@@ -1591,7 +1591,7 @@ msgstr "プロファイルコンテンツを表示します" + + #: dnf/cli/commands/module.py:379 + msgid "remove all modular packages" +-msgstr "すべてのモジュラーパッケージを削除" ++msgstr "モジュールに関連するすべてのパッケージを削除" + + #: dnf/cli/commands/module.py:389 + msgid "Module specification" +@@ -2311,7 +2311,7 @@ msgstr "セキュリティー" + + #: dnf/cli/commands/updateinfo.py:48 + msgid "newpackage" +-msgstr "newpackage" ++msgstr "新しいパッケージ" + + #: dnf/cli/commands/updateinfo.py:50 + msgid "Critical/Sec." +@@ -2775,7 +2775,7 @@ msgstr "機能拡張関連パッケージを更新に含めます" + + #: dnf/cli/option_parser.py:328 + msgid "Include newpackage relevant packages, in updates" +-msgstr "newpackage の関連パッケージを更新に含めます" ++msgstr "新しいパッケージの関連パッケージを更新に含めます" + + #: dnf/cli/option_parser.py:331 + msgid "Include security relevant packages, in updates" +@@ -3424,7 +3424,7 @@ msgstr "失敗しました:" + + #: dnf/cli/output.py:1765 dnf/cli/output.py:1767 + msgid "Releasever :" +-msgstr "Releasever :" ++msgstr "リリースバージョン :" + + #: dnf/cli/output.py:1772 dnf/cli/output.py:1774 + msgid "Command Line :" +@@ -3432,7 +3432,7 @@ msgstr "コマンドライン :" + + #: dnf/cli/output.py:1779 dnf/cli/output.py:1781 + msgid "Comment :" +-msgstr "コメント :" ++msgstr "コメント :" + + #: dnf/cli/output.py:1785 + msgid "Transaction performed with:" +@@ -3452,7 +3452,7 @@ msgstr "エラー:" + + #: dnf/cli/output.py:1816 + msgid "Dep-Install" +-msgstr "Dep-Install" ++msgstr "依存先インストール" + + #: dnf/cli/output.py:1817 + msgid "Obsoleted" +@@ -3600,7 +3600,8 @@ msgstr "モジュールまたはグループ '%s' は存在しません。" + msgid "Environment id '%s' does not exist." + msgstr "環境 id '%s' は存在しません。" + +-#: dnf/comps.py:622 dnf/transaction_sr.py:477 dnf/transaction_sr.py:487 ++#: dnf/comps.py:622 dnf/transaction_sr.py:487 dnf/transaction_sr.py:497 ++#: dnf/transaction_sr.py:507 + #, python-format + msgid "Environment id '%s' is not installed." + msgstr "環境 id '%s' はインストールされていません。" +@@ -3678,11 +3679,11 @@ msgstr "警告: '%s' のロードに失敗、スキップします。" + + #: dnf/conf/read.py:72 + msgid "Bad id for repo: {} ({}), byte = {} {}" +-msgstr "repo: {} ({}) に正しくないid、 byte = {} {}" ++msgstr "repo の id が不正: {} ({}), byte = {} {}" + + #: dnf/conf/read.py:76 + msgid "Bad id for repo: {}, byte = {} {}" +-msgstr "repo: {} に正しくないid、byte = {} {}" ++msgstr "repo の id が不正: {}, byte = {} {}" + + #: dnf/conf/read.py:84 + msgid "Repository '{}' ({}): Error parsing config: {}" +@@ -3704,6 +3705,11 @@ msgstr "レポジトリ '{}' idを使用した設定内に見つかりません + msgid "Parsing file \"{}\" failed: {}" + msgstr "ファイル \"{}\" の解析に失敗しました: {}" + ++#: dnf/conf/substitutions.py:66 ++#, python-brace-format ++msgid "Error when parsing a variable from file '{0}': {1}" ++msgstr "ファイル '{0}' の変数解析エラー: {1}" ++ + #: dnf/crypto.py:108 + #, python-format + msgid "repo %s: 0x%s already imported" +@@ -3727,19 +3733,24 @@ msgstr "DNS レコードを使用して検証されませんでした。" + msgid "retrieving repo key for %s unencrypted from %s" + msgstr "%s から暗号化されていない %s の repo キーを取得しています" + +-#: dnf/db/group.py:301 ++#: dnf/db/group.py:308 + msgid "" + "No available modular metadata for modular package '{}', it cannot be " + "installed on the system" + msgstr "" +-"モジュラーパッケージ '{}' のモジュラーメタデータは利用不可です、システムにイ" +-"ンストールはできません" ++"モジュールのパッケージ '{}' のモジュールメタデータが利用不可です、システムに" ++"インストールできません" ++ ++#: dnf/db/group.py:359 ++#, python-format ++msgid "An rpm exception occurred: %s" ++msgstr "rpm 例外が発生しました: %s" + +-#: dnf/db/group.py:351 ++#: dnf/db/group.py:361 + msgid "No available modular metadata for modular package" +-msgstr "モジュラーパッケージ のモジュラーメタデータは利用不可です" ++msgstr "モジュールのパッケージのモジュールメタデータが利用不可です" + +-#: dnf/db/group.py:385 ++#: dnf/db/group.py:395 + #, python-format + msgid "Will not install a source rpm package (%s)." + msgstr "ソース rpm パッケージ (%s) をインストールしません。" +@@ -3810,12 +3821,12 @@ msgstr "破損したグループまたはモジュール: " + #: dnf/exceptions.py:126 + msgid "Modular dependency problem with Defaults:" + msgid_plural "Modular dependency problems with Defaults:" +-msgstr[0] "デフォルトのモジュラー依存問題:" ++msgstr[0] "モジュールのデフォルトの依存関係問題:" + + #: dnf/exceptions.py:131 dnf/module/module_base.py:854 + msgid "Modular dependency problem:" + msgid_plural "Modular dependency problems:" +-msgstr[0] "モジュラーの依存に関する問題:" ++msgstr[0] "モジュールの依存関係問題:" + + #: dnf/lock.py:100 + #, python-format +@@ -3937,7 +3948,7 @@ msgstr "" + + #: dnf/module/module_base.py:108 dnf/module/module_base.py:218 + msgid "Unable to match profile for argument {}" +-msgstr "引数 {} でプロファイルが見つかりません" ++msgstr "引数 {} に一致するプロファイルが見つかりません" + + #: dnf/module/module_base.py:120 + msgid "No default profiles for module {}:{}. Available profiles: {}" +@@ -4045,21 +4056,21 @@ msgstr "最後の makecache 時間の決定に失敗しました。" + msgid "Parsing file failed: %s" + msgstr "ファイルの解析に失敗しました: %s" + +-#: dnf/plugin.py:141 ++#: dnf/plugin.py:144 + #, python-format + msgid "Loaded plugins: %s" + msgstr "ロードされたプラグイン: %s" + +-#: dnf/plugin.py:211 ++#: dnf/plugin.py:216 + #, python-format + msgid "Failed loading plugin \"%s\": %s" + msgstr "plugin \"%s\" のロードに失敗しました: %s" + +-#: dnf/plugin.py:243 ++#: dnf/plugin.py:248 + msgid "No matches found for the following enable plugin patterns: {}" + msgstr "以下有効プラグインパターンが見つかりません: {}" + +-#: dnf/plugin.py:247 ++#: dnf/plugin.py:252 + msgid "No matches found for the following disable plugin patterns: {}" + msgstr "以下無効プラグインパターンが見つかりません: {}" + +@@ -4068,10 +4079,6 @@ msgstr "以下無効プラグインパターンが見つかりません: {}" + msgid "no matching payload factory for %s" + msgstr "%s と一致するペイロードファクトリーはありません" + +-#: dnf/repo.py:111 +-msgid "Already downloaded" +-msgstr "ダウンロード済み" +- + #. pinging mirrors, this might take a while + #: dnf/repo.py:346 + #, python-format +@@ -4264,16 +4271,17 @@ msgid "Missing object key \"{key}\" in groups.packages." + msgstr "オブジェクトキー \"{key}\" が groups.packages に含まれません。" + + #: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421 ++#: dnf/transaction_sr.py:431 + #, python-format + msgid "Group id '%s' is not installed." + msgstr "グループ id '%s' がインストールされていません。" + +-#: dnf/transaction_sr.py:432 ++#: dnf/transaction_sr.py:442 + #, python-format + msgid "Environment id '%s' is not available." + msgstr "環境 id '%s' は利用できません。" + +-#: dnf/transaction_sr.py:456 ++#: dnf/transaction_sr.py:466 + #, python-brace-format + msgid "" + "Invalid value \"{group_type}\" of environments.groups.group_type, only " +@@ -4282,35 +4290,35 @@ msgstr "" + "environments.groups.group_type の無効な値 \"{group_type}\"。\"mandatory\" ま" + "たは \"optional\" のみに対応しています。" + +-#: dnf/transaction_sr.py:464 ++#: dnf/transaction_sr.py:474 + #, python-brace-format + msgid "Missing object key \"{key}\" in environments.groups." + msgstr "オブジェクトキー \"{key}\" が environments.groups に含まれません。" + +-#: dnf/transaction_sr.py:542 ++#: dnf/transaction_sr.py:566 + #, python-brace-format + msgid "Unexpected value of group action \"{action}\" for group \"{group}\"." + msgstr "" + "グループ \"{group}\" の グループアクション \"{action}\" の予期しない値。" + +-#: dnf/transaction_sr.py:547 ++#: dnf/transaction_sr.py:571 + #, python-brace-format + msgid "Missing object key \"{key}\" in a group." + msgstr "オブジェクトキー \"{key}\" がグループ内にありません。" + +-#: dnf/transaction_sr.py:571 ++#: dnf/transaction_sr.py:599 + #, python-brace-format + msgid "" + "Unexpected value of environment action \"{action}\" for environment " + "\"{env}\"." + msgstr "環境 \"{env}\" の環境アクション \"{action}\" の予期しない値。" + +-#: dnf/transaction_sr.py:576 ++#: dnf/transaction_sr.py:604 + #, python-brace-format + msgid "Missing object key \"{key}\" in an environment." + msgstr "オブジェクトキー \"{key}\" が環境にありません。" + +-#: dnf/transaction_sr.py:615 ++#: dnf/transaction_sr.py:643 + #, python-brace-format + msgid "" + "Package nevra \"{nevra}\", which is not present in the transaction file, was " +@@ -4355,6 +4363,9 @@ msgstr "削除しました" + msgid "Failed" + msgstr "失敗しました" + ++#~ msgid "Already downloaded" ++#~ msgstr "ダウンロード済み" ++ + #~ msgid "skipping." + #~ msgstr "スキップします。" + +diff --git a/po/ko.po b/po/ko.po +index cf15d9cf..bdfdb08c 100644 +--- a/po/ko.po ++++ b/po/ko.po +@@ -3,13 +3,14 @@ + # Ludek Janda , 2018. #zanata, 2020. + # simmon , 2021. + # Kim InSoo , 2022. ++# 김인수 , 2022, 2023. + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \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" ++"POT-Creation-Date: 2023-02-28 10:03+0100\n" ++"PO-Revision-Date: 2023-03-03 22:20+0000\n" ++"Last-Translator: 김인수 \n" + "Language-Team: Korean \n" + "Language: ko\n" +@@ -17,7 +18,7 @@ msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=1; plural=0;\n" +-"X-Generator: Weblate 4.11\n" ++"X-Generator: Weblate 4.15.2\n" + + #: dnf/automatic/emitter.py:32 + #, python-format +@@ -101,171 +102,171 @@ msgstr "네트웍 끊김." + msgid "Error: %s" + msgstr "오류: %s" + +-#: dnf/base.py:148 dnf/base.py:477 dnf/base.py:479 ++#: dnf/base.py:149 dnf/base.py:483 dnf/base.py:485 + msgid "loading repo '{}' failure: {}" + msgstr "repo '{}'의 적재에 실패했습니다 : {}" + +-#: dnf/base.py:150 ++#: dnf/base.py:151 + msgid "Loading repository '{}' has failed" + msgstr "저장소 '{}'의 적재하기가 실패했습니다" + +-#: dnf/base.py:327 ++#: dnf/base.py:333 + msgid "Metadata timer caching disabled when running on metered connection." + msgstr "" + "데이터 통신 연결을 사용 할 때에 메타 자료 타이머 캐싱을 비활성화합니다." + +-#: dnf/base.py:332 ++#: dnf/base.py:338 + msgid "Metadata timer caching disabled when running on a battery." + msgstr "배터리에서 동작 할 때에 메타자료 타이머 캐싱을 비활성화합니다." + +-#: dnf/base.py:337 ++#: dnf/base.py:343 + msgid "Metadata timer caching disabled." + msgstr "메타자료 타이머 캐싱이 비활성화되었습니다." + +-#: dnf/base.py:342 ++#: dnf/base.py:348 + msgid "Metadata cache refreshed recently." + msgstr "최근에 메타 자료 캐쉬가 새로 고쳐졌습니다." + +-#: dnf/base.py:348 dnf/cli/commands/__init__.py:91 ++#: dnf/base.py:354 dnf/cli/commands/__init__.py:91 + msgid "There are no enabled repositories in \"{}\"." + msgstr "\"{}\"에 사용 가능한 저장소가 없습니다." + +-#: dnf/base.py:355 ++#: dnf/base.py:361 + #, python-format + msgid "%s: will never be expired and will not be refreshed." + msgstr "%s: 만료되지 않고 새로 고침되지 않습니다." + +-#: dnf/base.py:357 ++#: dnf/base.py:363 + #, python-format + msgid "%s: has expired and will be refreshed." + msgstr "%s: 만료되어 새로 고침됩니다." + + #. expires within the checking period: +-#: dnf/base.py:361 ++#: dnf/base.py:367 + #, python-format + msgid "%s: metadata will expire after %d seconds and will be refreshed now" + msgstr "%s: 메타 데이터는 %d 초 이후에 만료되며 이제 새로 고침됩니다" + +-#: dnf/base.py:365 ++#: dnf/base.py:371 + #, python-format + msgid "%s: will expire after %d seconds." + msgstr "%s: %d 초 후에 만료됩니다." + + #. performs the md sync +-#: dnf/base.py:371 ++#: dnf/base.py:377 + msgid "Metadata cache created." + msgstr "메타 자료 캐쉬가 생성되었습니다." + +-#: dnf/base.py:404 dnf/base.py:471 ++#: dnf/base.py:410 dnf/base.py:477 + #, python-format + msgid "%s: using metadata from %s." + msgstr "%s: 메타 자료 사용 중 %s." + +-#: dnf/base.py:416 dnf/base.py:484 ++#: dnf/base.py:422 dnf/base.py:490 + #, python-format + msgid "Ignoring repositories: %s" + msgstr "저장소를 무시합니다: %s" + +-#: dnf/base.py:419 ++#: dnf/base.py:425 + #, python-format + msgid "Last metadata expiration check: %s ago on %s." +-msgstr "마지막 메타자료 만료확인 %s 이전인: %s." ++msgstr "마지막 메타자료 만료확인(%s 이전): %s." + +-#: dnf/base.py:512 ++#: dnf/base.py:518 + msgid "" + "The downloaded packages were saved in cache until the next successful " + "transaction." + msgstr "내려받기된 꾸러미는 다음 번 성공적인 연결까지 캐쉬에 저장됩니다." + +-#: dnf/base.py:514 ++#: dnf/base.py:520 + #, python-format + msgid "You can remove cached packages by executing '%s'." + msgstr "'%s' 를 실행하여 캐쉬 꾸러미를 삭제 할 수 있습니다." + +-#: dnf/base.py:606 ++#: dnf/base.py:652 + #, python-format + msgid "Invalid tsflag in config file: %s" + msgstr "설정 파일에서 tsflag 사용이 잘못되었습니다: %s" + +-#: dnf/base.py:662 ++#: dnf/base.py:708 + #, python-format + msgid "Failed to add groups file for repository: %s - %s" + msgstr "리포지토리의 그룹 파일을 추가하지 못했습니다. %s - %s" + +-#: dnf/base.py:904 ++#: dnf/base.py:950 + msgid "Running transaction check" + msgstr "연결 확인 실행 중" + +-#: dnf/base.py:912 ++#: dnf/base.py:958 + msgid "Error: transaction check vs depsolve:" + msgstr "오류: 연결 확인 및 종속성 해결 오류:" + +-#: dnf/base.py:918 ++#: dnf/base.py:964 + msgid "Transaction check succeeded." + msgstr "연결 확인에 성공했습니다." + +-#: dnf/base.py:921 ++#: dnf/base.py:967 + msgid "Running transaction test" + msgstr "연결 시험 실행 중" + +-#: dnf/base.py:931 dnf/base.py:1082 ++#: dnf/base.py:977 dnf/base.py:1128 + msgid "RPM: {}" + msgstr "RPM: {}" + +-#: dnf/base.py:932 ++#: dnf/base.py:978 + msgid "Transaction test error:" + msgstr "연결 시험 오류:" + +-#: dnf/base.py:943 ++#: dnf/base.py:989 + msgid "Transaction test succeeded." + msgstr "연결 시험에 성공했습니다." + +-#: dnf/base.py:964 ++#: dnf/base.py:1010 + msgid "Running transaction" + msgstr "연결 실행 중" + +-#: dnf/base.py:1001 ++#: dnf/base.py:1047 + msgid "Disk Requirements:" + msgstr "디스크 요구 사항 :" + +-#: dnf/base.py:1004 ++#: dnf/base.py:1050 + #, 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:1011 ++#: dnf/base.py:1057 + msgid "Error Summary" + msgstr "오류 요약" + +-#: dnf/base.py:1037 ++#: dnf/base.py:1083 + #, python-brace-format + msgid "RPMDB altered outside of {prog}." + msgstr "RPMDB는 {prog} 외부에서 변경되었습니다." + +-#: dnf/base.py:1083 dnf/base.py:1091 ++#: dnf/base.py:1129 dnf/base.py:1137 + msgid "Could not run transaction." + msgstr "연결를 실행 할 수 없습니다." + +-#: dnf/base.py:1086 ++#: dnf/base.py:1132 + msgid "Transaction couldn't start:" + msgstr "연결을 시작 할 수 없습니다 :" + +-#: dnf/base.py:1100 ++#: dnf/base.py:1146 + #, python-format + msgid "Failed to remove transaction file %s" + msgstr "%s 연결 파일을 삭제하지 못했습니다" + +-#: dnf/base.py:1182 ++#: dnf/base.py:1228 + msgid "Some packages were not downloaded. Retrying." + msgstr "일부 꾸러미를 내려받지 못했습니다. 다시 시도합니다." + +-#: dnf/base.py:1212 ++#: dnf/base.py:1258 + #, 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:1215 ++#: dnf/base.py:1261 + #, python-format + msgid "" + "Failed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)" +@@ -273,75 +274,75 @@ msgstr "" + "Delta RPM은 %.1f MB의 최신화를 %.1f MB로 줄이는데 실패했습니다. (%d.1 %% 손실" + "됨)" + +-#: dnf/base.py:1257 ++#: dnf/base.py:1303 + msgid "Cannot add local packages, because transaction job already exists" + msgstr "연결 작업이 이미 존재하므로 로컬 꾸러미를 추가할 수 없습니다" + +-#: dnf/base.py:1271 ++#: dnf/base.py:1317 + msgid "Could not open: {}" + msgstr "열 수 없음 : {}" + +-#: dnf/base.py:1309 ++#: dnf/base.py:1355 + #, python-format + msgid "Public key for %s is not installed" + msgstr "%s의 공개 키는 설치되어 있지 않습니다" + +-#: dnf/base.py:1313 ++#: dnf/base.py:1359 + #, python-format + msgid "Problem opening package %s" + msgstr "%s 꾸러미를 여는 중에 문제가 발생했습니다" + +-#: dnf/base.py:1321 ++#: dnf/base.py:1367 + #, python-format + msgid "Public key for %s is not trusted" + msgstr "%s의 공개 키는 신뢰 할 수 없습니다" + +-#: dnf/base.py:1325 ++#: dnf/base.py:1371 + #, python-format + msgid "Package %s is not signed" + msgstr "%s 꾸러미가 서명되지 않았습니다" + +-#: dnf/base.py:1355 ++#: dnf/base.py:1401 + #, python-format + msgid "Cannot remove %s" + msgstr "%s를 삭제 할 수 없습니다" + +-#: dnf/base.py:1359 ++#: dnf/base.py:1405 + #, python-format + msgid "%s removed" + msgstr "%s가 삭제되었습니다" + +-#: dnf/base.py:1639 ++#: dnf/base.py:1685 + msgid "No match for group package \"{}\"" + msgstr "그룹 꾸러미 \"{}\"에 일치하는 항목이 없습니다" + +-#: dnf/base.py:1721 ++#: dnf/base.py:1767 + #, python-format + msgid "Adding packages from group '%s': %s" + msgstr "'%s' 그룹에서 꾸러미 추가: %s" + +-#: dnf/base.py:1744 dnf/cli/cli.py:221 dnf/cli/commands/__init__.py:437 ++#: dnf/base.py:1790 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:1762 ++#: dnf/base.py:1808 + msgid "No groups marked for removal." + msgstr "제거할 꾸러미 그룹이 없습니다." + +-#: dnf/base.py:1796 ++#: dnf/base.py:1842 + msgid "No group marked for upgrade." + msgstr "향상을 위해 표시된 그룹이 없습니다." + +-#: dnf/base.py:2010 ++#: dnf/base.py:2056 + #, python-format + msgid "Package %s not installed, cannot downgrade it." + msgstr "%s 꾸러미가 설치되어 있지 않기 때문에 하향설치 할 수 없습니다." + +-#: 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/base.py:2058 dnf/base.py:2077 dnf/base.py:2090 dnf/base.py:2121 ++#: dnf/base.py:2191 dnf/base.py:2199 dnf/base.py:2333 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 +@@ -351,129 +352,128 @@ msgstr "%s 꾸러미가 설치되어 있지 않기 때문에 하향설치 할 + msgid "No match for argument: %s" + msgstr "인수가 일치하지 않습니다: %s" + +-#: dnf/base.py:2019 ++#: dnf/base.py:2065 + #, python-format + msgid "Package %s of lower version already installed, cannot downgrade it." +-msgstr "" +-"%s 꾸러미의 하위 버전이 이미 설치되어 있으므로 다운그레이드 할 수 없습니다." ++msgstr "하위 버전의 꾸러미 %s가 이미 설치되어 있어서, 버전을 내릴 수 없습니다." + +-#: dnf/base.py:2042 ++#: dnf/base.py:2088 + #, python-format + msgid "Package %s not installed, cannot reinstall it." + msgstr "꾸러미 %s가 설치되지 않아서, 다시 설치 할 수 없습니다." + +-#: dnf/base.py:2057 ++#: dnf/base.py:2103 + #, python-format + msgid "File %s is a source package and cannot be updated, ignoring." +-msgstr "%s 파일은 소스 꾸러미이며 최신화 할 수 없습니다. 무시합니다." ++msgstr "파일 %s는 원천 꾸러미이며 최신화 할 수 없고, 무시합니다." + +-#: dnf/base.py:2068 ++#: dnf/base.py:2118 + #, python-format + msgid "Package %s not installed, cannot update it." + msgstr "%s 꾸러미가 설치되어 있지 않기 때문에 최신화 할 수 없습니다." + +-#: dnf/base.py:2078 ++#: dnf/base.py:2128 + #, python-format + msgid "" + "The same or higher version of %s is already installed, cannot update it." + msgstr "%s 이상의 버전이 이미 설치되어 있으므로 최신화 할 수 없습니다." + +-#: dnf/base.py:2121 dnf/cli/commands/reinstall.py:81 ++#: dnf/base.py:2188 dnf/cli/commands/reinstall.py:81 + #, python-format + msgid "Package %s available, but not installed." + msgstr "%s 꾸러미는 사용할 수는 있지만 설치되어 있지 않습니다." + +-#: dnf/base.py:2127 ++#: dnf/base.py:2194 + #, python-format + msgid "Package %s available, but installed for different architecture." + msgstr "%s 꾸러미는 사용 가능하지만 다른 구조용으로 설치되어 있습니다." + +-#: dnf/base.py:2152 ++#: dnf/base.py:2219 + #, python-format + msgid "No package %s installed." + msgstr "%s 꾸러미는 설치되어 있지 않습니다." + +-#: dnf/base.py:2170 dnf/cli/commands/install.py:136 ++#: dnf/base.py:2237 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:2185 dnf/cli/commands/__init__.py:676 ++#: dnf/base.py:2252 dnf/cli/commands/__init__.py:676 + #: dnf/cli/commands/remove.py:162 + msgid "No packages marked for removal." + msgstr "제거 대상 꾸러미가 없습니다." + +-#: dnf/base.py:2273 dnf/cli/cli.py:428 ++#: dnf/base.py:2340 dnf/cli/cli.py:428 + #, python-format + msgid "Packages for argument %s available, but not installed." + msgstr "%s 인수에 대한 꾸러미를 사용할 수 있지만 설치되어 있지 않습니다." + +-#: dnf/base.py:2278 ++#: dnf/base.py:2345 + #, python-format + msgid "Package %s of lowest version already installed, cannot downgrade it." + msgstr "" +-"%s 꾸러미의 최하위 버전이 이미 설치되어 있으므로 다운그레이드 할 수 없습니다." ++"%s 꾸러미의 최하위 버전이 이미 설치되어 있으므로, 버전을 내릴 수 없습니다." + +-#: dnf/base.py:2378 ++#: dnf/base.py:2445 + msgid "No security updates needed, but {} update available" + msgstr "보안 최신화가 필요하지 않지만, {} 최신화가 가능합니다" + +-#: dnf/base.py:2380 ++#: dnf/base.py:2447 + msgid "No security updates needed, but {} updates available" + msgstr "보안 최신화는 필요하지 않지만 {} 최신화는 가능합니다" + +-#: dnf/base.py:2384 ++#: dnf/base.py:2451 + msgid "No security updates needed for \"{}\", but {} update available" + msgstr "\"{}\"에는 보안 최신화가 필요하지 않지만 {} 최신화가 가능합니다" + +-#: dnf/base.py:2386 ++#: dnf/base.py:2453 + msgid "No security updates needed for \"{}\", but {} updates available" + msgstr "\"{}\"에는 보안 최신화가 필요하지 않지만 {} 최신화가 가능합니다" + + #. raise an exception, because po.repoid is not in self.repos +-#: dnf/base.py:2407 ++#: dnf/base.py:2474 + #, python-format + msgid "Unable to retrieve a key for a commandline package: %s" + msgstr "명령줄 꾸러미: %s 대한 키를 검색 할 수 없습니다" + +-#: dnf/base.py:2415 ++#: dnf/base.py:2482 + #, python-format + msgid ". Failing package is: %s" + msgstr "실패한 꾸러미는 다음과 같습니다. %s" + +-#: dnf/base.py:2416 ++#: dnf/base.py:2483 + #, python-format + msgid "GPG Keys are configured as: %s" + msgstr "GPG 키는 다음과 같이 설정되어 있습니다. %s" + +-#: dnf/base.py:2428 ++#: dnf/base.py:2495 + #, python-format + msgid "GPG key at %s (0x%s) is already installed" + msgstr "%s (0x%s)의 GPG 키가 이미 설치되어 있습니다" + +-#: dnf/base.py:2464 ++#: dnf/base.py:2531 + msgid "The key has been approved." + msgstr "키가 승인되었습니다." + +-#: dnf/base.py:2467 ++#: dnf/base.py:2534 + msgid "The key has been rejected." + msgstr "키가 거부되었습니다." + +-#: dnf/base.py:2500 ++#: dnf/base.py:2567 + #, python-format + msgid "Key import failed (code %d)" + msgstr "키 가져 오기에 실패했습니다 (코드 %d)" + +-#: dnf/base.py:2502 ++#: dnf/base.py:2569 + msgid "Key imported successfully" + msgstr "키 가져오기에 성공했습니다" + +-#: dnf/base.py:2506 ++#: dnf/base.py:2573 + msgid "Didn't install any keys" +-msgstr "키를 하나도 설치하지 못했습니다" ++msgstr "키를 설치하지 않았습니다" + +-#: dnf/base.py:2509 ++#: dnf/base.py:2576 + #, python-format + msgid "" + "The GPG keys listed for the \"%s\" repository are already installed but they " +@@ -483,27 +483,27 @@ msgstr "" + "해당 GPG 키는 \"%s\"저장소가 이미 설치되어 있지만이 꾸러미에 맞지 않습니다.\n" + "이 저장소에 대해 올바른 키 URL이 구성되었는지 확인하십시오." + +-#: dnf/base.py:2520 ++#: dnf/base.py:2587 + msgid "Import of key(s) didn't help, wrong key(s)?" + msgstr "가져온 키에 문제가 있습니다. 잘못된 키입니까?" + +-#: dnf/base.py:2573 ++#: dnf/base.py:2640 + msgid " * Maybe you meant: {}" + msgstr " * 다음을 의미 할 수도 있습니다: {}" + +-#: dnf/base.py:2605 ++#: dnf/base.py:2672 + msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum" + msgstr "로컬 저장소 \"{}\"의 \"{}\"꾸러미에 잘못된 체크섬이 있습니다" + +-#: dnf/base.py:2608 ++#: dnf/base.py:2675 + msgid "Some packages from local repository have incorrect checksum" + msgstr "로컬 저장소의 일부 꾸러미에 잘못된 체크섬이 있습니다" + +-#: dnf/base.py:2611 ++#: dnf/base.py:2678 + msgid "Package \"{}\" from repository \"{}\" has incorrect checksum" + msgstr "저장소 \"{}\"의 꾸러미 \"{}\"에 잘못된 체크섬이 있습니다" + +-#: dnf/base.py:2614 ++#: dnf/base.py:2681 + msgid "" + "Some packages have invalid cache, but cannot be downloaded due to \"--" + "cacheonly\" option" +@@ -511,23 +511,23 @@ msgstr "" + "일부 꾸러미에는 유효하지 않은 캐쉬가 있지만 \"--cacheonly\"옵션으로 인해 내려" + "받기 할 수 없습니다" + +-#: dnf/base.py:2632 dnf/base.py:2652 ++#: dnf/base.py:2699 dnf/base.py:2719 + msgid "No match for argument" + msgstr "일치하는 인수가 없습니다" + +-#: dnf/base.py:2640 dnf/base.py:2660 ++#: dnf/base.py:2707 dnf/base.py:2727 + msgid "All matches were filtered out by exclude filtering for argument" + msgstr "모든 일치 항목이 인수의 제외 필터로 필터링되었습니다" + +-#: dnf/base.py:2642 ++#: dnf/base.py:2709 + msgid "All matches were filtered out by modular filtering for argument" + msgstr "모든 일치 항목이 인수의 모듈식 필터로 필터링되었습니다" + +-#: dnf/base.py:2658 ++#: dnf/base.py:2725 + msgid "All matches were installed from a different repository for argument" + msgstr "모든 일치 항목이 인수의 다른 리포지토리에서 설치되었습니다" + +-#: dnf/base.py:2705 ++#: dnf/base.py:2772 + #, python-format + msgid "Package %s is already installed." + msgstr "꾸러미 %s가 이미 설치되어 있습니다." +@@ -597,14 +597,14 @@ msgstr "" + #: 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: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:219 + msgid "Operation aborted." +@@ -642,10 +642,10 @@ msgstr "더 이상 사용되지 않는 꾸러미" + msgid "No packages marked for distribution synchronization." + msgstr "배포 동기화가 필요한 꾸러미가 없습니다." + +-#: dnf/cli/cli.py:425 dnf/cli/commands/group.py:395 ++#: dnf/cli/cli.py:425 dnf/cli/commands/group.py:396 + #, python-format + msgid "No package %s available." +-msgstr "가용한 꾸러미(package) %s가 없습니다." ++msgstr "가용한 꾸러미 %s가 없습니다." + + #: dnf/cli/cli.py:434 + msgid "No packages marked for downgrade." +@@ -661,7 +661,7 @@ msgstr "사용 가능한 꾸러미" + + #: dnf/cli/cli.py:497 + msgid "Autoremove Packages" +-msgstr "꾸러미 자동 삭제" ++msgstr "꾸러미 자동제거" + + # ctx::sourcefile::Systems Navigation Menu + #: dnf/cli/cli.py:499 +@@ -720,7 +720,8 @@ msgid "" + "It could be a {prog} plugin command, but loading of plugins is currently " + "disabled." + msgstr "" +-"{prog} 플러그인 명령일 수 있지만 플러그인 로딩은 현재 비활성화되어 있습니다." ++"{prog} 플러그인 명령일 수 있지만, 플러그인의 적재는 현재 비활성화되어 있습니" ++"다." + + #: dnf/cli/cli.py:814 + msgid "" +@@ -760,12 +761,12 @@ msgstr "" + + #: dnf/cli/cli.py:1016 dnf/cli/commands/repoquery.py:471 + msgid "argument {}: not allowed with argument {}" +-msgstr "인수 {}: 인수 {}과 함께 사용할 수 없습니다" ++msgstr "인수 {}: 인수 {}를 허용하지 않음" + + #: dnf/cli/cli.py:1023 + #, python-format + msgid "Command \"%s\" already defined" +-msgstr "\"%s\" 명령이 이미 정의되어 있습니다" ++msgstr "명령 \"%s\"가 이미 정의되었습니다" + + #: dnf/cli/cli.py:1043 + msgid "Excludes in dnf.conf: " +@@ -848,7 +849,7 @@ msgstr "설치된 꾸러미만 보여주기" + + #: 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:747 dnf/cli/commands/__init__.py:750 +@@ -857,7 +858,7 @@ msgstr "향상 꾸러미만 표시" + + #: 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:756 + msgid "show only recently changed packages" +@@ -868,7 +869,7 @@ msgstr "최근에 변경된 꾸러미만 표시" + #: 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 "꾸러미(package)" ++msgstr "꾸러미" + + #: dnf/cli/commands/__init__.py:193 + msgid "Package name specification" +@@ -888,7 +889,7 @@ msgstr "PROVIDE" + + #: dnf/cli/commands/__init__.py:240 + msgid "Provide specification to search for" +-msgstr "검색할 사양 제공" ++msgstr "검색 할 사양 제공" + + #: dnf/cli/commands/__init__.py:249 dnf/cli/commands/search.py:159 + msgid "Searching Packages: " +@@ -905,11 +906,11 @@ msgstr "최신화 전에 변경기록 표시" + #: 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:371 + msgid "No packages marked for install." +-msgstr "설치용으로 표시된 꾸러미 없습니다." ++msgstr "설치를 위해 표시된 꾸러미가 없습니다." + + #: dnf/cli/commands/__init__.py:407 + msgid "No package installed." +@@ -1061,7 +1062,7 @@ 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" +@@ -1114,11 +1115,11 @@ msgstr "캐쉬된 자료 제거" + + #: dnf/cli/commands/clean.py:93 + msgid "Metadata type to clean" +-msgstr "메타 데이터 지우기" ++msgstr "정리하려는 메타자료 유형" + + #: dnf/cli/commands/clean.py:105 + msgid "Cleaning data: " +-msgstr "데이터 정리 중: " ++msgstr "자료 정리 중: " + + #: dnf/cli/commands/clean.py:111 + msgid "Cache was expired" +@@ -1149,11 +1150,11 @@ 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" +@@ -1165,7 +1166,7 @@ msgstr "그룹 정보를 표시하거나 사용합니다" + + #: dnf/cli/commands/group.py:72 + msgid "No group data available for configured repositories." +-msgstr "설정된 리포지토리에 사용할 수있는 그룹 데이터가 없습니다." ++msgstr "구성된 저정소에 사용 할 수있는 그룹 자료가 없습니다." + + #: dnf/cli/commands/group.py:126 + #, python-format +@@ -1238,7 +1239,7 @@ msgstr "그룹 하위 명령의 인수" + msgid "Invalid groups sub-command, use: %s." + msgstr "그룹 하위 명령이 잘못되었습니다. %s를 사용합니다." + +-#: dnf/cli/commands/group.py:398 ++#: dnf/cli/commands/group.py:399 + msgid "Unable to find a mandatory group package." + msgstr "필수 그룹 꾸러미를 찾을 수 없습니다." + +@@ -1268,8 +1269,8 @@ msgid "" + "For the replay command, skip packages that are not available or have missing " + "dependencies" + msgstr "" +-"지연 명령을 위하여, 사용 할 수 없는 또는 찾을 수 없는 의존성을 갖는 목록 건너" +-"띄기" ++"지연 명령을 위하여, 사용 할 수 없는 또는 찾을 수 없는 의존성을 갖는 목록 건" ++"너 뛰기" + + #: dnf/cli/commands/history.py:94 + msgid "" +@@ -1281,7 +1282,7 @@ msgstr "" + + #: dnf/cli/commands/history.py:101 + msgid "No transaction file name given." +-msgstr "제공된 트랜젝션 파일 이름이 없습니다." ++msgstr "제공된 연결 파일 이름이 없습니다." + + #: dnf/cli/commands/history.py:103 + msgid "More than one argument given as transaction file name." +@@ -1294,7 +1295,7 @@ msgstr "연결 ID 또는 꾸러미 이름이 없습니다." + #: dnf/cli/commands/history.py:142 + #, python-format + msgid "You don't have access to the history DB: %s" +-msgstr "기록 DB에 액세스할 수 없습니다: %s" ++msgstr "기록 DB에 접근 할 수 없습니다: %s" + + #: dnf/cli/commands/history.py:151 + #, python-format +@@ -1321,7 +1322,7 @@ msgstr "지정된 연결 ID가 없습니다" + #: dnf/cli/commands/history.py:179 + #, python-brace-format + msgid "Transaction ID \"{0}\" not found." +-msgstr "Transaction ID \"{0}\" 를 찾을 수 없음." ++msgstr "연결 ID \"{0}\" 를 찾을 수 없음." + + #: dnf/cli/commands/history.py:185 + msgid "Found more than one transaction ID!" +@@ -1337,11 +1338,11 @@ msgstr "%u이전 연결 내역이 불완전합니다." + msgid "Transaction history is incomplete, after %u." + msgstr "%u 이후 연결 내역이 불완전합니다." + +-#: dnf/cli/commands/history.py:256 ++#: dnf/cli/commands/history.py:267 + msgid "No packages to list" + msgstr "목록에 꾸러미가 없습니다" + +-#: dnf/cli/commands/history.py:279 ++#: dnf/cli/commands/history.py:290 + msgid "" + "Invalid transaction ID range definition '{}'.\n" + "Use '..'." +@@ -1349,35 +1350,35 @@ msgstr "" + "잘못된 연결 ID 범위 정의 '{}'.\n" + "'..' 사용." + +-#: dnf/cli/commands/history.py:283 ++#: dnf/cli/commands/history.py:294 + msgid "" + "Can't convert '{}' to transaction ID.\n" + "Use '', 'last', 'last-'." + msgstr "" +-"'{}'을 (를) 연결 ID로 변환 할 수 없습니다.\n" ++"'{}'를 연결 ID로 변환 할 수 없습니다.\n" + "'', 'last', 'last-' 사용." + +-#: dnf/cli/commands/history.py:312 ++#: dnf/cli/commands/history.py:323 + msgid "No transaction which manipulates package '{}' was found." + msgstr "꾸러미 '{}'를 사용하는 연결이 없습니다." + +-#: dnf/cli/commands/history.py:357 ++#: dnf/cli/commands/history.py:368 + msgid "{} exists, overwrite?" + msgstr "{} 존재합니다, 덮어 쓸까요?" + +-#: dnf/cli/commands/history.py:360 ++#: dnf/cli/commands/history.py:371 + msgid "Not overwriting {}, exiting." + msgstr "존재하기 때문에, {} 덮어 쓸 수 없습니다." + +-#: dnf/cli/commands/history.py:367 ++#: dnf/cli/commands/history.py:378 + msgid "Transaction saved to {}." +-msgstr "연결이 {}에 저장되었습니다." ++msgstr "연결이 {}로 저장되었습니다." + +-#: dnf/cli/commands/history.py:370 ++#: dnf/cli/commands/history.py:381 + msgid "Error storing transaction: {}" + msgstr "저장 중 연결 오류: {}" + +-#: dnf/cli/commands/history.py:386 ++#: dnf/cli/commands/history.py:397 + msgid "Warning, the following problems occurred while running a transaction:" + msgstr "경고, 연결 동작 중에 다음 문제가 발생하였습니다:" + +@@ -1387,7 +1388,7 @@ 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" +@@ -1428,12 +1429,12 @@ 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 + msgid "%s unmarked as user installed." +-msgstr "%s은/는 사용자가 설치한 것으로 표시되지 않았습니다." ++msgstr "%s는 사용자가 설치한 것으로 표시되지 않았습니다." + + #: dnf/cli/commands/mark.py:60 + #, python-format +@@ -1455,8 +1456,8 @@ msgid "" + "Only module name, stream, architecture or profile is used. Ignoring unneeded " + "information in argument: '{}'" + msgstr "" +-"모듈 이름, 스트림, 구조 또는 프로파일만 사용됩니다. '{}'인수에서 불필요한 정" +-"보는 무시하십시오" ++"모듈 이름, 스트림, 구조 또는 프로파일만 사용됩니다. 인수에서 불필요한 정보는 " ++"무시하세요: '{}'" + + #: dnf/cli/commands/module.py:80 + msgid "list all module streams, profiles and states" +@@ -1464,7 +1465,7 @@ msgstr "모든 모듈 스트림, 프로파일 및 상태 나열" + + #: dnf/cli/commands/module.py:108 dnf/cli/commands/module.py:131 + msgid "No matching Modules to list" +-msgstr "일치하는 모듈을 나열할 수 없습니다" ++msgstr "일치하는 모듈을 나열 할 수 없습니다" + + #: dnf/cli/commands/module.py:114 + msgid "print detailed information about a module" +@@ -1564,11 +1565,11 @@ 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 +@@ -1578,37 +1579,37 @@ msgstr "알 수 없음" + #: dnf/cli/commands/repolist.py:40 + #, python-format + msgid "Never (last: %s)" +-msgstr "없음 (가장 최근: %s )" ++msgstr "없음 (최근: %s )" + + #: dnf/cli/commands/repolist.py:42 + #, python-format + msgid "Instant (last: %s)" +-msgstr "인스턴트 (가장 최근: %s )" ++msgstr "즉시 (최근: %s )" + + #: dnf/cli/commands/repolist.py:45 + #, python-format + msgid "%s second(s) (last: %s)" +-msgstr "%s 초 (가장 최근: %s )" ++msgstr "%s 초 (최근: %s )" + + #: dnf/cli/commands/repolist.py:76 + msgid "display the configured software repositories" +-msgstr "구성된 소프트웨어 리포지토리를 표시" ++msgstr "구성된 소프트웨어 저장소를 표시" + + #: dnf/cli/commands/repolist.py:83 + msgid "show all repos" +-msgstr "모든 리포지토리를 표시" ++msgstr "모든 저장소를 표시" + + #: dnf/cli/commands/repolist.py:86 + msgid "show enabled repos (default)" +-msgstr "활성화된 리포지토리를 표시 (기본값)" ++msgstr "활성화된 저장소를 표시 (기본값)" + + #: dnf/cli/commands/repolist.py:89 + msgid "show disabled repos" +-msgstr "비활성화된 리포지토리를 표시" ++msgstr "비활성화된 저장소를 표시" + + #: dnf/cli/commands/repolist.py:93 + msgid "Repository specification" +-msgstr "리포지토리 사양" ++msgstr "저장소 사양" + + #: dnf/cli/commands/repolist.py:125 + msgid "No repositories available" +@@ -1620,91 +1621,91 @@ msgstr "사용" + + #: dnf/cli/commands/repolist.py:151 dnf/cli/commands/repolist.py:152 + msgid "disabled" +-msgstr "사용 안함" ++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 : " +-msgstr "Repo-revision : " ++msgstr "저장소-정정 : " + + #: dnf/cli/commands/repolist.py:173 + msgid "Repo-tags : " +-msgstr "Repo-tags : " ++msgstr "저장소-꼬리표 : " + + #: dnf/cli/commands/repolist.py:180 + msgid "Repo-distro-tags : " +-msgstr "Repo-distro-tags : " ++msgstr "저장소-배포-꼬리표 : " + + #: dnf/cli/commands/repolist.py:192 + msgid "Repo-updated : " +-msgstr "Repo-updated : " ++msgstr "저장소-최신화됨 : " + + #: dnf/cli/commands/repolist.py:194 + msgid "Repo-pkgs : " +-msgstr "Repo-pkgs : " ++msgstr "저장소-꾸러미 : " + + #: dnf/cli/commands/repolist.py:195 + msgid "Repo-available-pkgs: " +-msgstr "저장소-이용 할 수 있는-꾸러미: " ++msgstr "저장소-사용 가능한-꾸러미: " + + #: dnf/cli/commands/repolist.py:196 + msgid "Repo-size : " +-msgstr "Repo-size : " ++msgstr "저장소-크기 : " + + #: dnf/cli/commands/repolist.py:199 + msgid "Repo-metalink : " +-msgstr "Repo-metalink : " ++msgstr "저장소-메타링크 : " + + #: dnf/cli/commands/repolist.py:204 + msgid " Updated : " +-msgstr " Updated : " ++msgstr " 최신화됨 : " + + #: dnf/cli/commands/repolist.py:206 + msgid "Repo-mirrors : " +-msgstr "Repo-mirrors : " ++msgstr "저장소-연결목록 : " + + #: dnf/cli/commands/repolist.py:210 dnf/cli/commands/repolist.py:216 + msgid "Repo-baseurl : " +-msgstr "Repo-baseurl : " ++msgstr "저장소-baseurl : " + + #: dnf/cli/commands/repolist.py:219 + msgid "Repo-expire : " +-msgstr "Repo-expire : " ++msgstr "저장소-만료 : " + + #. TRANSLATORS: Packages that are excluded - their names like (dnf systemd) + #: dnf/cli/commands/repolist.py:223 + msgid "Repo-exclude : " +-msgstr "Repo-exclude : " ++msgstr "저장소-제외 : " + + #: dnf/cli/commands/repolist.py:227 + msgid "Repo-include : " +-msgstr "Repo-include : " ++msgstr "저장소-포함 : " + + #. 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)... + #: 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 +@@ -1713,7 +1714,7 @@ 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: {}" +@@ -1812,7 +1813,7 @@ msgstr "꾸러미의 재귀 트리를 표시합니다" + + #: dnf/cli/commands/repoquery.py:172 + msgid "operate on corresponding source RPM" +-msgstr "해당 소스 RPM에서 작동합니다" ++msgstr "해당 원천 RPM에서 작동합니다" + + #: dnf/cli/commands/repoquery.py:174 + msgid "" +@@ -1836,7 +1837,7 @@ 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" +@@ -1944,7 +1945,7 @@ 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." +@@ -1969,7 +1970,7 @@ msgstr "이미 설치된 일부 꾸러미에 대한 향상를 제공하는 꾸 + #, 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." +@@ -1981,7 +1982,7 @@ msgstr "최근에 수정한 꾸러미만 표시합니다" + + #: dnf/cli/commands/repoquery.py:273 + msgid "the key to search for" +-msgstr "검색에 사용되는 키워드" ++msgstr "검색 할 키" + + #: dnf/cli/commands/repoquery.py:295 + msgid "" +@@ -1990,8 +1991,8 @@ msgid "" + "requires-pre', '--suggests' or '--supplements' options" + msgstr "" + "옵션 '--resolve'는 '--conflicts', '--depends', '--enhances', '--provides', " +-"'--recommends', '--requires'중 하나와 함께 사용해야합니다. , '--requires-" +-"pre', '--suggests'또는 '--supplements'옵션들" ++"'--recommends', '--requires', '--requires-pre', '--suggests' 또는 '--" ++"supplements' 옵션 중의 하나를 함께 사용해야 합니다" + + #: dnf/cli/commands/repoquery.py:305 + msgid "" +@@ -2040,11 +2041,11 @@ msgstr "꾸러미 설명 및 URL 검색" + + #: dnf/cli/commands/search.py:52 + msgid "KEYWORD" +-msgstr "KEYWORD" ++msgstr "핵심어" + + #: dnf/cli/commands/search.py:55 + msgid "Keyword to search for" +-msgstr "검색 키워드" ++msgstr "검색 할 핵심어" + + #: dnf/cli/commands/search.py:61 dnf/cli/output.py:460 + msgctxt "long" +@@ -2100,7 +2101,7 @@ msgstr "스크립트" + #: dnf/cli/commands/shell.py:69 + #, python-brace-format + msgid "Script to run in {prog} shell" +-msgstr "{prog} 쉘에서 실행할 스크립트" ++msgstr "{prog} 쉘에서 실행 할 스크립트" + + #: dnf/cli/commands/shell.py:142 + msgid "Unsupported key value." +@@ -2140,10 +2141,10 @@ msgid "" + " enable: enable repositories. option = repository id\n" + " disable: disable repositories. option = repository id" + msgstr "" +-"{} arg [option]\n" +-" list: 리포지토리 및 상태를 나열합니다. option = [all | id | glob]\n" +-"enable : 리포지토리를 활성화합니다. option = repository id\n" +-" disable : 리포지토리를 비활성화합니다. option = repository id" ++"{} arg [option] \n" ++" list: 저장소 및 상태를 나열합니다. option = [all | id | glob] \n" ++" enable : 저장소를 활성화합니다. option = repository id \n" ++" disable : 저장소를 비활성화합니다. option = repository id" + + #: dnf/cli/commands/shell.py:191 + msgid "" +@@ -2151,7 +2152,7 @@ msgid "" + " resolve the transaction set" + msgstr "" + "{}\n" +-" 연결 집합을 분석합니다" ++" 연결 집합을 분석합니다" + + #: dnf/cli/commands/shell.py:195 + msgid "" +@@ -2223,15 +2224,15 @@ msgstr "대화 형 {prog} 모드를 실행하여 사양을 제거하거나 설 + + #: dnf/cli/commands/swap.py:40 + msgid "The specs that will be removed" +-msgstr "삭제할 사양" ++msgstr "제거 되어야 할 사양" + + #: dnf/cli/commands/swap.py:42 + msgid "The specs that will be installed" +-msgstr "설치할 사양" ++msgstr "설치 되어야 할 사양" + + #: dnf/cli/commands/updateinfo.py:44 + msgid "bugfix" +-msgstr "버그 수정" ++msgstr "결점수정" + + #: dnf/cli/commands/updateinfo.py:45 + msgid "enhancement" +@@ -2353,7 +2354,7 @@ msgstr "알 수 없는 수준의 보안 공지" + + #: dnf/cli/commands/updateinfo.py:293 + msgid "Bugfix notice(s)" +-msgstr "버그 수정 공지" ++msgstr "결점수정 공지" + + #: dnf/cli/commands/updateinfo.py:294 + msgid "Enhancement notice(s)" +@@ -2412,11 +2413,11 @@ msgstr "설치되었습니다" + + #: dnf/cli/commands/updateinfo.py:385 + msgid "false" +-msgstr "false" ++msgstr "거짓" + + #: dnf/cli/commands/updateinfo.py:385 + msgid "true" +-msgstr "true" ++msgstr "참" + + #: dnf/cli/commands/upgrade.py:40 + msgid "upgrade a package or packages on your system" +@@ -2532,15 +2533,15 @@ msgstr "지정된 이름으로 플러그인 비활성화" + + #: dnf/cli/option_parser.py:203 + msgid "override the value of $releasever in config and repo files" +-msgstr "설정 파일 및 리포지토리 파일에서 $releasever 값을 무시합니다" ++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" +@@ -2629,11 +2630,11 @@ msgstr "" + + #: dnf/cli/option_parser.py:275 + msgid "enable repos with config-manager command (automatically saves)" +-msgstr "config-manager 명령으로 repos를 활성화합니다 (자동 저장)" ++msgstr "config-manager 명령으로 저장소를 활성화합니다 (자동 저장)" + + #: dnf/cli/option_parser.py:279 + msgid "disable repos with config-manager command (automatically saves)" +-msgstr "config-manager 명령으로 repos를 비활성화합니다 (자동 저장)" ++msgstr "config-manager 명령으로 저장소를 비활성화합니다 (자동 저장)" + + #: dnf/cli/option_parser.py:283 + msgid "exclude packages by name or glob" +@@ -2648,8 +2649,8 @@ msgid "" + "label and path to an additional repository to use (same path as in a " + "baseurl), can be specified multiple times." + msgstr "" +-"사용 할 추가 레포지터리에 대한 이름표와 경로 (baseurl과 동일한 경로)를 여러 " +-"번 지정와 할 수 있습니다." ++"사용 할 추가 저장소에 대한 이름표와 경로(baseurl과 동일한 경로)를 여러 번 지" ++"정 할 수 있습니다." + + #: dnf/cli/option_parser.py:297 + msgid "disable removal of dependencies that are no longer used" +@@ -2669,11 +2670,11 @@ msgstr "명령을 실행하기 전에 메타 데이터를 만료된 것으로 + + #: dnf/cli/option_parser.py:308 + msgid "resolve to IPv4 addresses only" +-msgstr "IPv4 주소 만 확인" ++msgstr "IPv4 주소만 확인" + + #: dnf/cli/option_parser.py:311 + msgid "resolve to IPv6 addresses only" +-msgstr "IPv6 주소 만 확인" ++msgstr "IPv6 주소만 확인" + + #: dnf/cli/option_parser.py:314 + msgid "set directory to copy packages to" +@@ -2689,7 +2690,7 @@ msgstr "연결에 의견을 추가하십시오" + + #: dnf/cli/option_parser.py:322 + msgid "Include bugfix relevant packages, in updates" +-msgstr "결점(bug) 수정 관련 꾸러미 최신화에 포함" ++msgstr "결점 수정 관련 꾸러미 최신화에 포함" + + #: dnf/cli/option_parser.py:325 + msgid "Include enhancement relevant packages, in updates" +@@ -2767,7 +2768,7 @@ msgstr "버전" + #. Translators: This message should be no longer than 12 characters. + #: dnf/cli/output.py:470 + msgid "Release" +-msgstr "릴리즈" ++msgstr "출시" + + #. Translators: This is abbreviated 'Architecture', used when + #. we have not enough space to display the full word. +@@ -2801,26 +2802,26 @@ msgstr "크기" + #. Translators: This message should be no longer than 12 characters. + #: dnf/cli/output.py:478 + msgid "Source" +-msgstr "소스" ++msgstr "원천" + + #. Translators: This is abbreviated 'Repository', used when + #. we have not enough space to display the full word. + #: 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: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:487 + msgid "From repo" +-msgstr "레포지터리에서" ++msgstr "저장소에서" + + #. :hawkey does not support changelog information + #. print(_("Committer : %s") % ucd(pkg.committer)) +@@ -2833,7 +2834,7 @@ msgstr "꾸러미 생성자" + #. Translators: This message should be no longer than 12 characters. + #: dnf/cli/output.py:495 + msgid "Buildtime" +-msgstr "빌드 시간" ++msgstr "제작시간" + + #. Translators: This message should be no longer than 12 characters. + #: dnf/cli/output.py:499 +@@ -2884,11 +2885,11 @@ msgstr "아니" + + #: dnf/cli/output.py:655 + msgid "Is this ok [y/N]: " +-msgstr "진행 할 까요? [y/N]: " ++msgstr "진행할까요? [y/N]: " + + #: dnf/cli/output.py:659 + msgid "Is this ok [Y/n]: " +-msgstr "진행 할 까요? [Y/n]: " ++msgstr "진행할까요? [Y/n]: " + + #: dnf/cli/output.py:739 + #, python-format +@@ -2924,7 +2925,7 @@ msgstr " 선택적인 꾸러미 :" + + #: dnf/cli/output.py:753 + msgid " Conditional Packages:" +-msgstr " 추가 가능 꾸러미 :" ++msgstr " 조건부 꾸러미 :" + + #: dnf/cli/output.py:778 + #, python-format +@@ -2942,7 +2943,7 @@ msgstr " 필수 그룹 :" + + #: dnf/cli/output.py:788 + msgid " Optional Groups:" +-msgstr " 선택적인 그룹 :" ++msgstr " 선택적 그룹 :" + + #: dnf/cli/output.py:809 + msgid "Matched from:" +@@ -2956,7 +2957,7 @@ msgstr "파일 이름 : %s" + #: dnf/cli/output.py:848 + #, python-format + msgid "Repo : %s" +-msgstr "리포지토리 : %s" ++msgstr "저장소 : %s" + + #: dnf/cli/output.py:857 + msgid "Description : " +@@ -2984,7 +2985,7 @@ msgstr "기타 : %s" + + #: dnf/cli/output.py:940 + msgid "There was an error calculating total download size" +-msgstr "총 내려받기 크기를 계산하는 중에 오류가 발생했습니다" ++msgstr "전체 내려받기 크기를 계산하는 중에 오류가 발생했습니다" + + #: dnf/cli/output.py:946 + #, python-format +@@ -2994,7 +2995,7 @@ msgstr "전체 크기: %s" + #: dnf/cli/output.py:949 + #, python-format + msgid "Total download size: %s" +-msgstr "총계 내려받기 크기: %s" ++msgstr "전체 내려받기 크기: %s" + + #: dnf/cli/output.py:952 + #, python-format +@@ -3217,7 +3218,7 @@ msgstr "합계" + + #: dnf/cli/output.py:1467 + msgid "" +-msgstr "" ++msgstr "<설정해제>" + + #: dnf/cli/output.py:1468 + msgid "System" +@@ -3353,15 +3354,15 @@ msgstr "실패:" + + #: dnf/cli/output.py:1765 dnf/cli/output.py:1767 + msgid "Releasever :" +-msgstr "Releasever :" ++msgstr "배포버전 :" + + #: dnf/cli/output.py:1772 dnf/cli/output.py:1774 + msgid "Command Line :" +-msgstr "명령 줄 :" ++msgstr "명령 줄 :" + + #: dnf/cli/output.py:1779 dnf/cli/output.py:1781 + msgid "Comment :" +-msgstr "댓글 :" ++msgstr "댓글 :" + + #: dnf/cli/output.py:1785 + msgid "Transaction performed with:" +@@ -3373,7 +3374,7 @@ msgstr "변경된 꾸러미 :" + + #: dnf/cli/output.py:1800 + msgid "Scriptlet output:" +-msgstr "스크립트릿 출력 :" ++msgstr "구현 출력 :" + + #: dnf/cli/output.py:1807 + msgid "Errors:" +@@ -3466,7 +3467,7 @@ msgstr "실행 중" + + #: dnf/cli/utils.py:99 + msgid "Sleeping" +-msgstr "휴면중" ++msgstr "휴면 중" + + #: dnf/cli/utils.py:100 + msgid "Uninterruptible" +@@ -3492,7 +3493,7 @@ msgstr "잠금 프로세스(PID %d)에 대한 정보를 찾을 수 없습니다" + #: dnf/cli/utils.py:117 + #, python-format + msgid " The application with PID %d is: %s" +-msgstr " PID %d인 애플리케이션: %s" ++msgstr " PID %d인 응용프로그램: %s" + + #: dnf/cli/utils.py:120 + #, python-format +@@ -3529,7 +3530,8 @@ msgstr "모듈 또는 그룹 '%s'가 존재하지 않습니다." + msgid "Environment id '%s' does not exist." + msgstr "환경 id '%s' 가 존재하지 않습니다." + +-#: dnf/comps.py:622 dnf/transaction_sr.py:477 dnf/transaction_sr.py:487 ++#: dnf/comps.py:622 dnf/transaction_sr.py:487 dnf/transaction_sr.py:497 ++#: dnf/transaction_sr.py:507 + #, python-format + msgid "Environment id '%s' is not installed." + msgstr "환경id '%s'가 설치되지 않았습니다." +@@ -3607,33 +3609,37 @@ msgstr "경고: '%s'을 적재하지 못했습니다, 건너 뛰기." + + #: dnf/conf/read.py:72 + msgid "Bad id for repo: {} ({}), byte = {} {}" +-msgstr "레포지터리의 ID가 잘못되었습니다. {} ({}), byte = {} {}" ++msgstr "저장소의 ID가 잘못되었습니다. {} ({}), byte = {} {}" + + #: dnf/conf/read.py:76 + msgid "Bad id for repo: {}, byte = {} {}" +-msgstr "레포지터리의 ID가 잘못되었습니다. {}, byte = {} {}" ++msgstr "저장소의 ID가 잘못되었습니다. {}, byte = {} {}" + + #: dnf/conf/read.py:84 + msgid "Repository '{}' ({}): Error parsing config: {}" +-msgstr "Repository '{}' ({}): 구문 분석 설정 오류: {}" ++msgstr "저장소 '{}' ({}): 구문 분석 설정 오류: {}" + + #: dnf/conf/read.py:87 + msgid "Repository '{}': Error parsing config: {}" +-msgstr "Repository '{}' : 구문 분석 설정 오류: {}" ++msgstr "저장소 '{}' : 구문 분석 설정 오류: {}" + + #: dnf/conf/read.py:93 + msgid "Repository '{}' ({}) is missing name in configuration, using id." +-msgstr "" +-"Repository '{}' ({})의 설정에 이름이 누락되어 있습니다. id를 사용하십시오." ++msgstr "저장소 '{}' ({})는 id를 사용하는 구성에 이름이 누락되어 있습니다." + + #: dnf/conf/read.py:96 + msgid "Repository '{}' is missing name in configuration, using id." +-msgstr "Repository '{}'의 설정에 이름이 누락되어 있습니다. id를 사용하십시오." ++msgstr "저장소 '{}'는 id를 사용하는 구성에 이름이 누락되어 있습니다." + + #: dnf/conf/read.py:113 + msgid "Parsing file \"{}\" failed: {}" + msgstr "\"{}\" 파일을 구문 분석하지 못했습니다: {}" + ++#: dnf/conf/substitutions.py:66 ++#, python-brace-format ++msgid "Error when parsing a variable from file '{0}': {1}" ++msgstr "파일에서 변수 구문 분석 할 때에 오류 '{0}': {1}" ++ + #: dnf/crypto.py:108 + #, python-format + msgid "repo %s: 0x%s already imported" +@@ -3657,7 +3663,7 @@ msgstr "DNS 레코드를 사용하여 확인되지 않음." + msgid "retrieving repo key for %s unencrypted from %s" + msgstr "%s에서 암호화 하지 않은 %s를 위한 저장소 키 검색" + +-#: dnf/db/group.py:301 ++#: dnf/db/group.py:308 + msgid "" + "No available modular metadata for modular package '{}', it cannot be " + "installed on the system" +@@ -3665,14 +3671,19 @@ msgstr "" + "모듈 꾸러미 '{}'에 사용 가능한 메타 자료가 없으며 시스템에 설치 할 수 없습니" + "다" + +-#: dnf/db/group.py:351 ++#: dnf/db/group.py:359 ++#, python-format ++msgid "An rpm exception occurred: %s" ++msgstr "rpm 예외가 발생했습니다: %s" ++ ++#: dnf/db/group.py:361 + msgid "No available modular metadata for modular package" + msgstr "모듈 꾸러미에 사용 가능한 모듈 메타 자료가 없습니다" + +-#: dnf/db/group.py:385 ++#: dnf/db/group.py:395 + #, python-format + msgid "Will not install a source rpm package (%s)." +-msgstr "소스 RPM 꾸러미를 설치하지 않습니다 (%s)." ++msgstr "원천 RPM 꾸러미를 설치하지 않습니다 (%s)." + + #: dnf/dnssec.py:168 + msgid "" +@@ -3707,11 +3718,11 @@ msgstr "지원되지 않는 검사 유형: %s" + + #: dnf/drpm.py:144 + msgid "Delta RPM rebuild failed" +-msgstr "Delta RPM을 다시 빌드하지 못했습니다" ++msgstr "델타 RPM을 다시 제작하는데 실패함" + + #: dnf/drpm.py:146 + msgid "Checksum of the delta-rebuilt RPM failed" +-msgstr "delta-rebuilt RPM의 체크섬에 실패했습니다" ++msgstr "델타-재제작 RPM의 체크섬이 실패함" + + # translation auto-copied from project subscription-manager, version 1.9.X, + # document keys +@@ -3766,7 +3777,7 @@ msgstr "'{}'에 다른 스트림을 사용합니다." + + #: dnf/module/__init__.py:27 + msgid "Nothing to show." +-msgstr "표시할 것이 없습니다." ++msgstr "표시 할 것이 없습니다." + + #: dnf/module/__init__.py:28 + msgid "Installing newer version of '{}' than specified. Reason: {}" +@@ -3818,7 +3829,7 @@ msgstr "그런 프로파일이 없습니다: {}. 사용 가능한 프로파일 + + #: dnf/module/exceptions.py:88 + msgid "No profile to remove for '{}'" +-msgstr "제거되는 프로파일이 없습니다('{}'를 위해 )" ++msgstr "'{}'를 제거하려는 프로파일이 없습니다" + + #: dnf/module/module_base.py:35 + msgid "" +@@ -3901,7 +3912,7 @@ msgstr "꾸러미 이름 '{}'를 위하여 배포판에서 사용 할 수 있는 + #: 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 "인수 {}을 (를) 구문 분석할 수 없습니다" ++msgstr "인수 {}를 해결 할 수 없습니다" + + #: dnf/module/module_base.py:321 + #, python-brace-format +@@ -3963,48 +3974,44 @@ msgstr "마지막 makecache 시간을 결정하지 못했습니다." + msgid "Parsing file failed: %s" + msgstr "구문 분석에 실패했습니다. %s" + +-#: dnf/plugin.py:141 ++#: dnf/plugin.py:144 + #, python-format + msgid "Loaded plugins: %s" +-msgstr "로드된 플러그인 : %s" ++msgstr "적재된 플러그인: %s" + +-#: dnf/plugin.py:211 ++#: dnf/plugin.py:216 + #, python-format + msgid "Failed loading plugin \"%s\": %s" + msgstr "플러그인 \"%s\"를 불러오지 못했습니다: %s" + +-#: dnf/plugin.py:243 ++#: dnf/plugin.py:248 + msgid "No matches found for the following enable plugin patterns: {}" + msgstr "다음의 활성 플러그인 패턴과 일치하는 항목이 없습니다: {}" + +-#: dnf/plugin.py:247 ++#: dnf/plugin.py:252 + msgid "No matches found for the following disable plugin patterns: {}" +-msgstr "다음의 비활성화 플러그인 패턴과 일치하는 항목이 없습니다: {}" ++msgstr "다음의 비활성화 플러그인 유형과 일치하는 항목이 없습니다: {}" + + #: dnf/repo.py:84 + #, python-format + msgid "no matching payload factory for %s" +-msgstr "%s와 일치하는 payload factory가 없습니다" +- +-#: dnf/repo.py:111 +-msgid "Already downloaded" +-msgstr "이미 내려받음" ++msgstr "%s와 일치하는 페이로드 팩토리가 없습니다" + + #. pinging mirrors, this might take a while + #: dnf/repo.py:346 + #, python-format + msgid "determining the fastest mirror (%s hosts).. " +-msgstr "가장 빠른 미러 지정 (%s 호스트).. " ++msgstr "가장 빠른 연결목록 지정 (%s 호스트).. " + + #: dnf/repodict.py:58 + #, python-format + msgid "enabling %s repository" +-msgstr "%s 리포지토리 활성화" ++msgstr "%s 저장소 활성화" + + #: dnf/repodict.py:94 + #, python-format + msgid "Added %s repo from %s" +-msgstr "%s 에서 %s repo를 추가했습니다" ++msgstr "%s에서 %s 저장소를 추가했습니다" + + #: dnf/rpm/miscutils.py:32 + #, python-format +@@ -4067,7 +4074,7 @@ msgstr "확인 중" + + #: dnf/transaction.py:97 + msgid "Running scriptlet" +-msgstr "스크립트릿 실행 중" ++msgstr "구현 중" + + #: dnf/transaction.py:99 + msgid "Preparing" +@@ -4127,7 +4134,7 @@ msgstr "rpm안에 누락된 객체 키 \"{key}\"." + msgid "" + "Unexpected value of package reason \"{reason}\" for rpm nevra \"{nevra}\"." + msgstr "" +-"rpm nevra \"{nevra}\"를 위한 예상되지 않은 꾸러미 이유\"{reason}\" 의 값." ++"rpm nevra \"{nevra}\"를 위한 예상되지 않은 꾸러미 이유 \"{reason}\"의 값." + + #: dnf/transaction_sr.py:297 + #, python-brace-format +@@ -4176,16 +4183,17 @@ msgid "Missing object key \"{key}\" in groups.packages." + msgstr "group.packages에 있는 객체 키 \"{key}\" 누락." + + #: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421 ++#: dnf/transaction_sr.py:431 + #, python-format + msgid "Group id '%s' is not installed." + msgstr "그룹 '%s'는 설치되어 있지 않습니다." + +-#: dnf/transaction_sr.py:432 ++#: dnf/transaction_sr.py:442 + #, python-format + msgid "Environment id '%s' is not available." + msgstr "환경 id '%s'는 사용 할 수 없습니다." + +-#: dnf/transaction_sr.py:456 ++#: dnf/transaction_sr.py:466 + #, python-brace-format + msgid "" + "Invalid value \"{group_type}\" of environments.groups.group_type, only " +@@ -4194,34 +4202,34 @@ msgstr "" + "잘못된 environments.groups.group_type의 값 \"{group_type}\", \"필 수\" 또는 " + "\"선택\"만 지원합니다." + +-#: dnf/transaction_sr.py:464 ++#: dnf/transaction_sr.py:474 + #, python-brace-format + msgid "Missing object key \"{key}\" in environments.groups." + msgstr "환경 그룹에서 누락된 객체 키 \"{key}\"." + +-#: dnf/transaction_sr.py:542 ++#: dnf/transaction_sr.py:566 + #, python-brace-format + msgid "Unexpected value of group action \"{action}\" for group \"{group}\"." + msgstr "그룹 \"{group}\"을 위해 예상치 못한 그룹 활동 \"{action}\"의 값." + +-#: dnf/transaction_sr.py:547 ++#: dnf/transaction_sr.py:571 + #, python-brace-format + msgid "Missing object key \"{key}\" in a group." + msgstr "그룹 안에 누락된 객체 키 \"{key}\"." + +-#: dnf/transaction_sr.py:571 ++#: dnf/transaction_sr.py:599 + #, python-brace-format + msgid "" + "Unexpected value of environment action \"{action}\" for environment " + "\"{env}\"." + msgstr "환경 \"{env}\"를 위해 예상하지 못한 환경 활동 \"{action}\"의 값." + +-#: dnf/transaction_sr.py:576 ++#: dnf/transaction_sr.py:604 + #, python-brace-format + msgid "Missing object key \"{key}\" in an environment." + msgstr "환경에 누락된 객체 키 \"{key}\"." + +-#: dnf/transaction_sr.py:615 ++#: dnf/transaction_sr.py:643 + #, python-brace-format + msgid "" + "Package nevra \"{nevra}\", which is not present in the transaction file, was " +@@ -4251,7 +4259,7 @@ msgstr "다시 설치되었습니다" + + #: dnf/util.py:622 + msgid "Skipped" +-msgstr "건너 뛰기됨" ++msgstr "건너뜀" + + #: dnf/util.py:623 + msgid "Removed" +@@ -4259,7 +4267,10 @@ msgstr "제거되었습니다" + + #: dnf/util.py:626 + msgid "Failed" +-msgstr "실패하였습니다" ++msgstr "실패함" ++ ++#~ msgid "Already downloaded" ++#~ msgstr "이미 내려받음" + + #~ msgid "skipping." + #~ msgstr "건너 뛰기." +diff --git a/po/zh_CN.po b/po/zh_CN.po +index af6396c3..ba8ee2f4 100644 +--- a/po/zh_CN.po ++++ b/po/zh_CN.po +@@ -19,7 +19,7 @@ + # lexuge , 2017. #zanata + # n0vad3v , 2017. #zanata + # zhouxiaobo , 2017. #zanata +-# Ludek Janda , 2018. #zanata, 2021. ++# Ludek Janda , 2018. #zanata, 2021, 2023. + # Pany , 2018. #zanata + # Qiyu Yan , 2018. #zanata + # Qiyu Yan , 2019. #zanata +@@ -28,13 +28,17 @@ + # Harry Chen , 2020. + # Sundeep Anand , 2021. + # weidong , 2021. +-# Transtats , 2022. ++# Transtats , 2022, 2023. ++# Edward Zhang , 2022. ++# Cheng Ming , 2022. ++# Yang Yulin , 2022, 2023. ++# Jingge Chen , 2022. + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2022-02-28 11:24+0100\n" +-"PO-Revision-Date: 2022-03-09 12:39+0000\n" ++"POT-Creation-Date: 2023-02-28 10:03+0100\n" ++"PO-Revision-Date: 2023-03-06 13:20+0000\n" + "Last-Translator: Transtats \n" + "Language-Team: Chinese (Simplified) \n" +@@ -43,7 +47,7 @@ msgstr "" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=1; plural=0;\n" +-"X-Generator: Weblate 4.11.2\n" ++"X-Generator: Weblate 4.15.2\n" + + #: dnf/automatic/emitter.py:32 + #, python-format +@@ -127,244 +131,244 @@ msgstr "系统离线。" + msgid "Error: %s" + msgstr "错误:%s" + +-#: dnf/base.py:148 dnf/base.py:477 dnf/base.py:479 ++#: dnf/base.py:149 dnf/base.py:483 dnf/base.py:485 + msgid "loading repo '{}' failure: {}" + msgstr "加载仓库 '{}' 失败:{}" + +-#: dnf/base.py:150 ++#: dnf/base.py:151 + msgid "Loading repository '{}' has failed" + msgstr "加载仓库 '{}' 失败" + +-#: dnf/base.py:327 ++#: dnf/base.py:333 + msgid "Metadata timer caching disabled when running on metered connection." + msgstr "在使用按流量计费的连接时禁用元数据计时缓存。" + +-#: dnf/base.py:332 ++#: dnf/base.py:338 + msgid "Metadata timer caching disabled when running on a battery." + msgstr "在使用电池时禁用元数据计时缓存。" + +-#: dnf/base.py:337 ++#: dnf/base.py:343 + msgid "Metadata timer caching disabled." + msgstr "元数据计时缓存已禁用。" + +-#: dnf/base.py:342 ++#: dnf/base.py:348 + msgid "Metadata cache refreshed recently." + msgstr "元数据缓存近期已刷新。" + +-#: dnf/base.py:348 dnf/cli/commands/__init__.py:91 ++#: dnf/base.py:354 dnf/cli/commands/__init__.py:91 + msgid "There are no enabled repositories in \"{}\"." + msgstr "在\"{}\"中没有被启用的仓库。" + +-#: dnf/base.py:355 ++#: dnf/base.py:361 + #, python-format + msgid "%s: will never be expired and will not be refreshed." + msgstr "%s: 永远不过期并不会被刷新。" + +-#: dnf/base.py:357 ++#: dnf/base.py:363 + #, python-format + msgid "%s: has expired and will be refreshed." + msgstr "%s: 已过期并不会被刷新。" + + #. expires within the checking period: +-#: dnf/base.py:361 ++#: dnf/base.py:367 + #, python-format + msgid "%s: metadata will expire after %d seconds and will be refreshed now" + msgstr "%s: 元数据将在 %d 秒后过期,现在将会被刷新" + +-#: dnf/base.py:365 ++#: dnf/base.py:371 + #, python-format + msgid "%s: will expire after %d seconds." + msgstr "%s: 将会在 %d 秒后过期。" + + #. performs the md sync +-#: dnf/base.py:371 ++#: dnf/base.py:377 + msgid "Metadata cache created." + msgstr "元数据缓存已建立。" + +-#: dnf/base.py:404 dnf/base.py:471 ++#: dnf/base.py:410 dnf/base.py:477 + #, python-format + msgid "%s: using metadata from %s." + msgstr "%s:正在使用截止于 %s 的元数据。" + +-#: dnf/base.py:416 dnf/base.py:484 ++#: dnf/base.py:422 dnf/base.py:490 + #, python-format + msgid "Ignoring repositories: %s" + msgstr "正在忽略仓库:%s" + +-#: dnf/base.py:419 ++#: dnf/base.py:425 + #, python-format + msgid "Last metadata expiration check: %s ago on %s." + msgstr "上次元数据过期检查:%s 前,执行于 %s。" + +-#: dnf/base.py:512 ++#: dnf/base.py:518 + msgid "" + "The downloaded packages were saved in cache until the next successful " + "transaction." + msgstr "下载的软件包保存在缓存中,直到下次成功执行事务。" + +-#: dnf/base.py:514 ++#: dnf/base.py:520 + #, python-format + msgid "You can remove cached packages by executing '%s'." + msgstr "您可以通过执行 '%s' 删除软件包缓存。" + +-#: dnf/base.py:606 ++#: dnf/base.py:652 + #, python-format + msgid "Invalid tsflag in config file: %s" + msgstr "配置文件 %s 中使用 tsflag 是错误的" + +-#: dnf/base.py:662 ++#: dnf/base.py:708 + #, python-format + msgid "Failed to add groups file for repository: %s - %s" + msgstr "为仓库 %s 添加组文件时失败:%s" + +-#: dnf/base.py:904 ++#: dnf/base.py:950 + msgid "Running transaction check" + msgstr "运行事务检查" + +-#: dnf/base.py:912 ++#: dnf/base.py:958 + msgid "Error: transaction check vs depsolve:" + msgstr "错误:事务检查与依赖解决错误:" + +-#: dnf/base.py:918 ++#: dnf/base.py:964 + msgid "Transaction check succeeded." + msgstr "事务检查成功。" + +-#: dnf/base.py:921 ++#: dnf/base.py:967 + msgid "Running transaction test" + msgstr "运行事务测试" + +-#: dnf/base.py:931 dnf/base.py:1082 ++#: dnf/base.py:977 dnf/base.py:1128 + msgid "RPM: {}" + msgstr "RPM软件包: {}" + +-#: dnf/base.py:932 ++#: dnf/base.py:978 + msgid "Transaction test error:" +-msgstr "事物测试失败:" ++msgstr "事务测试失败:" + +-#: dnf/base.py:943 ++#: dnf/base.py:989 + msgid "Transaction test succeeded." + msgstr "事务测试成功。" + +-#: dnf/base.py:964 ++#: dnf/base.py:1010 + msgid "Running transaction" + msgstr "运行事务" + +-#: dnf/base.py:1001 ++#: dnf/base.py:1047 + msgid "Disk Requirements:" + msgstr "磁盘需求:" + +-#: dnf/base.py:1004 ++#: dnf/base.py:1050 + #, 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:1011 ++#: dnf/base.py:1057 + msgid "Error Summary" + msgstr "错误汇总" + +-#: dnf/base.py:1037 ++#: dnf/base.py:1083 + #, python-brace-format + msgid "RPMDB altered outside of {prog}." + msgstr "RPMDB 在 {prog} 外被改动了。" + +-#: dnf/base.py:1083 dnf/base.py:1091 ++#: dnf/base.py:1129 dnf/base.py:1137 + msgid "Could not run transaction." + msgstr "不能执行事务。" + +-#: dnf/base.py:1086 ++#: dnf/base.py:1132 + msgid "Transaction couldn't start:" + msgstr "事务无法启动:" + +-#: dnf/base.py:1100 ++#: dnf/base.py:1146 + #, python-format + msgid "Failed to remove transaction file %s" + msgstr "移除事务文件 %s 失败" + +-#: dnf/base.py:1182 ++#: dnf/base.py:1228 + msgid "Some packages were not downloaded. Retrying." + msgstr "某些软件包没有被下载。正在重试。" + +-#: dnf/base.py:1212 ++#: dnf/base.py:1258 + #, 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:1215 ++#: dnf/base.py:1261 + #, 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:1257 ++#: dnf/base.py:1303 + msgid "Cannot add local packages, because transaction job already exists" +-msgstr "由于事物已经存在,无法添加本地软件包" ++msgstr "由于事务已经存在,无法添加本地软件包" + +-#: dnf/base.py:1271 ++#: dnf/base.py:1317 + msgid "Could not open: {}" + msgstr "无法打开: {}" + +-#: dnf/base.py:1309 ++#: dnf/base.py:1355 + #, python-format + msgid "Public key for %s is not installed" + msgstr "%s 的公钥没有安装" + +-#: dnf/base.py:1313 ++#: dnf/base.py:1359 + #, python-format + msgid "Problem opening package %s" + msgstr "打开软件包 %s 出现问题" + +-#: dnf/base.py:1321 ++#: dnf/base.py:1367 + #, python-format + msgid "Public key for %s is not trusted" + msgstr "%s 的公钥不可信任" + +-#: dnf/base.py:1325 ++#: dnf/base.py:1371 + #, python-format + msgid "Package %s is not signed" + msgstr "软件包 %s 没有签名" + +-#: dnf/base.py:1355 ++#: dnf/base.py:1401 + #, python-format + msgid "Cannot remove %s" + msgstr "无法删除 %s" + +-#: dnf/base.py:1359 ++#: dnf/base.py:1405 + #, python-format + msgid "%s removed" + msgstr "%s 已删除" + +-#: dnf/base.py:1639 ++#: dnf/base.py:1685 + msgid "No match for group package \"{}\"" + msgstr "没有和组 \"{}\" 匹配的" + +-#: dnf/base.py:1721 ++#: dnf/base.py:1767 + #, python-format + msgid "Adding packages from group '%s': %s" + msgstr "从组 '%s': %s 添加软件包" + +-#: dnf/base.py:1744 dnf/cli/cli.py:221 dnf/cli/commands/__init__.py:437 ++#: dnf/base.py:1790 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:1762 ++#: dnf/base.py:1808 + msgid "No groups marked for removal." + msgstr "没有软件包组需要移除。" + +-#: dnf/base.py:1796 ++#: dnf/base.py:1842 + msgid "No group marked for upgrade." + msgstr "没有标记为要升级的组。" + +-#: dnf/base.py:2010 ++#: dnf/base.py:2056 + #, python-format + msgid "Package %s not installed, cannot downgrade it." + msgstr "软件包 %s 并没有能够安装,无法进行降级操作。" + +-#: 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/base.py:2058 dnf/base.py:2077 dnf/base.py:2090 dnf/base.py:2121 ++#: dnf/base.py:2191 dnf/base.py:2199 dnf/base.py:2333 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 +@@ -374,127 +378,127 @@ msgstr "软件包 %s 并没有能够安装,无法进行降级操作。" + msgid "No match for argument: %s" + msgstr "未找到匹配的参数: %s" + +-#: dnf/base.py:2019 ++#: dnf/base.py:2065 + #, python-format + msgid "Package %s of lower version already installed, cannot downgrade it." + msgstr "软件包 %s 的低版本已经安装,无法进行降级。" + +-#: dnf/base.py:2042 ++#: dnf/base.py:2088 + #, python-format + msgid "Package %s not installed, cannot reinstall it." + msgstr "软件包 %s 未能够安装成功,无法进行重新安装。" + +-#: dnf/base.py:2057 ++#: dnf/base.py:2103 + #, python-format + msgid "File %s is a source package and cannot be updated, ignoring." + msgstr "%s 文件无法被升级,已忽略。" + +-#: dnf/base.py:2068 ++#: dnf/base.py:2118 + #, python-format + msgid "Package %s not installed, cannot update it." + msgstr "软件包 %s 未安装,无法更新。" + +-#: dnf/base.py:2078 ++#: dnf/base.py:2128 + #, python-format + msgid "" + "The same or higher version of %s is already installed, cannot update it." + msgstr "已经安装了软件包%s的相同或更高版本,无法更新。" + +-#: dnf/base.py:2121 dnf/cli/commands/reinstall.py:81 ++#: dnf/base.py:2188 dnf/cli/commands/reinstall.py:81 + #, python-format + msgid "Package %s available, but not installed." + msgstr "软件包 %s 可用,但没有被安装。" + +-#: dnf/base.py:2127 ++#: dnf/base.py:2194 + #, python-format + msgid "Package %s available, but installed for different architecture." + msgstr "软件包 %s 可用,当是为其它架构安装。" + +-#: dnf/base.py:2152 ++#: dnf/base.py:2219 + #, python-format + msgid "No package %s installed." + msgstr "没有软件包 %s 安装。" + +-#: dnf/base.py:2170 dnf/cli/commands/install.py:136 ++#: dnf/base.py:2237 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:2185 dnf/cli/commands/__init__.py:676 ++#: dnf/base.py:2252 dnf/cli/commands/__init__.py:676 + #: dnf/cli/commands/remove.py:162 + msgid "No packages marked for removal." + msgstr "没有软件包需要移除。" + +-#: dnf/base.py:2273 dnf/cli/cli.py:428 ++#: dnf/base.py:2340 dnf/cli/cli.py:428 + #, python-format + msgid "Packages for argument %s available, but not installed." + msgstr "针对于参数 %s 的软件包可用, 但是目前没有安装。" + +-#: dnf/base.py:2278 ++#: dnf/base.py:2345 + #, python-format + msgid "Package %s of lowest version already installed, cannot downgrade it." + msgstr "软件包 %s 的最低版本已经安装,无法再进行降级。" + +-#: dnf/base.py:2378 ++#: dnf/base.py:2445 + msgid "No security updates needed, but {} update available" + msgstr "没有必须的安全更新, 但是 {} 的更新可用" + +-#: dnf/base.py:2380 ++#: dnf/base.py:2447 + msgid "No security updates needed, but {} updates available" + msgstr "没有必须的安全更新, 但是 {} 的更新可用" + +-#: dnf/base.py:2384 ++#: dnf/base.py:2451 + msgid "No security updates needed for \"{}\", but {} update available" + msgstr "没有针对于\"{}\" 所必须的安全更新, 但是 {} 的更新可用" + +-#: dnf/base.py:2386 ++#: dnf/base.py:2453 + msgid "No security updates needed for \"{}\", but {} updates available" + msgstr "没有针对于\"{}\" 所必须的安全更新, 但是 {} 的更新可用" + + #. raise an exception, because po.repoid is not in self.repos +-#: dnf/base.py:2407 ++#: dnf/base.py:2474 + #, python-format + msgid "Unable to retrieve a key for a commandline package: %s" + msgstr "无法获取来自命令行的软件包的密钥:%s" + +-#: dnf/base.py:2415 ++#: dnf/base.py:2482 + #, python-format + msgid ". Failing package is: %s" + msgstr ". 失败的软件包是:%s" + +-#: dnf/base.py:2416 ++#: dnf/base.py:2483 + #, python-format + msgid "GPG Keys are configured as: %s" + msgstr "GPG密钥配置为:%s" + +-#: dnf/base.py:2428 ++#: dnf/base.py:2495 + #, python-format + msgid "GPG key at %s (0x%s) is already installed" + msgstr "%s 的 GPG 公钥(0x%s)已安装" + +-#: dnf/base.py:2464 ++#: dnf/base.py:2531 + msgid "The key has been approved." + msgstr "密钥已被确认。" + +-#: dnf/base.py:2467 ++#: dnf/base.py:2534 + msgid "The key has been rejected." + msgstr "密钥已被拒绝。" + +-#: dnf/base.py:2500 ++#: dnf/base.py:2567 + #, python-format + msgid "Key import failed (code %d)" + msgstr "导入公钥失败(代码 %d)" + +-#: dnf/base.py:2502 ++#: dnf/base.py:2569 + msgid "Key imported successfully" + msgstr "导入公钥成功" + +-#: dnf/base.py:2506 ++#: dnf/base.py:2573 + msgid "Didn't install any keys" + msgstr "没有安装任何公钥" + +-#: dnf/base.py:2509 ++#: dnf/base.py:2576 + #, python-format + msgid "" + "The GPG keys listed for the \"%s\" repository are already installed but they " +@@ -504,49 +508,49 @@ msgstr "" + "仓库 \"%s\" 的 GPG 公钥已安装,但是不适用于此软件包。\n" + "请检查此仓库的公钥 URL 是否配置正确。" + +-#: dnf/base.py:2520 ++#: dnf/base.py:2587 + msgid "Import of key(s) didn't help, wrong key(s)?" + msgstr "导入的密钥没有公钥,错误的公钥?" + +-#: dnf/base.py:2573 ++#: dnf/base.py:2640 + msgid " * Maybe you meant: {}" + msgstr " * 可能您的意思是:{}" + +-#: dnf/base.py:2605 ++#: dnf/base.py:2672 + msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum" + msgstr "软件包 \"{}\"(来自于本地仓库 \"{}\")的 checksum 不正确" + +-#: dnf/base.py:2608 ++#: dnf/base.py:2675 + msgid "Some packages from local repository have incorrect checksum" + msgstr "本地仓库的一些软件包校验值(checksum)不正确,无法确定软件包完整" + +-#: dnf/base.py:2611 ++#: dnf/base.py:2678 + msgid "Package \"{}\" from repository \"{}\" has incorrect checksum" + msgstr "软件包 \"{}\"(来自仓库 \"{}\")的 checksum 不正确" + +-#: dnf/base.py:2614 ++#: dnf/base.py:2681 + msgid "" + "Some packages have invalid cache, but cannot be downloaded due to \"--" + "cacheonly\" option" + msgstr "以下软件包有无效缓存,因为使用了 \"--cacheonly\" 选项不能下载" + +-#: dnf/base.py:2632 dnf/base.py:2652 ++#: dnf/base.py:2699 dnf/base.py:2719 + msgid "No match for argument" + msgstr "未找到匹配的参数" + +-#: dnf/base.py:2640 dnf/base.py:2660 ++#: dnf/base.py:2707 dnf/base.py:2727 + msgid "All matches were filtered out by exclude filtering for argument" + msgstr "由于您的搜索参数,所有相关结果都已被滤掉" + +-#: dnf/base.py:2642 ++#: dnf/base.py:2709 + msgid "All matches were filtered out by modular filtering for argument" + msgstr "所有的匹配结果均已经被参数的模块化过滤条件筛除" + +-#: dnf/base.py:2658 ++#: dnf/base.py:2725 + msgid "All matches were installed from a different repository for argument" + msgstr "已从另一个仓库安装了参数的所有匹配" + +-#: dnf/base.py:2705 ++#: dnf/base.py:2772 + #, python-format + msgid "Package %s is already installed." + msgstr "软件包 %s 已安装。" +@@ -659,7 +663,7 @@ msgstr "取代的软件包" + msgid "No packages marked for distribution synchronization." + msgstr "没有软件包需要发行版同步。" + +-#: dnf/cli/cli.py:425 dnf/cli/commands/group.py:395 ++#: dnf/cli/cli.py:425 dnf/cli/commands/group.py:396 + #, python-format + msgid "No package %s available." + msgstr "没有可用的软件包 %s。" +@@ -1138,7 +1142,7 @@ msgstr "缓存已过期" + #, python-format + msgid "%d file removed" + msgid_plural "%d files removed" +-msgstr[0] "%d 文件已删除" ++msgstr[0] "%d 个文件已删除" + + #: dnf/cli/commands/clean.py:119 dnf/lock.py:139 + #, python-format +@@ -1247,7 +1251,7 @@ msgstr "组子命令的参数" + msgid "Invalid groups sub-command, use: %s." + msgstr "无效的组子命令,请使用:%s 。" + +-#: dnf/cli/commands/group.py:398 ++#: dnf/cli/commands/group.py:399 + msgid "Unable to find a mandatory group package." + msgstr "无法找到一个必须的组软件包。" + +@@ -1287,7 +1291,7 @@ msgstr "" + + #: dnf/cli/commands/history.py:101 + msgid "No transaction file name given." +-msgstr "没有指定事务文件名。" ++msgstr "没有提供事务文件名。" + + #: dnf/cli/commands/history.py:103 + msgid "More than one argument given as transaction file name." +@@ -1323,7 +1327,7 @@ msgstr "没有事务 ID" + #: dnf/cli/commands/history.py:179 + #, python-brace-format + msgid "Transaction ID \"{0}\" not found." +-msgstr "事务 ID \"{0}\" 未找到。" ++msgstr "无法找到事务 ID \"{0}\" 对应的事务。" + + #: dnf/cli/commands/history.py:185 + msgid "Found more than one transaction ID!" +@@ -1339,11 +1343,11 @@ msgstr "在 %u 之前,事务历史不完整。" + msgid "Transaction history is incomplete, after %u." + msgstr "在 %u 之后,事务历史不完整。" + +-#: dnf/cli/commands/history.py:256 ++#: dnf/cli/commands/history.py:267 + msgid "No packages to list" + msgstr "没有可以列出的软件包" + +-#: dnf/cli/commands/history.py:279 ++#: dnf/cli/commands/history.py:290 + msgid "" + "Invalid transaction ID range definition '{}'.\n" + "Use '..'." +@@ -1351,7 +1355,7 @@ msgstr "" + "无效的事务 ID 范围定义 '{}'。\n" + "使用 '..'。" + +-#: dnf/cli/commands/history.py:283 ++#: dnf/cli/commands/history.py:294 + msgid "" + "Can't convert '{}' to transaction ID.\n" + "Use '', 'last', 'last-'." +@@ -1359,27 +1363,27 @@ msgstr "" + "无法将 '{}' 转换为事务 ID。\n" + "请使用 ''、'last'、'last-'。" + +-#: dnf/cli/commands/history.py:312 ++#: dnf/cli/commands/history.py:323 + msgid "No transaction which manipulates package '{}' was found." + msgstr "没有找到操作软件包 '{}' 的事务。" + +-#: dnf/cli/commands/history.py:357 ++#: dnf/cli/commands/history.py:368 + msgid "{} exists, overwrite?" + msgstr "{} 已存在,是否覆盖?" + +-#: dnf/cli/commands/history.py:360 ++#: dnf/cli/commands/history.py:371 + msgid "Not overwriting {}, exiting." +-msgstr "不覆盖 {},退出。" ++msgstr "未覆盖 {},正在退出。" + +-#: dnf/cli/commands/history.py:367 ++#: dnf/cli/commands/history.py:378 + msgid "Transaction saved to {}." +-msgstr "事务已保存至 {}。" ++msgstr "事务已保存到 {}。" + +-#: dnf/cli/commands/history.py:370 ++#: dnf/cli/commands/history.py:381 + msgid "Error storing transaction: {}" + msgstr "存储事务时出现错误:{}" + +-#: dnf/cli/commands/history.py:386 ++#: dnf/cli/commands/history.py:397 + msgid "Warning, the following problems occurred while running a transaction:" + msgstr "警告,在运行事务时出现了下列问题:" + +@@ -1636,60 +1640,60 @@ msgstr "仓库状态 : " + + #: dnf/cli/commands/repolist.py:169 + msgid "Repo-revision : " +-msgstr "Repo-revision : " ++msgstr "软件仓库修订版 : " + + #: dnf/cli/commands/repolist.py:173 + msgid "Repo-tags : " +-msgstr "Repo-tags : " ++msgstr "软件仓库标签 : " + + #: dnf/cli/commands/repolist.py:180 + msgid "Repo-distro-tags : " +-msgstr "Repo-distro-tags : " ++msgstr "软件仓库发行版标签 : " + + #: dnf/cli/commands/repolist.py:192 + msgid "Repo-updated : " +-msgstr "Repo-updated : " ++msgstr "更新的软件仓库 : " + + #: dnf/cli/commands/repolist.py:194 + msgid "Repo-pkgs : " +-msgstr "Repo-pkgs : " ++msgstr "软件仓库的软件包 : " + + #: 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 "软件仓库大小 : " + + #: dnf/cli/commands/repolist.py:199 + msgid "Repo-metalink : " +-msgstr "Repo-metalink : " ++msgstr "软件仓库元链接 : " + + #: dnf/cli/commands/repolist.py:204 + msgid " Updated : " +-msgstr " Updated : " ++msgstr " 更新于 : " + + #: dnf/cli/commands/repolist.py:206 + msgid "Repo-mirrors : " +-msgstr "Repo-mirrors : " ++msgstr "软件仓库镜像站 : " + + #: dnf/cli/commands/repolist.py:210 dnf/cli/commands/repolist.py:216 + msgid "Repo-baseurl : " +-msgstr "Repo-baseurl : " ++msgstr "软件仓库基本 URL : " + + #: dnf/cli/commands/repolist.py:219 + msgid "Repo-expire : " +-msgstr "Repo-expire : " ++msgstr "软件仓库过期时间 : " + + #. TRANSLATORS: Packages that are excluded - their names like (dnf systemd) + #: dnf/cli/commands/repolist.py:223 + msgid "Repo-exclude : " +-msgstr "Repo-exclude : " ++msgstr "软件仓库排除项 : " + + #: dnf/cli/commands/repolist.py:227 + msgid "Repo-include : " +-msgstr "Repo-include : " ++msgstr "软件仓库包含项 : " + + #. TRANSLATORS: Number of packages that where excluded (5) + #: dnf/cli/commands/repolist.py:232 +@@ -3326,7 +3330,7 @@ msgstr "失败:" + + #: dnf/cli/output.py:1765 dnf/cli/output.py:1767 + msgid "Releasever :" +-msgstr "Releasever :" ++msgstr "发行版 :" + + #: dnf/cli/output.py:1772 dnf/cli/output.py:1774 + msgid "Command Line :" +@@ -3502,7 +3506,8 @@ msgstr "模块或者组 '%s' 不存在。" + msgid "Environment id '%s' does not exist." + msgstr "环境 id '%s' 不存在。" + +-#: dnf/comps.py:622 dnf/transaction_sr.py:477 dnf/transaction_sr.py:487 ++#: dnf/comps.py:622 dnf/transaction_sr.py:487 dnf/transaction_sr.py:497 ++#: dnf/transaction_sr.py:507 + #, python-format + msgid "Environment id '%s' is not installed." + msgstr "环境 id '%s' 没有安装。" +@@ -3606,15 +3611,20 @@ msgstr "仓库 '{}' 在配置中缺少名称,将使用 id。" + msgid "Parsing file \"{}\" failed: {}" + msgstr "解析文件 \"{}\" 失败:{}" + ++#: dnf/conf/substitutions.py:66 ++#, python-brace-format ++msgid "Error when parsing a variable from file '{0}': {1}" ++msgstr "从文件 '{0}' 解析变量时出错:{1}" ++ + #: dnf/crypto.py:108 + #, python-format + msgid "repo %s: 0x%s already imported" +-msgstr "repo %s: 0x%s 已被导入" ++msgstr "存储库 %s: 0x%s 已被导入" + + #: dnf/crypto.py:115 + #, python-format + msgid "repo %s: imported key 0x%s." +-msgstr "repo %s: 已导入密钥 0x%s。" ++msgstr "存储库 %s: 已导入密钥 0x%s。" + + #: dnf/crypto.py:145 + msgid "Verified using DNS record with DNSSEC signature." +@@ -3629,17 +3639,22 @@ msgstr "并未被 DNS 记录验证。" + msgid "retrieving repo key for %s unencrypted from %s" + msgstr "为 %s 从 %s 获取的 repo 密钥未加密" + +-#: dnf/db/group.py:301 ++#: dnf/db/group.py:308 + msgid "" + "No available modular metadata for modular package '{}', it cannot be " + "installed on the system" + msgstr "对于模块软件包 '{}' 没有可用的模块元数据,它将不能被安装至此系统上" + +-#: dnf/db/group.py:351 ++#: dnf/db/group.py:359 ++#, python-format ++msgid "An rpm exception occurred: %s" ++msgstr "发生了 rpm 异常:%s" ++ ++#: dnf/db/group.py:361 + msgid "No available modular metadata for modular package" + msgstr "对于模块软件包没有可用的模块元数据" + +-#: dnf/db/group.py:385 ++#: dnf/db/group.py:395 + #, python-format + msgid "Will not install a source rpm package (%s)." + msgstr "将不安装一个源码 RPM 软件包 (%s)。" +@@ -3887,8 +3902,8 @@ msgid "" + "Argument '{argument}' matches {stream_count} streams ('{streams}') of module " + "'{module}', but none of the streams are enabled or default" + msgstr "" +-"参数 '{argument}' 匹配模块 '{module}' 的 {stream_count} 流 ('{streams}') " +-",但是这些流都未被启用或为默认" ++"参数 '{argument}' 匹配模块 '{module}' 的 {stream_count} 流 ('{streams}') ,但" ++"是这些流都未被启用或为默认" + + #: dnf/module/module_base.py:509 + msgid "" +@@ -3928,21 +3943,21 @@ msgstr "无法决定最后的 makecache 时间。" + msgid "Parsing file failed: %s" + msgstr "解析文件失败:%s" + +-#: dnf/plugin.py:141 ++#: dnf/plugin.py:144 + #, python-format + msgid "Loaded plugins: %s" + msgstr "加载插件:%s" + +-#: dnf/plugin.py:211 ++#: dnf/plugin.py:216 + #, python-format + msgid "Failed loading plugin \"%s\": %s" + msgstr "加载插件 \"%s\" 失败 : %s" + +-#: dnf/plugin.py:243 ++#: dnf/plugin.py:248 + msgid "No matches found for the following enable plugin patterns: {}" + msgstr "没有以下已启用插件模式的匹配项 : {}" + +-#: dnf/plugin.py:247 ++#: dnf/plugin.py:252 + msgid "No matches found for the following disable plugin patterns: {}" + msgstr "没有以下已停用插件模式的匹配项 : {}" + +@@ -3951,10 +3966,6 @@ msgstr "没有以下已停用插件模式的匹配项 : {}" + msgid "no matching payload factory for %s" + msgstr "没有 %s 匹配的 payload factory" + +-#: dnf/repo.py:111 +-msgid "Already downloaded" +-msgstr "已下载" +- + #. pinging mirrors, this might take a while + #: dnf/repo.py:346 + #, python-format +@@ -4135,16 +4146,17 @@ msgid "Missing object key \"{key}\" in groups.packages." + msgstr "在 groups.packages 中缺少对象键 \"{key}\"。" + + #: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421 ++#: dnf/transaction_sr.py:431 + #, python-format + msgid "Group id '%s' is not installed." + msgstr "组 id '%s' 未安装。" + +-#: dnf/transaction_sr.py:432 ++#: dnf/transaction_sr.py:442 + #, python-format + msgid "Environment id '%s' is not available." + msgstr "环境 id '%s' 不可用。" + +-#: dnf/transaction_sr.py:456 ++#: dnf/transaction_sr.py:466 + #, python-brace-format + msgid "" + "Invalid value \"{group_type}\" of environments.groups.group_type, only " +@@ -4153,34 +4165,34 @@ msgstr "" + "environments.groups.group_type 的值 \"{group_type}\" 无效,仅支持 \"mandatory" + "\" 或者 \"optional\"。" + +-#: dnf/transaction_sr.py:464 ++#: dnf/transaction_sr.py:474 + #, python-brace-format + msgid "Missing object key \"{key}\" in environments.groups." + msgstr "在 environment.groups 中缺少对象键 \"{key}\"。" + +-#: dnf/transaction_sr.py:542 ++#: dnf/transaction_sr.py:566 + #, python-brace-format + msgid "Unexpected value of group action \"{action}\" for group \"{group}\"." + msgstr "对组 \"{group}\" 的组操作 \"{action}\" 的意外值。" + +-#: dnf/transaction_sr.py:547 ++#: dnf/transaction_sr.py:571 + #, python-brace-format + msgid "Missing object key \"{key}\" in a group." + msgstr "在组中缺少对象键 \"{key}\"。" + +-#: dnf/transaction_sr.py:571 ++#: dnf/transaction_sr.py:599 + #, python-brace-format + msgid "" + "Unexpected value of environment action \"{action}\" for environment " + "\"{env}\"." + msgstr "对环境 \"{env}\" 的环境操作 \"{action}\" 的意外值。" + +-#: dnf/transaction_sr.py:576 ++#: dnf/transaction_sr.py:604 + #, python-brace-format + msgid "Missing object key \"{key}\" in an environment." + msgstr "在环境中缺少对象键 \"{key}\"。" + +-#: dnf/transaction_sr.py:615 ++#: dnf/transaction_sr.py:643 + #, python-brace-format + msgid "" + "Package nevra \"{nevra}\", which is not present in the transaction file, was " +@@ -4219,6 +4231,9 @@ msgstr "已移除" + msgid "Failed" + msgstr "失败" + ++#~ msgid "Already downloaded" ++#~ msgstr "已下载" ++ + #~ msgid "skipping." + #~ msgstr "正在跳过。" + +-- +2.39.2 + diff --git a/SPECS/dnf.spec b/SPECS/dnf.spec index 421b865..b894a17 100644 --- a/SPECS/dnf.spec +++ b/SPECS/dnf.spec @@ -66,7 +66,7 @@ It supports RPMs, modules and comps groups & environments. Name: dnf Version: 4.7.0 -Release: 11%{?dist} +Release: 16%{?dist} Summary: %{pkg_summary} # For a breakdown of the licensing, see PACKAGE-LICENSING License: GPLv2+ @@ -102,6 +102,22 @@ Patch0023: 0023-Base.reset-plug-temporary-leak-of-libsolv-s-page-fil.patch Patch0024: 0024-doc-Describe-how-gpg-keys-are-stored-for-repo_ggpche.patch Patch0025: 0025-Add-only-relevant-pkgs-to-upgrade-transaction-RhBug-.patch Patch0026: 0026-Use-installed_all-because-installed_query-is-filtere.patch +Patch0027: 0027-Don-t-include-resolved-advisories-for-obsoletes-with.patch +Patch0028: 0028-Set-default-value-for-variable-to-prevent-crash-RhBu.patch +Patch0029: 0029-Add-doc-related-to-destdir-and-downloadonly-options-.patch +Patch0030: 0030-Expose-plugin-unload-method-to-API-RhBug-2047251.patch +Patch0031: 0031-Add-support-for-group-upgrade-rollback-RhBug-2016070.patch +Patch0032: 0032-Fix-upgrade-from-file-to-noarch-pkg-RhBug-2006018.patch +Patch0033: 0033-Allow-passing-plugin-parameters-with-dashes-in-names.patch +Patch0034: 0034-Fix-plugins-unit-tests-unload-plugins-upon-their-del.patch +Patch0035: 0035-Move-system-upgrade-plugin-to-core-RhBug-2054235.patch +Patch0036: 0036-Add-support-for-rollback-of-group-upgrade-rollback-R.patch +Patch0037: 0037-Document-changes-to-offline-upgrade-command.patch +Patch0038: 0038-Better-explain-traceback-of-rpm.error-with-dnf.patch +Patch0039: 0039-Ignore-processing-variable-files-with-unsupported-en.patch +Patch0040: 0040-Update-translations.patch + + BuildArch: noarch BuildRequires: cmake @@ -401,6 +417,30 @@ popd %{python3_sitelib}/%{name}/automatic/ %changelog +* Wed Mar 08 2023 Marek Blaha - 4.7.0-16 +- Update translations + +* Thu Jan 05 2023 Nicola Sella - 4.7.0-15 +- Ignore processing variable files with unsupported encoding (RhBug:2141215) +- Better explain traceback of rpm.error with dnf + +* Wed Nov 30 2022 Nicola Sella - 4.7.0-14 +- Document changes to offline-upgrade command (RhBug:1939975,2139324) + +* Wed Oct 26 2022 Nicola Sella - 4.7.0-13 +- Add support for rollback of group upgrade rollback (RhBug:2016070) +- Move system-upgrade plugin to core (RhBug:2054235) +- Fix plugins unit tests + unload plugins upon their deletion (RhBug:2134309) + +* Tue Sep 13 2022 Lukas Hrazky - 4.7.0-12 +- Allow passing plugin parameters with dashes in names (RhBug:1980712) +- Fix upgrade from file to noarch pkg (RhBug:2006018) +- Add support for group upgrade rollback (RhBug:2016070) +- Expose plugin unload method to API (RhBug:2047251) +- Add doc related to --destdir and --downloadonly options (RhBug:2100811) +- Set default value for variable to prevent crash (RhBug:2091636) +- Don't include resolved advisories for obsoletes with sec. filters (RhBug:2101421) + * Tue Jul 19 2022 Lukas Hrazky - 4.7.0-11 - [doc] Describe how gpg keys are stored for `repo_ggpcheck` - Add only relevant pkgs to upgrade transaction (RhBug:2097757)