richardphibel / rpms / dnf

Forked from rpms/dnf 2 years ago
Clone
Blob Blame History Raw
From c01dc4f6a6cdc7297b9ffacc6fe96142f02e4d54 Mon Sep 17 00:00:00 2001
From: Marek Blaha <mblaha@redhat.com>
Date: Mon, 8 Mar 2021 16:22:58 +0100
Subject: [PATCH] Update translations

---
 po/CMakeLists.txt |    1 +
 po/dnf.pot        |  943 +++++++++++++++++++-------------------
 po/fr.po          | 1042 ++++++++++++++++++++++--------------------
 po/ja.po          | 1112 +++++++++++++++++++++++----------------------
 po/ko.po          |  965 ++++++++++++++++++++-------------------
 po/zh_CN.po       | 1086 +++++++++++++++++++++----------------------
 6 files changed, 2649 insertions(+), 2500 deletions(-)

diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt
index 1e17f342..40d020dd 100644
--- a/po/CMakeLists.txt
+++ b/po/CMakeLists.txt
@@ -15,6 +15,7 @@ if (GIT_FOUND)
         OUTPUT_VARIABLE CURRENT_BRANCH
         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
         )
+    set(CURRENT_BRANCH "rhel-8")
 
     # output _weblate-clone is never created so the clonning of weblate repo is always processed
     # and fresh *.po files are used
diff --git a/po/dnf.pot b/po/dnf.pot
index f7101537..18d8c5ba 100644
--- a/po/dnf.pot
+++ b/po/dnf.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-10-05 09:18-0400\n"
+"POT-Creation-Date: 2021-02-22 09:22+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -73,7 +73,7 @@ msgstr ""
 msgid "Unknown configuration option: %s = %s in %s"
 msgstr ""
 
-#: dnf/automatic/main.py:237 dnf/cli/cli.py:299
+#: dnf/automatic/main.py:237 dnf/cli/cli.py:304
 msgid "GPG check FAILED"
 msgstr ""
 
@@ -86,9 +86,10 @@ msgid "Started dnf-automatic."
 msgstr ""
 
 #: dnf/automatic/main.py:308
-#, python-format
-msgid "Sleep for %s seconds"
-msgstr ""
+msgid "Sleep for {} second"
+msgid_plural "Sleep for {} seconds"
+msgstr[0] ""
+msgstr[1] ""
 
 #: dnf/automatic/main.py:315
 msgid "System is off-line."
@@ -100,7 +101,7 @@ msgstr ""
 msgid "Error: %s"
 msgstr ""
 
-#: dnf/base.py:146
+#: dnf/base.py:146 dnf/base.py:472 dnf/base.py:474
 msgid "loading repo '{}' failure: {}"
 msgstr ""
 
@@ -108,237 +109,237 @@ msgstr ""
 msgid "Loading repository '{}' has failed"
 msgstr ""
 
-#: dnf/base.py:320
+#: dnf/base.py:322
 msgid "Metadata timer caching disabled when running on metered connection."
 msgstr ""
 
-#: dnf/base.py:325
+#: dnf/base.py:327
 msgid "Metadata timer caching disabled when running on a battery."
 msgstr ""
 
-#: dnf/base.py:330
+#: dnf/base.py:332
 msgid "Metadata timer caching disabled."
 msgstr ""
 
-#: dnf/base.py:335
+#: dnf/base.py:337
 msgid "Metadata cache refreshed recently."
 msgstr ""
 
-#: dnf/base.py:341 dnf/cli/commands/__init__.py:91
+#: dnf/base.py:343 dnf/cli/commands/__init__.py:91
 msgid "There are no enabled repositories in \"{}\"."
 msgstr ""
 
-#: dnf/base.py:348
+#: dnf/base.py:350
 #, python-format
 msgid "%s: will never be expired and will not be refreshed."
 msgstr ""
 
-#: dnf/base.py:350
+#: dnf/base.py:352
 #, python-format
 msgid "%s: has expired and will be refreshed."
 msgstr ""
 
 #. expires within the checking period:
-#: dnf/base.py:354
+#: dnf/base.py:356
 #, python-format
 msgid "%s: metadata will expire after %d seconds and will be refreshed now"
 msgstr ""
 
-#: dnf/base.py:358
+#: dnf/base.py:360
 #, python-format
 msgid "%s: will expire after %d seconds."
 msgstr ""
 
 #. performs the md sync
-#: dnf/base.py:364
+#: dnf/base.py:366
 msgid "Metadata cache created."
 msgstr ""
 
-#: dnf/base.py:397
+#: dnf/base.py:399 dnf/base.py:466
 #, python-format
 msgid "%s: using metadata from %s."
 msgstr ""
 
-#: dnf/base.py:409
+#: dnf/base.py:411 dnf/base.py:479
 #, python-format
 msgid "Ignoring repositories: %s"
 msgstr ""
 
-#: dnf/base.py:412
+#: dnf/base.py:414
 #, python-format
 msgid "Last metadata expiration check: %s ago on %s."
 msgstr ""
 
-#: dnf/base.py:443
+#: dnf/base.py:507
 msgid ""
 "The downloaded packages were saved in cache until the next successful "
 "transaction."
 msgstr ""
 
-#: dnf/base.py:445
+#: dnf/base.py:509
 #, python-format
 msgid "You can remove cached packages by executing '%s'."
 msgstr ""
 
-#: dnf/base.py:535
+#: dnf/base.py:599
 #, python-format
 msgid "Invalid tsflag in config file: %s"
 msgstr ""
 
-#: dnf/base.py:591
+#: dnf/base.py:655
 #, python-format
 msgid "Failed to add groups file for repository: %s - %s"
 msgstr ""
 
-#: dnf/base.py:823
+#: dnf/base.py:887
 msgid "Running transaction check"
 msgstr ""
 
-#: dnf/base.py:831
+#: dnf/base.py:895
 msgid "Error: transaction check vs depsolve:"
 msgstr ""
 
-#: dnf/base.py:837
+#: dnf/base.py:901
 msgid "Transaction check succeeded."
 msgstr ""
 
-#: dnf/base.py:840
+#: dnf/base.py:904
 msgid "Running transaction test"
 msgstr ""
 
-#: dnf/base.py:850 dnf/base.py:992
+#: dnf/base.py:914 dnf/base.py:1065
 msgid "RPM: {}"
 msgstr ""
 
-#: dnf/base.py:851
+#: dnf/base.py:915
 msgid "Transaction test error:"
 msgstr ""
 
-#: dnf/base.py:862
+#: dnf/base.py:926
 msgid "Transaction test succeeded."
 msgstr ""
 
-#: dnf/base.py:883
+#: dnf/base.py:947
 msgid "Running transaction"
 msgstr ""
 
-#: dnf/base.py:911
+#: dnf/base.py:984
 msgid "Disk Requirements:"
 msgstr ""
 
-#: dnf/base.py:914
+#: dnf/base.py:987
 #, python-brace-format
 msgid "At least {0}MB more space needed on the {1} filesystem."
 msgid_plural "At least {0}MB more space needed on the {1} filesystem."
 msgstr[0] ""
 msgstr[1] ""
 
-#: dnf/base.py:921
+#: dnf/base.py:994
 msgid "Error Summary"
 msgstr ""
 
-#: dnf/base.py:947
+#: dnf/base.py:1020
 #, python-brace-format
 msgid "RPMDB altered outside of {prog}."
 msgstr ""
 
-#: dnf/base.py:993 dnf/base.py:1001
+#: dnf/base.py:1066 dnf/base.py:1074
 msgid "Could not run transaction."
 msgstr ""
 
-#: dnf/base.py:996
+#: dnf/base.py:1069
 msgid "Transaction couldn't start:"
 msgstr ""
 
-#: dnf/base.py:1010
+#: dnf/base.py:1083
 #, python-format
 msgid "Failed to remove transaction file %s"
 msgstr ""
 
-#: dnf/base.py:1092
+#: dnf/base.py:1165
 msgid "Some packages were not downloaded. Retrying."
 msgstr ""
 
-#: dnf/base.py:1122
+#: dnf/base.py:1195
 #, python-format
 msgid "Delta RPMs reduced %.1f MB of updates to %.1f MB (%d.1%% saved)"
 msgstr ""
 
-#: dnf/base.py:1125
+#: dnf/base.py:1198
 #, python-format
 msgid ""
 "Failed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)"
 msgstr ""
 
-#: dnf/base.py:1167
+#: dnf/base.py:1240
 msgid "Cannot add local packages, because transaction job already exists"
 msgstr ""
 
-#: dnf/base.py:1181
+#: dnf/base.py:1254
 msgid "Could not open: {}"
 msgstr ""
 
-#: dnf/base.py:1219
+#: dnf/base.py:1292
 #, python-format
 msgid "Public key for %s is not installed"
 msgstr ""
 
-#: dnf/base.py:1223
+#: dnf/base.py:1296
 #, python-format
 msgid "Problem opening package %s"
 msgstr ""
 
-#: dnf/base.py:1231
+#: dnf/base.py:1304
 #, python-format
 msgid "Public key for %s is not trusted"
 msgstr ""
 
-#: dnf/base.py:1235
+#: dnf/base.py:1308
 #, python-format
 msgid "Package %s is not signed"
 msgstr ""
 
-#: dnf/base.py:1265
+#: dnf/base.py:1338
 #, python-format
 msgid "Cannot remove %s"
 msgstr ""
 
-#: dnf/base.py:1269
+#: dnf/base.py:1342
 #, python-format
 msgid "%s removed"
 msgstr ""
 
-#: dnf/base.py:1549
+#: dnf/base.py:1622
 msgid "No match for group package \"{}\""
 msgstr ""
 
-#: dnf/base.py:1635
+#: dnf/base.py:1708
 #, python-format
 msgid "Adding packages from group '%s': %s"
 msgstr ""
 
-#: dnf/base.py:1658 dnf/cli/cli.py:219 dnf/cli/commands/__init__.py:442
+#: dnf/base.py:1731 dnf/cli/cli.py:220 dnf/cli/commands/__init__.py:442
 #: dnf/cli/commands/__init__.py:499 dnf/cli/commands/__init__.py:592
 #: dnf/cli/commands/__init__.py:641 dnf/cli/commands/install.py:80
 #: dnf/cli/commands/install.py:103 dnf/cli/commands/install.py:110
 msgid "Nothing to do."
 msgstr ""
 
-#: dnf/base.py:1676
+#: dnf/base.py:1749
 msgid "No groups marked for removal."
 msgstr ""
 
-#: dnf/base.py:1710
+#: dnf/base.py:1783
 msgid "No group marked for upgrade."
 msgstr ""
 
-#: dnf/base.py:1925
+#: dnf/base.py:1997
 #, python-format
 msgid "Package %s not installed, cannot downgrade it."
 msgstr ""
 
-#: dnf/base.py:1927 dnf/base.py:1946 dnf/base.py:1959 dnf/base.py:1980
-#: dnf/base.py:2029 dnf/base.py:2037 dnf/base.py:2172 dnf/cli/cli.py:411
+#: dnf/base.py:1999 dnf/base.py:2018 dnf/base.py:2031 dnf/base.py:2052
+#: dnf/base.py:2101 dnf/base.py:2109 dnf/base.py:2243 dnf/cli/cli.py:416
 #: dnf/cli/commands/__init__.py:425 dnf/cli/commands/__init__.py:482
 #: dnf/cli/commands/__init__.py:586 dnf/cli/commands/__init__.py:633
 #: dnf/cli/commands/__init__.py:711 dnf/cli/commands/install.py:147
@@ -348,141 +349,127 @@ msgstr ""
 msgid "No match for argument: %s"
 msgstr ""
 
-#: dnf/base.py:1934
+#: dnf/base.py:2006
 #, python-format
 msgid "Package %s of lower version already installed, cannot downgrade it."
 msgstr ""
 
-#: dnf/base.py:1957
+#: dnf/base.py:2029
 #, python-format
 msgid "Package %s not installed, cannot reinstall it."
 msgstr ""
 
-#: dnf/base.py:1972
+#: dnf/base.py:2044
 #, python-format
 msgid "File %s is a source package and cannot be updated, ignoring."
 msgstr ""
 
-#: dnf/base.py:1978
+#: dnf/base.py:2050
 #, python-format
 msgid "Package %s not installed, cannot update it."
 msgstr ""
 
-#: dnf/base.py:1987
+#: dnf/base.py:2059
 #, python-format
 msgid ""
 "The same or higher version of %s is already installed, cannot update it."
 msgstr ""
 
-#: dnf/base.py:2026 dnf/cli/commands/reinstall.py:81
+#: dnf/base.py:2098 dnf/cli/commands/reinstall.py:81
 #, python-format
 msgid "Package %s available, but not installed."
 msgstr ""
 
-#: dnf/base.py:2032
+#: dnf/base.py:2104
 #, python-format
 msgid "Package %s available, but installed for different architecture."
 msgstr ""
 
-#: dnf/base.py:2057 dnf/base.py:2250 dnf/cli/cli.py:668 dnf/cli/cli.py:699
+#: dnf/base.py:2129
 #, python-format
 msgid "No package %s installed."
 msgstr ""
 
-#: dnf/base.py:2075 dnf/cli/commands/install.py:136
+#: dnf/base.py:2147 dnf/cli/commands/install.py:136
 #: dnf/cli/commands/remove.py:133
 #, python-format
 msgid "Not a valid form: %s"
 msgstr ""
 
-#: dnf/base.py:2091 dnf/cli/commands/__init__.py:681
-#: dnf/cli/commands/remove.py:163
+#: dnf/base.py:2162 dnf/cli/commands/__init__.py:681
+#: dnf/cli/commands/remove.py:162
 msgid "No packages marked for removal."
 msgstr ""
 
-#: dnf/base.py:2179 dnf/cli/cli.py:422
+#: dnf/base.py:2250 dnf/cli/cli.py:427
 #, python-format
 msgid "Packages for argument %s available, but not installed."
 msgstr ""
 
-#: dnf/base.py:2184
+#: dnf/base.py:2255
 #, python-format
 msgid "Package %s of lowest version already installed, cannot downgrade it."
 msgstr ""
 
-#: dnf/base.py:2242
-msgid "Action not handled: {}"
-msgstr ""
-
-#: dnf/base.py:2256 dnf/cli/cli.py:419 dnf/cli/cli.py:673 dnf/cli/cli.py:703
-#: dnf/cli/commands/group.py:400 dnf/cli/commands/history.py:169
-#, python-format
-msgid "No package %s available."
-msgstr ""
-
-#: dnf/base.py:2269
-msgid "no package matched"
-msgstr ""
-
-#: dnf/base.py:2290
+#: dnf/base.py:2302
 msgid "No security updates needed, but {} update available"
 msgstr ""
 
-#: dnf/base.py:2292
+#: dnf/base.py:2304
 msgid "No security updates needed, but {} updates available"
 msgstr ""
 
-#: dnf/base.py:2296
+#: dnf/base.py:2308
 msgid "No security updates needed for \"{}\", but {} update available"
 msgstr ""
 
-#: dnf/base.py:2298
+#: dnf/base.py:2310
 msgid "No security updates needed for \"{}\", but {} updates available"
 msgstr ""
 
 #. raise an exception, because po.repoid is not in self.repos
-#: dnf/base.py:2319
+#: dnf/base.py:2331
 #, python-format
 msgid "Unable to retrieve a key for a commandline package: %s"
 msgstr ""
 
-#: dnf/base.py:2327
+#: dnf/base.py:2339
 #, python-format
 msgid ". Failing package is: %s"
 msgstr ""
 
-#: dnf/base.py:2328
+#: dnf/base.py:2340
 #, python-format
 msgid "GPG Keys are configured as: %s"
 msgstr ""
 
-#: dnf/base.py:2340
+#: dnf/base.py:2352
 #, python-format
 msgid "GPG key at %s (0x%s) is already installed"
 msgstr ""
 
-#: dnf/base.py:2373
+#: dnf/base.py:2385
 msgid "The key has been approved."
 msgstr ""
 
-#: dnf/base.py:2376
+#: dnf/base.py:2388
 msgid "The key has been rejected."
 msgstr ""
 
-#: dnf/base.py:2409
+#: dnf/base.py:2421
 #, python-format
 msgid "Key import failed (code %d)"
 msgstr ""
 
-#: dnf/base.py:2411
+#: dnf/base.py:2423
 msgid "Key imported successfully"
 msgstr ""
 
-#: dnf/base.py:2415
+#: dnf/base.py:2427
 msgid "Didn't install any keys"
 msgstr ""
 
-#: dnf/base.py:2418
+#: dnf/base.py:2430
 #, python-format
 msgid ""
 "The GPG keys listed for the \"%s\" repository are already installed but they "
@@ -490,49 +477,49 @@ msgid ""
 "Check that the correct key URLs are configured for this repository."
 msgstr ""
 
-#: dnf/base.py:2429
+#: dnf/base.py:2441
 msgid "Import of key(s) didn't help, wrong key(s)?"
 msgstr ""
 
-#: dnf/base.py:2482
+#: dnf/base.py:2494
 msgid "  * Maybe you meant: {}"
 msgstr ""
 
-#: dnf/base.py:2514
+#: dnf/base.py:2526
 msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum"
 msgstr ""
 
-#: dnf/base.py:2517
+#: dnf/base.py:2529
 msgid "Some packages from local repository have incorrect checksum"
 msgstr ""
 
-#: dnf/base.py:2520
+#: dnf/base.py:2532
 msgid "Package \"{}\" from repository \"{}\" has incorrect checksum"
 msgstr ""
 
-#: dnf/base.py:2523
+#: dnf/base.py:2535
 msgid ""
 "Some packages have invalid cache, but cannot be downloaded due to \"--"
 "cacheonly\" option"
 msgstr ""
 
-#: dnf/base.py:2541 dnf/base.py:2561
+#: dnf/base.py:2553 dnf/base.py:2573
 msgid "No match for argument"
 msgstr ""
 
-#: dnf/base.py:2549 dnf/base.py:2569
+#: dnf/base.py:2561 dnf/base.py:2581
 msgid "All matches were filtered out by exclude filtering for argument"
 msgstr ""
 
-#: dnf/base.py:2551
+#: dnf/base.py:2563
 msgid "All matches were filtered out by modular filtering for argument"
 msgstr ""
 
-#: dnf/base.py:2567
+#: dnf/base.py:2579
 msgid "All matches were installed from a different repository for argument"
 msgstr ""
 
-#: dnf/base.py:2583
+#: dnf/base.py:2626
 #, python-format
 msgid "Package %s is already installed."
 msgstr ""
@@ -552,8 +539,8 @@ msgstr ""
 msgid "Cannot read file \"%s\": %s"
 msgstr ""
 
-#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:902
-#: dnf/cli/cli.py:906 dnf/cli/commands/alias.py:108
+#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:803
+#: dnf/cli/cli.py:807 dnf/cli/commands/alias.py:108
 #, python-format
 msgid "Config error: %s"
 msgstr ""
@@ -584,7 +571,7 @@ msgid ""
 "stream '{2}'"
 msgstr ""
 
-#: dnf/cli/cli.py:172
+#: dnf/cli/cli.py:173
 #, python-brace-format
 msgid ""
 "It is not possible to switch enabled streams of a module.\n"
@@ -593,199 +580,178 @@ msgid ""
 "reset the module, you can install the other stream."
 msgstr ""
 
-#: dnf/cli/cli.py:210
+#: dnf/cli/cli.py:211
 #, python-brace-format
 msgid "{prog} will only download packages for the transaction."
 msgstr ""
 
-#: dnf/cli/cli.py:213
+#: dnf/cli/cli.py:214
 #, python-brace-format
 msgid ""
 "{prog} will only download packages, install gpg keys, and check the "
 "transaction."
 msgstr ""
 
-#: dnf/cli/cli.py:217
+#: dnf/cli/cli.py:218
 msgid "Operation aborted."
 msgstr ""
 
-#: dnf/cli/cli.py:224
+#: dnf/cli/cli.py:225
 msgid "Downloading Packages:"
 msgstr ""
 
-#: dnf/cli/cli.py:230
+#: dnf/cli/cli.py:231
 msgid "Error downloading packages:"
 msgstr ""
 
-#: dnf/cli/cli.py:258
+#: dnf/cli/cli.py:263
 msgid "Transaction failed"
 msgstr ""
 
-#: dnf/cli/cli.py:281
+#: dnf/cli/cli.py:286
 msgid ""
 "Refusing to automatically import keys when running unattended.\n"
 "Use \"-y\" to override."
 msgstr ""
 
-#: dnf/cli/cli.py:331
+#: dnf/cli/cli.py:336
 msgid "Changelogs for {}"
 msgstr ""
 
-#: dnf/cli/cli.py:364 dnf/cli/cli.py:505 dnf/cli/cli.py:511
+#: dnf/cli/cli.py:369 dnf/cli/cli.py:510 dnf/cli/cli.py:516
 msgid "Obsoleting Packages"
 msgstr ""
 
-#: dnf/cli/cli.py:393
+#: dnf/cli/cli.py:398
 msgid "No packages marked for distribution synchronization."
 msgstr ""
 
-#: dnf/cli/cli.py:428
+#: dnf/cli/cli.py:424 dnf/cli/commands/group.py:395
+#, python-format
+msgid "No package %s available."
+msgstr ""
+
+#: dnf/cli/cli.py:433
 msgid "No packages marked for downgrade."
 msgstr ""
 
-#: dnf/cli/cli.py:479
+#: dnf/cli/cli.py:484
 msgid "Installed Packages"
 msgstr ""
 
-#: dnf/cli/cli.py:487
+#: dnf/cli/cli.py:492
 msgid "Available Packages"
 msgstr ""
 
-#: dnf/cli/cli.py:491
+#: dnf/cli/cli.py:496
 msgid "Autoremove Packages"
 msgstr ""
 
-#: dnf/cli/cli.py:493
+#: dnf/cli/cli.py:498
 msgid "Extra Packages"
 msgstr ""
 
-#: dnf/cli/cli.py:497
+#: dnf/cli/cli.py:502
 msgid "Available Upgrades"
 msgstr ""
 
-#: dnf/cli/cli.py:513
+#: dnf/cli/cli.py:518
 msgid "Recently Added Packages"
 msgstr ""
 
-#: dnf/cli/cli.py:518
+#: dnf/cli/cli.py:522
 msgid "No matching Packages to list"
 msgstr ""
 
-#: dnf/cli/cli.py:599
+#: dnf/cli/cli.py:603
 msgid "No Matches found"
 msgstr ""
 
-#: dnf/cli/cli.py:609
-msgid "No transaction ID given"
-msgstr ""
-
-#: dnf/cli/cli.py:614
-msgid "Not found given transaction ID"
-msgstr ""
-
-#: dnf/cli/cli.py:623
-msgid "Found more than one transaction ID!"
-msgstr ""
-
-#: dnf/cli/cli.py:640
-#, python-format
-msgid "Transaction history is incomplete, before %u."
-msgstr ""
-
-#: dnf/cli/cli.py:642
-#, python-format
-msgid "Transaction history is incomplete, after %u."
-msgstr ""
-
-#: dnf/cli/cli.py:689
-msgid "Undoing transaction {}, from {}"
-msgstr ""
-
-#: dnf/cli/cli.py:769 dnf/cli/commands/shell.py:237
+#: dnf/cli/cli.py:670 dnf/cli/commands/shell.py:237
 #, python-format
 msgid "Unknown repo: '%s'"
 msgstr ""
 
-#: dnf/cli/cli.py:783
+#: dnf/cli/cli.py:684
 #, python-format
 msgid "No repository match: %s"
 msgstr ""
 
-#: dnf/cli/cli.py:817
+#: dnf/cli/cli.py:718
 msgid ""
 "This command has to be run with superuser privileges (under the root user on "
 "most systems)."
 msgstr ""
 
-#: dnf/cli/cli.py:847
+#: dnf/cli/cli.py:748
 #, python-format
 msgid "No such command: %s. Please use %s --help"
 msgstr ""
 
-#: dnf/cli/cli.py:850
+#: dnf/cli/cli.py:751
 #, python-format, python-brace-format
 msgid ""
 "It could be a {PROG} plugin command, try: \"{prog} install 'dnf-"
 "command(%s)'\""
 msgstr ""
 
-#: dnf/cli/cli.py:854
+#: dnf/cli/cli.py:755
 #, python-brace-format
 msgid ""
 "It could be a {prog} plugin command, but loading of plugins is currently "
 "disabled."
 msgstr ""
 
-#: dnf/cli/cli.py:912
+#: dnf/cli/cli.py:813
 msgid ""
 "--destdir or --downloaddir must be used with --downloadonly or download or "
 "system-upgrade command."
 msgstr ""
 
-#: dnf/cli/cli.py:918
+#: dnf/cli/cli.py:819
 msgid ""
 "--enable, --set-enabled and --disable, --set-disabled must be used with "
 "config-manager command."
 msgstr ""
 
-#: dnf/cli/cli.py:1000
+#: dnf/cli/cli.py:901
 msgid ""
 "Warning: Enforcing GPG signature check globally as per active RPM security "
 "policy (see 'gpgcheck' in dnf.conf(5) for how to squelch this message)"
 msgstr ""
 
-#: dnf/cli/cli.py:1020
+#: dnf/cli/cli.py:921
 msgid "Config file \"{}\" does not exist"
 msgstr ""
 
-#: dnf/cli/cli.py:1040
+#: dnf/cli/cli.py:941
 msgid ""
 "Unable to detect release version (use '--releasever' to specify release "
 "version)"
 msgstr ""
 
-#: dnf/cli/cli.py:1127 dnf/cli/commands/repoquery.py:471
+#: dnf/cli/cli.py:1028 dnf/cli/commands/repoquery.py:471
 msgid "argument {}: not allowed with argument {}"
 msgstr ""
 
-#: dnf/cli/cli.py:1134
+#: dnf/cli/cli.py:1035
 #, python-format
 msgid "Command \"%s\" already defined"
 msgstr ""
 
-#: dnf/cli/cli.py:1154
+#: dnf/cli/cli.py:1055
 msgid "Excludes in dnf.conf: "
 msgstr ""
 
-#: dnf/cli/cli.py:1157
+#: dnf/cli/cli.py:1058
 msgid "Includes in dnf.conf: "
 msgstr ""
 
-#: dnf/cli/cli.py:1160
+#: dnf/cli/cli.py:1061
 msgid "Excludes in repo "
 msgstr ""
 
-#: dnf/cli/cli.py:1163
+#: dnf/cli/cli.py:1064
 msgid "Includes in repo "
 msgstr ""
 
@@ -831,7 +797,7 @@ msgid "show all packages (default)"
 msgstr ""
 
 #: dnf/cli/commands/__init__.py:171 dnf/cli/commands/__init__.py:743
-#: dnf/cli/commands/module.py:351
+#: dnf/cli/commands/module.py:373
 msgid "show only available packages"
 msgstr ""
 
@@ -1157,78 +1123,78 @@ msgstr ""
 msgid "No group data available for configured repositories."
 msgstr ""
 
-#: dnf/cli/commands/group.py:129
+#: dnf/cli/commands/group.py:126
 #, python-format
 msgid "Warning: Group %s does not exist."
 msgstr ""
 
-#: dnf/cli/commands/group.py:170
+#: dnf/cli/commands/group.py:167
 msgid "Warning: No groups match:"
 msgstr ""
 
-#: dnf/cli/commands/group.py:182 dnf/cli/commands/group.py:193
-#: dnf/cli/output.py:1226
+#: dnf/cli/commands/group.py:179 dnf/cli/commands/group.py:190
+#: dnf/cli/output.py:1139
 msgid "<name-unset>"
 msgstr ""
 
-#: dnf/cli/commands/group.py:199
+#: dnf/cli/commands/group.py:196
 msgid "Available Environment Groups:"
 msgstr ""
 
-#: dnf/cli/commands/group.py:201
+#: dnf/cli/commands/group.py:198
 msgid "Installed Environment Groups:"
 msgstr ""
 
-#: dnf/cli/commands/group.py:208 dnf/cli/commands/group.py:294
+#: dnf/cli/commands/group.py:205 dnf/cli/commands/group.py:291
 msgid "Installed Groups:"
 msgstr ""
 
-#: dnf/cli/commands/group.py:215 dnf/cli/commands/group.py:301
+#: dnf/cli/commands/group.py:212 dnf/cli/commands/group.py:298
 msgid "Installed Language Groups:"
 msgstr ""
 
-#: dnf/cli/commands/group.py:225 dnf/cli/commands/group.py:308
+#: dnf/cli/commands/group.py:222 dnf/cli/commands/group.py:305
 msgid "Available Groups:"
 msgstr ""
 
-#: dnf/cli/commands/group.py:232 dnf/cli/commands/group.py:315
+#: dnf/cli/commands/group.py:229 dnf/cli/commands/group.py:312
 msgid "Available Language Groups:"
 msgstr ""
 
-#: dnf/cli/commands/group.py:322
+#: dnf/cli/commands/group.py:319
 msgid "include optional packages from group"
 msgstr ""
 
-#: dnf/cli/commands/group.py:325
+#: dnf/cli/commands/group.py:322
 msgid "show also hidden groups"
 msgstr ""
 
-#: dnf/cli/commands/group.py:327
+#: dnf/cli/commands/group.py:324
 msgid "show only installed groups"
 msgstr ""
 
-#: dnf/cli/commands/group.py:329
+#: dnf/cli/commands/group.py:326
 msgid "show only available groups"
 msgstr ""
 
-#: dnf/cli/commands/group.py:331
+#: dnf/cli/commands/group.py:328
 msgid "show also ID of groups"
 msgstr ""
 
-#: dnf/cli/commands/group.py:333
+#: dnf/cli/commands/group.py:330
 msgid "available subcommands: {} (default), {}"
 msgstr ""
 
-#: dnf/cli/commands/group.py:337
+#: dnf/cli/commands/group.py:334
 msgid "argument for group subcommand"
 msgstr ""
 
-#: dnf/cli/commands/group.py:346
+#: dnf/cli/commands/group.py:343
 #, python-format
 msgid "Invalid groups sub-command, use: %s."
 msgstr ""
 
-#: dnf/cli/commands/group.py:403
+#: dnf/cli/commands/group.py:398
 msgid "Unable to find a mandatory group package."
 msgstr ""
 
@@ -1272,69 +1238,90 @@ msgstr ""
 msgid "More than one argument given as transaction file name."
 msgstr ""
 
-#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:126
+#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:130
 msgid "No transaction ID or package name given."
 msgstr ""
 
-#: dnf/cli/commands/history.py:138
+#: dnf/cli/commands/history.py:142
 #, python-format
 msgid "You don't have access to the history DB: %s"
 msgstr ""
 
-#: dnf/cli/commands/history.py:147
+#: dnf/cli/commands/history.py:151
 #, python-format
 msgid ""
 "Cannot undo transaction %s, doing so would result in an inconsistent package "
 "database."
 msgstr ""
 
-#: dnf/cli/commands/history.py:152
+#: dnf/cli/commands/history.py:156
 #, python-format
 msgid ""
 "Cannot rollback transaction %s, doing so would result in an inconsistent "
 "package database."
 msgstr ""
 
-#: dnf/cli/commands/history.py:222
+#: dnf/cli/commands/history.py:175
+msgid "No transaction ID given"
+msgstr ""
+
+#: dnf/cli/commands/history.py:179
+#, python-brace-format
+msgid "Transaction ID \"{0}\" not found."
+msgstr ""
+
+#: dnf/cli/commands/history.py:185
+msgid "Found more than one transaction ID!"
+msgstr ""
+
+#: dnf/cli/commands/history.py:203
+#, python-format
+msgid "Transaction history is incomplete, before %u."
+msgstr ""
+
+#: dnf/cli/commands/history.py:205
+#, python-format
+msgid "Transaction history is incomplete, after %u."
+msgstr ""
+
+#: dnf/cli/commands/history.py:256
+msgid "No packages to list"
+msgstr ""
+
+#: dnf/cli/commands/history.py:279
 msgid ""
 "Invalid transaction ID range definition '{}'.\n"
 "Use '<transaction-id>..<transaction-id>'."
 msgstr ""
 
-#: dnf/cli/commands/history.py:226
+#: dnf/cli/commands/history.py:283
 msgid ""
 "Can't convert '{}' to transaction ID.\n"
 "Use '<number>', 'last', 'last-<number>'."
 msgstr ""
 
-#: dnf/cli/commands/history.py:255
+#: dnf/cli/commands/history.py:312
 msgid "No transaction which manipulates package '{}' was found."
 msgstr ""
 
-#: dnf/cli/commands/history.py:305
-#, python-brace-format
-msgid "Transaction ID \"{id}\" not found."
-msgstr ""
-
-#: dnf/cli/commands/history.py:313
+#: dnf/cli/commands/history.py:357
 msgid "{} exists, overwrite?"
 msgstr ""
 
-#: dnf/cli/commands/history.py:316
+#: dnf/cli/commands/history.py:360
 msgid "Not overwriting {}, exiting."
 msgstr ""
 
-#: dnf/cli/commands/history.py:323
+#: dnf/cli/commands/history.py:367
 msgid "Transaction saved to {}."
 msgstr ""
 
-#: dnf/cli/commands/history.py:326
+#: dnf/cli/commands/history.py:370
 msgid "Error storing transaction: {}"
 msgstr ""
 
-#: dnf/cli/commands/history.py:350
-msgid ""
-"Warning, the following problems occurred while replaying the transaction:"
+#: dnf/cli/commands/history.py:386
+msgid "Warning, the following problems occurred while running a transaction:"
 msgstr ""
 
 #: dnf/cli/commands/install.py:47
@@ -1354,7 +1341,7 @@ msgstr ""
 msgid "Not a valid rpm file path: %s"
 msgstr ""
 
-#: dnf/cli/commands/install.py:167
+#: dnf/cli/commands/install.py:166
 #, python-brace-format
 msgid "There are following alternatives for \"{0}\": {1}"
 msgstr ""
@@ -1394,7 +1381,7 @@ msgid "%s marked as group installed."
 msgstr ""
 
 #: dnf/cli/commands/mark.py:85 dnf/cli/commands/shell.py:129
-#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:279
+#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:282
 msgid "Error:"
 msgstr ""
 
@@ -1450,42 +1437,46 @@ msgid "Package {} belongs to multiple modules, skipping"
 msgstr ""
 
 #: dnf/cli/commands/module.py:277
+msgid "switch a module to a stream and distrosync rpm packages"
+msgstr ""
+
+#: dnf/cli/commands/module.py:299
 msgid "list modular packages"
 msgstr ""
 
-#: dnf/cli/commands/module.py:292
+#: dnf/cli/commands/module.py:314
 msgid "list packages belonging to a module"
 msgstr ""
 
-#: dnf/cli/commands/module.py:327
+#: dnf/cli/commands/module.py:349
 msgid "Interact with Modules."
 msgstr ""
 
-#: dnf/cli/commands/module.py:340
+#: dnf/cli/commands/module.py:362
 msgid "show only enabled modules"
 msgstr ""
 
-#: dnf/cli/commands/module.py:343
+#: dnf/cli/commands/module.py:365
 msgid "show only disabled modules"
 msgstr ""
 
-#: dnf/cli/commands/module.py:346
+#: dnf/cli/commands/module.py:368
 msgid "show only installed modules or packages"
 msgstr ""
 
-#: dnf/cli/commands/module.py:349
+#: dnf/cli/commands/module.py:371
 msgid "show profile content"
 msgstr ""
 
-#: dnf/cli/commands/module.py:354
+#: dnf/cli/commands/module.py:376
 msgid "remove all modular packages"
 msgstr ""
 
-#: dnf/cli/commands/module.py:364
+#: dnf/cli/commands/module.py:386
 msgid "Module specification"
 msgstr ""
 
-#: dnf/cli/commands/module.py:386
+#: dnf/cli/commands/module.py:408
 msgid "{} {} {}: too few arguments"
 msgstr ""
 
@@ -1960,22 +1951,22 @@ msgstr ""
 msgid "Keyword to search for"
 msgstr ""
 
-#: dnf/cli/commands/search.py:61 dnf/cli/output.py:506
+#: dnf/cli/commands/search.py:61 dnf/cli/output.py:460
 msgctxt "long"
 msgid "Name"
 msgstr ""
 
-#: dnf/cli/commands/search.py:62 dnf/cli/output.py:559
+#: dnf/cli/commands/search.py:62 dnf/cli/output.py:513
 msgctxt "long"
 msgid "Summary"
 msgstr ""
 
-#: dnf/cli/commands/search.py:63 dnf/cli/output.py:569
+#: dnf/cli/commands/search.py:63 dnf/cli/output.py:523
 msgctxt "long"
 msgid "Description"
 msgstr ""
 
-#: dnf/cli/commands/search.py:64 dnf/cli/output.py:562
+#: dnf/cli/commands/search.py:64 dnf/cli/output.py:516
 msgid "URL"
 msgstr ""
 
@@ -2087,16 +2078,16 @@ msgid ""
 "exit (or quit)           exit the shell"
 msgstr ""
 
-#: dnf/cli/commands/shell.py:259
+#: dnf/cli/commands/shell.py:262
 #, python-format
 msgid "Error: Cannot open %s for reading"
 msgstr ""
 
-#: dnf/cli/commands/shell.py:281 dnf/cli/main.py:187
+#: dnf/cli/commands/shell.py:284 dnf/cli/main.py:187
 msgid "Complete!"
 msgstr ""
 
-#: dnf/cli/commands/shell.py:291
+#: dnf/cli/commands/shell.py:294
 msgid "Leaving Shell"
 msgstr ""
 
@@ -2287,8 +2278,8 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1499
-#: dnf/cli/output.py:1772 dnf/cli/output.py:1774
+#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1652
+#: dnf/cli/output.py:1654 dnf/util.py:591
 msgid "Installed"
 msgstr ""
 
@@ -2609,13 +2600,13 @@ msgstr ""
 #. Translators: This is abbreviated 'Name'. Should be no longer
 #. than 12 characters. You can use the full version if it is short
 #. enough in your language.
-#: dnf/cli/output.py:505
+#: dnf/cli/output.py:459
 msgctxt "short"
 msgid "Name"
 msgstr ""
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:511
+#: dnf/cli/output.py:465
 msgid "Epoch"
 msgstr ""
 
@@ -2623,38 +2614,38 @@ msgstr ""
 #. use the full (unabbreviated) term 'Version' if you think that
 #. the translation to your language is not too long and will
 #. always fit to limited space.
-#: dnf/cli/output.py:512 dnf/cli/output.py:1335
+#: dnf/cli/output.py:466 dnf/cli/output.py:1248
 msgctxt "short"
 msgid "Version"
 msgstr ""
 
 #. Translators: This is the full (unabbreviated) term 'Version'.
-#: dnf/cli/output.py:513 dnf/cli/output.py:1337
+#: dnf/cli/output.py:467 dnf/cli/output.py:1250
 msgctxt "long"
 msgid "Version"
 msgstr ""
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:516
+#: dnf/cli/output.py:470
 msgid "Release"
 msgstr ""
 
 #. Translators: This is abbreviated 'Architecture', used when
 #. we have not enough space to display the full word.
-#: dnf/cli/output.py:517 dnf/cli/output.py:1326
+#: dnf/cli/output.py:471 dnf/cli/output.py:1239
 msgctxt "short"
 msgid "Arch"
 msgstr ""
 
 #. Translators: This is the full word 'Architecture', used when
 #. we have enough space.
-#: dnf/cli/output.py:518 dnf/cli/output.py:1329
+#: dnf/cli/output.py:472 dnf/cli/output.py:1242
 msgctxt "long"
 msgid "Architecture"
 msgstr ""
 
 #. Translators: This is the full (unabbreviated) term 'Size'.
-#: dnf/cli/output.py:520 dnf/cli/output.py:1352
+#: dnf/cli/output.py:474 dnf/cli/output.py:1265
 msgctxt "long"
 msgid "Size"
 msgstr ""
@@ -2663,32 +2654,32 @@ msgstr ""
 #. not be longer than 5 characters. If the term 'Size' in your
 #. language is not longer than 5 characters then you can use it
 #. unabbreviated.
-#: dnf/cli/output.py:520 dnf/cli/output.py:1350
+#: dnf/cli/output.py:474 dnf/cli/output.py:1263
 msgctxt "short"
 msgid "Size"
 msgstr ""
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:524
+#: dnf/cli/output.py:478
 msgid "Source"
 msgstr ""
 
 #. Translators: This is abbreviated 'Repository', used when
 #. we have not enough space to display the full word.
-#: dnf/cli/output.py:525 dnf/cli/output.py:1341
+#: dnf/cli/output.py:479 dnf/cli/output.py:1254
 msgctxt "short"
 msgid "Repo"
 msgstr ""
 
 #. Translators: This is the full word 'Repository', used when
 #. we have enough space.
-#: dnf/cli/output.py:526 dnf/cli/output.py:1344
+#: dnf/cli/output.py:480 dnf/cli/output.py:1257
 msgctxt "long"
 msgid "Repository"
 msgstr ""
 
 #. Translators: This message should be no longer than 12 chars.
-#: dnf/cli/output.py:533
+#: dnf/cli/output.py:487
 msgid "From repo"
 msgstr ""
 
@@ -2696,324 +2687,320 @@ msgstr ""
 #. print(_("Committer   : %s") % ucd(pkg.committer))
 #. print(_("Committime  : %s") % time.ctime(pkg.committime))
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:539
+#: dnf/cli/output.py:493
 msgid "Packager"
 msgstr ""
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:541
+#: dnf/cli/output.py:495
 msgid "Buildtime"
 msgstr ""
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:545
+#: dnf/cli/output.py:499
 msgid "Install time"
 msgstr ""
 
 #. Translators: This message should be no longer than 12 chars.
-#: dnf/cli/output.py:554
+#: dnf/cli/output.py:508
 msgid "Installed by"
 msgstr ""
 
 #. Translators: This is abbreviated 'Summary'. Should be no longer
 #. than 12 characters. You can use the full version if it is short
 #. enough in your language.
-#: dnf/cli/output.py:558
+#: dnf/cli/output.py:512
 msgctxt "short"
 msgid "Summary"
 msgstr ""
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:564
+#: dnf/cli/output.py:518
 msgid "License"
 msgstr ""
 
 #. Translators: This is abbreviated 'Description'. Should be no longer
 #. than 12 characters. You can use the full version if it is short
 #. enough in your language.
-#: dnf/cli/output.py:568
+#: dnf/cli/output.py:522
 msgctxt "short"
 msgid "Description"
 msgstr ""
 
-#: dnf/cli/output.py:695
-msgid "No packages to list"
-msgstr ""
-
-#: dnf/cli/output.py:706
+#: dnf/cli/output.py:650
 msgid "y"
 msgstr ""
 
-#: dnf/cli/output.py:706
+#: dnf/cli/output.py:650
 msgid "yes"
 msgstr ""
 
-#: dnf/cli/output.py:707
+#: dnf/cli/output.py:651
 msgid "n"
 msgstr ""
 
-#: dnf/cli/output.py:707
+#: dnf/cli/output.py:651
 msgid "no"
 msgstr ""
 
-#: dnf/cli/output.py:711
+#: dnf/cli/output.py:655
 msgid "Is this ok [y/N]: "
 msgstr ""
 
-#: dnf/cli/output.py:715
+#: dnf/cli/output.py:659
 msgid "Is this ok [Y/n]: "
 msgstr ""
 
-#: dnf/cli/output.py:795
+#: dnf/cli/output.py:739
 #, python-format
 msgid "Group: %s"
 msgstr ""
 
-#: dnf/cli/output.py:799
+#: dnf/cli/output.py:743
 #, python-format
 msgid " Group-Id: %s"
 msgstr ""
 
-#: dnf/cli/output.py:801 dnf/cli/output.py:840
+#: dnf/cli/output.py:745 dnf/cli/output.py:784
 #, python-format
 msgid " Description: %s"
 msgstr ""
 
-#: dnf/cli/output.py:803
+#: dnf/cli/output.py:747
 #, python-format
 msgid " Language: %s"
 msgstr ""
 
-#: dnf/cli/output.py:806
+#: dnf/cli/output.py:750
 msgid " Mandatory Packages:"
 msgstr ""
 
-#: dnf/cli/output.py:807
+#: dnf/cli/output.py:751
 msgid " Default Packages:"
 msgstr ""
 
-#: dnf/cli/output.py:808
+#: dnf/cli/output.py:752
 msgid " Optional Packages:"
 msgstr ""
 
-#: dnf/cli/output.py:809
+#: dnf/cli/output.py:753
 msgid " Conditional Packages:"
 msgstr ""
 
-#: dnf/cli/output.py:834
+#: dnf/cli/output.py:778
 #, python-format
 msgid "Environment Group: %s"
 msgstr ""
 
-#: dnf/cli/output.py:837
+#: dnf/cli/output.py:781
 #, python-format
 msgid " Environment-Id: %s"
 msgstr ""
 
-#: dnf/cli/output.py:843
+#: dnf/cli/output.py:787
 msgid " Mandatory Groups:"
 msgstr ""
 
-#: dnf/cli/output.py:844
+#: dnf/cli/output.py:788
 msgid " Optional Groups:"
 msgstr ""
 
-#: dnf/cli/output.py:865
+#: dnf/cli/output.py:809
 msgid "Matched from:"
 msgstr ""
 
-#: dnf/cli/output.py:879
+#: dnf/cli/output.py:823
 #, python-format
 msgid "Filename    : %s"
 msgstr ""
 
-#: dnf/cli/output.py:904
+#: dnf/cli/output.py:848
 #, python-format
 msgid "Repo        : %s"
 msgstr ""
 
-#: dnf/cli/output.py:913
+#: dnf/cli/output.py:857
 msgid "Description : "
 msgstr ""
 
-#: dnf/cli/output.py:917
+#: dnf/cli/output.py:861
 #, python-format
 msgid "URL         : %s"
 msgstr ""
 
-#: dnf/cli/output.py:921
+#: dnf/cli/output.py:865
 #, python-format
 msgid "License     : %s"
 msgstr ""
 
-#: dnf/cli/output.py:927
+#: dnf/cli/output.py:871
 #, python-format
 msgid "Provide    : %s"
 msgstr ""
 
-#: dnf/cli/output.py:947
+#: dnf/cli/output.py:891
 #, python-format
 msgid "Other       : %s"
 msgstr ""
 
-#: dnf/cli/output.py:996
+#: dnf/cli/output.py:940
 msgid "There was an error calculating total download size"
 msgstr ""
 
-#: dnf/cli/output.py:1002
+#: dnf/cli/output.py:946
 #, python-format
 msgid "Total size: %s"
 msgstr ""
 
-#: dnf/cli/output.py:1005
+#: dnf/cli/output.py:949
 #, python-format
 msgid "Total download size: %s"
 msgstr ""
 
-#: dnf/cli/output.py:1008
+#: dnf/cli/output.py:952
 #, python-format
 msgid "Installed size: %s"
 msgstr ""
 
-#: dnf/cli/output.py:1026
+#: dnf/cli/output.py:970
 msgid "There was an error calculating installed size"
 msgstr ""
 
-#: dnf/cli/output.py:1030
+#: dnf/cli/output.py:974
 #, python-format
 msgid "Freed space: %s"
 msgstr ""
 
-#: dnf/cli/output.py:1039
+#: dnf/cli/output.py:983
 msgid "Marking packages as installed by the group:"
 msgstr ""
 
-#: dnf/cli/output.py:1046
+#: dnf/cli/output.py:990
 msgid "Marking packages as removed by the group:"
 msgstr ""
 
-#: dnf/cli/output.py:1056
+#: dnf/cli/output.py:1000
 msgid "Group"
 msgstr ""
 
-#: dnf/cli/output.py:1056
+#: dnf/cli/output.py:1000
 msgid "Packages"
 msgstr ""
 
-#: dnf/cli/output.py:1133
+#: dnf/cli/output.py:1046
 msgid "Installing group/module packages"
 msgstr ""
 
-#: dnf/cli/output.py:1134
+#: dnf/cli/output.py:1047
 msgid "Installing group packages"
 msgstr ""
 
 #. TRANSLATORS: This is for a list of packages to be installed.
-#: dnf/cli/output.py:1138
+#: dnf/cli/output.py:1051
 msgctxt "summary"
 msgid "Installing"
 msgstr ""
 
 #. TRANSLATORS: This is for a list of packages to be upgraded.
-#: dnf/cli/output.py:1140
+#: dnf/cli/output.py:1053
 msgctxt "summary"
 msgid "Upgrading"
 msgstr ""
 
 #. TRANSLATORS: This is for a list of packages to be reinstalled.
-#: dnf/cli/output.py:1142
+#: dnf/cli/output.py:1055
 msgctxt "summary"
 msgid "Reinstalling"
 msgstr ""
 
-#: dnf/cli/output.py:1144
+#: dnf/cli/output.py:1057
 msgid "Installing dependencies"
 msgstr ""
 
-#: dnf/cli/output.py:1145
+#: dnf/cli/output.py:1058
 msgid "Installing weak dependencies"
 msgstr ""
 
 #. TRANSLATORS: This is for a list of packages to be removed.
-#: dnf/cli/output.py:1147
+#: dnf/cli/output.py:1060
 msgid "Removing"
 msgstr ""
 
-#: dnf/cli/output.py:1148
+#: dnf/cli/output.py:1061
 msgid "Removing dependent packages"
 msgstr ""
 
-#: dnf/cli/output.py:1149
+#: dnf/cli/output.py:1062
 msgid "Removing unused dependencies"
 msgstr ""
 
 #. TRANSLATORS: This is for a list of packages to be downgraded.
-#: dnf/cli/output.py:1151
+#: dnf/cli/output.py:1064
 msgctxt "summary"
 msgid "Downgrading"
 msgstr ""
 
-#: dnf/cli/output.py:1176
+#: dnf/cli/output.py:1089
 msgid "Installing module profiles"
 msgstr ""
 
-#: dnf/cli/output.py:1185
+#: dnf/cli/output.py:1098
 msgid "Disabling module profiles"
 msgstr ""
 
-#: dnf/cli/output.py:1194
+#: dnf/cli/output.py:1107
 msgid "Enabling module streams"
 msgstr ""
 
-#: dnf/cli/output.py:1202
+#: dnf/cli/output.py:1115
 msgid "Switching module streams"
 msgstr ""
 
-#: dnf/cli/output.py:1210
+#: dnf/cli/output.py:1123
 msgid "Disabling modules"
 msgstr ""
 
-#: dnf/cli/output.py:1218
+#: dnf/cli/output.py:1131
 msgid "Resetting modules"
 msgstr ""
 
-#: dnf/cli/output.py:1230
+#: dnf/cli/output.py:1143
 msgid "Installing Environment Groups"
 msgstr ""
 
-#: dnf/cli/output.py:1237
+#: dnf/cli/output.py:1150
 msgid "Upgrading Environment Groups"
 msgstr ""
 
-#: dnf/cli/output.py:1244
+#: dnf/cli/output.py:1157
 msgid "Removing Environment Groups"
 msgstr ""
 
-#: dnf/cli/output.py:1251
+#: dnf/cli/output.py:1164
 msgid "Installing Groups"
 msgstr ""
 
-#: dnf/cli/output.py:1258
+#: dnf/cli/output.py:1171
 msgid "Upgrading Groups"
 msgstr ""
 
-#: dnf/cli/output.py:1265
+#: dnf/cli/output.py:1178
 msgid "Removing Groups"
 msgstr ""
 
-#: dnf/cli/output.py:1281
+#: dnf/cli/output.py:1194
 #, python-format
 msgid ""
 "Skipping packages with conflicts:\n"
 "(add '%s' to command line to force their upgrade)"
 msgstr ""
 
-#: dnf/cli/output.py:1291
+#: dnf/cli/output.py:1204
 #, python-format
 msgid "Skipping packages with broken dependencies%s"
 msgstr ""
 
-#: dnf/cli/output.py:1295
+#: dnf/cli/output.py:1208
 msgid " or part of a group"
 msgstr ""
 
@@ -3021,22 +3008,22 @@ msgstr ""
 #. use the full (unabbreviated) term 'Package' if you think that
 #. the translation to your language is not too long and will
 #. always fit to limited space.
-#: dnf/cli/output.py:1320
+#: dnf/cli/output.py:1233
 msgctxt "short"
 msgid "Package"
 msgstr ""
 
 #. Translators: This is the full (unabbreviated) term 'Package'.
-#: dnf/cli/output.py:1322
+#: dnf/cli/output.py:1235
 msgctxt "long"
 msgid "Package"
 msgstr ""
 
-#: dnf/cli/output.py:1371
+#: dnf/cli/output.py:1284
 msgid "replacing"
 msgstr ""
 
-#: dnf/cli/output.py:1378
+#: dnf/cli/output.py:1291
 #, python-format
 msgid ""
 "\n"
@@ -3045,289 +3032,273 @@ msgid ""
 msgstr ""
 
 #. TODO: remove
-#: dnf/cli/output.py:1383 dnf/cli/output.py:1932 dnf/cli/output.py:1933
+#: dnf/cli/output.py:1296 dnf/cli/output.py:1812 dnf/cli/output.py:1813
 msgid "Install"
 msgstr ""
 
-#: dnf/cli/output.py:1387 dnf/cli/output.py:1941
+#: dnf/cli/output.py:1300 dnf/cli/output.py:1821
 msgid "Upgrade"
 msgstr ""
 
-#: dnf/cli/output.py:1388
+#: dnf/cli/output.py:1301
 msgid "Remove"
 msgstr ""
 
-#: dnf/cli/output.py:1390 dnf/cli/output.py:1939
+#: dnf/cli/output.py:1303 dnf/cli/output.py:1819
 msgid "Downgrade"
 msgstr ""
 
-#: dnf/cli/output.py:1391
+#: dnf/cli/output.py:1304
 msgid "Skip"
 msgstr ""
 
-#: dnf/cli/output.py:1400 dnf/cli/output.py:1416
+#: dnf/cli/output.py:1313 dnf/cli/output.py:1329
 msgid "Package"
 msgid_plural "Packages"
 msgstr[0] ""
 msgstr[1] ""
 
-#: dnf/cli/output.py:1418
+#: dnf/cli/output.py:1331
 msgid "Dependent package"
 msgid_plural "Dependent packages"
 msgstr[0] ""
 msgstr[1] ""
 
-#: dnf/cli/output.py:1497 dnf/cli/output.py:1773 dnf/cli/output.py:1942
-msgid "Upgraded"
-msgstr ""
-
-#: dnf/cli/output.py:1498 dnf/cli/output.py:1773 dnf/cli/output.py:1940
-msgid "Downgraded"
-msgstr ""
-
-#: dnf/cli/output.py:1503
-msgid "Reinstalled"
-msgstr ""
-
-#: dnf/cli/output.py:1504
-msgid "Skipped"
-msgstr ""
-
-#: dnf/cli/output.py:1505
-msgid "Removed"
-msgstr ""
-
-#: dnf/cli/output.py:1508
-msgid "Failed"
-msgstr ""
-
-#: dnf/cli/output.py:1559
+#: dnf/cli/output.py:1439
 msgid "Total"
 msgstr ""
 
-#: dnf/cli/output.py:1587
+#: dnf/cli/output.py:1467
 msgid "<unset>"
 msgstr ""
 
-#: dnf/cli/output.py:1588
+#: dnf/cli/output.py:1468
 msgid "System"
 msgstr ""
 
-#: dnf/cli/output.py:1638
+#: dnf/cli/output.py:1518
 msgid "Command line"
 msgstr ""
 
 #. TRANSLATORS: user names who executed transaction in history command output
-#: dnf/cli/output.py:1649
+#: dnf/cli/output.py:1529
 msgid "User name"
 msgstr ""
 
-#: dnf/cli/output.py:1651
+#: dnf/cli/output.py:1531
 msgid "ID"
 msgstr ""
 
-#: dnf/cli/output.py:1653
+#: dnf/cli/output.py:1533
 msgid "Date and time"
 msgstr ""
 
-#: dnf/cli/output.py:1654
+#: dnf/cli/output.py:1534
 msgid "Action(s)"
 msgstr ""
 
-#: dnf/cli/output.py:1655
+#: dnf/cli/output.py:1535
 msgid "Altered"
 msgstr ""
 
-#: dnf/cli/output.py:1698
+#: dnf/cli/output.py:1578
 msgid "No transactions"
 msgstr ""
 
-#: dnf/cli/output.py:1699 dnf/cli/output.py:1715
+#: dnf/cli/output.py:1579 dnf/cli/output.py:1595
 msgid "Failed history info"
 msgstr ""
 
-#: dnf/cli/output.py:1714
+#: dnf/cli/output.py:1594
 msgid "No transaction ID, or package, given"
 msgstr ""
 
-#: dnf/cli/output.py:1772
+#: dnf/cli/output.py:1652
 msgid "Erased"
 msgstr ""
 
-#: dnf/cli/output.py:1774
+#: dnf/cli/output.py:1653 dnf/cli/output.py:1820 dnf/util.py:590
+msgid "Downgraded"
+msgstr ""
+
+#: dnf/cli/output.py:1653 dnf/cli/output.py:1822 dnf/util.py:589
+msgid "Upgraded"
+msgstr ""
+
+#: dnf/cli/output.py:1654
 msgid "Not installed"
 msgstr ""
 
-#: dnf/cli/output.py:1775
+#: dnf/cli/output.py:1655
 msgid "Newer"
 msgstr ""
 
-#: dnf/cli/output.py:1775
+#: dnf/cli/output.py:1655
 msgid "Older"
 msgstr ""
 
-#: dnf/cli/output.py:1823 dnf/cli/output.py:1825
+#: dnf/cli/output.py:1703 dnf/cli/output.py:1705
 msgid "Transaction ID :"
 msgstr ""
 
-#: dnf/cli/output.py:1828
+#: dnf/cli/output.py:1708
 msgid "Begin time     :"
 msgstr ""
 
-#: dnf/cli/output.py:1831 dnf/cli/output.py:1833
+#: dnf/cli/output.py:1711 dnf/cli/output.py:1713
 msgid "Begin rpmdb    :"
 msgstr ""
 
-#: dnf/cli/output.py:1839
+#: dnf/cli/output.py:1719
 #, python-format
 msgid "(%u seconds)"
 msgstr ""
 
-#: dnf/cli/output.py:1841
+#: dnf/cli/output.py:1721
 #, python-format
 msgid "(%u minutes)"
 msgstr ""
 
-#: dnf/cli/output.py:1843
+#: dnf/cli/output.py:1723
 #, python-format
 msgid "(%u hours)"
 msgstr ""
 
-#: dnf/cli/output.py:1845
+#: dnf/cli/output.py:1725
 #, python-format
 msgid "(%u days)"
 msgstr ""
 
-#: dnf/cli/output.py:1846
+#: dnf/cli/output.py:1726
 msgid "End time       :"
 msgstr ""
 
-#: dnf/cli/output.py:1849 dnf/cli/output.py:1851
+#: dnf/cli/output.py:1729 dnf/cli/output.py:1731
 msgid "End rpmdb      :"
 msgstr ""
 
-#: dnf/cli/output.py:1858 dnf/cli/output.py:1860
+#: dnf/cli/output.py:1738 dnf/cli/output.py:1740
 msgid "User           :"
 msgstr ""
 
-#: dnf/cli/output.py:1864 dnf/cli/output.py:1871
+#: dnf/cli/output.py:1744 dnf/cli/output.py:1751
 msgid "Aborted"
 msgstr ""
 
-#: dnf/cli/output.py:1864 dnf/cli/output.py:1867 dnf/cli/output.py:1869
-#: dnf/cli/output.py:1871 dnf/cli/output.py:1873 dnf/cli/output.py:1875
+#: dnf/cli/output.py:1744 dnf/cli/output.py:1747 dnf/cli/output.py:1749
+#: dnf/cli/output.py:1751 dnf/cli/output.py:1753 dnf/cli/output.py:1755
 msgid "Return-Code    :"
 msgstr ""
 
-#: dnf/cli/output.py:1867 dnf/cli/output.py:1875
+#: dnf/cli/output.py:1747 dnf/cli/output.py:1755
 msgid "Success"
 msgstr ""
 
-#: dnf/cli/output.py:1869
+#: dnf/cli/output.py:1749
 msgid "Failures:"
 msgstr ""
 
-#: dnf/cli/output.py:1873
+#: dnf/cli/output.py:1753
 msgid "Failure:"
 msgstr ""
 
-#: dnf/cli/output.py:1883 dnf/cli/output.py:1885
+#: dnf/cli/output.py:1763 dnf/cli/output.py:1765
 msgid "Releasever     :"
 msgstr ""
 
-#: dnf/cli/output.py:1890 dnf/cli/output.py:1892
+#: dnf/cli/output.py:1770 dnf/cli/output.py:1772
 msgid "Command Line   :"
 msgstr ""
 
-#: dnf/cli/output.py:1897 dnf/cli/output.py:1899
+#: dnf/cli/output.py:1777 dnf/cli/output.py:1779
 msgid "Comment        :"
 msgstr ""
 
-#: dnf/cli/output.py:1903
+#: dnf/cli/output.py:1783
 msgid "Transaction performed with:"
 msgstr ""
 
-#: dnf/cli/output.py:1912
+#: dnf/cli/output.py:1792
 msgid "Packages Altered:"
 msgstr ""
 
-#: dnf/cli/output.py:1918
+#: dnf/cli/output.py:1798
 msgid "Scriptlet output:"
 msgstr ""
 
-#: dnf/cli/output.py:1925
+#: dnf/cli/output.py:1805
 msgid "Errors:"
 msgstr ""
 
-#: dnf/cli/output.py:1934
+#: dnf/cli/output.py:1814
 msgid "Dep-Install"
 msgstr ""
 
-#: dnf/cli/output.py:1935
+#: dnf/cli/output.py:1815
 msgid "Obsoleted"
 msgstr ""
 
-#: dnf/cli/output.py:1936 dnf/transaction.py:84 dnf/transaction.py:85
+#: dnf/cli/output.py:1816 dnf/transaction.py:84 dnf/transaction.py:85
 msgid "Obsoleting"
 msgstr ""
 
-#: dnf/cli/output.py:1937
+#: dnf/cli/output.py:1817
 msgid "Erase"
 msgstr ""
 
-#: dnf/cli/output.py:1938
+#: dnf/cli/output.py:1818
 msgid "Reinstall"
 msgstr ""
 
-#: dnf/cli/output.py:2016
+#: dnf/cli/output.py:1892
 #, python-format
 msgid "---> Package %s.%s %s will be installed"
 msgstr ""
 
-#: dnf/cli/output.py:2018
+#: dnf/cli/output.py:1894
 #, python-format
 msgid "---> Package %s.%s %s will be an upgrade"
 msgstr ""
 
-#: dnf/cli/output.py:2020
+#: dnf/cli/output.py:1896
 #, python-format
 msgid "---> Package %s.%s %s will be erased"
 msgstr ""
 
-#: dnf/cli/output.py:2022
+#: dnf/cli/output.py:1898
 #, python-format
 msgid "---> Package %s.%s %s will be reinstalled"
 msgstr ""
 
-#: dnf/cli/output.py:2024
+#: dnf/cli/output.py:1900
 #, python-format
 msgid "---> Package %s.%s %s will be a downgrade"
 msgstr ""
 
-#: dnf/cli/output.py:2026
+#: dnf/cli/output.py:1902
 #, python-format
 msgid "---> Package %s.%s %s will be obsoleting"
 msgstr ""
 
-#: dnf/cli/output.py:2028
+#: dnf/cli/output.py:1904
 #, python-format
 msgid "---> Package %s.%s %s will be upgraded"
 msgstr ""
 
-#: dnf/cli/output.py:2030
+#: dnf/cli/output.py:1906
 #, python-format
 msgid "---> Package %s.%s %s will be obsoleted"
 msgstr ""
 
-#: dnf/cli/output.py:2039
+#: dnf/cli/output.py:1915
 msgid "--> Starting dependency resolution"
 msgstr ""
 
-#: dnf/cli/output.py:2044
+#: dnf/cli/output.py:1919
 msgid "--> Finished dependency resolution"
 msgstr ""
 
-#: dnf/cli/output.py:2058 dnf/crypto.py:132
+#: dnf/cli/output.py:1933 dnf/crypto.py:132
 #, python-format
 msgid ""
 "Importing GPG key 0x%s:\n"
@@ -3409,7 +3380,7 @@ msgstr ""
 msgid "Environment id '%s' does not exist."
 msgstr ""
 
-#: dnf/comps.py:622 dnf/transaction_sr.py:443 dnf/transaction_sr.py:453
+#: dnf/comps.py:622 dnf/transaction_sr.py:477 dnf/transaction_sr.py:487
 #, python-format
 msgid "Environment id '%s' is not installed."
 msgstr ""
@@ -3516,6 +3487,11 @@ msgstr ""
 msgid "repo %s: imported key 0x%s."
 msgstr ""
 
+#: dnf/crypto.py:177
+#, python-format
+msgid "retrieving repo key for %s unencrypted from %s"
+msgstr ""
+
 #: dnf/db/group.py:293
 msgid ""
 "No available modular metadata for modular package '{}', it cannot be "
@@ -3598,7 +3574,7 @@ msgid_plural "Modular dependency problems with Defaults:"
 msgstr[0] ""
 msgstr[1] ""
 
-#: dnf/exceptions.py:131 dnf/module/module_base.py:686
+#: dnf/exceptions.py:131 dnf/module/module_base.py:841
 msgid "Modular dependency problem:"
 msgid_plural "Modular dependency problems:"
 msgstr[0] ""
@@ -3646,8 +3622,8 @@ msgid ""
 "Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled, [a]ctive"
 msgstr ""
 
-#: dnf/module/module_base.py:54 dnf/module/module_base.py:421
-#: dnf/module/module_base.py:477 dnf/module/module_base.py:543
+#: dnf/module/module_base.py:54 dnf/module/module_base.py:547
+#: dnf/module/module_base.py:603 dnf/module/module_base.py:669
 msgid "Ignoring unnecessary profile: '{}/{}'"
 msgstr ""
 
@@ -3656,17 +3632,17 @@ msgstr ""
 msgid "All matches for argument '{0}' in module '{1}:{2}' are not active"
 msgstr ""
 
-#: dnf/module/module_base.py:92
+#: dnf/module/module_base.py:92 dnf/module/module_base.py:202
 #, python-brace-format
 msgid "Installing module '{0}' from Fail-Safe repository {1} is not allowed"
 msgstr ""
 
-#: dnf/module/module_base.py:102
+#: dnf/module/module_base.py:102 dnf/module/module_base.py:212
 msgid ""
 "Unable to match profile for argument {}. Available profiles for '{}:{}': {}"
 msgstr ""
 
-#: dnf/module/module_base.py:106
+#: dnf/module/module_base.py:106 dnf/module/module_base.py:216
 msgid "Unable to match profile for argument {}"
 msgstr ""
 
@@ -3682,40 +3658,54 @@ msgstr ""
 msgid "Default profile {} not available in module {}:{}"
 msgstr ""
 
-#: dnf/module/module_base.py:142
+#: dnf/module/module_base.py:142 dnf/module/module_base.py:245
 msgid "Installing module from Fail-Safe repository is not allowed"
 msgstr ""
 
-#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
-#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
-#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
-#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
-msgid "Unable to resolve argument {}"
+#: dnf/module/module_base.py:194
+#, python-brace-format
+msgid "No active matches for argument '{0}' in module '{1}:{2}'"
 msgstr ""
 
-#: dnf/module/module_base.py:160
-msgid "No match for package {}"
+#: dnf/module/module_base.py:226
+#, python-brace-format
+msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'"
+msgstr ""
+
+#: dnf/module/module_base.py:265
+msgid "No packages available to distrosync for package name '{}'"
 msgstr ""
 
-#: dnf/module/module_base.py:204
+#: dnf/module/module_base.py:308 dnf/module/module_base.py:452
+#: dnf/module/module_base.py:477 dnf/module/module_base.py:496
+#: dnf/module/module_base.py:543 dnf/module/module_base.py:599
+#: dnf/module/module_base.py:665 dnf/module/module_base.py:827
+msgid "Unable to resolve argument {}"
+msgstr ""
+
+#: dnf/module/module_base.py:319
 #, python-brace-format
 msgid "Upgrading module '{0}' from Fail-Safe repository {1} is not allowed"
 msgstr ""
 
-#: dnf/module/module_base.py:223 dnf/module/module_base.py:251
+#: dnf/module/module_base.py:338 dnf/module/module_base.py:366
 msgid "Unable to match profile in argument {}"
 msgstr ""
 
-#: dnf/module/module_base.py:231
+#: dnf/module/module_base.py:346
 msgid "Upgrading module from Fail-Safe repository is not allowed"
 msgstr ""
 
-#: dnf/module/module_base.py:367
+#: dnf/module/module_base.py:500
 msgid ""
 "Only module name is required. Ignoring unneeded information in argument: '{}'"
 msgstr ""
 
-#: dnf/package.py:298
+#: dnf/module/module_base.py:828
+msgid "No match for package {}"
+msgstr ""
+
+#: dnf/package.py:333
 #, python-format
 msgid "%s: %s check failed: %s vs %s"
 msgstr ""
@@ -3796,6 +3786,12 @@ msgstr ""
 msgid "Errors occurred during test transaction."
 msgstr ""
 
+#: dnf/sack.py:47
+msgid ""
+"allow_vendor_change is disabled. This option is currently not supported for "
+"downgrade and distro-sync commands"
+msgstr ""
+
 #. TRANSLATORS: This is for a single package currently being downgraded.
 #: dnf/transaction.py:80
 msgctxt "currently"
@@ -3842,160 +3838,183 @@ msgstr ""
 msgid "Preparing"
 msgstr ""
 
-#: dnf/transaction_sr.py:60
+#: dnf/transaction_sr.py:66
 #, python-brace-format
-msgid "Errors in \"{filename}\":"
+msgid ""
+"The following problems occurred while replaying the transaction from file "
+"\"{filename}\":"
 msgstr ""
 
-#: dnf/transaction_sr.py:70
-#, python-brace-format
-msgid "Error in \"{filename}\": {error}"
+#: dnf/transaction_sr.py:68
+msgid "The following problems occurred while running a transaction:"
 msgstr ""
 
-#: dnf/transaction_sr.py:87
+#: dnf/transaction_sr.py:89
 #, python-brace-format
 msgid "Invalid major version \"{major}\", number expected."
 msgstr ""
 
-#: dnf/transaction_sr.py:95
+#: dnf/transaction_sr.py:97
 #, python-brace-format
 msgid "Invalid minor version \"{minor}\", number expected."
 msgstr ""
 
-#: dnf/transaction_sr.py:101
+#: dnf/transaction_sr.py:103
 #, python-brace-format
 msgid ""
 "Incompatible major version \"{major}\", supported major version is "
 "\"{major_supp}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:244
+#: dnf/transaction_sr.py:224
+msgid ""
+"Conflicting TransactionReplay arguments have been specified: filename, data"
+msgstr ""
+
+#: dnf/transaction_sr.py:265
 #, python-brace-format
 msgid "Unexpected type of \"{id}\", {exp} expected."
 msgstr ""
 
-#: dnf/transaction_sr.py:250
+#: dnf/transaction_sr.py:271
 #, python-brace-format
 msgid "Missing key \"{key}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:263
+#: dnf/transaction_sr.py:285
 #, python-brace-format
 msgid "Missing object key \"{key}\" in an rpm."
 msgstr ""
 
-#: dnf/transaction_sr.py:267
+#: dnf/transaction_sr.py:289
 #, python-brace-format
 msgid ""
 "Unexpected value of package reason \"{reason}\" for rpm nevra \"{nevra}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:275
+#: dnf/transaction_sr.py:297
 #, python-brace-format
 msgid "Cannot parse NEVRA for package \"{nevra}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:286
+#: dnf/transaction_sr.py:321
 #, python-brace-format
 msgid "Cannot find rpm nevra \"{nevra}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:301
+#: dnf/transaction_sr.py:336
 #, python-brace-format
 msgid "Package \"{na}\" is already installed for action \"{action}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:311
+#: dnf/transaction_sr.py:345
 #, python-brace-format
 msgid ""
 "Package nevra \"{nevra}\" not available in repositories for action "
 "\"{action}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:322
+#: dnf/transaction_sr.py:356
 #, python-brace-format
 msgid "Package nevra \"{nevra}\" not installed for action \"{action}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:336
+#: dnf/transaction_sr.py:370
 #, python-brace-format
 msgid ""
 "Unexpected value of package action \"{action}\" for rpm nevra \"{nevra}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:343
+#: dnf/transaction_sr.py:377
 #, python-format
 msgid "Group id '%s' is not available."
 msgstr ""
 
-#: dnf/transaction_sr.py:364
+#: dnf/transaction_sr.py:398
 #, python-brace-format
 msgid "Missing object key \"{key}\" in groups.packages."
 msgstr ""
 
-#: dnf/transaction_sr.py:377 dnf/transaction_sr.py:387
+#: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421
 #, python-format
 msgid "Group id '%s' is not installed."
 msgstr ""
 
-#: dnf/transaction_sr.py:398
+#: dnf/transaction_sr.py:432
 #, python-format
 msgid "Environment id '%s' is not available."
 msgstr ""
 
-#: dnf/transaction_sr.py:422
+#: dnf/transaction_sr.py:456
 #, python-brace-format
 msgid ""
 "Invalid value \"{group_type}\" of environments.groups.group_type, only "
 "\"mandatory\" or \"optional\" is supported."
 msgstr ""
 
-#: dnf/transaction_sr.py:430
+#: dnf/transaction_sr.py:464
 #, python-brace-format
 msgid "Missing object key \"{key}\" in environments.groups."
 msgstr ""
 
-#: dnf/transaction_sr.py:508
+#: dnf/transaction_sr.py:542
 #, python-brace-format
 msgid "Unexpected value of group action \"{action}\" for group \"{group}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:513
+#: dnf/transaction_sr.py:547
 #, python-brace-format
 msgid "Missing object key \"{key}\" in a group."
 msgstr ""
 
-#: dnf/transaction_sr.py:537
+#: dnf/transaction_sr.py:571
 #, python-brace-format
 msgid ""
 "Unexpected value of environment action \"{action}\" for environment "
 "\"{env}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:542
+#: dnf/transaction_sr.py:576
 #, python-brace-format
 msgid "Missing object key \"{key}\" in an environment."
 msgstr ""
 
-#: dnf/transaction_sr.py:581
+#: dnf/transaction_sr.py:615
 #, python-brace-format
 msgid ""
 "Package nevra \"{nevra}\", which is not present in the transaction file, was "
 "pulled into the transaction."
 msgstr ""
 
-#: dnf/util.py:391 dnf/util.py:393
+#: dnf/util.py:393 dnf/util.py:395
 msgid "Problem"
 msgstr ""
 
-#: dnf/util.py:444
+#: dnf/util.py:446
 msgid "TransactionItem not found for key: {}"
 msgstr ""
 
-#: dnf/util.py:454
+#: dnf/util.py:456
 msgid "TransactionSWDBItem not found for key: {}"
 msgstr ""
 
-#: dnf/util.py:457
+#: dnf/util.py:459
 msgid "Errors occurred during transaction."
 msgstr ""
+
+#: dnf/util.py:595
+msgid "Reinstalled"
+msgstr ""
+
+#: dnf/util.py:596
+msgid "Skipped"
+msgstr ""
+
+#: dnf/util.py:597
+msgid "Removed"
+msgstr ""
+
+#: dnf/util.py:600
+msgid "Failed"
+msgstr ""
+
diff --git a/po/fr.po b/po/fr.po
index 4e883335..bf1ccb6a 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -18,20 +18,21 @@
 # Ludek Janda <ljanda@redhat.com>, 2018. #zanata
 # Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>, 2019. #zanata, 2020.
 # Julien Humbert <julroy67@gmail.com>, 2020.
+# Sundeep Anand <suanand@redhat.com>, 2021.
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-10-05 09:18-0400\n"
-"PO-Revision-Date: 2020-09-12 11:29+0000\n"
-"Last-Translator: Julien Humbert <julroy67@gmail.com>\n"
-"Language-Team: French <https://translate.fedoraproject.org/projects/dnf/dnf-master/fr/>\n"
+"POT-Creation-Date: 2021-02-22 09:22+0100\n"
+"PO-Revision-Date: 2021-03-08 10:29+0000\n"
+"Last-Translator: Sundeep Anand <suanand@redhat.com>\n"
+"Language-Team: French <https://translate.fedoraproject.org/projects/dnf/dnf-rhel-8/fr/>\n"
 "Language: fr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.2.2\n"
+"X-Generator: Weblate 4.5.1\n"
 
 #: dnf/automatic/emitter.py:32
 #, python-format
@@ -88,7 +89,7 @@ msgstr "Valeur de configuration inconnue : %s=%s dans %s ; %s"
 msgid "Unknown configuration option: %s = %s in %s"
 msgstr "Option de configuration inconnue : %s=%s dans %s"
 
-#: dnf/automatic/main.py:237 dnf/cli/cli.py:299
+#: dnf/automatic/main.py:237 dnf/cli/cli.py:304
 msgid "GPG check FAILED"
 msgstr "La vérification GPG a ÉCHOUÉ"
 
@@ -101,9 +102,10 @@ msgid "Started dnf-automatic."
 msgstr "dnf-automatic démarré."
 
 #: dnf/automatic/main.py:308
-#, python-format
-msgid "Sleep for %s seconds"
-msgstr "Mise en sommeil pendant %s secondes"
+msgid "Sleep for {} second"
+msgid_plural "Sleep for {} seconds"
+msgstr[0] "Mise en sommeil pendant {} seconde"
+msgstr[1] "Mise en sommeil pendant {} secondes"
 
 #: dnf/automatic/main.py:315
 msgid "System is off-line."
@@ -115,7 +117,7 @@ msgstr "Le système est hors-ligne."
 msgid "Error: %s"
 msgstr "Erreur : %s"
 
-#: dnf/base.py:146
+#: dnf/base.py:146 dnf/base.py:472 dnf/base.py:474
 msgid "loading repo '{}' failure: {}"
 msgstr "Erreur lors du chargement du dépôt « {} » : {}"
 
@@ -123,76 +125,76 @@ msgstr "Erreur lors du chargement du dépôt « {} » : {}"
 msgid "Loading repository '{}' has failed"
 msgstr "Échec du chargement du dépôt « {} »"
 
-#: dnf/base.py:320
+#: dnf/base.py:322
 msgid "Metadata timer caching disabled when running on metered connection."
 msgstr ""
 "Mise en cache temporisée des métadonnées désactivée lors du fonctionnement "
 "sur connexion limitée."
 
-#: dnf/base.py:325
+#: dnf/base.py:327
 msgid "Metadata timer caching disabled when running on a battery."
 msgstr ""
 "Mise en cache temporisée des métadonnées désactivée lors du fonctionnement "
 "sur batterie."
 
-#: dnf/base.py:330
+#: dnf/base.py:332
 msgid "Metadata timer caching disabled."
 msgstr "Mise en cache temporisée des métadonnées désactivée."
 
-#: dnf/base.py:335
+#: dnf/base.py:337
 msgid "Metadata cache refreshed recently."
 msgstr "Cache des métadonnées mis à jour récemment."
 
-#: dnf/base.py:341 dnf/cli/commands/__init__.py:91
+#: dnf/base.py:343 dnf/cli/commands/__init__.py:91
 msgid "There are no enabled repositories in \"{}\"."
 msgstr "Il n’y a pas de dépôts activés dans « {} »."
 
-#: dnf/base.py:348
+#: dnf/base.py:350
 #, python-format
 msgid "%s: will never be expired and will not be refreshed."
 msgstr "%s : n’expirera jamais et ne sera pas réinitialisé."
 
-#: dnf/base.py:350
+#: dnf/base.py:352
 #, python-format
 msgid "%s: has expired and will be refreshed."
 msgstr "%s : a expiré et sera réinitialisé."
 
 #. expires within the checking period:
-#: dnf/base.py:354
+#: dnf/base.py:356
 #, python-format
 msgid "%s: metadata will expire after %d seconds and will be refreshed now"
 msgstr ""
 "%s : métadonnées expireront après %d secondes et seront réinitialisées "
 "maintenant"
 
-#: dnf/base.py:358
+#: dnf/base.py:360
 #, python-format
 msgid "%s: will expire after %d seconds."
 msgstr "%s : expireront après %d secondes."
 
 #. performs the md sync
-#: dnf/base.py:364
+#: dnf/base.py:366
 msgid "Metadata cache created."
 msgstr "Cache des métadonnées créé."
 
-#: dnf/base.py:397
+#: dnf/base.py:399 dnf/base.py:466
 #, python-format
 msgid "%s: using metadata from %s."
 msgstr "%s : utilisation des métadonnées depuis le %s."
 
-#: dnf/base.py:409
+#: dnf/base.py:411 dnf/base.py:479
 #, python-format
 msgid "Ignoring repositories: %s"
 msgstr "Dépôts ignorés : %s"
 
-#: dnf/base.py:412
+#: dnf/base.py:414
 #, python-format
 msgid "Last metadata expiration check: %s ago on %s."
 msgstr ""
 "Dernière vérification de l’expiration des métadonnées effectuée il y a %s le"
 " %s."
 
-#: dnf/base.py:443
+#: dnf/base.py:507
 msgid ""
 "The downloaded packages were saved in cache until the next successful "
 "transaction."
@@ -200,59 +202,59 @@ msgstr ""
 "Les paquets téléchargés ont été mis en cache jusqu’à la prochaine "
 "transaction réussie."
 
-#: dnf/base.py:445
+#: dnf/base.py:509
 #, python-format
 msgid "You can remove cached packages by executing '%s'."
 msgstr "Vous pouvez supprimer les paquets en cache en exécutant « %s »."
 
-#: dnf/base.py:535
+#: dnf/base.py:599
 #, python-format
 msgid "Invalid tsflag in config file: %s"
 msgstr "tsflag invalide dans le fichier de configuration : %s"
 
-#: dnf/base.py:591
+#: dnf/base.py:655
 #, python-format
 msgid "Failed to add groups file for repository: %s - %s"
 msgstr "Échec d’ajout du fichier de groupes pour le dépôt : %s - %s"
 
-#: dnf/base.py:823
+#: dnf/base.py:887
 msgid "Running transaction check"
 msgstr "Test de la transaction"
 
-#: dnf/base.py:831
+#: dnf/base.py:895
 msgid "Error: transaction check vs depsolve:"
 msgstr ""
 "Erreur : vérification de transaction contre résolution des dépendances :"
 
-#: dnf/base.py:837
+#: dnf/base.py:901
 msgid "Transaction check succeeded."
 msgstr "La vérification de la transaction a réussi."
 
-#: dnf/base.py:840
+#: dnf/base.py:904
 msgid "Running transaction test"
 msgstr "Lancement de la transaction de test"
 
-#: dnf/base.py:850 dnf/base.py:992
+#: dnf/base.py:914 dnf/base.py:1065
 msgid "RPM: {}"
 msgstr "RPM : {}"
 
-#: dnf/base.py:851
+#: dnf/base.py:915
 msgid "Transaction test error:"
 msgstr "Erreur de la transaction de test :"
 
-#: dnf/base.py:862
+#: dnf/base.py:926
 msgid "Transaction test succeeded."
 msgstr "Transaction de test réussie."
 
-#: dnf/base.py:883
+#: dnf/base.py:947
 msgid "Running transaction"
 msgstr "Exécution de la transaction"
 
-#: dnf/base.py:911
+#: dnf/base.py:984
 msgid "Disk Requirements:"
 msgstr "Besoins en espace disque :"
 
-#: dnf/base.py:914
+#: dnf/base.py:987
 #, python-brace-format
 msgid "At least {0}MB more space needed on the {1} filesystem."
 msgid_plural "At least {0}MB more space needed on the {1} filesystem."
@@ -263,40 +265,40 @@ msgstr[1] ""
 "Au moins {0} Mio supplémentaires sont nécessaires sur le système de fichiers"
 " {1}."
 
-#: dnf/base.py:921
+#: dnf/base.py:994
 msgid "Error Summary"
 msgstr "Résumé des erreurs"
 
-#: dnf/base.py:947
+#: dnf/base.py:1020
 #, python-brace-format
 msgid "RPMDB altered outside of {prog}."
 msgstr "RPMDB modifié en dehors de {prog}."
 
-#: dnf/base.py:993 dnf/base.py:1001
+#: dnf/base.py:1066 dnf/base.py:1074
 msgid "Could not run transaction."
 msgstr "Impossible d’exécuter la transaction."
 
-#: dnf/base.py:996
+#: dnf/base.py:1069
 msgid "Transaction couldn't start:"
 msgstr "La transaction n’a pas pu démarrer :"
 
-#: dnf/base.py:1010
+#: dnf/base.py:1083
 #, python-format
 msgid "Failed to remove transaction file %s"
 msgstr "Échec de la suppression du fichier de transaction %s"
 
-#: dnf/base.py:1092
+#: dnf/base.py:1165
 msgid "Some packages were not downloaded. Retrying."
 msgstr "Certains paquets n’ont pas été téléchargés. Nouvel essai."
 
-#: dnf/base.py:1122
+#: dnf/base.py:1195
 #, python-format
 msgid "Delta RPMs reduced %.1f MB of updates to %.1f MB (%d.1%% saved)"
 msgstr ""
 "Les Delta RPM ont réduit la taille des mises à jour de %.1f Mio à %.1f Mio "
 "(%d.1%% économisés)"
 
-#: dnf/base.py:1125
+#: dnf/base.py:1198
 #, python-format
 msgid ""
 "Failed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)"
@@ -304,77 +306,77 @@ msgstr ""
 "L’échec des Delta RPMs ont fait augmenter les %.1f MO de mises à jour de "
 "%.1f MB (%d.1%% gaspillés)"
 
-#: dnf/base.py:1167
+#: dnf/base.py:1240
 msgid "Cannot add local packages, because transaction job already exists"
 msgstr ""
 "Impossible d’ajouter des paquets locaux, car un travail de transaction "
 "existe déjà"
 
-#: dnf/base.py:1181
+#: dnf/base.py:1254
 msgid "Could not open: {}"
 msgstr "Impossible d’ouvrir : {}"
 
-#: dnf/base.py:1219
+#: dnf/base.py:1292
 #, python-format
 msgid "Public key for %s is not installed"
 msgstr "La clé publique pour %s n’est pas installée"
 
-#: dnf/base.py:1223
+#: dnf/base.py:1296
 #, python-format
 msgid "Problem opening package %s"
 msgstr "Problème à l’ouverture du paquet %s"
 
-#: dnf/base.py:1231
+#: dnf/base.py:1304
 #, python-format
 msgid "Public key for %s is not trusted"
 msgstr "La clé publique pour %s n’est pas de confiance"
 
-#: dnf/base.py:1235
+#: dnf/base.py:1308
 #, python-format
 msgid "Package %s is not signed"
 msgstr "Le paquet %s n’est pas signé"
 
-#: dnf/base.py:1265
+#: dnf/base.py:1338
 #, python-format
 msgid "Cannot remove %s"
 msgstr "Impossible de supprimer %s"
 
-#: dnf/base.py:1269
+#: dnf/base.py:1342
 #, python-format
 msgid "%s removed"
 msgstr "%s supprimé"
 
-#: dnf/base.py:1549
+#: dnf/base.py:1622
 msgid "No match for group package \"{}\""
 msgstr "Aucune correspondance pour le paquet du groupe « {} »"
 
-#: dnf/base.py:1635
+#: dnf/base.py:1708
 #, python-format
 msgid "Adding packages from group '%s': %s"
 msgstr "Ajout de paquets en provenance du groupe « %s » : %s"
 
-#: dnf/base.py:1658 dnf/cli/cli.py:219 dnf/cli/commands/__init__.py:442
+#: dnf/base.py:1731 dnf/cli/cli.py:220 dnf/cli/commands/__init__.py:442
 #: dnf/cli/commands/__init__.py:499 dnf/cli/commands/__init__.py:592
 #: dnf/cli/commands/__init__.py:641 dnf/cli/commands/install.py:80
 #: dnf/cli/commands/install.py:103 dnf/cli/commands/install.py:110
 msgid "Nothing to do."
 msgstr "Rien à faire."
 
-#: dnf/base.py:1676
+#: dnf/base.py:1749
 msgid "No groups marked for removal."
 msgstr "Aucun groupe marqué pour suppression."
 
-#: dnf/base.py:1710
+#: dnf/base.py:1783
 msgid "No group marked for upgrade."
 msgstr "Aucun groupe marqué pour mise à jour."
 
-#: dnf/base.py:1925
+#: dnf/base.py:1997
 #, python-format
 msgid "Package %s not installed, cannot downgrade it."
 msgstr "Le paquet %s n’est pas installé, impossible de le rétrograder."
 
-#: dnf/base.py:1927 dnf/base.py:1946 dnf/base.py:1959 dnf/base.py:1980
-#: dnf/base.py:2029 dnf/base.py:2037 dnf/base.py:2172 dnf/cli/cli.py:411
+#: dnf/base.py:1999 dnf/base.py:2018 dnf/base.py:2031 dnf/base.py:2052
+#: dnf/base.py:2101 dnf/base.py:2109 dnf/base.py:2243 dnf/cli/cli.py:416
 #: dnf/cli/commands/__init__.py:425 dnf/cli/commands/__init__.py:482
 #: dnf/cli/commands/__init__.py:586 dnf/cli/commands/__init__.py:633
 #: dnf/cli/commands/__init__.py:711 dnf/cli/commands/install.py:147
@@ -384,30 +386,30 @@ msgstr "Le paquet %s n’est pas installé, impossible de le rétrograder."
 msgid "No match for argument: %s"
 msgstr "Aucune correspondance pour l’argument : %s"
 
-#: dnf/base.py:1934
+#: dnf/base.py:2006
 #, python-format
 msgid "Package %s of lower version already installed, cannot downgrade it."
 msgstr ""
 "Le paquet %s est déjà installé dans une version inférieure, impossible de le"
 " rétrograder."
 
-#: dnf/base.py:1957
+#: dnf/base.py:2029
 #, python-format
 msgid "Package %s not installed, cannot reinstall it."
 msgstr "Le paquet %s n’est pas installé, impossible de le réinstaller."
 
-#: dnf/base.py:1972
+#: dnf/base.py:2044
 #, python-format
 msgid "File %s is a source package and cannot be updated, ignoring."
 msgstr ""
 "Le fichier %s est un paquet source et ne peut pas être mis à jour, ignoré."
 
-#: dnf/base.py:1978
+#: dnf/base.py:2050
 #, python-format
 msgid "Package %s not installed, cannot update it."
 msgstr "Le paquet %s n’est pas installé, impossible de le mettre à jour."
 
-#: dnf/base.py:1987
+#: dnf/base.py:2059
 #, python-format
 msgid ""
 "The same or higher version of %s is already installed, cannot update it."
@@ -415,127 +417,113 @@ msgstr ""
 "La même une ou version supérieure de %s est déjà installée, mise à jour "
 "impossible."
 
-#: dnf/base.py:2026 dnf/cli/commands/reinstall.py:81
+#: dnf/base.py:2098 dnf/cli/commands/reinstall.py:81
 #, python-format
 msgid "Package %s available, but not installed."
 msgstr "Le paquet %s est disponible mais n’est pas installé."
 
-#: dnf/base.py:2032
+#: dnf/base.py:2104
 #, python-format
 msgid "Package %s available, but installed for different architecture."
 msgstr ""
 "Le paquet %s est disponible mais est installé pour une autre architecture."
 
-#: dnf/base.py:2057 dnf/base.py:2250 dnf/cli/cli.py:668 dnf/cli/cli.py:699
+#: dnf/base.py:2129
 #, python-format
 msgid "No package %s installed."
 msgstr "Aucun paquet %s installé."
 
-#: dnf/base.py:2075 dnf/cli/commands/install.py:136
+#: dnf/base.py:2147 dnf/cli/commands/install.py:136
 #: dnf/cli/commands/remove.py:133
 #, python-format
 msgid "Not a valid form: %s"
 msgstr "Format invalide : %s"
 
-#: dnf/base.py:2091 dnf/cli/commands/__init__.py:681
-#: dnf/cli/commands/remove.py:163
+#: dnf/base.py:2162 dnf/cli/commands/__init__.py:681
+#: dnf/cli/commands/remove.py:162
 msgid "No packages marked for removal."
 msgstr "Aucun paquet marqué pour suppression."
 
-#: dnf/base.py:2179 dnf/cli/cli.py:422
+#: dnf/base.py:2250 dnf/cli/cli.py:427
 #, python-format
 msgid "Packages for argument %s available, but not installed."
 msgstr "Les paquets pour le paramètre %s sont disponibles mais pas installés."
 
-#: dnf/base.py:2184
+#: dnf/base.py:2255
 #, python-format
 msgid "Package %s of lowest version already installed, cannot downgrade it."
 msgstr ""
 "La version la plus ancienne du paquet %s est déjà installée, impossible de "
 "le rétrograder."
 
-#: dnf/base.py:2242
-msgid "Action not handled: {}"
-msgstr "Action non gérée : {}"
-
-#: dnf/base.py:2256 dnf/cli/cli.py:419 dnf/cli/cli.py:673 dnf/cli/cli.py:703
-#: dnf/cli/commands/group.py:400 dnf/cli/commands/history.py:169
-#, python-format
-msgid "No package %s available."
-msgstr "Aucun paquet %s n’est disponible."
-
-#: dnf/base.py:2269
-msgid "no package matched"
-msgstr "aucun paquet correspondant"
-
-#: dnf/base.py:2290
+#: dnf/base.py:2302
 msgid "No security updates needed, but {} update available"
 msgstr ""
 "Aucune mise à jour de sécurité n’est nécessaire, mais la mise à jour {} est "
 "disponible"
 
-#: dnf/base.py:2292
+#: dnf/base.py:2304
 msgid "No security updates needed, but {} updates available"
 msgstr ""
 "Aucune mise à jour de sécurité n’est nécessaire, mais les mises à jour {} "
 "sont disponibles"
 
-#: dnf/base.py:2296
+#: dnf/base.py:2308
 msgid "No security updates needed for \"{}\", but {} update available"
 msgstr ""
 "Aucune mise à jour de sécurité n’est nécessaire pour « {} », mais la mise à "
 "jour {} est disponible"
 
-#: dnf/base.py:2298
+#: dnf/base.py:2310
 msgid "No security updates needed for \"{}\", but {} updates available"
 msgstr ""
 "Aucune mise à jour de sécurité n’est nécessaire pour « {} », mais les mises "
 "à jour {} sont disponibles"
 
 #. raise an exception, because po.repoid is not in self.repos
-#: dnf/base.py:2319
+#: dnf/base.py:2331
 #, python-format
 msgid "Unable to retrieve a key for a commandline package: %s"
 msgstr ""
 "Impossible de récupérer une clé pour un paquet en ligne de commande : %s"
 
-#: dnf/base.py:2327
+#: dnf/base.py:2339
 #, python-format
 msgid ". Failing package is: %s"
 msgstr ". Le paquet en erreur est : %s"
 
-#: dnf/base.py:2328
+#: dnf/base.py:2340
 #, python-format
 msgid "GPG Keys are configured as: %s"
 msgstr "Les clés GPG sont configurées comme : %s"
 
-#: dnf/base.py:2340
+#: dnf/base.py:2352
 #, python-format
 msgid "GPG key at %s (0x%s) is already installed"
 msgstr "La clé GPG %s (0x%s) est déjà installée"
 
-#: dnf/base.py:2373
+#: dnf/base.py:2385
 msgid "The key has been approved."
 msgstr "La clef a été approuvée."
 
-#: dnf/base.py:2376
+#: dnf/base.py:2388
 msgid "The key has been rejected."
 msgstr "La clef a été rejetée."
 
-#: dnf/base.py:2409
+#: dnf/base.py:2421
 #, python-format
 msgid "Key import failed (code %d)"
 msgstr "L’import de la clé a échoué (code %d)"
 
-#: dnf/base.py:2411
+#: dnf/base.py:2423
 msgid "Key imported successfully"
 msgstr "La clé a bien été importée"
 
-#: dnf/base.py:2415
+#: dnf/base.py:2427
 msgid "Didn't install any keys"
 msgstr "Toutes les clés n’ont pas été installées"
 
-#: dnf/base.py:2418
+#: dnf/base.py:2430
 #, python-format
 msgid ""
 "The GPG keys listed for the \"%s\" repository are already installed but they are not correct for this package.\n"
@@ -544,28 +532,28 @@ msgstr ""
 "Les clés GPG listées pour le dépôt « %s » sont déjà installées mais sont incorrectes pour ce paquet.\n"
 "Vérifiez que les URL des clés pour ce dépôt soient correctes."
 
-#: dnf/base.py:2429
+#: dnf/base.py:2441
 msgid "Import of key(s) didn't help, wrong key(s)?"
 msgstr ""
 "L’import de la ou des clés n’a pas résolu le problème, clés incorrectes ?"
 
-#: dnf/base.py:2482
+#: dnf/base.py:2494
 msgid "  * Maybe you meant: {}"
 msgstr "  * Peut-être vouliez-vous dire : {}"
 
-#: dnf/base.py:2514
+#: dnf/base.py:2526
 msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum"
 msgstr "Le paquet \"{}\" du dépôt local \"{}\" a une somme de contrôle incorrecte"
 
-#: dnf/base.py:2517
+#: dnf/base.py:2529
 msgid "Some packages from local repository have incorrect checksum"
 msgstr "Certains paquets du dépôt local ont une somme de contrôle incorrecte"
 
-#: dnf/base.py:2520
+#: dnf/base.py:2532
 msgid "Package \"{}\" from repository \"{}\" has incorrect checksum"
 msgstr "Le paquet \"{}\" du dépôt \"{}\" a une somme de contrôle incorrecte"
 
-#: dnf/base.py:2523
+#: dnf/base.py:2535
 msgid ""
 "Some packages have invalid cache, but cannot be downloaded due to \"--"
 "cacheonly\" option"
@@ -573,29 +561,29 @@ msgstr ""
 "Certains paquets ont un cache invalide, mais ne peuvent pas être téléchargés"
 " à cause de l’option « --cacheonly »"
 
-#: dnf/base.py:2541 dnf/base.py:2561
+#: dnf/base.py:2553 dnf/base.py:2573
 msgid "No match for argument"
 msgstr "Aucune correspondance pour le paramètre"
 
-#: dnf/base.py:2549 dnf/base.py:2569
+#: dnf/base.py:2561 dnf/base.py:2581
 msgid "All matches were filtered out by exclude filtering for argument"
 msgstr ""
 "Toutes les correspondances ont été filtrées en excluant le filtrage pour "
 "l’argument"
 
-#: dnf/base.py:2551
+#: dnf/base.py:2563
 msgid "All matches were filtered out by modular filtering for argument"
 msgstr ""
 "Toutes les correspondances ont été filtrées par filtrage modulaire pour les "
 "arguments"
 
-#: dnf/base.py:2567
+#: dnf/base.py:2579
 msgid "All matches were installed from a different repository for argument"
 msgstr ""
 "Toutes les correspondances ont été installées à partir d’un dépôt différent "
 "pour le paramètre"
 
-#: dnf/base.py:2583
+#: dnf/base.py:2626
 #, python-format
 msgid "Package %s is already installed."
 msgstr "Le paquet %s est déjà installé."
@@ -616,8 +604,8 @@ msgstr "La lecture du fichier « %s » a échoué : %s"
 msgid "Cannot read file \"%s\": %s"
 msgstr "Impossible de lire le fichier « %s » : %s"
 
-#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:902
-#: dnf/cli/cli.py:906 dnf/cli/commands/alias.py:108
+#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:803
+#: dnf/cli/cli.py:807 dnf/cli/commands/alias.py:108
 #, python-format
 msgid "Config error: %s"
 msgstr "Erreur de configuration : %s"
@@ -650,7 +638,7 @@ msgstr ""
 "Le résulta de l’opération sera le basculement du flux« {1} » du module « {0}"
 " » vers le flux« {2} »"
 
-#: dnf/cli/cli.py:172
+#: dnf/cli/cli.py:173
 #, python-brace-format
 msgid ""
 "It is not possible to switch enabled streams of a module.\n"
@@ -659,12 +647,12 @@ msgstr ""
 "Il n’est pas possible de basculer les flux actifs d’un module.\n"
 "Il et recommandé de retirer tout contenu installé par le module, et de réinitialiser le mode en utilisant la commande « {prog} module reset <nom_du_module> ». Après la réinitialisation, vous pouvez installer les autres flux."
 
-#: dnf/cli/cli.py:210
+#: dnf/cli/cli.py:211
 #, python-brace-format
 msgid "{prog} will only download packages for the transaction."
 msgstr "{prog} ne téléchargera que les paquets pour la transaction."
 
-#: dnf/cli/cli.py:213
+#: dnf/cli/cli.py:214
 #, python-brace-format
 msgid ""
 "{prog} will only download packages, install gpg keys, and check the "
@@ -673,23 +661,23 @@ msgstr ""
 "{prog} ne téléchargera que les paquets, installera les clefs GPG et "
 "vérifiera la transaction."
 
-#: dnf/cli/cli.py:217
+#: dnf/cli/cli.py:218
 msgid "Operation aborted."
 msgstr "Opération avortée."
 
-#: dnf/cli/cli.py:224
+#: dnf/cli/cli.py:225
 msgid "Downloading Packages:"
 msgstr "Téléchargement des paquets :"
 
-#: dnf/cli/cli.py:230
+#: dnf/cli/cli.py:231
 msgid "Error downloading packages:"
 msgstr "Erreur de téléchargement des paquets :"
 
-#: dnf/cli/cli.py:258
+#: dnf/cli/cli.py:263
 msgid "Transaction failed"
 msgstr "La transaction a échoué"
 
-#: dnf/cli/cli.py:281
+#: dnf/cli/cli.py:286
 msgid ""
 "Refusing to automatically import keys when running unattended.\n"
 "Use \"-y\" to override."
@@ -697,91 +685,70 @@ msgstr ""
 "Refus de l’importation automatique des clés lors d’une exécution sans surveillance.\n"
 "Utilisez l’option « -y » pour passer outre."
 
-#: dnf/cli/cli.py:331
+#: dnf/cli/cli.py:336
 msgid "Changelogs for {}"
 msgstr "Changements pour {}"
 
-#: dnf/cli/cli.py:364 dnf/cli/cli.py:505 dnf/cli/cli.py:511
+#: dnf/cli/cli.py:369 dnf/cli/cli.py:510 dnf/cli/cli.py:516
 msgid "Obsoleting Packages"
 msgstr "Passage de paquets en obsolètes"
 
-#: dnf/cli/cli.py:393
+#: dnf/cli/cli.py:398
 msgid "No packages marked for distribution synchronization."
 msgstr "Aucun paquet marqué pour la synchronisation de la distribution."
 
-#: dnf/cli/cli.py:428
+#: dnf/cli/cli.py:424 dnf/cli/commands/group.py:395
+#, python-format
+msgid "No package %s available."
+msgstr "Aucun paquet %s n’est disponible."
+
+#: dnf/cli/cli.py:433
 msgid "No packages marked for downgrade."
 msgstr "Aucun paquet n’a été marqué pour passer à une version antérieure."
 
-#: dnf/cli/cli.py:479
+#: dnf/cli/cli.py:484
 msgid "Installed Packages"
 msgstr "Paquets installés"
 
-#: dnf/cli/cli.py:487
+#: dnf/cli/cli.py:492
 msgid "Available Packages"
 msgstr "Paquets disponibles"
 
-#: dnf/cli/cli.py:491
+#: dnf/cli/cli.py:496
 msgid "Autoremove Packages"
 msgstr "Supprime des paquets automatiquement"
 
-#: dnf/cli/cli.py:493
+#: dnf/cli/cli.py:498
 msgid "Extra Packages"
 msgstr "Paquets supplémentaires"
 
-#: dnf/cli/cli.py:497
+#: dnf/cli/cli.py:502
 msgid "Available Upgrades"
 msgstr "Mises à jour disponibles"
 
-#: dnf/cli/cli.py:513
+#: dnf/cli/cli.py:518
 msgid "Recently Added Packages"
 msgstr "Paquets récemment ajoutés"
 
-#: dnf/cli/cli.py:518
+#: dnf/cli/cli.py:522
 msgid "No matching Packages to list"
 msgstr "Aucun paquet correspondant à lister"
 
-#: dnf/cli/cli.py:599
+#: dnf/cli/cli.py:603
 msgid "No Matches found"
 msgstr "Aucune correspondance trouvée"
 
-#: dnf/cli/cli.py:609
-msgid "No transaction ID given"
-msgstr "Aucun identifiant de transaction n’a été fourni"
-
-#: dnf/cli/cli.py:614
-msgid "Not found given transaction ID"
-msgstr "L’identifiant de transaction fourni est introuvable"
-
-#: dnf/cli/cli.py:623
-msgid "Found more than one transaction ID!"
-msgstr "Plus d’un identifiant de transaction ont été trouvés !"
-
-#: dnf/cli/cli.py:640
-#, python-format
-msgid "Transaction history is incomplete, before %u."
-msgstr "L’historique des transactions est incomplet, avant %u."
-
-#: dnf/cli/cli.py:642
-#, python-format
-msgid "Transaction history is incomplete, after %u."
-msgstr "L’historique des transactions est incomplet, après %u."
-
-#: dnf/cli/cli.py:689
-msgid "Undoing transaction {}, from {}"
-msgstr "Révocation de lla transaction {}, de {}"
-
-#: dnf/cli/cli.py:769 dnf/cli/commands/shell.py:237
+#: dnf/cli/cli.py:670 dnf/cli/commands/shell.py:237
 #, python-format
 msgid "Unknown repo: '%s'"
 msgstr "Dépôt inconnu : « %s »"
 
-#: dnf/cli/cli.py:783
+#: dnf/cli/cli.py:684
 #, python-format
 msgid "No repository match: %s"
 msgstr "Aucun dépôt ne correspond à %s"
 
-#: dnf/cli/cli.py:817
+#: dnf/cli/cli.py:718
 msgid ""
 "This command has to be run with superuser privileges (under the root user on"
 " most systems)."
@@ -789,12 +756,12 @@ msgstr ""
 "Cette commande doit être exécutée avec les privilèges super-utilisateur "
 "(sous l’utilisateur root sur la plupart des systèmes)."
 
-#: dnf/cli/cli.py:847
+#: dnf/cli/cli.py:748
 #, python-format
 msgid "No such command: %s. Please use %s --help"
 msgstr "Aucune commande telle que : %s. Veuillez utiliser %s --help"
 
-#: dnf/cli/cli.py:850
+#: dnf/cli/cli.py:751
 #, python-format, python-brace-format
 msgid ""
 "It could be a {PROG} plugin command, try: \"{prog} install 'dnf-"
@@ -803,7 +770,7 @@ msgstr ""
 "Cela est peut-être une commande d’un module supplémentaire de {PROG}, "
 "essayez : « {prog} install 'dnf-command(%s)' »"
 
-#: dnf/cli/cli.py:854
+#: dnf/cli/cli.py:755
 #, python-brace-format
 msgid ""
 "It could be a {prog} plugin command, but loading of plugins is currently "
@@ -812,7 +779,7 @@ msgstr ""
 "Cela est peut-être une commande d’un module supplémentaire de {prog}, mais "
 "le chargement de modules supplémentaires est actuellement désactivé."
 
-#: dnf/cli/cli.py:912
+#: dnf/cli/cli.py:813
 msgid ""
 "--destdir or --downloaddir must be used with --downloadonly or download or "
 "system-upgrade command."
@@ -820,7 +787,7 @@ msgstr ""
 "--destdir ou --downloaddir doit être utilisé avec la commande --downloadonly"
 " ou download ou system-upgrade command."
 
-#: dnf/cli/cli.py:918
+#: dnf/cli/cli.py:819
 msgid ""
 "--enable, --set-enabled and --disable, --set-disabled must be used with "
 "config-manager command."
@@ -828,7 +795,7 @@ msgstr ""
 "--enable, --set-enabled et --disable, --set-disabled doit être utilisé avec "
 "la commande config-manager."
 
-#: dnf/cli/cli.py:1000
+#: dnf/cli/cli.py:901
 msgid ""
 "Warning: Enforcing GPG signature check globally as per active RPM security "
 "policy (see 'gpgcheck' in dnf.conf(5) for how to squelch this message)"
@@ -837,11 +804,11 @@ msgstr ""
 "politique de sécurité RPM active (voir « gpgcheck » dans dnf.conf(5) pour "
 "savoir comment interpréter ce message)"
 
-#: dnf/cli/cli.py:1020
+#: dnf/cli/cli.py:921
 msgid "Config file \"{}\" does not exist"
 msgstr "Le fichier de configuration \"{}\" n’existe pas"
 
-#: dnf/cli/cli.py:1040
+#: dnf/cli/cli.py:941
 msgid ""
 "Unable to detect release version (use '--releasever' to specify release "
 "version)"
@@ -849,28 +816,28 @@ msgstr ""
 "Impossible de détecter le numéro de version (utilisez « --releasever » pour "
 "spécifier une version)"
 
-#: dnf/cli/cli.py:1127 dnf/cli/commands/repoquery.py:471
+#: dnf/cli/cli.py:1028 dnf/cli/commands/repoquery.py:471
 msgid "argument {}: not allowed with argument {}"
 msgstr "paramètre {} : non autorisé avec le paramètre {}"
 
-#: dnf/cli/cli.py:1134
+#: dnf/cli/cli.py:1035
 #, python-format
 msgid "Command \"%s\" already defined"
 msgstr "Commande « %s » déjà définie"
 
-#: dnf/cli/cli.py:1154
+#: dnf/cli/cli.py:1055
 msgid "Excludes in dnf.conf: "
 msgstr "Exclut dans dnf.conf : "
 
-#: dnf/cli/cli.py:1157
+#: dnf/cli/cli.py:1058
 msgid "Includes in dnf.conf: "
 msgstr "Inclut dans dnf.conf : "
 
-#: dnf/cli/cli.py:1160
+#: dnf/cli/cli.py:1061
 msgid "Excludes in repo "
 msgstr "Exclut dans dépôt "
 
-#: dnf/cli/cli.py:1163
+#: dnf/cli/cli.py:1064
 msgid "Includes in repo "
 msgstr "Inclut dans dépôt "
 
@@ -929,7 +896,7 @@ msgid "show all packages (default)"
 msgstr "affiche tous les paquets (par défaut)"
 
 #: dnf/cli/commands/__init__.py:171 dnf/cli/commands/__init__.py:743
-#: dnf/cli/commands/module.py:351
+#: dnf/cli/commands/module.py:373
 msgid "show only available packages"
 msgstr "affiche uniquement les paquets disponibles"
 
@@ -1260,78 +1227,78 @@ msgstr "affiche ou utilise les informations des groupes"
 msgid "No group data available for configured repositories."
 msgstr "Aucune donnée sur les groupes disponibles pour les dépôts configurés."
 
-#: dnf/cli/commands/group.py:129
+#: dnf/cli/commands/group.py:126
 #, python-format
 msgid "Warning: Group %s does not exist."
 msgstr "Attention : le groupe %s n’existe pas."
 
-#: dnf/cli/commands/group.py:170
+#: dnf/cli/commands/group.py:167
 msgid "Warning: No groups match:"
 msgstr "Attention : aucun groupe ne correspond à :"
 
-#: dnf/cli/commands/group.py:182 dnf/cli/commands/group.py:193
-#: dnf/cli/output.py:1226
+#: dnf/cli/commands/group.py:179 dnf/cli/commands/group.py:190
+#: dnf/cli/output.py:1139
 msgid "<name-unset>"
 msgstr "<name-unset>"
 
-#: dnf/cli/commands/group.py:199
+#: dnf/cli/commands/group.py:196
 msgid "Available Environment Groups:"
 msgstr "Groupes d’environnements disponibles :"
 
-#: dnf/cli/commands/group.py:201
+#: dnf/cli/commands/group.py:198
 msgid "Installed Environment Groups:"
 msgstr "Groupes d’environnements installés :"
 
-#: dnf/cli/commands/group.py:208 dnf/cli/commands/group.py:294
+#: dnf/cli/commands/group.py:205 dnf/cli/commands/group.py:291
 msgid "Installed Groups:"
 msgstr "Groupes installés :"
 
-#: dnf/cli/commands/group.py:215 dnf/cli/commands/group.py:301
+#: dnf/cli/commands/group.py:212 dnf/cli/commands/group.py:298
 msgid "Installed Language Groups:"
 msgstr "Groupes de langues installés :"
 
-#: dnf/cli/commands/group.py:225 dnf/cli/commands/group.py:308
+#: dnf/cli/commands/group.py:222 dnf/cli/commands/group.py:305
 msgid "Available Groups:"
 msgstr "Groupes disponibles :"
 
-#: dnf/cli/commands/group.py:232 dnf/cli/commands/group.py:315
+#: dnf/cli/commands/group.py:229 dnf/cli/commands/group.py:312
 msgid "Available Language Groups:"
 msgstr "Groupes de langues disponibles :"
 
-#: dnf/cli/commands/group.py:322
+#: dnf/cli/commands/group.py:319
 msgid "include optional packages from group"
 msgstr "inclure les paquets optionnels du groupe"
 
-#: dnf/cli/commands/group.py:325
+#: dnf/cli/commands/group.py:322
 msgid "show also hidden groups"
 msgstr "affiche également les groupes cachés"
 
-#: dnf/cli/commands/group.py:327
+#: dnf/cli/commands/group.py:324
 msgid "show only installed groups"
 msgstr "affiche seulement les groupes installés"
 
-#: dnf/cli/commands/group.py:329
+#: dnf/cli/commands/group.py:326
 msgid "show only available groups"
 msgstr "affiche uniquement les groupes disponibles"
 
-#: dnf/cli/commands/group.py:331
+#: dnf/cli/commands/group.py:328
 msgid "show also ID of groups"
 msgstr "affiche également les ID des groupes"
 
-#: dnf/cli/commands/group.py:333
+#: dnf/cli/commands/group.py:330
 msgid "available subcommands: {} (default), {}"
 msgstr "sous-commandes disponibles : {} (par défaut), {}"
 
-#: dnf/cli/commands/group.py:337
+#: dnf/cli/commands/group.py:334
 msgid "argument for group subcommand"
 msgstr "paramètre pour la sous-commande group"
 
-#: dnf/cli/commands/group.py:346
+#: dnf/cli/commands/group.py:343
 #, python-format
 msgid "Invalid groups sub-command, use: %s."
 msgstr "Sous-commande de groupes invalide, utilisez : %s."
 
-#: dnf/cli/commands/group.py:403
+#: dnf/cli/commands/group.py:398
 msgid "Unable to find a mandatory group package."
 msgstr "Impossible de trouver un paquet obligatoire du groupe."
 
@@ -1385,16 +1352,16 @@ msgstr "Pas de transaction ou de nom de fichier fourni."
 msgid "More than one argument given as transaction file name."
 msgstr "Plus d’un argument donné comme nom de fichier de transaction."
 
-#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:126
+#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:130
 msgid "No transaction ID or package name given."
 msgstr "Pas d’identifiant de transaction ou de nom de paquet fourni."
 
-#: dnf/cli/commands/history.py:138
+#: dnf/cli/commands/history.py:142
 #, python-format
 msgid "You don't have access to the history DB: %s"
 msgstr "Vous n’avez pas accès à la base de données de l’historique : %s"
 
-#: dnf/cli/commands/history.py:147
+#: dnf/cli/commands/history.py:151
 #, python-format
 msgid ""
 "Cannot undo transaction %s, doing so would result in an inconsistent package"
@@ -1403,7 +1370,7 @@ msgstr ""
 "Impossible de défaire la transaction %s ; cela aboutirait à une base de "
 "données des paquets incohérente."
 
-#: dnf/cli/commands/history.py:152
+#: dnf/cli/commands/history.py:156
 #, python-format
 msgid ""
 "Cannot rollback transaction %s, doing so would result in an inconsistent "
@@ -1412,7 +1379,34 @@ msgstr ""
 "Impossible de défaire la transaction %s ; cela aboutirait à une base de "
 "données des paquets incohérente."
 
-#: dnf/cli/commands/history.py:222
+#: dnf/cli/commands/history.py:175
+msgid "No transaction ID given"
+msgstr "Aucun identifiant de transaction n’a été fourni"
+
+#: dnf/cli/commands/history.py:179
+#, python-brace-format
+msgid "Transaction ID \"{0}\" not found."
+msgstr "ID de transaction \"{0}\" introuvable."
+
+#: dnf/cli/commands/history.py:185
+msgid "Found more than one transaction ID!"
+msgstr "Plus d’un identifiant de transaction ont été trouvés !"
+
+#: dnf/cli/commands/history.py:203
+#, python-format
+msgid "Transaction history is incomplete, before %u."
+msgstr "L’historique des transactions est incomplet, avant %u."
+
+#: dnf/cli/commands/history.py:205
+#, python-format
+msgid "Transaction history is incomplete, after %u."
+msgstr "L’historique des transactions est incomplet, après %u."
+
+#: dnf/cli/commands/history.py:256
+msgid "No packages to list"
+msgstr "Aucun paquet à lister"
+
+#: dnf/cli/commands/history.py:279
 msgid ""
 "Invalid transaction ID range definition '{}'.\n"
 "Use '<transaction-id>..<transaction-id>'."
@@ -1420,7 +1414,7 @@ msgstr ""
 "La définition de la plage d’identifiants de transaction est invalide « {} ».\n"
 "Utilisez « <transaction-id>..<transaction-id> »."
 
-#: dnf/cli/commands/history.py:226
+#: dnf/cli/commands/history.py:283
 msgid ""
 "Can't convert '{}' to transaction ID.\n"
 "Use '<number>', 'last', 'last-<number>'."
@@ -1428,37 +1422,31 @@ msgstr ""
 "Impossible de convertir « {} » à ID transaction.\n"
 "Utiliser « <number>», « last », « last-<number> »."
 
-#: dnf/cli/commands/history.py:255
+#: dnf/cli/commands/history.py:312
 msgid "No transaction which manipulates package '{}' was found."
 msgstr "Aucune transaction manipulant le paquet « {} » n’a été trouvée."
 
-#: dnf/cli/commands/history.py:305
-#, python-brace-format
-msgid "Transaction ID \"{id}\" not found."
-msgstr "ID de Transaction « {id} » non trouvé."
-
-#: dnf/cli/commands/history.py:313
+#: dnf/cli/commands/history.py:357
 msgid "{} exists, overwrite?"
 msgstr "{} existe, l’écraser ?"
 
-#: dnf/cli/commands/history.py:316
+#: dnf/cli/commands/history.py:360
 msgid "Not overwriting {}, exiting."
 msgstr "{} non écrasé, sortie."
 
-#: dnf/cli/commands/history.py:323
+#: dnf/cli/commands/history.py:367
 msgid "Transaction saved to {}."
 msgstr "Transaction enregistrée vers {}."
 
-#: dnf/cli/commands/history.py:326
+#: dnf/cli/commands/history.py:370
 msgid "Error storing transaction: {}"
 msgstr "Erreur lors du stockage de la transaction : {}"
 
-#: dnf/cli/commands/history.py:350
-msgid ""
-"Warning, the following problems occurred while replaying the transaction:"
+#: dnf/cli/commands/history.py:386
+msgid "Warning, the following problems occurred while running a transaction:"
 msgstr ""
-"Attention, les problèmes suivants sont survenus lors de la relecture de la "
-"transaction :"
+"Attention, les problèmes suivants sont survenus lors de l'exécution d'une "
+"transaction :"
 
 #: dnf/cli/commands/install.py:47
 msgid "install a package or packages on your system"
@@ -1477,7 +1465,7 @@ msgstr "Impossible de trouver une correspondance"
 msgid "Not a valid rpm file path: %s"
 msgstr "Chemin du fichier RPM invalide : %s"
 
-#: dnf/cli/commands/install.py:167
+#: dnf/cli/commands/install.py:166
 #, python-brace-format
 msgid "There are following alternatives for \"{0}\": {1}"
 msgstr "Il existe les alternatives suivantes pour \"{0}\" : {1}"
@@ -1522,7 +1510,7 @@ msgid "%s marked as group installed."
 msgstr "%s marqué comme étant installé par un groupe."
 
 #: dnf/cli/commands/mark.py:85 dnf/cli/commands/shell.py:129
-#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:279
+#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:282
 msgid "Error:"
 msgstr "Erreur :"
 
@@ -1580,42 +1568,46 @@ msgid "Package {} belongs to multiple modules, skipping"
 msgstr "Le paquet {} appartient à de multiples modules, ignorer"
 
 #: dnf/cli/commands/module.py:277
+msgid "switch a module to a stream and distrosync rpm packages"
+msgstr "passer un module à un flux et à des paquets de rpm de distrosync"
+
+#: dnf/cli/commands/module.py:299
 msgid "list modular packages"
 msgstr "dresser une liste des paquets modulaires"
 
-#: dnf/cli/commands/module.py:292
+#: dnf/cli/commands/module.py:314
 msgid "list packages belonging to a module"
 msgstr "dresser une liste des paquets appartenant à un module"
 
-#: dnf/cli/commands/module.py:327
+#: dnf/cli/commands/module.py:349
 msgid "Interact with Modules."
 msgstr "Interagit avec les modules."
 
-#: dnf/cli/commands/module.py:340
+#: dnf/cli/commands/module.py:362
 msgid "show only enabled modules"
 msgstr "n’affiche que les modules activés"
 
-#: dnf/cli/commands/module.py:343
+#: dnf/cli/commands/module.py:365
 msgid "show only disabled modules"
 msgstr "n’affiche que les modules désactivés"
 
-#: dnf/cli/commands/module.py:346
+#: dnf/cli/commands/module.py:368
 msgid "show only installed modules or packages"
 msgstr "affiche uniquement les paquets ou modules installés"
 
-#: dnf/cli/commands/module.py:349
+#: dnf/cli/commands/module.py:371
 msgid "show profile content"
 msgstr "affiche le contenu du profil"
 
-#: dnf/cli/commands/module.py:354
+#: dnf/cli/commands/module.py:376
 msgid "remove all modular packages"
 msgstr "Supprimer les paquets modulaires"
 
-#: dnf/cli/commands/module.py:364
+#: dnf/cli/commands/module.py:386
 msgid "Module specification"
 msgstr "Caractéristique de module"
 
-#: dnf/cli/commands/module.py:386
+#: dnf/cli/commands/module.py:408
 msgid "{} {} {}: too few arguments"
 msgstr "{} {} {} : trop peu de paramètres"
 
@@ -2133,22 +2125,22 @@ msgstr "MOTCLEF"
 msgid "Keyword to search for"
 msgstr "Mot-clef à chercher"
 
-#: dnf/cli/commands/search.py:61 dnf/cli/output.py:506
+#: dnf/cli/commands/search.py:61 dnf/cli/output.py:460
 msgctxt "long"
 msgid "Name"
 msgstr "Nom"
 
-#: dnf/cli/commands/search.py:62 dnf/cli/output.py:559
+#: dnf/cli/commands/search.py:62 dnf/cli/output.py:513
 msgctxt "long"
 msgid "Summary"
 msgstr "Résumé"
 
-#: dnf/cli/commands/search.py:63 dnf/cli/output.py:569
+#: dnf/cli/commands/search.py:63 dnf/cli/output.py:523
 msgctxt "long"
 msgid "Description"
 msgstr "Description"
 
-#: dnf/cli/commands/search.py:64 dnf/cli/output.py:562
+#: dnf/cli/commands/search.py:64 dnf/cli/output.py:516
 msgid "URL"
 msgstr "URL"
 
@@ -2291,16 +2283,16 @@ msgstr ""
 "run                      résoud et exécute l’ensemble de transactions\n"
 "exit (ou quit)           quitte l’interpréteur de commandes"
 
-#: dnf/cli/commands/shell.py:259
+#: dnf/cli/commands/shell.py:262
 #, python-format
 msgid "Error: Cannot open %s for reading"
 msgstr "Erreur : %s n’a pu être ouvert pour lecture"
 
-#: dnf/cli/commands/shell.py:281 dnf/cli/main.py:187
+#: dnf/cli/commands/shell.py:284 dnf/cli/main.py:187
 msgid "Complete!"
 msgstr "Terminé !"
 
-#: dnf/cli/commands/shell.py:291
+#: dnf/cli/commands/shell.py:294
 msgid "Leaving Shell"
 msgstr "Abandon de l’interpréteur de commandes"
 
@@ -2497,8 +2489,8 @@ msgstr "Criticité"
 msgid "Files"
 msgstr "Fichiers"
 
-#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1499
-#: dnf/cli/output.py:1772 dnf/cli/output.py:1774
+#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1652
+#: dnf/cli/output.py:1654 dnf/util.py:591
 msgid "Installed"
 msgstr "Installé"
 
@@ -2862,13 +2854,13 @@ msgstr "Impossible d’encoder l’argument « %s » : %s"
 #. Translators: This is abbreviated 'Name'. Should be no longer
 #. than 12 characters. You can use the full version if it is short
 #. enough in your language.
-#: dnf/cli/output.py:505
+#: dnf/cli/output.py:459
 msgctxt "short"
 msgid "Name"
 msgstr "Nom"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:511
+#: dnf/cli/output.py:465
 msgid "Epoch"
 msgstr "Époque"
 
@@ -2876,38 +2868,38 @@ msgstr "Époque"
 #. use the full (unabbreviated) term 'Version' if you think that
 #. the translation to your language is not too long and will
 #. always fit to limited space.
-#: dnf/cli/output.py:512 dnf/cli/output.py:1335
+#: dnf/cli/output.py:466 dnf/cli/output.py:1248
 msgctxt "short"
 msgid "Version"
 msgstr "Version"
 
 #. Translators: This is the full (unabbreviated) term 'Version'.
-#: dnf/cli/output.py:513 dnf/cli/output.py:1337
+#: dnf/cli/output.py:467 dnf/cli/output.py:1250
 msgctxt "long"
 msgid "Version"
 msgstr "Version"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:516
+#: dnf/cli/output.py:470
 msgid "Release"
 msgstr "Publication"
 
 #. Translators: This is abbreviated 'Architecture', used when
 #. we have not enough space to display the full word.
-#: dnf/cli/output.py:517 dnf/cli/output.py:1326
+#: dnf/cli/output.py:471 dnf/cli/output.py:1239
 msgctxt "short"
 msgid "Arch"
 msgstr "Architecture"
 
 #. Translators: This is the full word 'Architecture', used when
 #. we have enough space.
-#: dnf/cli/output.py:518 dnf/cli/output.py:1329
+#: dnf/cli/output.py:472 dnf/cli/output.py:1242
 msgctxt "long"
 msgid "Architecture"
 msgstr "Architecture"
 
 #. Translators: This is the full (unabbreviated) term 'Size'.
-#: dnf/cli/output.py:520 dnf/cli/output.py:1352
+#: dnf/cli/output.py:474 dnf/cli/output.py:1265
 msgctxt "long"
 msgid "Size"
 msgstr "Taille"
@@ -2916,32 +2908,32 @@ msgstr "Taille"
 #. not be longer than 5 characters. If the term 'Size' in your
 #. language is not longer than 5 characters then you can use it
 #. unabbreviated.
-#: dnf/cli/output.py:520 dnf/cli/output.py:1350
+#: dnf/cli/output.py:474 dnf/cli/output.py:1263
 msgctxt "short"
 msgid "Size"
 msgstr "Taille"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:524
+#: dnf/cli/output.py:478
 msgid "Source"
 msgstr "Source"
 
 #. Translators: This is abbreviated 'Repository', used when
 #. we have not enough space to display the full word.
-#: dnf/cli/output.py:525 dnf/cli/output.py:1341
+#: dnf/cli/output.py:479 dnf/cli/output.py:1254
 msgctxt "short"
 msgid "Repo"
 msgstr "Dépôt"
 
 #. Translators: This is the full word 'Repository', used when
 #. we have enough space.
-#: dnf/cli/output.py:526 dnf/cli/output.py:1344
+#: dnf/cli/output.py:480 dnf/cli/output.py:1257
 msgctxt "long"
 msgid "Repository"
 msgstr "Dépôt"
 
 #. Translators: This message should be no longer than 12 chars.
-#: dnf/cli/output.py:533
+#: dnf/cli/output.py:487
 msgid "From repo"
 msgstr "Depuis le dépôt"
 
@@ -2949,316 +2941,312 @@ msgstr "Depuis le dépôt"
 #. print(_("Committer   : %s") % ucd(pkg.committer))
 #. print(_("Committime  : %s") % time.ctime(pkg.committime))
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:539
+#: dnf/cli/output.py:493
 msgid "Packager"
 msgstr "Empaqueteur"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:541
+#: dnf/cli/output.py:495
 msgid "Buildtime"
 msgstr "Date de compilation"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:545
+#: dnf/cli/output.py:499
 msgid "Install time"
 msgstr "Date d’installation"
 
 #. Translators: This message should be no longer than 12 chars.
-#: dnf/cli/output.py:554
+#: dnf/cli/output.py:508
 msgid "Installed by"
 msgstr "Installé par"
 
 #. Translators: This is abbreviated 'Summary'. Should be no longer
 #. than 12 characters. You can use the full version if it is short
 #. enough in your language.
-#: dnf/cli/output.py:558
+#: dnf/cli/output.py:512
 msgctxt "short"
 msgid "Summary"
 msgstr "Résumé"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:564
+#: dnf/cli/output.py:518
 msgid "License"
 msgstr "Licence"
 
 #. Translators: This is abbreviated 'Description'. Should be no longer
 #. than 12 characters. You can use the full version if it is short
 #. enough in your language.
-#: dnf/cli/output.py:568
+#: dnf/cli/output.py:522
 msgctxt "short"
 msgid "Description"
 msgstr "Description"
 
-#: dnf/cli/output.py:695
-msgid "No packages to list"
-msgstr "Aucun paquet à lister"
-
-#: dnf/cli/output.py:706
+#: dnf/cli/output.py:650
 msgid "y"
 msgstr "o"
 
-#: dnf/cli/output.py:706
+#: dnf/cli/output.py:650
 msgid "yes"
 msgstr "oui"
 
-#: dnf/cli/output.py:707
+#: dnf/cli/output.py:651
 msgid "n"
 msgstr "n"
 
-#: dnf/cli/output.py:707
+#: dnf/cli/output.py:651
 msgid "no"
 msgstr "non"
 
-#: dnf/cli/output.py:711
+#: dnf/cli/output.py:655
 msgid "Is this ok [y/N]: "
 msgstr "Voulez-vous continuer ? [o/N] : "
 
-#: dnf/cli/output.py:715
+#: dnf/cli/output.py:659
 msgid "Is this ok [Y/n]: "
 msgstr "Voulez-vous continuer ? [O/n] : "
 
-#: dnf/cli/output.py:795
+#: dnf/cli/output.py:739
 #, python-format
 msgid "Group: %s"
 msgstr "Groupe : %s"
 
-#: dnf/cli/output.py:799
+#: dnf/cli/output.py:743
 #, python-format
 msgid " Group-Id: %s"
 msgstr " Identifiant du groupe : %s"
 
-#: dnf/cli/output.py:801 dnf/cli/output.py:840
+#: dnf/cli/output.py:745 dnf/cli/output.py:784
 #, python-format
 msgid " Description: %s"
 msgstr " Description : %s"
 
-#: dnf/cli/output.py:803
+#: dnf/cli/output.py:747
 #, python-format
 msgid " Language: %s"
 msgstr " Langue : %s"
 
-#: dnf/cli/output.py:806
+#: dnf/cli/output.py:750
 msgid " Mandatory Packages:"
 msgstr " Paquets obligatoires :"
 
-#: dnf/cli/output.py:807
+#: dnf/cli/output.py:751
 msgid " Default Packages:"
 msgstr " Paquets par défaut :"
 
-#: dnf/cli/output.py:808
+#: dnf/cli/output.py:752
 msgid " Optional Packages:"
 msgstr " Paquets optionnels :"
 
-#: dnf/cli/output.py:809
+#: dnf/cli/output.py:753
 msgid " Conditional Packages:"
 msgstr " Paquets conditionnels :"
 
-#: dnf/cli/output.py:834
+#: dnf/cli/output.py:778
 #, python-format
 msgid "Environment Group: %s"
 msgstr "Groupe d’environnement : %s"
 
-#: dnf/cli/output.py:837
+#: dnf/cli/output.py:781
 #, python-format
 msgid " Environment-Id: %s"
 msgstr " Identifiant d’environnement : %s"
 
-#: dnf/cli/output.py:843
+#: dnf/cli/output.py:787
 msgid " Mandatory Groups:"
 msgstr " Groupes obligatoires :"
 
-#: dnf/cli/output.py:844
+#: dnf/cli/output.py:788
 msgid " Optional Groups:"
 msgstr " Groupes optionnels :"
 
-#: dnf/cli/output.py:865
+#: dnf/cli/output.py:809
 msgid "Matched from:"
 msgstr "Correspondances trouvées dans  :"
 
-#: dnf/cli/output.py:879
+#: dnf/cli/output.py:823
 #, python-format
 msgid "Filename    : %s"
 msgstr "Nom de fichier : %s"
 
-#: dnf/cli/output.py:904
+#: dnf/cli/output.py:848
 #, python-format
 msgid "Repo        : %s"
 msgstr "Dépôt               : %s"
 
-#: dnf/cli/output.py:913
+#: dnf/cli/output.py:857
 msgid "Description : "
 msgstr "Description  : "
 
-#: dnf/cli/output.py:917
+#: dnf/cli/output.py:861
 #, python-format
 msgid "URL         : %s"
 msgstr "URL                 : %s"
 
-#: dnf/cli/output.py:921
+#: dnf/cli/output.py:865
 #, python-format
 msgid "License     : %s"
 msgstr "Licence        : %s"
 
-#: dnf/cli/output.py:927
+#: dnf/cli/output.py:871
 #, python-format
 msgid "Provide    : %s"
 msgstr "Provide    : %s"
 
-#: dnf/cli/output.py:947
+#: dnf/cli/output.py:891
 #, python-format
 msgid "Other       : %s"
 msgstr "Autre  : %s"
 
-#: dnf/cli/output.py:996
+#: dnf/cli/output.py:940
 msgid "There was an error calculating total download size"
 msgstr ""
 "Une erreur est survenue pendant le calcul de la taille totale des "
 "téléchargements"
 
-#: dnf/cli/output.py:1002
+#: dnf/cli/output.py:946
 #, python-format
 msgid "Total size: %s"
 msgstr "Taille totale  : %s"
 
-#: dnf/cli/output.py:1005
+#: dnf/cli/output.py:949
 #, python-format
 msgid "Total download size: %s"
 msgstr "Taille totale des téléchargements : %s"
 
-#: dnf/cli/output.py:1008
+#: dnf/cli/output.py:952
 #, python-format
 msgid "Installed size: %s"
 msgstr "Taille des paquets installés : %s"
 
-#: dnf/cli/output.py:1026
+#: dnf/cli/output.py:970
 msgid "There was an error calculating installed size"
 msgstr ""
 "Une erreur est survenue pendant le calcul de la taille des paquets "
 "installées"
 
-#: dnf/cli/output.py:1030
+#: dnf/cli/output.py:974
 #, python-format
 msgid "Freed space: %s"
 msgstr "Espace libéré : %s"
 
-#: dnf/cli/output.py:1039
+#: dnf/cli/output.py:983
 msgid "Marking packages as installed by the group:"
 msgstr "Marquage des paquets installés par le groupe :"
 
-#: dnf/cli/output.py:1046
+#: dnf/cli/output.py:990
 msgid "Marking packages as removed by the group:"
 msgstr "Marquage des paquets supprimés par le groupe :"
 
-#: dnf/cli/output.py:1056
+#: dnf/cli/output.py:1000
 msgid "Group"
 msgstr "Groupe"
 
-#: dnf/cli/output.py:1056
+#: dnf/cli/output.py:1000
 msgid "Packages"
 msgstr "Paquets"
 
-#: dnf/cli/output.py:1133
+#: dnf/cli/output.py:1046
 msgid "Installing group/module packages"
 msgstr "Installation des paquets du groupe/module"
 
-#: dnf/cli/output.py:1134
+#: dnf/cli/output.py:1047
 msgid "Installing group packages"
 msgstr "Installation du groupe de paquets"
 
 #. TRANSLATORS: This is for a list of packages to be installed.
-#: dnf/cli/output.py:1138
+#: dnf/cli/output.py:1051
 msgctxt "summary"
 msgid "Installing"
 msgstr "Installation"
 
 #. TRANSLATORS: This is for a list of packages to be upgraded.
-#: dnf/cli/output.py:1140
+#: dnf/cli/output.py:1053
 msgctxt "summary"
 msgid "Upgrading"
 msgstr "Mise à jour"
 
 #. TRANSLATORS: This is for a list of packages to be reinstalled.
-#: dnf/cli/output.py:1142
+#: dnf/cli/output.py:1055
 msgctxt "summary"
 msgid "Reinstalling"
 msgstr "Réinstallation"
 
-#: dnf/cli/output.py:1144
+#: dnf/cli/output.py:1057
 msgid "Installing dependencies"
 msgstr "Installation des dépendances"
 
-#: dnf/cli/output.py:1145
+#: dnf/cli/output.py:1058
 msgid "Installing weak dependencies"
 msgstr "Installation des dépendances faibles"
 
 #. TRANSLATORS: This is for a list of packages to be removed.
-#: dnf/cli/output.py:1147
+#: dnf/cli/output.py:1060
 msgid "Removing"
 msgstr "Suppression"
 
-#: dnf/cli/output.py:1148
+#: dnf/cli/output.py:1061
 msgid "Removing dependent packages"
 msgstr "Supprimer des paquets dépendants"
 
-#: dnf/cli/output.py:1149
+#: dnf/cli/output.py:1062
 msgid "Removing unused dependencies"
 msgstr "Suppression des dépendances inutilisées"
 
 #. TRANSLATORS: This is for a list of packages to be downgraded.
-#: dnf/cli/output.py:1151
+#: dnf/cli/output.py:1064
 msgctxt "summary"
 msgid "Downgrading"
 msgstr "Rétrogradation"
 
-#: dnf/cli/output.py:1176
+#: dnf/cli/output.py:1089
 msgid "Installing module profiles"
 msgstr "Installation des profils de module"
 
-#: dnf/cli/output.py:1185
+#: dnf/cli/output.py:1098
 msgid "Disabling module profiles"
 msgstr "Désactivation des profils de module"
 
-#: dnf/cli/output.py:1194
+#: dnf/cli/output.py:1107
 msgid "Enabling module streams"
 msgstr "Activation des flux de modules"
 
-#: dnf/cli/output.py:1202
+#: dnf/cli/output.py:1115
 msgid "Switching module streams"
 msgstr "Basculement des flux de modules"
 
-#: dnf/cli/output.py:1210
+#: dnf/cli/output.py:1123
 msgid "Disabling modules"
 msgstr "Désactivation des modules"
 
-#: dnf/cli/output.py:1218
+#: dnf/cli/output.py:1131
 msgid "Resetting modules"
 msgstr "Réinitialisation des modules"
 
-#: dnf/cli/output.py:1230
+#: dnf/cli/output.py:1143
 msgid "Installing Environment Groups"
 msgstr "Installation des groupes d’environnement"
 
-#: dnf/cli/output.py:1237
+#: dnf/cli/output.py:1150
 msgid "Upgrading Environment Groups"
 msgstr "Mise à niveau des groupes d’environnement"
 
-#: dnf/cli/output.py:1244
+#: dnf/cli/output.py:1157
 msgid "Removing Environment Groups"
 msgstr "Suppression des groupes d’environnement"
 
-#: dnf/cli/output.py:1251
+#: dnf/cli/output.py:1164
 msgid "Installing Groups"
 msgstr "Installation des groupes"
 
-#: dnf/cli/output.py:1258
+#: dnf/cli/output.py:1171
 msgid "Upgrading Groups"
 msgstr "Mise à niveau des groupes"
 
-#: dnf/cli/output.py:1265
+#: dnf/cli/output.py:1178
 msgid "Removing Groups"
 msgstr "Suppression des groupes"
 
-#: dnf/cli/output.py:1281
+#: dnf/cli/output.py:1194
 #, python-format
 msgid ""
 "Skipping packages with conflicts:\n"
@@ -3267,12 +3255,12 @@ msgstr ""
 "Ignorer les paquets en conflit :\n"
 "(ajouter « %s » à la ligne de commande pour forcer leur mise à niveau)"
 
-#: dnf/cli/output.py:1291
+#: dnf/cli/output.py:1204
 #, python-format
 msgid "Skipping packages with broken dependencies%s"
 msgstr "Ignorer les paquets ayant des dépendances cassées %s"
 
-#: dnf/cli/output.py:1295
+#: dnf/cli/output.py:1208
 msgid " or part of a group"
 msgstr " ou qui fait parti d’un groupe"
 
@@ -3280,22 +3268,22 @@ msgstr " ou qui fait parti d’un groupe"
 #. use the full (unabbreviated) term 'Package' if you think that
 #. the translation to your language is not too long and will
 #. always fit to limited space.
-#: dnf/cli/output.py:1320
+#: dnf/cli/output.py:1233
 msgctxt "short"
 msgid "Package"
 msgstr "Paquet"
 
 #. Translators: This is the full (unabbreviated) term 'Package'.
-#: dnf/cli/output.py:1322
+#: dnf/cli/output.py:1235
 msgctxt "long"
 msgid "Package"
 msgstr "Paquet"
 
-#: dnf/cli/output.py:1371
+#: dnf/cli/output.py:1284
 msgid "replacing"
 msgstr "remplacement"
 
-#: dnf/cli/output.py:1378
+#: dnf/cli/output.py:1291
 #, python-format
 msgid ""
 "\n"
@@ -3307,289 +3295,273 @@ msgstr ""
 "%s\n"
 
 #. TODO: remove
-#: dnf/cli/output.py:1383 dnf/cli/output.py:1932 dnf/cli/output.py:1933
+#: dnf/cli/output.py:1296 dnf/cli/output.py:1812 dnf/cli/output.py:1813
 msgid "Install"
 msgstr "Installer"
 
-#: dnf/cli/output.py:1387 dnf/cli/output.py:1941
+#: dnf/cli/output.py:1300 dnf/cli/output.py:1821
 msgid "Upgrade"
 msgstr "Mettre à niveau"
 
-#: dnf/cli/output.py:1388
+#: dnf/cli/output.py:1301
 msgid "Remove"
 msgstr "Supprimer"
 
-#: dnf/cli/output.py:1390 dnf/cli/output.py:1939
+#: dnf/cli/output.py:1303 dnf/cli/output.py:1819
 msgid "Downgrade"
 msgstr "Retrograder"
 
-#: dnf/cli/output.py:1391
+#: dnf/cli/output.py:1304
 msgid "Skip"
 msgstr "Ignorer"
 
-#: dnf/cli/output.py:1400 dnf/cli/output.py:1416
+#: dnf/cli/output.py:1313 dnf/cli/output.py:1329
 msgid "Package"
 msgid_plural "Packages"
 msgstr[0] "Paquet"
 msgstr[1] "Paquets"
 
-#: dnf/cli/output.py:1418
+#: dnf/cli/output.py:1331
 msgid "Dependent package"
 msgid_plural "Dependent packages"
 msgstr[0] "Paquet dépendant"
 msgstr[1] "Paquets dépendants"
 
-#: dnf/cli/output.py:1497 dnf/cli/output.py:1773 dnf/cli/output.py:1942
-msgid "Upgraded"
-msgstr "Mis à niveau"
-
-#: dnf/cli/output.py:1498 dnf/cli/output.py:1773 dnf/cli/output.py:1940
-msgid "Downgraded"
-msgstr "Rétrogradé"
-
-#: dnf/cli/output.py:1503
-msgid "Reinstalled"
-msgstr "Réinstallé"
-
-#: dnf/cli/output.py:1504
-msgid "Skipped"
-msgstr "Ignoré"
-
-#: dnf/cli/output.py:1505
-msgid "Removed"
-msgstr "Supprimé"
-
-#: dnf/cli/output.py:1508
-msgid "Failed"
-msgstr "Échec"
-
-#: dnf/cli/output.py:1559
+#: dnf/cli/output.py:1439
 msgid "Total"
 msgstr "Total"
 
-#: dnf/cli/output.py:1587
+#: dnf/cli/output.py:1467
 msgid "<unset>"
 msgstr "<unset>"
 
-#: dnf/cli/output.py:1588
+#: dnf/cli/output.py:1468
 msgid "System"
 msgstr "Système"
 
-#: dnf/cli/output.py:1638
+#: dnf/cli/output.py:1518
 msgid "Command line"
 msgstr "Ligne de commande"
 
 #. TRANSLATORS: user names who executed transaction in history command output
-#: dnf/cli/output.py:1649
+#: dnf/cli/output.py:1529
 msgid "User name"
 msgstr "Nom d’utilisateur"
 
-#: dnf/cli/output.py:1651
+#: dnf/cli/output.py:1531
 msgid "ID"
 msgstr "ID"
 
-#: dnf/cli/output.py:1653
+#: dnf/cli/output.py:1533
 msgid "Date and time"
 msgstr "Date et heure"
 
-#: dnf/cli/output.py:1654
+#: dnf/cli/output.py:1534
 msgid "Action(s)"
 msgstr "Action(s)"
 
-#: dnf/cli/output.py:1655
+#: dnf/cli/output.py:1535
 msgid "Altered"
 msgstr "Modifié"
 
-#: dnf/cli/output.py:1698
+#: dnf/cli/output.py:1578
 msgid "No transactions"
 msgstr "Pas de transaction"
 
-#: dnf/cli/output.py:1699 dnf/cli/output.py:1715
+#: dnf/cli/output.py:1579 dnf/cli/output.py:1595
 msgid "Failed history info"
 msgstr "Infos sur l’historique des échecs"
 
-#: dnf/cli/output.py:1714
+#: dnf/cli/output.py:1594
 msgid "No transaction ID, or package, given"
 msgstr "Pas de paquet ou d’identifiant de transaction fourni"
 
-#: dnf/cli/output.py:1772
+#: dnf/cli/output.py:1652
 msgid "Erased"
 msgstr "Effacé"
 
-#: dnf/cli/output.py:1774
+#: dnf/cli/output.py:1653 dnf/cli/output.py:1820 dnf/util.py:590
+msgid "Downgraded"
+msgstr "Rétrogradé"
+
+#: dnf/cli/output.py:1653 dnf/cli/output.py:1822 dnf/util.py:589
+msgid "Upgraded"
+msgstr "Mis à niveau"
+
+#: dnf/cli/output.py:1654
 msgid "Not installed"
 msgstr "Non installé"
 
-#: dnf/cli/output.py:1775
+#: dnf/cli/output.py:1655
 msgid "Newer"
 msgstr "Plus récent"
 
-#: dnf/cli/output.py:1775
+#: dnf/cli/output.py:1655
 msgid "Older"
 msgstr "Plus ancien"
 
-#: dnf/cli/output.py:1823 dnf/cli/output.py:1825
+#: dnf/cli/output.py:1703 dnf/cli/output.py:1705
 msgid "Transaction ID :"
 msgstr "Identifiant de transaction :"
 
-#: dnf/cli/output.py:1828
+#: dnf/cli/output.py:1708
 msgid "Begin time     :"
 msgstr "Temps de début    :"
 
-#: dnf/cli/output.py:1831 dnf/cli/output.py:1833
+#: dnf/cli/output.py:1711 dnf/cli/output.py:1713
 msgid "Begin rpmdb    :"
 msgstr "Début de RPMDB    :"
 
-#: dnf/cli/output.py:1839
+#: dnf/cli/output.py:1719
 #, python-format
 msgid "(%u seconds)"
 msgstr "(%u secondes)"
 
-#: dnf/cli/output.py:1841
+#: dnf/cli/output.py:1721
 #, python-format
 msgid "(%u minutes)"
 msgstr "(%u minutes)"
 
-#: dnf/cli/output.py:1843
+#: dnf/cli/output.py:1723
 #, python-format
 msgid "(%u hours)"
 msgstr "(%u heures)"
 
-#: dnf/cli/output.py:1845
+#: dnf/cli/output.py:1725
 #, python-format
 msgid "(%u days)"
 msgstr "(%u jours)"
 
-#: dnf/cli/output.py:1846
+#: dnf/cli/output.py:1726
 msgid "End time       :"
 msgstr "Temps de fin :"
 
-#: dnf/cli/output.py:1849 dnf/cli/output.py:1851
+#: dnf/cli/output.py:1729 dnf/cli/output.py:1731
 msgid "End rpmdb      :"
 msgstr "Fin de RPMDB :"
 
-#: dnf/cli/output.py:1858 dnf/cli/output.py:1860
+#: dnf/cli/output.py:1738 dnf/cli/output.py:1740
 msgid "User           :"
 msgstr "Utilisateur  :"
 
-#: dnf/cli/output.py:1864 dnf/cli/output.py:1871
+#: dnf/cli/output.py:1744 dnf/cli/output.py:1751
 msgid "Aborted"
 msgstr "Avorté"
 
-#: dnf/cli/output.py:1864 dnf/cli/output.py:1867 dnf/cli/output.py:1869
-#: dnf/cli/output.py:1871 dnf/cli/output.py:1873 dnf/cli/output.py:1875
+#: dnf/cli/output.py:1744 dnf/cli/output.py:1747 dnf/cli/output.py:1749
+#: dnf/cli/output.py:1751 dnf/cli/output.py:1753 dnf/cli/output.py:1755
 msgid "Return-Code    :"
 msgstr "Code de retour  :"
 
-#: dnf/cli/output.py:1867 dnf/cli/output.py:1875
+#: dnf/cli/output.py:1747 dnf/cli/output.py:1755
 msgid "Success"
 msgstr "Réussi"
 
-#: dnf/cli/output.py:1869
+#: dnf/cli/output.py:1749
 msgid "Failures:"
 msgstr "Échecs :"
 
-#: dnf/cli/output.py:1873
+#: dnf/cli/output.py:1753
 msgid "Failure:"
 msgstr "Échec :"
 
-#: dnf/cli/output.py:1883 dnf/cli/output.py:1885
+#: dnf/cli/output.py:1763 dnf/cli/output.py:1765
 msgid "Releasever     :"
 msgstr "Releasever     :"
 
-#: dnf/cli/output.py:1890 dnf/cli/output.py:1892
+#: dnf/cli/output.py:1770 dnf/cli/output.py:1772
 msgid "Command Line   :"
 msgstr "Ligne de commande :"
 
-#: dnf/cli/output.py:1897 dnf/cli/output.py:1899
+#: dnf/cli/output.py:1777 dnf/cli/output.py:1779
 msgid "Comment        :"
 msgstr "Commentaire :"
 
-#: dnf/cli/output.py:1903
+#: dnf/cli/output.py:1783
 msgid "Transaction performed with:"
 msgstr "Transaction effectuée avec :"
 
-#: dnf/cli/output.py:1912
+#: dnf/cli/output.py:1792
 msgid "Packages Altered:"
 msgstr "Paquets modifiés :"
 
-#: dnf/cli/output.py:1918
+#: dnf/cli/output.py:1798
 msgid "Scriptlet output:"
 msgstr "Sortie du mini script :"
 
-#: dnf/cli/output.py:1925
+#: dnf/cli/output.py:1805
 msgid "Errors:"
 msgstr "Erreurs :"
 
-#: dnf/cli/output.py:1934
+#: dnf/cli/output.py:1814
 msgid "Dep-Install"
 msgstr "Installation des dépendances"
 
-#: dnf/cli/output.py:1935
+#: dnf/cli/output.py:1815
 msgid "Obsoleted"
 msgstr "Rendu obsolète"
 
-#: dnf/cli/output.py:1936 dnf/transaction.py:84 dnf/transaction.py:85
+#: dnf/cli/output.py:1816 dnf/transaction.py:84 dnf/transaction.py:85
 msgid "Obsoleting"
 msgstr "Rend obsolète"
 
-#: dnf/cli/output.py:1937
+#: dnf/cli/output.py:1817
 msgid "Erase"
 msgstr "Effacement"
 
-#: dnf/cli/output.py:1938
+#: dnf/cli/output.py:1818
 msgid "Reinstall"
 msgstr "Réinstallation"
 
-#: dnf/cli/output.py:2016
+#: dnf/cli/output.py:1892
 #, python-format
 msgid "---> Package %s.%s %s will be installed"
 msgstr "---> Le paquet %s.%s %s sera installé"
 
-#: dnf/cli/output.py:2018
+#: dnf/cli/output.py:1894
 #, python-format
 msgid "---> Package %s.%s %s will be an upgrade"
 msgstr "---> Le paquet %s.%s %s sera une mise à jour"
 
-#: dnf/cli/output.py:2020
+#: dnf/cli/output.py:1896
 #, python-format
 msgid "---> Package %s.%s %s will be erased"
 msgstr "---> Le paquet %s.%s %s sera supprimé"
 
-#: dnf/cli/output.py:2022
+#: dnf/cli/output.py:1898
 #, python-format
 msgid "---> Package %s.%s %s will be reinstalled"
 msgstr "---> Le paquet %s.%s %s sera réinstallé"
 
-#: dnf/cli/output.py:2024
+#: dnf/cli/output.py:1900
 #, python-format
 msgid "---> Package %s.%s %s will be a downgrade"
 msgstr "---> Le paquet %s.%s %s sera une rétrogradation"
 
-#: dnf/cli/output.py:2026
+#: dnf/cli/output.py:1902
 #, python-format
 msgid "---> Package %s.%s %s will be obsoleting"
 msgstr "---> Le paquet %s.%s %s sera rendu obsolète"
 
-#: dnf/cli/output.py:2028
+#: dnf/cli/output.py:1904
 #, python-format
 msgid "---> Package %s.%s %s will be upgraded"
 msgstr "---> Le paquet %s.%s %s sera mis à jour"
 
-#: dnf/cli/output.py:2030
+#: dnf/cli/output.py:1906
 #, python-format
 msgid "---> Package %s.%s %s will be obsoleted"
 msgstr "---> Le paquet %s.%s %s sera rendu obsolète"
 
-#: dnf/cli/output.py:2039
+#: dnf/cli/output.py:1915
 msgid "--> Starting dependency resolution"
 msgstr "--> Début de la résolution des dépendances"
 
-#: dnf/cli/output.py:2044
+#: dnf/cli/output.py:1919
 msgid "--> Finished dependency resolution"
 msgstr "--> Résolution des dépendances terminée"
 
-#: dnf/cli/output.py:2058 dnf/crypto.py:132
+#: dnf/cli/output.py:1933 dnf/crypto.py:132
 #, python-format
 msgid ""
 "Importing GPG key 0x%s:\n"
@@ -3677,7 +3649,7 @@ msgstr "Module ou Groupe « %s » n’existe pas."
 msgid "Environment id '%s' does not exist."
 msgstr "L’id d’environnement « %s » n’existe pas."
 
-#: dnf/comps.py:622 dnf/transaction_sr.py:443 dnf/transaction_sr.py:453
+#: dnf/comps.py:622 dnf/transaction_sr.py:477 dnf/transaction_sr.py:487
 #, python-format
 msgid "Environment id '%s' is not installed."
 msgstr "L’id d’environnement « %s » n’est pas installé."
@@ -3791,6 +3763,11 @@ msgstr "dépôt %s : 0x%s déjà importé"
 msgid "repo %s: imported key 0x%s."
 msgstr "dépôt %s : clé importée 0x%s."
 
+#: dnf/crypto.py:177
+#, python-format
+msgid "retrieving repo key for %s unencrypted from %s"
+msgstr "récupération de la clé de repo de %s non cryptée à partir %s"
+
 #: dnf/db/group.py:293
 msgid ""
 "No available modular metadata for modular package '{}', it cannot be "
@@ -3878,7 +3855,7 @@ msgid_plural "Modular dependency problems with Defaults:"
 msgstr[0] "Problème de dépendance modulaire avec les valeurs par défaut :"
 msgstr[1] "Problèmes de dépendance modulaire avec les valeurs par défaut :"
 
-#: dnf/exceptions.py:131 dnf/module/module_base.py:686
+#: dnf/exceptions.py:131 dnf/module/module_base.py:841
 msgid "Modular dependency problem:"
 msgid_plural "Modular dependency problems:"
 msgstr[0] "Problème de dépendance modulaire :"
@@ -3935,8 +3912,8 @@ msgstr ""
 "\n"
 "Aide : [d]éfaut, [e]activé, [x]désactivé, [i]nstallé, [a]ctivé"
 
-#: dnf/module/module_base.py:54 dnf/module/module_base.py:421
-#: dnf/module/module_base.py:477 dnf/module/module_base.py:543
+#: dnf/module/module_base.py:54 dnf/module/module_base.py:547
+#: dnf/module/module_base.py:603 dnf/module/module_base.py:669
 msgid "Ignoring unnecessary profile: '{}/{}'"
 msgstr "Profil inutile ignoré : {}/{}"
 
@@ -3947,21 +3924,21 @@ msgstr ""
 "Toutes les correspondance pour le paramètre « {0} » dans le mode module « "
 "{1}:{2} » ne sont pas actives"
 
-#: dnf/module/module_base.py:92
+#: dnf/module/module_base.py:92 dnf/module/module_base.py:202
 #, python-brace-format
 msgid "Installing module '{0}' from Fail-Safe repository {1} is not allowed"
 msgstr ""
 "L’installation du module « {0} » à partir du dépôt Fail-Safe {1} n’est pas "
 "permise"
 
-#: dnf/module/module_base.py:102
+#: dnf/module/module_base.py:102 dnf/module/module_base.py:212
 msgid ""
 "Unable to match profile for argument {}. Available profiles for '{}:{}': {}"
 msgstr ""
 "Impossible de faire correspondre le profil pour l’argument {}. Profils "
 "disponibles pour « {}:{} » : {}"
 
-#: dnf/module/module_base.py:106
+#: dnf/module/module_base.py:106 dnf/module/module_base.py:216
 msgid "Unable to match profile for argument {}"
 msgstr "Impossible de faire correspondre le profil pour l’argument {}"
 
@@ -3978,39 +3955,53 @@ msgstr "Aucun profil pour le module {} : {}"
 msgid "Default profile {} not available in module {}:{}"
 msgstr "Le profil par défaut {} n’est pas disponible dans le module {} : {}"
 
-#: dnf/module/module_base.py:142
+#: dnf/module/module_base.py:142 dnf/module/module_base.py:245
 msgid "Installing module from Fail-Safe repository is not allowed"
 msgstr ""
 "L’installation du module à partir du dépôt Fail-Safe n’est pas permise"
 
-#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
-#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
-#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
-#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
+#: dnf/module/module_base.py:194
+#, python-brace-format
+msgid "No active matches for argument '{0}' in module '{1}:{2}'"
+msgstr ""
+"Aucune correspondance active pour l'argument '{0}' dans le module '{1}:{2}'"
+
+#: dnf/module/module_base.py:226
+#, python-brace-format
+msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'"
+msgstr ""
+"Le profil installé '{0}' n'est pas disponible dans le module '{1}' stream "
+"'{2}'"
+
+#: dnf/module/module_base.py:265
+msgid "No packages available to distrosync for package name '{}'"
+msgstr ""
+"Aucun paquet disponible pour la distribution pour le nom de paquet '{}'"
+
+#: dnf/module/module_base.py:308 dnf/module/module_base.py:452
+#: dnf/module/module_base.py:477 dnf/module/module_base.py:496
+#: dnf/module/module_base.py:543 dnf/module/module_base.py:599
+#: dnf/module/module_base.py:665 dnf/module/module_base.py:827
 msgid "Unable to resolve argument {}"
 msgstr "Impossible de résoudre le paramètre {}"
 
-#: dnf/module/module_base.py:160
-msgid "No match for package {}"
-msgstr "Aucune correspondance pour le paquet {}"
-
-#: dnf/module/module_base.py:204
+#: dnf/module/module_base.py:319
 #, python-brace-format
 msgid "Upgrading module '{0}' from Fail-Safe repository {1} is not allowed"
 msgstr ""
 "La mise à niveau du module « {0} » à partir du dépôt Fail-Safe {1} n’est pas"
 " permise"
 
-#: dnf/module/module_base.py:223 dnf/module/module_base.py:251
+#: dnf/module/module_base.py:338 dnf/module/module_base.py:366
 msgid "Unable to match profile in argument {}"
 msgstr "Impossible de faire correspondre le profil dans l’argument {}"
 
-#: dnf/module/module_base.py:231
+#: dnf/module/module_base.py:346
 msgid "Upgrading module from Fail-Safe repository is not allowed"
 msgstr ""
 "La mise à niveau du module à partir du dépôt Fail-Safe n’est pas permise"
 
-#: dnf/module/module_base.py:367
+#: dnf/module/module_base.py:500
 msgid ""
 "Only module name is required. Ignoring unneeded information in argument: "
 "'{}'"
@@ -4018,7 +4009,11 @@ msgstr ""
 "Seul le nom du module est nécessaire. Les paramètres inutiles ont été "
 "ignorés : « {} »"
 
-#: dnf/package.py:298
+#: dnf/module/module_base.py:828
+msgid "No match for package {}"
+msgstr "Aucune correspondance pour le paquet {}"
+
+#: dnf/package.py:333
 #, python-format
 msgid "%s: %s check failed: %s vs %s"
 msgstr "%s : %s vérification a échoué : %s vs %s"
@@ -4032,12 +4027,12 @@ msgstr "%s est un fichier vide"
 #: dnf/persistor.py:91
 #, python-format
 msgid "Failed to load expired repos cache: %s"
-msgstr ""
+msgstr "Echec du chargement du cache des repos expirés : %s"
 
 #: dnf/persistor.py:99
 #, python-format
 msgid "Failed to store expired repos cache: %s"
-msgstr ""
+msgstr "N'a pas réussi à stocker le cache des repos expirés : %s"
 
 #: dnf/persistor.py:106
 msgid "Failed storing last makecache time."
@@ -4102,6 +4097,14 @@ msgstr "Ajout du dépôt %s depuis le %s"
 msgid "Errors occurred during test transaction."
 msgstr "Des erreurs sont survenues lors de la transaction de test."
 
+#: dnf/sack.py:47
+msgid ""
+"allow_vendor_change is disabled. This option is currently not supported for "
+"downgrade and distro-sync commands"
+msgstr ""
+"allow_vendor_change est désactivé. Cette option n'est actuellement pas prise"
+" en charge pour les commandes de downgrade et de distro-sync"
+
 #. TRANSLATORS: This is for a single package currently being downgraded.
 #: dnf/transaction.py:80
 msgctxt "currently"
@@ -4148,27 +4151,31 @@ msgstr "Exécution du scriptlet"
 msgid "Preparing"
 msgstr "Préparation"
 
-#: dnf/transaction_sr.py:60
+#: dnf/transaction_sr.py:66
 #, python-brace-format
-msgid "Errors in \"{filename}\":"
-msgstr "Erreurs dans « {filename} » :"
+msgid ""
+"The following problems occurred while replaying the transaction from file "
+"\"{filename}\":"
+msgstr ""
+"Les problèmes suivants sont survenus lors de la relecture de la transaction "
+"à partir du fichier \"{filename}\" :"
 
-#: dnf/transaction_sr.py:70
-#, python-brace-format
-msgid "Error in \"{filename}\": {error}"
-msgstr "Erreur dans « {filename} » : {error}"
+#: dnf/transaction_sr.py:68
+msgid "The following problems occurred while running a transaction:"
+msgstr ""
+"Les problèmes suivants sont survenus lors de l'exécution d'une transaction :"
 
-#: dnf/transaction_sr.py:87
+#: dnf/transaction_sr.py:89
 #, python-brace-format
 msgid "Invalid major version \"{major}\", number expected."
 msgstr "Version majeur invalide « {major} », numéro attendu."
 
-#: dnf/transaction_sr.py:95
+#: dnf/transaction_sr.py:97
 #, python-brace-format
 msgid "Invalid minor version \"{minor}\", number expected."
 msgstr "Version mineure invalide « {minor} », numéro attendu."
 
-#: dnf/transaction_sr.py:101
+#: dnf/transaction_sr.py:103
 #, python-brace-format
 msgid ""
 "Incompatible major version \"{major}\", supported major version is "
@@ -4177,137 +4184,186 @@ msgstr ""
 "Version majeure incompatible « {major} », la version majeure prise en charge"
 " est « {major_supp} »."
 
-#: dnf/transaction_sr.py:244
+#: dnf/transaction_sr.py:224
+msgid ""
+"Conflicting TransactionReplay arguments have been specified: filename, data"
+msgstr ""
+"Des arguments contradictoires de TransactionReplay ont été spécifiés : nom "
+"de fichier, données"
+
+#: dnf/transaction_sr.py:265
 #, python-brace-format
 msgid "Unexpected type of \"{id}\", {exp} expected."
 msgstr "Type de « {id} » inattendu, {exp} attendu."
 
-#: dnf/transaction_sr.py:250
+#: dnf/transaction_sr.py:271
 #, python-brace-format
 msgid "Missing key \"{key}\"."
 msgstr "Clé « {key} » manquante."
 
-#: dnf/transaction_sr.py:263
+#: dnf/transaction_sr.py:285
 #, python-brace-format
 msgid "Missing object key \"{key}\" in an rpm."
 msgstr "Clé objet « {key} » manquante dans un rpm."
 
-#: dnf/transaction_sr.py:267
+#: dnf/transaction_sr.py:289
 #, python-brace-format
 msgid "Unexpected value of package reason \"{reason}\" for rpm nevra \"{nevra}\"."
 msgstr ""
+"Valeur inattendue de la raison du paquet \"{reason}\" pour rpm nevra "
+"\"{nevra}\"."
 
-#: dnf/transaction_sr.py:275
+#: dnf/transaction_sr.py:297
 #, python-brace-format
 msgid "Cannot parse NEVRA for package \"{nevra}\"."
-msgstr ""
+msgstr "Impossible d'analyser NEVRA pour le paquet \"{nevra}\"."
 
-#: dnf/transaction_sr.py:286
+#: dnf/transaction_sr.py:321
 #, python-brace-format
 msgid "Cannot find rpm nevra \"{nevra}\"."
-msgstr ""
+msgstr "Impossible de trouver rpm nevra \"{nevra}\"."
 
-#: dnf/transaction_sr.py:301
-#, fuzzy, python-brace-format
-#| msgid "Package %s is already installed."
+#: dnf/transaction_sr.py:336
+#, python-brace-format
 msgid "Package \"{na}\" is already installed for action \"{action}\"."
-msgstr "Le paquet %s est déjà installé."
+msgstr "Le paquet \"%s\" est déjà installé pour l'action \"{action}\"."
 
-#: dnf/transaction_sr.py:311
+#: dnf/transaction_sr.py:345
 #, python-brace-format
 msgid ""
 "Package nevra \"{nevra}\" not available in repositories for action "
 "\"{action}\"."
 msgstr ""
+"Le paquet nevra \"{nevra}\" n'est pas disponible dans les dépôts pour action"
+" \"{action}\"."
 
-#: dnf/transaction_sr.py:322
+#: dnf/transaction_sr.py:356
 #, python-brace-format
 msgid "Package nevra \"{nevra}\" not installed for action \"{action}\"."
-msgstr ""
+msgstr "Le paquet nevra \"{nevra}\" n'est pas installé pour l'action \"{action}\"."
 
-#: dnf/transaction_sr.py:336
+#: dnf/transaction_sr.py:370
 #, python-brace-format
 msgid "Unexpected value of package action \"{action}\" for rpm nevra \"{nevra}\"."
-msgstr ""
+msgstr "Valeur inattendue de l'action paquet \"{action}\" pour rpm nevra \"{nevra}\"."
 
-#: dnf/transaction_sr.py:343
-#, fuzzy, python-format
-#| msgid "Module or Group '%s' is not available."
+#: dnf/transaction_sr.py:377
+#, python-format
 msgid "Group id '%s' is not available."
-msgstr "Module ou Groupe « %s » non disponible."
+msgstr "L'id du groupe '%s' n'est pas disponible."
 
-#: dnf/transaction_sr.py:364
+#: dnf/transaction_sr.py:398
 #, python-brace-format
 msgid "Missing object key \"{key}\" in groups.packages."
-msgstr ""
+msgstr "Clé d'objet manquante \"{key}\" dans groups.packages."
 
-#: dnf/transaction_sr.py:377 dnf/transaction_sr.py:387
-#, fuzzy, python-format
-#| msgid "Module or Group '%s' is not installed."
+#: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421
+#, python-format
 msgid "Group id '%s' is not installed."
-msgstr "Module ou Groupe « %s » non installé."
+msgstr "L'id de groupe '%s' non installé."
 
-#: dnf/transaction_sr.py:398
-#, fuzzy, python-format
-#| msgid "Environment '%s' is not available."
+#: dnf/transaction_sr.py:432
+#, python-format
 msgid "Environment id '%s' is not available."
-msgstr "L’environnement « %s » n’est pas disponible."
+msgstr "L’id e l’environnement « %s » n’est pas disponible."
 
-#: dnf/transaction_sr.py:422
+#: dnf/transaction_sr.py:456
 #, python-brace-format
 msgid ""
 "Invalid value \"{group_type}\" of environments.groups.group_type, only "
 "\"mandatory\" or \"optional\" is supported."
 msgstr ""
+"Valeur invalide \"{group_type}\" de environments.groups.group_type, seul \" "
+"obligatoire \" ou \" optionnel \" est supporté."
 
-#: dnf/transaction_sr.py:430
+#: dnf/transaction_sr.py:464
 #, python-brace-format
 msgid "Missing object key \"{key}\" in environments.groups."
-msgstr ""
+msgstr "Clé d'objet manquante \"{key}\" dans environments.groups."
 
-#: dnf/transaction_sr.py:508
+#: dnf/transaction_sr.py:542
 #, python-brace-format
 msgid "Unexpected value of group action \"{action}\" for group \"{group}\"."
 msgstr ""
+"Valeur inattendue de l'action de groupe \"{action}\" pour le groupe "
+"\"{group}\"."
 
-#: dnf/transaction_sr.py:513
+#: dnf/transaction_sr.py:547
 #, python-brace-format
 msgid "Missing object key \"{key}\" in a group."
-msgstr ""
+msgstr "Clé d'objet manquant \"{key}\" dans un groupe."
 
-#: dnf/transaction_sr.py:537
+#: dnf/transaction_sr.py:571
 #, python-brace-format
 msgid "Unexpected value of environment action \"{action}\" for environment \"{env}\"."
 msgstr ""
+"Valeur inattendue de l'action environnementale \"{action}\" pour "
+"l'environnement \"{env}\"."
 
-#: dnf/transaction_sr.py:542
+#: dnf/transaction_sr.py:576
 #, python-brace-format
 msgid "Missing object key \"{key}\" in an environment."
-msgstr ""
+msgstr "Clé d'objet manquant \"{key}\" dans un environnement."
 
-#: dnf/transaction_sr.py:581
+#: dnf/transaction_sr.py:615
 #, python-brace-format
 msgid ""
 "Package nevra \"{nevra}\", which is not present in the transaction file, was"
 " pulled into the transaction."
 msgstr ""
+"Le paquet nevra \"{nevra}\", qui n'est pas présent dans le fichier de "
+"transaction, a été introduit dans la transaction."
 
-#: dnf/util.py:391 dnf/util.py:393
+#: dnf/util.py:393 dnf/util.py:395
 msgid "Problem"
 msgstr "Problème"
 
-#: dnf/util.py:444
+#: dnf/util.py:446
 msgid "TransactionItem not found for key: {}"
 msgstr "TransactionItem n’a pas été trouvé pour la clef : {}"
 
-#: dnf/util.py:454
+#: dnf/util.py:456
 msgid "TransactionSWDBItem not found for key: {}"
 msgstr "TransactionSWDBItem n’a pas été trouvé pour la clef : {}"
 
-#: dnf/util.py:457
+#: dnf/util.py:459
 msgid "Errors occurred during transaction."
 msgstr "Des erreurs sont survenues lors de la transaction."
 
+#: dnf/util.py:595
+msgid "Reinstalled"
+msgstr "Réinstallé"
+
+#: dnf/util.py:596
+msgid "Skipped"
+msgstr "Ignoré"
+
+#: dnf/util.py:597
+msgid "Removed"
+msgstr "Supprimé"
+
+#: dnf/util.py:600
+msgid "Failed"
+msgstr "Échec"
+
+#~ msgid "Action not handled: {}"
+#~ msgstr "Action non gérée : {}"
+
+#~ msgid "no package matched"
+#~ msgstr "aucun paquet correspondant"
+
+#~ msgid "Not found given transaction ID"
+#~ msgstr "L’identifiant de transaction fourni est introuvable"
+
+#~ msgid "Undoing transaction {}, from {}"
+#~ msgstr "Révocation de lla transaction {}, de {}"
+
+#~ msgid "Errors in \"{filename}\":"
+#~ msgstr "Erreurs dans « {filename} » :"
+
+#~ msgid "Error in \"{filename}\": {error}"
+#~ msgstr "Erreur dans « {filename} » : {error}"
+
 #~ msgid "format for displaying found packages"
 #~ msgstr "format d’affichage des paquets trouvés"
 
diff --git a/po/ja.po b/po/ja.po
index 6435271c..00529771 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -22,20 +22,21 @@
 # Julien Humbert <julroy67@gmail.com>, 2020.
 # Casey Jones <nahareport@yahoo.com>, 2020.
 # Hajime Taira <htaira@pantora.net>, 2020.
+# Sundeep Anand <suanand@redhat.com>, 2021.
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-10-05 09:18-0400\n"
-"PO-Revision-Date: 2020-07-27 05:29+0000\n"
-"Last-Translator: Hajime Taira <htaira@pantora.net>\n"
-"Language-Team: Japanese <https://translate.fedoraproject.org/projects/dnf/dnf-master/ja/>\n"
+"POT-Creation-Date: 2021-02-22 09:22+0100\n"
+"PO-Revision-Date: 2021-03-08 10:29+0000\n"
+"Last-Translator: Sundeep Anand <suanand@redhat.com>\n"
+"Language-Team: Japanese <https://translate.fedoraproject.org/projects/dnf/dnf-rhel-8/ja/>\n"
 "Language: ja\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.1.1\n"
+"X-Generator: Weblate 4.5.1\n"
 
 #: dnf/automatic/emitter.py:32
 #, python-format
@@ -45,7 +46,7 @@ msgstr "'%s' に以下の更新が適用されました:"
 #: dnf/automatic/emitter.py:33
 #, python-format
 msgid "Updates completed at %s"
-msgstr "'%s' に更新が適用されました。"
+msgstr "'%s' に更新が適用されました"
 
 #: dnf/automatic/emitter.py:34
 #, python-format
@@ -92,7 +93,7 @@ msgstr "不明な設定値: %s=%s in %s; %s"
 msgid "Unknown configuration option: %s = %s in %s"
 msgstr "不明な設定オプション: %s = %s in %s"
 
-#: dnf/automatic/main.py:237 dnf/cli/cli.py:299
+#: dnf/automatic/main.py:237 dnf/cli/cli.py:304
 msgid "GPG check FAILED"
 msgstr "GPG の確認に失敗しました"
 
@@ -105,9 +106,9 @@ msgid "Started dnf-automatic."
 msgstr "dnf-automatic を開始しました。"
 
 #: dnf/automatic/main.py:308
-#, python-format
-msgid "Sleep for %s seconds"
-msgstr "%s 秒スリープします"
+msgid "Sleep for {} second"
+msgid_plural "Sleep for {} seconds"
+msgstr[0] "{} 秒スリープします"
 
 #: dnf/automatic/main.py:315
 msgid "System is off-line."
@@ -119,7 +120,7 @@ msgstr "システムはオフラインです。"
 msgid "Error: %s"
 msgstr "エラー: %s"
 
-#: dnf/base.py:146
+#: dnf/base.py:146 dnf/base.py:472 dnf/base.py:474
 msgid "loading repo '{}' failure: {}"
 msgstr "repo '{}' のロードに失敗しました: {}"
 
@@ -127,236 +128,236 @@ msgstr "repo '{}' のロードに失敗しました: {}"
 msgid "Loading repository '{}' has failed"
 msgstr "repository '{}' のロードに失敗しました"
 
-#: dnf/base.py:320
+#: dnf/base.py:322
 msgid "Metadata timer caching disabled when running on metered connection."
 msgstr "metered 接続で実行する際、メタデータタイマーキャッシュは無効化されました。"
 
-#: dnf/base.py:325
+#: dnf/base.py:327
 msgid "Metadata timer caching disabled when running on a battery."
 msgstr "バッテリーで実行する際、メタデータタイマーキャッシュは無効化されました。"
 
-#: dnf/base.py:330
+#: dnf/base.py:332
 msgid "Metadata timer caching disabled."
 msgstr "メタデータタイマーキャッシュは無効化されました。"
 
-#: dnf/base.py:335
+#: dnf/base.py:337
 msgid "Metadata cache refreshed recently."
 msgstr "メタデータキャッシュは最近、リフレッシュされました。"
 
-#: dnf/base.py:341 dnf/cli/commands/__init__.py:91
+#: dnf/base.py:343 dnf/cli/commands/__init__.py:91
 msgid "There are no enabled repositories in \"{}\"."
 msgstr "\"{}\" には有効化されたリポジトリーがありません。"
 
-#: dnf/base.py:348
+#: dnf/base.py:350
 #, python-format
 msgid "%s: will never be expired and will not be refreshed."
 msgstr "%s: は期限切れになることはなく、リフレッシュされることもありません。"
 
-#: dnf/base.py:350
+#: dnf/base.py:352
 #, python-format
 msgid "%s: has expired and will be refreshed."
 msgstr "%s: は期限切れとなったのでリフレッシュされます。"
 
 #. expires within the checking period:
-#: dnf/base.py:354
+#: dnf/base.py:356
 #, python-format
 msgid "%s: metadata will expire after %d seconds and will be refreshed now"
 msgstr "%s: メタデータは %d 秒後に期限切れとなり、すぐにリフレッシュされます"
 
-#: dnf/base.py:358
+#: dnf/base.py:360
 #, python-format
 msgid "%s: will expire after %d seconds."
 msgstr "%s: は %d 秒後に期限切れとなります。"
 
 #. performs the md sync
-#: dnf/base.py:364
+#: dnf/base.py:366
 msgid "Metadata cache created."
 msgstr "メタデータキャッシュを作成しました。"
 
-#: dnf/base.py:397
+#: dnf/base.py:399 dnf/base.py:466
 #, python-format
 msgid "%s: using metadata from %s."
-msgstr "%s: は %s から取得したメタデータを使用中"
+msgstr "%s: は %s から取得したメタデータを使用中。"
 
-#: dnf/base.py:409
+#: dnf/base.py:411 dnf/base.py:479
 #, python-format
 msgid "Ignoring repositories: %s"
 msgstr "リポジトリーを無視します: %s"
 
-#: dnf/base.py:412
+#: dnf/base.py:414
 #, python-format
 msgid "Last metadata expiration check: %s ago on %s."
 msgstr "メタデータの期限切れの最終確認: %s 時間前の %s に実施しました。"
 
-#: dnf/base.py:443
+#: dnf/base.py:507
 msgid ""
 "The downloaded packages were saved in cache until the next successful "
 "transaction."
 msgstr "ダウンロード済みのパッケージは、次の正常なトランザクションまでキャッシュに保存されました。"
 
-#: dnf/base.py:445
+#: dnf/base.py:509
 #, python-format
 msgid "You can remove cached packages by executing '%s'."
 msgstr "'%s' を実行することでキャッシュパッケージを削除できます。"
 
-#: dnf/base.py:535
+#: dnf/base.py:599
 #, python-format
 msgid "Invalid tsflag in config file: %s"
 msgstr "設定ファイルの tsflag が無効です: %s"
 
-#: dnf/base.py:591
+#: dnf/base.py:655
 #, python-format
 msgid "Failed to add groups file for repository: %s - %s"
 msgstr "リポジトリーのグループファイルを追加できませんでした: %s - %s"
 
-#: dnf/base.py:823
+#: dnf/base.py:887
 msgid "Running transaction check"
 msgstr "トランザクションの確認を実行中"
 
-#: dnf/base.py:831
+#: dnf/base.py:895
 msgid "Error: transaction check vs depsolve:"
 msgstr "エラー: トランザクションの確認 vs depsolve:"
 
-#: dnf/base.py:837
+#: dnf/base.py:901
 msgid "Transaction check succeeded."
 msgstr "トランザクションの確認に成功しました。"
 
-#: dnf/base.py:840
+#: dnf/base.py:904
 msgid "Running transaction test"
 msgstr "トランザクションのテストを実行中"
 
-#: dnf/base.py:850 dnf/base.py:992
+#: dnf/base.py:914 dnf/base.py:1065
 msgid "RPM: {}"
 msgstr "RPM: {}"
 
-#: dnf/base.py:851
+#: dnf/base.py:915
 msgid "Transaction test error:"
 msgstr "トランザクションテストエラー:"
 
-#: dnf/base.py:862
+#: dnf/base.py:926
 msgid "Transaction test succeeded."
 msgstr "トランザクションのテストに成功しました。"
 
-#: dnf/base.py:883
+#: dnf/base.py:947
 msgid "Running transaction"
 msgstr "トランザクションを実行中"
 
-#: dnf/base.py:911
+#: dnf/base.py:984
 msgid "Disk Requirements:"
-msgstr "ディスク要件"
+msgstr "ディスク要件:"
 
-#: dnf/base.py:914
+#: dnf/base.py:987
 #, python-brace-format
 msgid "At least {0}MB more space needed on the {1} filesystem."
 msgid_plural "At least {0}MB more space needed on the {1} filesystem."
 msgstr[0] "{1} ファイルシステムに最低 {0}MB の追加スペースが必要です。"
 
-#: dnf/base.py:921
+#: dnf/base.py:994
 msgid "Error Summary"
 msgstr "エラーの概要"
 
-#: dnf/base.py:947
+#: dnf/base.py:1020
 #, python-brace-format
 msgid "RPMDB altered outside of {prog}."
 msgstr "RPMDBは {prog} のサポート外に変更されました。"
 
-#: dnf/base.py:993 dnf/base.py:1001
+#: dnf/base.py:1066 dnf/base.py:1074
 msgid "Could not run transaction."
 msgstr "トランザクションを実行できませんでした。"
 
-#: dnf/base.py:996
+#: dnf/base.py:1069
 msgid "Transaction couldn't start:"
 msgstr "トランザクションを開始できませんでした:"
 
-#: dnf/base.py:1010
+#: dnf/base.py:1083
 #, python-format
 msgid "Failed to remove transaction file %s"
 msgstr "トランザクションファイル %s の削除に失敗しました"
 
-#: dnf/base.py:1092
+#: dnf/base.py:1165
 msgid "Some packages were not downloaded. Retrying."
 msgstr "一部のパッケージはダウンロードされませんでした。再試行中です。"
 
-#: dnf/base.py:1122
+#: dnf/base.py:1195
 #, python-format
 msgid "Delta RPMs reduced %.1f MB of updates to %.1f MB (%d.1%% saved)"
 msgstr "Delta RPM により %.1f MB の更新を %.1f MB に削減できました。(%d.1%% がキャッシュされていました)"
 
-#: dnf/base.py:1125
+#: dnf/base.py:1198
 #, python-format
 msgid ""
 "Failed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)"
 msgstr "非効率な Delta RPM により %.1f MB の更新が増加し、%.1f MB となりました。(%d.1%% が無駄になりました)"
 
-#: dnf/base.py:1167
+#: dnf/base.py:1240
 msgid "Cannot add local packages, because transaction job already exists"
 msgstr "ローカルパッケージを追加できません、トランザクションジョブがすでに存在するためです"
 
-#: dnf/base.py:1181
+#: dnf/base.py:1254
 msgid "Could not open: {}"
 msgstr "開くことができませんでした: {}"
 
-#: dnf/base.py:1219
+#: dnf/base.py:1292
 #, python-format
 msgid "Public key for %s is not installed"
 msgstr "%s の公開鍵がインストールされていません"
 
-#: dnf/base.py:1223
+#: dnf/base.py:1296
 #, python-format
 msgid "Problem opening package %s"
 msgstr "パッケージ %s を開くことができません"
 
-#: dnf/base.py:1231
+#: dnf/base.py:1304
 #, python-format
 msgid "Public key for %s is not trusted"
 msgstr "%s の公開鍵は信頼されていません"
 
-#: dnf/base.py:1235
+#: dnf/base.py:1308
 #, python-format
 msgid "Package %s is not signed"
 msgstr "パッケージ %s は署名されていません"
 
-#: dnf/base.py:1265
+#: dnf/base.py:1338
 #, python-format
 msgid "Cannot remove %s"
 msgstr "%s を削除できません"
 
-#: dnf/base.py:1269
+#: dnf/base.py:1342
 #, python-format
 msgid "%s removed"
 msgstr "%s を削除しました"
 
-#: dnf/base.py:1549
+#: dnf/base.py:1622
 msgid "No match for group package \"{}\""
-msgstr "グループパッケージ  \"{}\" に一致するものはありません"
+msgstr "グループパッケージ \"{}\" に一致するものはありません"
 
-#: dnf/base.py:1635
+#: dnf/base.py:1708
 #, python-format
 msgid "Adding packages from group '%s': %s"
 msgstr "グループ '%s' からのパッケージを追加します: %s"
 
-#: dnf/base.py:1658 dnf/cli/cli.py:219 dnf/cli/commands/__init__.py:442
+#: dnf/base.py:1731 dnf/cli/cli.py:220 dnf/cli/commands/__init__.py:442
 #: dnf/cli/commands/__init__.py:499 dnf/cli/commands/__init__.py:592
 #: dnf/cli/commands/__init__.py:641 dnf/cli/commands/install.py:80
 #: dnf/cli/commands/install.py:103 dnf/cli/commands/install.py:110
 msgid "Nothing to do."
 msgstr "行うべきことはありません。"
 
-#: dnf/base.py:1676
+#: dnf/base.py:1749
 msgid "No groups marked for removal."
 msgstr "削除対象のパッケージはありません。"
 
-#: dnf/base.py:1710
+#: dnf/base.py:1783
 msgid "No group marked for upgrade."
 msgstr "アップグレード対象のグループはありません。"
 
-#: dnf/base.py:1925
+#: dnf/base.py:1997
 #, python-format
 msgid "Package %s not installed, cannot downgrade it."
 msgstr "パッケージ %s はインストールされていないので、ダウングレードできません。"
 
-#: dnf/base.py:1927 dnf/base.py:1946 dnf/base.py:1959 dnf/base.py:1980
-#: dnf/base.py:2029 dnf/base.py:2037 dnf/base.py:2172 dnf/cli/cli.py:411
+#: dnf/base.py:1999 dnf/base.py:2018 dnf/base.py:2031 dnf/base.py:2052
+#: dnf/base.py:2101 dnf/base.py:2109 dnf/base.py:2243 dnf/cli/cli.py:416
 #: dnf/cli/commands/__init__.py:425 dnf/cli/commands/__init__.py:482
 #: dnf/cli/commands/__init__.py:586 dnf/cli/commands/__init__.py:633
 #: dnf/cli/commands/__init__.py:711 dnf/cli/commands/install.py:147
@@ -366,141 +367,127 @@ msgstr "パッケージ %s はインストールされていないので、ダ
 msgid "No match for argument: %s"
 msgstr "一致した引数がありません: %s"
 
-#: dnf/base.py:1934
+#: dnf/base.py:2006
 #, python-format
 msgid "Package %s of lower version already installed, cannot downgrade it."
 msgstr "下位バージョンのパッケージ %s はインストール済みなので、ダウングレードできません。"
 
-#: dnf/base.py:1957
+#: dnf/base.py:2029
 #, python-format
 msgid "Package %s not installed, cannot reinstall it."
 msgstr "パッケージ %s はインストールされていないのでの、再インストールできません。"
 
-#: dnf/base.py:1972
+#: dnf/base.py:2044
 #, python-format
 msgid "File %s is a source package and cannot be updated, ignoring."
 msgstr "ファイル %s はソースパッケージで更新できません。無視します。"
 
-#: dnf/base.py:1978
+#: dnf/base.py:2050
 #, python-format
 msgid "Package %s not installed, cannot update it."
 msgstr "パッケージ %s はインストールされていないので、更新できません。"
 
-#: dnf/base.py:1987
+#: dnf/base.py:2059
 #, python-format
 msgid ""
 "The same or higher version of %s is already installed, cannot update it."
 msgstr "同じまたはさらに新しいバージョンの %s が既にインストールされています、アップデートできません。"
 
-#: dnf/base.py:2026 dnf/cli/commands/reinstall.py:81
+#: dnf/base.py:2098 dnf/cli/commands/reinstall.py:81
 #, python-format
 msgid "Package %s available, but not installed."
 msgstr "パッケージ %s は利用可能ですが、インストールされていません。"
 
-#: dnf/base.py:2032
+#: dnf/base.py:2104
 #, python-format
 msgid "Package %s available, but installed for different architecture."
 msgstr "パッケージ %s は利用可能ですが、他のアーキテクチャー用にインストールされています。"
 
-#: dnf/base.py:2057 dnf/base.py:2250 dnf/cli/cli.py:668 dnf/cli/cli.py:699
+#: dnf/base.py:2129
 #, python-format
 msgid "No package %s installed."
 msgstr "パッケージ %s はインストールされていません。"
 
-#: dnf/base.py:2075 dnf/cli/commands/install.py:136
+#: dnf/base.py:2147 dnf/cli/commands/install.py:136
 #: dnf/cli/commands/remove.py:133
 #, python-format
 msgid "Not a valid form: %s"
 msgstr "有効な形式ではありません: %s"
 
-#: dnf/base.py:2091 dnf/cli/commands/__init__.py:681
-#: dnf/cli/commands/remove.py:163
+#: dnf/base.py:2162 dnf/cli/commands/__init__.py:681
+#: dnf/cli/commands/remove.py:162
 msgid "No packages marked for removal."
 msgstr "削除対象のパッケージはありません。"
 
-#: dnf/base.py:2179 dnf/cli/cli.py:422
+#: dnf/base.py:2250 dnf/cli/cli.py:427
 #, python-format
 msgid "Packages for argument %s available, but not installed."
-msgstr "引数  %s のパッケージは利用可能ですが、インストールされていません。"
+msgstr "引数 %s のパッケージは利用可能ですが、インストールされていません。"
 
-#: dnf/base.py:2184
+#: dnf/base.py:2255
 #, python-format
 msgid "Package %s of lowest version already installed, cannot downgrade it."
 msgstr "最下位バージョンのパッケージ %s はインストール済みなので、ダウングレードできません。"
 
-#: dnf/base.py:2242
-msgid "Action not handled: {}"
-msgstr "動作は対処されていません: {}"
-
-#: dnf/base.py:2256 dnf/cli/cli.py:419 dnf/cli/cli.py:673 dnf/cli/cli.py:703
-#: dnf/cli/commands/group.py:400 dnf/cli/commands/history.py:169
-#, python-format
-msgid "No package %s available."
-msgstr "利用可能なパッケージ %s がありません。"
-
-#: dnf/base.py:2269
-msgid "no package matched"
-msgstr "一致したパッケージはありません。"
-
-#: dnf/base.py:2290
+#: dnf/base.py:2302
 msgid "No security updates needed, but {} update available"
 msgstr "セキュリティー更新は必要ありませんが、{} 更新が利用可能です"
 
-#: dnf/base.py:2292
+#: dnf/base.py:2304
 msgid "No security updates needed, but {} updates available"
 msgstr "セキュリティー更新は必要ありませんが、{} 更新が利用可能です"
 
-#: dnf/base.py:2296
+#: dnf/base.py:2308
 msgid "No security updates needed for \"{}\", but {} update available"
 msgstr "\"{}\" のセキュリティー更新は必要ありませんが、{} 更新が利用可能です"
 
-#: dnf/base.py:2298
+#: dnf/base.py:2310
 msgid "No security updates needed for \"{}\", but {} updates available"
 msgstr "\"{}\" のセキュリティー更新は必要ありませんが、{} 更新が利用可能です"
 
 #. raise an exception, because po.repoid is not in self.repos
-#: dnf/base.py:2319
+#: dnf/base.py:2331
 #, python-format
 msgid "Unable to retrieve a key for a commandline package: %s"
-msgstr ""
+msgstr "コマンドラインパッケージのキーを取得できません: %s"
 
-#: dnf/base.py:2327
+#: dnf/base.py:2339
 #, python-format
 msgid ". Failing package is: %s"
 msgstr ". 失敗したパッケージは: %s"
 
-#: dnf/base.py:2328
+#: dnf/base.py:2340
 #, python-format
 msgid "GPG Keys are configured as: %s"
 msgstr "GPG 鍵が設定されています: %s"
 
-#: dnf/base.py:2340
+#: dnf/base.py:2352
 #, python-format
 msgid "GPG key at %s (0x%s) is already installed"
 msgstr "%s (0x%s) の GPG 鍵はインストール済みです"
 
-#: dnf/base.py:2373
+#: dnf/base.py:2385
 msgid "The key has been approved."
 msgstr "鍵が承認されました。"
 
-#: dnf/base.py:2376
+#: dnf/base.py:2388
 msgid "The key has been rejected."
 msgstr "鍵が拒否されました。"
 
-#: dnf/base.py:2409
+#: dnf/base.py:2421
 #, python-format
 msgid "Key import failed (code %d)"
 msgstr "鍵のインポートに失敗しました (コード: %d)"
 
-#: dnf/base.py:2411
+#: dnf/base.py:2423
 msgid "Key imported successfully"
 msgstr "鍵のインポートに成功しました"
 
-#: dnf/base.py:2415
+#: dnf/base.py:2427
 msgid "Didn't install any keys"
 msgstr "鍵を 1 つもインストールしませんでした"
 
-#: dnf/base.py:2418
+#: dnf/base.py:2430
 #, python-format
 msgid ""
 "The GPG keys listed for the \"%s\" repository are already installed but they are not correct for this package.\n"
@@ -509,49 +496,49 @@ msgstr ""
 "\"%s\" リポジトリーに一覧表示されている GPG 鍵はインストール済みですが、このパッケージには適切ではありません。\n"
 "正しい鍵 URL がこのリポジトリー用に設定されているか確認してください。"
 
-#: dnf/base.py:2429
+#: dnf/base.py:2441
 msgid "Import of key(s) didn't help, wrong key(s)?"
 msgstr "鍵をインポートしても役に立ちませんでした。鍵が間違っていませんか?"
 
-#: dnf/base.py:2482
+#: dnf/base.py:2494
 msgid "  * Maybe you meant: {}"
 msgstr "  * おそらく: {}"
 
-#: dnf/base.py:2514
+#: dnf/base.py:2526
 msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum"
 msgstr "ローカルリポジトリー \"{}\" のパッケージ \"{}\" のチェックサムは正しくありません"
 
-#: dnf/base.py:2517
+#: dnf/base.py:2529
 msgid "Some packages from local repository have incorrect checksum"
 msgstr "ローカルリポジトリーのいくつかのパッケージのチェックサムは正しくありません"
 
-#: dnf/base.py:2520
+#: dnf/base.py:2532
 msgid "Package \"{}\" from repository \"{}\" has incorrect checksum"
 msgstr "リポジトリー \"{}\" のパッケージ \"{}\" のチェックサムは正しくありません"
 
-#: dnf/base.py:2523
+#: dnf/base.py:2535
 msgid ""
 "Some packages have invalid cache, but cannot be downloaded due to \"--"
 "cacheonly\" option"
 msgstr "いくつかのパッケージには無効なキャッシュがありますが、\"--cacheonly\" オプションによりダウンロードできません"
 
-#: dnf/base.py:2541 dnf/base.py:2561
+#: dnf/base.py:2553 dnf/base.py:2573
 msgid "No match for argument"
 msgstr "一致した引数がありません"
 
-#: dnf/base.py:2549 dnf/base.py:2569
+#: dnf/base.py:2561 dnf/base.py:2581
 msgid "All matches were filtered out by exclude filtering for argument"
-msgstr "すべての検索結果は引数の除外フィルタリングに一致しません(filter out)"
+msgstr "すべての検索結果は引数の除外フィルタリングに一致しません (filter out)"
 
-#: dnf/base.py:2551
+#: dnf/base.py:2563
 msgid "All matches were filtered out by modular filtering for argument"
-msgstr "すべての検出結果は引数のモジュラーフィルタリングに一致しません(filter out)"
+msgstr "すべての検出結果は引数のモジュラーフィルタリングに一致しません (filter out)"
 
-#: dnf/base.py:2567
+#: dnf/base.py:2579
 msgid "All matches were installed from a different repository for argument"
 msgstr "すべての検索結果は引数に対し異なるレポジトリからインストールされたものです"
 
-#: dnf/base.py:2583
+#: dnf/base.py:2626
 #, python-format
 msgid "Package %s is already installed."
 msgstr "パッケージ %s は既にインストールされています。"
@@ -571,8 +558,8 @@ msgstr "ファイル \"%s\" の解析に失敗しました: %s"
 msgid "Cannot read file \"%s\": %s"
 msgstr "ファイル \"%s\" を読み込めません: %s"
 
-#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:902
-#: dnf/cli/cli.py:906 dnf/cli/commands/alias.py:108
+#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:803
+#: dnf/cli/cli.py:807 dnf/cli/commands/alias.py:108
 #, python-format
 msgid "Config error: %s"
 msgstr "設定エラー: %s"
@@ -603,7 +590,7 @@ msgid ""
 "stream '{2}'"
 msgstr "オペレーションは、モジュール '{0}' ストリーム '{1}' を ストリーム '{2}' へと切り替える結果となります"
 
-#: dnf/cli/cli.py:172
+#: dnf/cli/cli.py:173
 #, python-brace-format
 msgid ""
 "It is not possible to switch enabled streams of a module.\n"
@@ -612,35 +599,35 @@ msgstr ""
 "モジュールの有効なストリームを切り替えることはできません。\n"
 "モジュールからインストールされた全てのコンテンツを削除し、 '{prog} module reset <module_name>' コマンドを使用してリセットすることが推奨されます。モジュールのリセット後、他のストリームをインストール可能です。"
 
-#: dnf/cli/cli.py:210
+#: dnf/cli/cli.py:211
 #, python-brace-format
 msgid "{prog} will only download packages for the transaction."
 msgstr "{prog} はトランザクションでパッケージのダウンロードのみ行います。"
 
-#: dnf/cli/cli.py:213
+#: dnf/cli/cli.py:214
 #, python-brace-format
 msgid ""
 "{prog} will only download packages, install gpg keys, and check the "
 "transaction."
 msgstr "{prog} はパッケージのダウンロード、gpgキーのインストール、トランザクションのチェックのみ行います。"
 
-#: dnf/cli/cli.py:217
+#: dnf/cli/cli.py:218
 msgid "Operation aborted."
 msgstr "操作が中断されました。"
 
-#: dnf/cli/cli.py:224
+#: dnf/cli/cli.py:225
 msgid "Downloading Packages:"
 msgstr "パッケージのダウンロード:"
 
-#: dnf/cli/cli.py:230
+#: dnf/cli/cli.py:231
 msgid "Error downloading packages:"
 msgstr "パッケージのダウンロード中にエラーが発生しました:"
 
-#: dnf/cli/cli.py:258
+#: dnf/cli/cli.py:263
 msgid "Transaction failed"
 msgstr "トランザクションが失敗しました"
 
-#: dnf/cli/cli.py:281
+#: dnf/cli/cli.py:286
 msgid ""
 "Refusing to automatically import keys when running unattended.\n"
 "Use \"-y\" to override."
@@ -648,116 +635,95 @@ msgstr ""
 "無人での実行中に鍵の自動インポートを拒否します。\n"
 "オーバーライドするには \"-y\" を使用してください。"
 
-#: dnf/cli/cli.py:331
+#: dnf/cli/cli.py:336
 msgid "Changelogs for {}"
 msgstr "{} の Changelogs"
 
-#: dnf/cli/cli.py:364 dnf/cli/cli.py:505 dnf/cli/cli.py:511
+#: dnf/cli/cli.py:369 dnf/cli/cli.py:510 dnf/cli/cli.py:516
 msgid "Obsoleting Packages"
 msgstr "パッケージの廃止"
 
-#: dnf/cli/cli.py:393
+#: dnf/cli/cli.py:398
 msgid "No packages marked for distribution synchronization."
-msgstr "ディストリビューション同期対象のパッケージがありません"
+msgstr "ディストリビューション同期対象のパッケージがありません。"
+
+#: dnf/cli/cli.py:424 dnf/cli/commands/group.py:395
+#, python-format
+msgid "No package %s available."
+msgstr "利用可能なパッケージ %s がありません。"
 
-#: dnf/cli/cli.py:428
+#: dnf/cli/cli.py:433
 msgid "No packages marked for downgrade."
 msgstr "ダウングレード対象のパッケージはありません。"
 
-#: dnf/cli/cli.py:479
+#: dnf/cli/cli.py:484
 msgid "Installed Packages"
 msgstr "インストール済みパッケージ"
 
-#: dnf/cli/cli.py:487
+#: dnf/cli/cli.py:492
 msgid "Available Packages"
 msgstr "利用可能なパッケージ"
 
-#: dnf/cli/cli.py:491
+#: dnf/cli/cli.py:496
 msgid "Autoremove Packages"
 msgstr "パッケージを自動削除します"
 
-#: dnf/cli/cli.py:493
+#: dnf/cli/cli.py:498
 msgid "Extra Packages"
 msgstr "エクストラパッケージ"
 
-#: dnf/cli/cli.py:497
+#: dnf/cli/cli.py:502
 msgid "Available Upgrades"
 msgstr "利用可能なアップグレード"
 
-#: dnf/cli/cli.py:513
+#: dnf/cli/cli.py:518
 msgid "Recently Added Packages"
 msgstr "最近追加したパッケージ"
 
-#: dnf/cli/cli.py:518
+#: dnf/cli/cli.py:522
 msgid "No matching Packages to list"
 msgstr "表示するための一致したパッケージはありません"
 
-#: dnf/cli/cli.py:599
+#: dnf/cli/cli.py:603
 msgid "No Matches found"
 msgstr "一致したものは見つかりませんでした"
 
-#: dnf/cli/cli.py:609
-msgid "No transaction ID given"
-msgstr "トランザクション ID は指定されていません"
-
-#: dnf/cli/cli.py:614
-msgid "Not found given transaction ID"
-msgstr "指定されたトランザクション ID は見つかりません"
-
-#: dnf/cli/cli.py:623
-msgid "Found more than one transaction ID!"
-msgstr "1 つ以上のトランザクション ID が見つかりました!"
-
-#: dnf/cli/cli.py:640
-#, python-format
-msgid "Transaction history is incomplete, before %u."
-msgstr "%u の前のトランザクション履歴が不完全です。"
-
-#: dnf/cli/cli.py:642
-#, python-format
-msgid "Transaction history is incomplete, after %u."
-msgstr "%u の後のトランザクション履歴が不完全です。"
-
-#: dnf/cli/cli.py:689
-msgid "Undoing transaction {}, from {}"
-msgstr "トランザクション {} を {} から取り消しています"
-
-#: dnf/cli/cli.py:769 dnf/cli/commands/shell.py:237
+#: dnf/cli/cli.py:670 dnf/cli/commands/shell.py:237
 #, python-format
 msgid "Unknown repo: '%s'"
 msgstr "不明な repo : '%s'"
 
-#: dnf/cli/cli.py:783
+#: dnf/cli/cli.py:684
 #, python-format
 msgid "No repository match: %s"
 msgstr "一致するリポジトリーがありません: %s"
 
-#: dnf/cli/cli.py:817
+#: dnf/cli/cli.py:718
 msgid ""
 "This command has to be run with superuser privileges (under the root user on"
 " most systems)."
 msgstr "このコマンドはスーパーユーザー特権(大概のシステムではrootユーザー)で実行しなければいけません。"
 
-#: dnf/cli/cli.py:847
+#: dnf/cli/cli.py:748
 #, python-format
 msgid "No such command: %s. Please use %s --help"
-msgstr "そのようなコマンドはありません: %s. %s --help を使用してください。"
+msgstr "そのようなコマンドはありません: %s. %s --help を使用してください"
 
-#: dnf/cli/cli.py:850
+#: dnf/cli/cli.py:751
 #, python-format, python-brace-format
 msgid ""
 "It could be a {PROG} plugin command, try: \"{prog} install 'dnf-"
 "command(%s)'\""
 msgstr "{PROG} プラグインコマンドを実行できません、試してください: \"{prog} install 'dnf-command(%s)'\""
 
-#: dnf/cli/cli.py:854
+#: dnf/cli/cli.py:755
 #, python-brace-format
 msgid ""
 "It could be a {prog} plugin command, but loading of plugins is currently "
 "disabled."
 msgstr "{prog} プラグインコマンドを実行できません、プラグインのロードが現在無効になっているようです。"
 
-#: dnf/cli/cli.py:912
+#: dnf/cli/cli.py:813
 msgid ""
 "--destdir or --downloaddir must be used with --downloadonly or download or "
 "system-upgrade command."
@@ -765,7 +731,7 @@ msgstr ""
 "--destdir または --downloaddir は、--downloadonly、download あるいは system-upgrade "
 "コマンドと共に使用する必要があります。"
 
-#: dnf/cli/cli.py:918
+#: dnf/cli/cli.py:819
 msgid ""
 "--enable, --set-enabled and --disable, --set-disabled must be used with "
 "config-manager command."
@@ -773,7 +739,7 @@ msgstr ""
 "--enable と --set-enabled および --disable と --set-disabled は、config-manager "
 "コマンドと共に使用しなければなりません。"
 
-#: dnf/cli/cli.py:1000
+#: dnf/cli/cli.py:901
 msgid ""
 "Warning: Enforcing GPG signature check globally as per active RPM security "
 "policy (see 'gpgcheck' in dnf.conf(5) for how to squelch this message)"
@@ -781,38 +747,38 @@ msgstr ""
 "警告: アクティブな RPM セキュリティーポリシーにより、GPG 署名の確認をグローバルに強制します "
 "(このメッセージをスケルチするには、dnf.conf(5) の 'gpgcheck' を参照してください)"
 
-#: dnf/cli/cli.py:1020
+#: dnf/cli/cli.py:921
 msgid "Config file \"{}\" does not exist"
 msgstr "設定ファイル \"{}\" は存在しません"
 
-#: dnf/cli/cli.py:1040
+#: dnf/cli/cli.py:941
 msgid ""
 "Unable to detect release version (use '--releasever' to specify release "
 "version)"
 msgstr "リリースバージョンを検出できません (リリースバージョンを指定するには '--releasever' を使用してください)"
 
-#: dnf/cli/cli.py:1127 dnf/cli/commands/repoquery.py:471
+#: dnf/cli/cli.py:1028 dnf/cli/commands/repoquery.py:471
 msgid "argument {}: not allowed with argument {}"
 msgstr "引数 {}: 引数 {} と許可されていません"
 
-#: dnf/cli/cli.py:1134
+#: dnf/cli/cli.py:1035
 #, python-format
 msgid "Command \"%s\" already defined"
 msgstr "コマンド \"%s\" はすでに定義済みです"
 
-#: dnf/cli/cli.py:1154
+#: dnf/cli/cli.py:1055
 msgid "Excludes in dnf.conf: "
 msgstr "dnf.conf で除外します: "
 
-#: dnf/cli/cli.py:1157
+#: dnf/cli/cli.py:1058
 msgid "Includes in dnf.conf: "
 msgstr "dnf.conf で含めます: "
 
-#: dnf/cli/cli.py:1160
+#: dnf/cli/cli.py:1061
 msgid "Excludes in repo "
 msgstr "repo で除外します "
 
-#: dnf/cli/cli.py:1163
+#: dnf/cli/cli.py:1064
 msgid "Includes in repo "
 msgstr "repo に含めます "
 
@@ -869,7 +835,7 @@ msgid "show all packages (default)"
 msgstr "すべてのパッケージを表示します (デフォルト)"
 
 #: dnf/cli/commands/__init__.py:171 dnf/cli/commands/__init__.py:743
-#: dnf/cli/commands/module.py:351
+#: dnf/cli/commands/module.py:373
 msgid "show only available packages"
 msgstr "利用可能なパッケージのみを表示します"
 
@@ -1194,78 +1160,78 @@ msgstr "グループ情報を表示または使用します"
 msgid "No group data available for configured repositories."
 msgstr "設定されたリポジトリーが利用可能なグループデータはありません。"
 
-#: dnf/cli/commands/group.py:129
+#: dnf/cli/commands/group.py:126
 #, python-format
 msgid "Warning: Group %s does not exist."
 msgstr "警告: グループ %s は存在しません。"
 
-#: dnf/cli/commands/group.py:170
+#: dnf/cli/commands/group.py:167
 msgid "Warning: No groups match:"
 msgstr "警告: 一致するグループはありません:"
 
-#: dnf/cli/commands/group.py:182 dnf/cli/commands/group.py:193
-#: dnf/cli/output.py:1226
+#: dnf/cli/commands/group.py:179 dnf/cli/commands/group.py:190
+#: dnf/cli/output.py:1139
 msgid "<name-unset>"
 msgstr "<name-unset>"
 
-#: dnf/cli/commands/group.py:199
+#: dnf/cli/commands/group.py:196
 msgid "Available Environment Groups:"
 msgstr "利用可能な環境グループ:"
 
-#: dnf/cli/commands/group.py:201
+#: dnf/cli/commands/group.py:198
 msgid "Installed Environment Groups:"
 msgstr "インストール済みの環境グループ:"
 
-#: dnf/cli/commands/group.py:208 dnf/cli/commands/group.py:294
+#: dnf/cli/commands/group.py:205 dnf/cli/commands/group.py:291
 msgid "Installed Groups:"
 msgstr "インストール済みのグループ:"
 
-#: dnf/cli/commands/group.py:215 dnf/cli/commands/group.py:301
+#: dnf/cli/commands/group.py:212 dnf/cli/commands/group.py:298
 msgid "Installed Language Groups:"
 msgstr "インストール済みの言語グループ:"
 
-#: dnf/cli/commands/group.py:225 dnf/cli/commands/group.py:308
+#: dnf/cli/commands/group.py:222 dnf/cli/commands/group.py:305
 msgid "Available Groups:"
 msgstr "利用可能なグループ:"
 
-#: dnf/cli/commands/group.py:232 dnf/cli/commands/group.py:315
+#: dnf/cli/commands/group.py:229 dnf/cli/commands/group.py:312
 msgid "Available Language Groups:"
 msgstr "利用可能な言語グループ:"
 
-#: dnf/cli/commands/group.py:322
+#: dnf/cli/commands/group.py:319
 msgid "include optional packages from group"
 msgstr "グループのオプションパッケージを含めます"
 
-#: dnf/cli/commands/group.py:325
+#: dnf/cli/commands/group.py:322
 msgid "show also hidden groups"
 msgstr "非表示のグループも表示します"
 
-#: dnf/cli/commands/group.py:327
+#: dnf/cli/commands/group.py:324
 msgid "show only installed groups"
 msgstr "インストール済みのグループのみを表示します"
 
-#: dnf/cli/commands/group.py:329
+#: dnf/cli/commands/group.py:326
 msgid "show only available groups"
 msgstr "利用可能なグループのみを表示します"
 
-#: dnf/cli/commands/group.py:331
+#: dnf/cli/commands/group.py:328
 msgid "show also ID of groups"
 msgstr "グループIDも表示"
 
-#: dnf/cli/commands/group.py:333
+#: dnf/cli/commands/group.py:330
 msgid "available subcommands: {} (default), {}"
 msgstr "利用可能なサブコマンド: {} (default), {}"
 
-#: dnf/cli/commands/group.py:337
+#: dnf/cli/commands/group.py:334
 msgid "argument for group subcommand"
 msgstr "グループサブコマンドの引数"
 
-#: dnf/cli/commands/group.py:346
+#: dnf/cli/commands/group.py:343
 #, python-format
 msgid "Invalid groups sub-command, use: %s."
-msgstr "groups のサブコマンドが無効です: %s. を使用します"
+msgstr "groups のサブコマンドが無効です: %s を使用します。"
 
-#: dnf/cli/commands/group.py:403
+#: dnf/cli/commands/group.py:398
 msgid "Unable to find a mandatory group package."
 msgstr "必須のグループパッケージを見つけることができません。"
 
@@ -1275,25 +1241,25 @@ msgstr "トランザクション履歴を表示、または使用します"
 
 #: dnf/cli/commands/history.py:66
 msgid "For the store command, file path to store the transaction to"
-msgstr ""
+msgstr "store コマンドの場合は、トランザクションを保存するファイルパス"
 
 #: dnf/cli/commands/history.py:68
 msgid ""
 "For the replay command, don't check for installed packages matching those in"
 " transaction"
-msgstr ""
+msgstr "replay コマンドの場合は、トランザクション内のパッケージに一致するインストール済みパッケージを確認しない"
 
 #: dnf/cli/commands/history.py:71
 msgid ""
 "For the replay command, don't check for extra packages pulled into the "
 "transaction"
-msgstr ""
+msgstr "replay コマンドの場合は、トランザクションにプルされた追加パッケージを確認しない"
 
 #: dnf/cli/commands/history.py:74
 msgid ""
 "For the replay command, skip packages that are not available or have missing"
 " dependencies"
-msgstr ""
+msgstr "replay コマンドの場合は、利用できないパッケージや、依存関係が不足しているパッケージをスキップ"
 
 #: dnf/cli/commands/history.py:94
 msgid ""
@@ -1304,41 +1270,64 @@ msgstr ""
 "'{}' は 1 つのトランザクション ID またはパッケージ名が必要です。"
 
 #: dnf/cli/commands/history.py:101
-#, fuzzy
-#| msgid "No transaction ID or package name given."
 msgid "No transaction file name given."
-msgstr "トランザクション ID、またはパッケージ名が指定されていません。"
+msgstr "トランザクションファイル名が指定されていません。"
 
 #: dnf/cli/commands/history.py:103
-#, fuzzy
-#| msgid "Failed to remove transaction file %s"
 msgid "More than one argument given as transaction file name."
-msgstr "トランザクションファイル %s の削除に失敗しました"
+msgstr "トランザクションファイル名として指定された複数の引数。"
 
-#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:126
+#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:130
 msgid "No transaction ID or package name given."
 msgstr "トランザクション ID、またはパッケージ名が指定されていません。"
 
-#: dnf/cli/commands/history.py:138
+#: dnf/cli/commands/history.py:142
 #, python-format
 msgid "You don't have access to the history DB: %s"
 msgstr "履歴 DB にアクセスできません: %s"
 
-#: dnf/cli/commands/history.py:147
+#: dnf/cli/commands/history.py:151
 #, python-format
 msgid ""
 "Cannot undo transaction %s, doing so would result in an inconsistent package"
 " database."
 msgstr "トランザクション %s を取り消すことはできません。取り消すことで、パッケージデータベースに矛盾が生じます。"
 
-#: dnf/cli/commands/history.py:152
+#: dnf/cli/commands/history.py:156
 #, python-format
 msgid ""
 "Cannot rollback transaction %s, doing so would result in an inconsistent "
 "package database."
 msgstr "トランザクション %s をロールバックすることはできません。ロールバックすることで、パッケージデータベースに矛盾が生じます。"
 
-#: dnf/cli/commands/history.py:222
+#: dnf/cli/commands/history.py:175
+msgid "No transaction ID given"
+msgstr "トランザクション ID は指定されていません"
+
+#: dnf/cli/commands/history.py:179
+#, python-brace-format
+msgid "Transaction ID \"{0}\" not found."
+msgstr "トランザクション ID \"{0}\" が見つかりません。"
+
+#: dnf/cli/commands/history.py:185
+msgid "Found more than one transaction ID!"
+msgstr "1 つ以上のトランザクション ID が見つかりました!"
+
+#: dnf/cli/commands/history.py:203
+#, python-format
+msgid "Transaction history is incomplete, before %u."
+msgstr "%u の前のトランザクション履歴が不完全です。"
+
+#: dnf/cli/commands/history.py:205
+#, python-format
+msgid "Transaction history is incomplete, after %u."
+msgstr "%u の後のトランザクション履歴が不完全です。"
+
+#: dnf/cli/commands/history.py:256
+msgid "No packages to list"
+msgstr "一覧表示するパッケージはありません"
+
+#: dnf/cli/commands/history.py:279
 msgid ""
 "Invalid transaction ID range definition '{}'.\n"
 "Use '<transaction-id>..<transaction-id>'."
@@ -1346,7 +1335,7 @@ msgstr ""
 "無効なトランザクション ID の範囲の定義 '{}'。\n"
 "'<transaction-id>..<transaction-id>' を使用してください。"
 
-#: dnf/cli/commands/history.py:226
+#: dnf/cli/commands/history.py:283
 msgid ""
 "Can't convert '{}' to transaction ID.\n"
 "Use '<number>', 'last', 'last-<number>'."
@@ -1354,40 +1343,29 @@ msgstr ""
 "'{}' をトランザクション IDに変換できません。\n"
 "'<number>', 'last', 'last-<number>' を使用してください。"
 
-#: dnf/cli/commands/history.py:255
+#: dnf/cli/commands/history.py:312
 msgid "No transaction which manipulates package '{}' was found."
 msgstr "パッケージ '{}' を操作するトランザクションが見つかりません。"
 
-#: dnf/cli/commands/history.py:305
-#, fuzzy, python-brace-format
-#| msgid "TransactionItem not found for key: {}"
-msgid "Transaction ID \"{id}\" not found."
-msgstr "TransactionItemが見つかりません鍵: {}"
-
-#: dnf/cli/commands/history.py:313
+#: dnf/cli/commands/history.py:357
 msgid "{} exists, overwrite?"
-msgstr ""
+msgstr "{} は存在します。上書きしますか?"
 
-#: dnf/cli/commands/history.py:316
+#: dnf/cli/commands/history.py:360
 msgid "Not overwriting {}, exiting."
-msgstr ""
+msgstr "{} は存在するため上書きしません。"
 
-#: dnf/cli/commands/history.py:323
-#, fuzzy
-#| msgid "Transaction failed"
+#: dnf/cli/commands/history.py:367
 msgid "Transaction saved to {}."
-msgstr "トランザクションが失敗しました"
+msgstr "{} に保存されているトランザクション。"
 
-#: dnf/cli/commands/history.py:326
-#, fuzzy
-#| msgid "Errors occurred during transaction."
+#: dnf/cli/commands/history.py:370
 msgid "Error storing transaction: {}"
-msgstr "トランザクション中にエラーが発生しました。"
+msgstr "トランザクションの保存エラー: {}"
 
-#: dnf/cli/commands/history.py:350
-msgid ""
-"Warning, the following problems occurred while replaying the transaction:"
-msgstr ""
+#: dnf/cli/commands/history.py:386
+msgid "Warning, the following problems occurred while running a transaction:"
+msgstr "警告: トランザクションの実行中に以下の問題が発生しました。"
 
 #: dnf/cli/commands/install.py:47
 msgid "install a package or packages on your system"
@@ -1406,7 +1384,7 @@ msgstr "一致するものが見つかりません"
 msgid "Not a valid rpm file path: %s"
 msgstr "有効な rpm ファイルパスではありません: %s"
 
-#: dnf/cli/commands/install.py:167
+#: dnf/cli/commands/install.py:166
 #, python-brace-format
 msgid "There are following alternatives for \"{0}\": {1}"
 msgstr "\"{0}\"には次の選択肢があります: {1}"
@@ -1449,7 +1427,7 @@ msgid "%s marked as group installed."
 msgstr "グループインストールには %s のマークがついています。"
 
 #: dnf/cli/commands/mark.py:85 dnf/cli/commands/shell.py:129
-#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:279
+#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:282
 msgid "Error:"
 msgstr "エラー:"
 
@@ -1505,42 +1483,46 @@ msgid "Package {} belongs to multiple modules, skipping"
 msgstr "パッケージ {} は複数のモジュールに属しています、スキップします"
 
 #: dnf/cli/commands/module.py:277
+msgid "switch a module to a stream and distrosync rpm packages"
+msgstr "モジュールをストリームに切り替え、rpm パッケージを distrosync します"
+
+#: dnf/cli/commands/module.py:299
 msgid "list modular packages"
 msgstr "モジュラーパッケージをリスト"
 
-#: dnf/cli/commands/module.py:292
+#: dnf/cli/commands/module.py:314
 msgid "list packages belonging to a module"
 msgstr "モジュールに属するパッケージをリスト"
 
-#: dnf/cli/commands/module.py:327
+#: dnf/cli/commands/module.py:349
 msgid "Interact with Modules."
 msgstr "モジュールと対話します。"
 
-#: dnf/cli/commands/module.py:340
+#: dnf/cli/commands/module.py:362
 msgid "show only enabled modules"
 msgstr "有効なモジュールのみを表示します"
 
-#: dnf/cli/commands/module.py:343
+#: dnf/cli/commands/module.py:365
 msgid "show only disabled modules"
 msgstr "無効なモジュールのみを表示します"
 
-#: dnf/cli/commands/module.py:346
+#: dnf/cli/commands/module.py:368
 msgid "show only installed modules or packages"
 msgstr "インストールされたモジュールまたはパッケージのみ表示"
 
-#: dnf/cli/commands/module.py:349
+#: dnf/cli/commands/module.py:371
 msgid "show profile content"
 msgstr "プロファイルコンテンツを表示します"
 
-#: dnf/cli/commands/module.py:354
+#: dnf/cli/commands/module.py:376
 msgid "remove all modular packages"
 msgstr "すべてのモジュラーパッケージを削除"
 
-#: dnf/cli/commands/module.py:364
+#: dnf/cli/commands/module.py:386
 msgid "Module specification"
 msgstr "モジュールspec"
 
-#: dnf/cli/commands/module.py:386
+#: dnf/cli/commands/module.py:408
 msgid "{} {} {}: too few arguments"
 msgstr "{} {} {}: 引数が足りません"
 
@@ -1843,6 +1825,8 @@ msgid ""
 "display format for listing packages: \"%%{name} %%{version} ...\", use "
 "--querytags to view full tag list"
 msgstr ""
+"パッケージを一覧表示するための形式の表示: \"%%{name} %%{version} ...\"。--querytags "
+"を指定して完全なタグリストを表示"
 
 #: dnf/cli/commands/repoquery.py:198
 msgid "show available tags to use with --queryformat"
@@ -1977,7 +1961,7 @@ msgid ""
 msgstr ""
 "オプションの '--resolve' は、'--conflicts'、'--depends'、'--enhances'、'--provides'、'--"
 "recommends'、'--requires'、'--requires-pre'、'--suggests' または '--supplements' "
-"オプションのいずれか 1 つと使用する必要があります。"
+"オプションのいずれか 1 つと使用する必要があります"
 
 #: dnf/cli/commands/repoquery.py:305
 msgid ""
@@ -1986,7 +1970,7 @@ msgid ""
 "--resolve'"
 msgstr ""
 "オプションの '--recursive' は、'--whatrequires <REQ>' (オプションでは '--exactdeps' ではなく、'"
-"--alldeps' と共に使用) または '--requires <REQ> --resolve' と共に使用する必要があります。"
+"--alldeps' と共に使用) または '--requires <REQ> --resolve' と共に使用する必要があります"
 
 #: dnf/cli/commands/repoquery.py:312
 msgid "argument {} requires --whatrequires or --whatdepends option"
@@ -2027,22 +2011,22 @@ msgstr "KEYWORD"
 msgid "Keyword to search for"
 msgstr "検索のキーワード"
 
-#: dnf/cli/commands/search.py:61 dnf/cli/output.py:506
+#: dnf/cli/commands/search.py:61 dnf/cli/output.py:460
 msgctxt "long"
 msgid "Name"
 msgstr "名前"
 
-#: dnf/cli/commands/search.py:62 dnf/cli/output.py:559
+#: dnf/cli/commands/search.py:62 dnf/cli/output.py:513
 msgctxt "long"
 msgid "Summary"
 msgstr "概要"
 
-#: dnf/cli/commands/search.py:63 dnf/cli/output.py:569
+#: dnf/cli/commands/search.py:63 dnf/cli/output.py:523
 msgctxt "long"
 msgid "Description"
 msgstr "説明"
 
-#: dnf/cli/commands/search.py:64 dnf/cli/output.py:562
+#: dnf/cli/commands/search.py:64 dnf/cli/output.py:516
 msgid "URL"
 msgstr "URL"
 
@@ -2185,16 +2169,16 @@ msgstr ""
 "実行                      トランザクションセットの解決および実行\n"
 "終了 (または 中止)           シェルの終了"
 
-#: dnf/cli/commands/shell.py:259
+#: dnf/cli/commands/shell.py:262
 #, python-format
 msgid "Error: Cannot open %s for reading"
 msgstr "エラー: 読み込み用に %s を開くことができません"
 
-#: dnf/cli/commands/shell.py:281 dnf/cli/main.py:187
+#: dnf/cli/commands/shell.py:284 dnf/cli/main.py:187
 msgid "Complete!"
 msgstr "完了しました!"
 
-#: dnf/cli/commands/shell.py:291
+#: dnf/cli/commands/shell.py:294
 msgid "Leaving Shell"
 msgstr "シェルを終了します"
 
@@ -2385,8 +2369,8 @@ msgstr "重大度"
 msgid "Files"
 msgstr "ファイル"
 
-#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1499
-#: dnf/cli/output.py:1772 dnf/cli/output.py:1774
+#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1652
+#: dnf/cli/output.py:1654 dnf/util.py:591
 msgid "Installed"
 msgstr "インストール済み"
 
@@ -2709,13 +2693,13 @@ msgstr "引数をエンコードできません '%s': %s"
 #. Translators: This is abbreviated 'Name'. Should be no longer
 #. than 12 characters. You can use the full version if it is short
 #. enough in your language.
-#: dnf/cli/output.py:505
+#: dnf/cli/output.py:459
 msgctxt "short"
 msgid "Name"
 msgstr "名前"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:511
+#: dnf/cli/output.py:465
 msgid "Epoch"
 msgstr "エポック"
 
@@ -2723,38 +2707,38 @@ msgstr "エポック"
 #. use the full (unabbreviated) term 'Version' if you think that
 #. the translation to your language is not too long and will
 #. always fit to limited space.
-#: dnf/cli/output.py:512 dnf/cli/output.py:1335
+#: dnf/cli/output.py:466 dnf/cli/output.py:1248
 msgctxt "short"
 msgid "Version"
 msgstr "バージョン"
 
 #. Translators: This is the full (unabbreviated) term 'Version'.
-#: dnf/cli/output.py:513 dnf/cli/output.py:1337
+#: dnf/cli/output.py:467 dnf/cli/output.py:1250
 msgctxt "long"
 msgid "Version"
 msgstr "バージョン"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:516
+#: dnf/cli/output.py:470
 msgid "Release"
 msgstr "リリース"
 
 #. Translators: This is abbreviated 'Architecture', used when
 #. we have not enough space to display the full word.
-#: dnf/cli/output.py:517 dnf/cli/output.py:1326
+#: dnf/cli/output.py:471 dnf/cli/output.py:1239
 msgctxt "short"
 msgid "Arch"
 msgstr "Arch"
 
 #. Translators: This is the full word 'Architecture', used when
 #. we have enough space.
-#: dnf/cli/output.py:518 dnf/cli/output.py:1329
+#: dnf/cli/output.py:472 dnf/cli/output.py:1242
 msgctxt "long"
 msgid "Architecture"
 msgstr "アーキテクチャー"
 
 #. Translators: This is the full (unabbreviated) term 'Size'.
-#: dnf/cli/output.py:520 dnf/cli/output.py:1352
+#: dnf/cli/output.py:474 dnf/cli/output.py:1265
 msgctxt "long"
 msgid "Size"
 msgstr "サイズ"
@@ -2763,32 +2747,32 @@ msgstr "サイズ"
 #. not be longer than 5 characters. If the term 'Size' in your
 #. language is not longer than 5 characters then you can use it
 #. unabbreviated.
-#: dnf/cli/output.py:520 dnf/cli/output.py:1350
+#: dnf/cli/output.py:474 dnf/cli/output.py:1263
 msgctxt "short"
 msgid "Size"
 msgstr "サイズ"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:524
+#: dnf/cli/output.py:478
 msgid "Source"
 msgstr "ソース"
 
 #. Translators: This is abbreviated 'Repository', used when
 #. we have not enough space to display the full word.
-#: dnf/cli/output.py:525 dnf/cli/output.py:1341
+#: dnf/cli/output.py:479 dnf/cli/output.py:1254
 msgctxt "short"
 msgid "Repo"
 msgstr "Repo"
 
 #. Translators: This is the full word 'Repository', used when
 #. we have enough space.
-#: dnf/cli/output.py:526 dnf/cli/output.py:1344
+#: dnf/cli/output.py:480 dnf/cli/output.py:1257
 msgctxt "long"
 msgid "Repository"
 msgstr "リポジトリー"
 
 #. Translators: This message should be no longer than 12 chars.
-#: dnf/cli/output.py:533
+#: dnf/cli/output.py:487
 msgid "From repo"
 msgstr "repo から"
 
@@ -2796,312 +2780,308 @@ msgstr "repo から"
 #. print(_("Committer   : %s") % ucd(pkg.committer))
 #. print(_("Committime  : %s") % time.ctime(pkg.committime))
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:539
+#: dnf/cli/output.py:493
 msgid "Packager"
 msgstr "パッケージャー"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:541
+#: dnf/cli/output.py:495
 msgid "Buildtime"
 msgstr "ビルド時間"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:545
+#: dnf/cli/output.py:499
 msgid "Install time"
 msgstr "インストール時間"
 
 #. Translators: This message should be no longer than 12 chars.
-#: dnf/cli/output.py:554
+#: dnf/cli/output.py:508
 msgid "Installed by"
 msgstr "インストール済み"
 
 #. Translators: This is abbreviated 'Summary'. Should be no longer
 #. than 12 characters. You can use the full version if it is short
 #. enough in your language.
-#: dnf/cli/output.py:558
+#: dnf/cli/output.py:512
 msgctxt "short"
 msgid "Summary"
 msgstr "概要"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:564
+#: dnf/cli/output.py:518
 msgid "License"
 msgstr "ライセンス"
 
 #. Translators: This is abbreviated 'Description'. Should be no longer
 #. than 12 characters. You can use the full version if it is short
 #. enough in your language.
-#: dnf/cli/output.py:568
+#: dnf/cli/output.py:522
 msgctxt "short"
 msgid "Description"
 msgstr "説明"
 
-#: dnf/cli/output.py:695
-msgid "No packages to list"
-msgstr "一覧表示するパッケージはありません"
-
-#: dnf/cli/output.py:706
+#: dnf/cli/output.py:650
 msgid "y"
 msgstr "y"
 
-#: dnf/cli/output.py:706
+#: dnf/cli/output.py:650
 msgid "yes"
 msgstr "はい"
 
-#: dnf/cli/output.py:707
+#: dnf/cli/output.py:651
 msgid "n"
 msgstr "n"
 
-#: dnf/cli/output.py:707
+#: dnf/cli/output.py:651
 msgid "no"
 msgstr "いいえ"
 
-#: dnf/cli/output.py:711
+#: dnf/cli/output.py:655
 msgid "Is this ok [y/N]: "
 msgstr "これでよろしいですか? [y/N]: "
 
-#: dnf/cli/output.py:715
+#: dnf/cli/output.py:659
 msgid "Is this ok [Y/n]: "
 msgstr "これでよろしいですか? [Y/n]: "
 
-#: dnf/cli/output.py:795
+#: dnf/cli/output.py:739
 #, python-format
 msgid "Group: %s"
 msgstr "グループ: %s"
 
-#: dnf/cli/output.py:799
+#: dnf/cli/output.py:743
 #, python-format
 msgid " Group-Id: %s"
 msgstr " グループ ID: %s"
 
-#: dnf/cli/output.py:801 dnf/cli/output.py:840
+#: dnf/cli/output.py:745 dnf/cli/output.py:784
 #, python-format
 msgid " Description: %s"
 msgstr " 説明: %s"
 
-#: dnf/cli/output.py:803
+#: dnf/cli/output.py:747
 #, python-format
 msgid " Language: %s"
 msgstr " 言語: %s"
 
-#: dnf/cli/output.py:806
+#: dnf/cli/output.py:750
 msgid " Mandatory Packages:"
 msgstr " 必須なパッケージ:"
 
-#: dnf/cli/output.py:807
+#: dnf/cli/output.py:751
 msgid " Default Packages:"
 msgstr " 標準パッケージ:"
 
-#: dnf/cli/output.py:808
+#: dnf/cli/output.py:752
 msgid " Optional Packages:"
 msgstr " オプション パッケージ:"
 
-#: dnf/cli/output.py:809
+#: dnf/cli/output.py:753
 msgid " Conditional Packages:"
 msgstr " 条件付きパッケージ:"
 
-#: dnf/cli/output.py:834
+#: dnf/cli/output.py:778
 #, python-format
 msgid "Environment Group: %s"
 msgstr "環境グループ: %s"
 
-#: dnf/cli/output.py:837
+#: dnf/cli/output.py:781
 #, python-format
 msgid " Environment-Id: %s"
 msgstr " 環境 Id: %s"
 
-#: dnf/cli/output.py:843
+#: dnf/cli/output.py:787
 msgid " Mandatory Groups:"
 msgstr " 必須なグループ:"
 
-#: dnf/cli/output.py:844
+#: dnf/cli/output.py:788
 msgid " Optional Groups:"
 msgstr " 任意なグループ:"
 
-#: dnf/cli/output.py:865
+#: dnf/cli/output.py:809
 msgid "Matched from:"
 msgstr "一致:"
 
-#: dnf/cli/output.py:879
+#: dnf/cli/output.py:823
 #, python-format
 msgid "Filename    : %s"
 msgstr "ファイル名    : %s"
 
-#: dnf/cli/output.py:904
+#: dnf/cli/output.py:848
 #, python-format
 msgid "Repo        : %s"
 msgstr "Repo        : %s"
 
-#: dnf/cli/output.py:913
+#: dnf/cli/output.py:857
 msgid "Description : "
-msgstr "説明                : "
+msgstr "説明: "
 
-#: dnf/cli/output.py:917
+#: dnf/cli/output.py:861
 #, python-format
 msgid "URL         : %s"
 msgstr "URL                 : %s"
 
-#: dnf/cli/output.py:921
+#: dnf/cli/output.py:865
 #, python-format
 msgid "License     : %s"
 msgstr "ライセンス    : %s"
 
-#: dnf/cli/output.py:927
+#: dnf/cli/output.py:871
 #, python-format
 msgid "Provide    : %s"
 msgstr "提供する    : %s"
 
-#: dnf/cli/output.py:947
+#: dnf/cli/output.py:891
 #, python-format
 msgid "Other       : %s"
 msgstr "その他       : %s"
 
-#: dnf/cli/output.py:996
+#: dnf/cli/output.py:940
 msgid "There was an error calculating total download size"
 msgstr "ダウンロードサイズの合計を計算中にエラーが発生しました"
 
-#: dnf/cli/output.py:1002
+#: dnf/cli/output.py:946
 #, python-format
 msgid "Total size: %s"
 msgstr "合計サイズ: %s"
 
-#: dnf/cli/output.py:1005
+#: dnf/cli/output.py:949
 #, python-format
 msgid "Total download size: %s"
 msgstr "ダウンロードサイズの合計: %s"
 
-#: dnf/cli/output.py:1008
+#: dnf/cli/output.py:952
 #, python-format
 msgid "Installed size: %s"
 msgstr "インストール後のサイズ: %s"
 
-#: dnf/cli/output.py:1026
+#: dnf/cli/output.py:970
 msgid "There was an error calculating installed size"
 msgstr "インストール後のサイズを計算中にエラーが発生しました"
 
-#: dnf/cli/output.py:1030
+#: dnf/cli/output.py:974
 #, python-format
 msgid "Freed space: %s"
 msgstr "解放された容量: %s"
 
-#: dnf/cli/output.py:1039
+#: dnf/cli/output.py:983
 msgid "Marking packages as installed by the group:"
 msgstr "パッケージをグループごとにインストール済みとマークします:"
 
-#: dnf/cli/output.py:1046
+#: dnf/cli/output.py:990
 msgid "Marking packages as removed by the group:"
 msgstr "パッケージをグループごとに削除済みとマークします:"
 
-#: dnf/cli/output.py:1056
+#: dnf/cli/output.py:1000
 msgid "Group"
 msgstr "グループ"
 
-#: dnf/cli/output.py:1056
+#: dnf/cli/output.py:1000
 msgid "Packages"
 msgstr "パッケージ"
 
-#: dnf/cli/output.py:1133
+#: dnf/cli/output.py:1046
 msgid "Installing group/module packages"
 msgstr "group/moduleパッケージをインストール"
 
-#: dnf/cli/output.py:1134
+#: dnf/cli/output.py:1047
 msgid "Installing group packages"
 msgstr "グループパッケージのインストール"
 
 #. TRANSLATORS: This is for a list of packages to be installed.
-#: dnf/cli/output.py:1138
+#: dnf/cli/output.py:1051
 msgctxt "summary"
 msgid "Installing"
 msgstr "インストール"
 
 #. TRANSLATORS: This is for a list of packages to be upgraded.
-#: dnf/cli/output.py:1140
+#: dnf/cli/output.py:1053
 msgctxt "summary"
 msgid "Upgrading"
 msgstr "アップグレード"
 
 #. TRANSLATORS: This is for a list of packages to be reinstalled.
-#: dnf/cli/output.py:1142
+#: dnf/cli/output.py:1055
 msgctxt "summary"
 msgid "Reinstalling"
 msgstr "再インストール"
 
-#: dnf/cli/output.py:1144
+#: dnf/cli/output.py:1057
 msgid "Installing dependencies"
 msgstr "依存関係のインストール"
 
-#: dnf/cli/output.py:1145
+#: dnf/cli/output.py:1058
 msgid "Installing weak dependencies"
 msgstr "弱い依存関係のインストール"
 
 #. TRANSLATORS: This is for a list of packages to be removed.
-#: dnf/cli/output.py:1147
+#: dnf/cli/output.py:1060
 msgid "Removing"
 msgstr "削除中"
 
-#: dnf/cli/output.py:1148
+#: dnf/cli/output.py:1061
 msgid "Removing dependent packages"
 msgstr "依存関係パッケージの削除"
 
-#: dnf/cli/output.py:1149
+#: dnf/cli/output.py:1062
 msgid "Removing unused dependencies"
 msgstr "未使用の依存関係の削除"
 
 #. TRANSLATORS: This is for a list of packages to be downgraded.
-#: dnf/cli/output.py:1151
+#: dnf/cli/output.py:1064
 msgctxt "summary"
 msgid "Downgrading"
 msgstr "ダウングレード"
 
-#: dnf/cli/output.py:1176
+#: dnf/cli/output.py:1089
 msgid "Installing module profiles"
 msgstr "モジュールプロファイルのインストール中"
 
-#: dnf/cli/output.py:1185
+#: dnf/cli/output.py:1098
 msgid "Disabling module profiles"
 msgstr "モジュールプロファイルの無効化中"
 
-#: dnf/cli/output.py:1194
+#: dnf/cli/output.py:1107
 msgid "Enabling module streams"
 msgstr "モジュールストリームの有効化中"
 
-#: dnf/cli/output.py:1202
+#: dnf/cli/output.py:1115
 msgid "Switching module streams"
 msgstr "モジュールストリームの切り替え中"
 
-#: dnf/cli/output.py:1210
+#: dnf/cli/output.py:1123
 msgid "Disabling modules"
 msgstr "モジュールの無効化"
 
-#: dnf/cli/output.py:1218
+#: dnf/cli/output.py:1131
 msgid "Resetting modules"
 msgstr "モジュールの再設定中"
 
-#: dnf/cli/output.py:1230
+#: dnf/cli/output.py:1143
 msgid "Installing Environment Groups"
 msgstr "環境グループのインストール中"
 
-#: dnf/cli/output.py:1237
+#: dnf/cli/output.py:1150
 msgid "Upgrading Environment Groups"
 msgstr "環境グループのアップグレード中"
 
-#: dnf/cli/output.py:1244
+#: dnf/cli/output.py:1157
 msgid "Removing Environment Groups"
 msgstr "環境グループの削除中"
 
-#: dnf/cli/output.py:1251
+#: dnf/cli/output.py:1164
 msgid "Installing Groups"
 msgstr "グループのインストール中"
 
-#: dnf/cli/output.py:1258
+#: dnf/cli/output.py:1171
 msgid "Upgrading Groups"
 msgstr "グループのアップグレード中"
 
-#: dnf/cli/output.py:1265
+#: dnf/cli/output.py:1178
 msgid "Removing Groups"
 msgstr "グループの削除中"
 
-#: dnf/cli/output.py:1281
+#: dnf/cli/output.py:1194
 #, python-format
 msgid ""
 "Skipping packages with conflicts:\n"
@@ -3110,12 +3090,12 @@ msgstr ""
 "競合するパッケージをスキップします:\n"
 "(アップグレードを強制するにはコマンドラインに '%s' を追加します)"
 
-#: dnf/cli/output.py:1291
+#: dnf/cli/output.py:1204
 #, python-format
 msgid "Skipping packages with broken dependencies%s"
 msgstr "壊れた dependencies%s のパッケージをスキップします"
 
-#: dnf/cli/output.py:1295
+#: dnf/cli/output.py:1208
 msgid " or part of a group"
 msgstr " またはグループの一部"
 
@@ -3123,22 +3103,22 @@ msgstr " またはグループの一部"
 #. use the full (unabbreviated) term 'Package' if you think that
 #. the translation to your language is not too long and will
 #. always fit to limited space.
-#: dnf/cli/output.py:1320
+#: dnf/cli/output.py:1233
 msgctxt "short"
 msgid "Package"
 msgstr "パッケージ"
 
 #. Translators: This is the full (unabbreviated) term 'Package'.
-#: dnf/cli/output.py:1322
+#: dnf/cli/output.py:1235
 msgctxt "long"
 msgid "Package"
 msgstr "パッケージ"
 
-#: dnf/cli/output.py:1371
+#: dnf/cli/output.py:1284
 msgid "replacing"
 msgstr "置き換え"
 
-#: dnf/cli/output.py:1378
+#: dnf/cli/output.py:1291
 #, python-format
 msgid ""
 "\n"
@@ -3150,287 +3130,271 @@ msgstr ""
 "%s\n"
 
 #. TODO: remove
-#: dnf/cli/output.py:1383 dnf/cli/output.py:1932 dnf/cli/output.py:1933
+#: dnf/cli/output.py:1296 dnf/cli/output.py:1812 dnf/cli/output.py:1813
 msgid "Install"
 msgstr "インストール"
 
-#: dnf/cli/output.py:1387 dnf/cli/output.py:1941
+#: dnf/cli/output.py:1300 dnf/cli/output.py:1821
 msgid "Upgrade"
 msgstr "アップグレード"
 
-#: dnf/cli/output.py:1388
+#: dnf/cli/output.py:1301
 msgid "Remove"
 msgstr "削除"
 
-#: dnf/cli/output.py:1390 dnf/cli/output.py:1939
+#: dnf/cli/output.py:1303 dnf/cli/output.py:1819
 msgid "Downgrade"
 msgstr "ダウングレード"
 
-#: dnf/cli/output.py:1391
+#: dnf/cli/output.py:1304
 msgid "Skip"
 msgstr "スキップ"
 
-#: dnf/cli/output.py:1400 dnf/cli/output.py:1416
+#: dnf/cli/output.py:1313 dnf/cli/output.py:1329
 msgid "Package"
 msgid_plural "Packages"
 msgstr[0] "パッケージ"
 
-#: dnf/cli/output.py:1418
+#: dnf/cli/output.py:1331
 msgid "Dependent package"
 msgid_plural "Dependent packages"
 msgstr[0] "依存パッケージ"
 
-#: dnf/cli/output.py:1497 dnf/cli/output.py:1773 dnf/cli/output.py:1942
-msgid "Upgraded"
-msgstr "アップグレード済み"
-
-#: dnf/cli/output.py:1498 dnf/cli/output.py:1773 dnf/cli/output.py:1940
-msgid "Downgraded"
-msgstr "ダウングレード済み"
-
-#: dnf/cli/output.py:1503
-msgid "Reinstalled"
-msgstr "再インストール済み"
-
-#: dnf/cli/output.py:1504
-msgid "Skipped"
-msgstr "スキップ済み"
-
-#: dnf/cli/output.py:1505
-msgid "Removed"
-msgstr "削除しました"
-
-#: dnf/cli/output.py:1508
-msgid "Failed"
-msgstr "失敗しました"
-
-#: dnf/cli/output.py:1559
+#: dnf/cli/output.py:1439
 msgid "Total"
 msgstr "合計"
 
-#: dnf/cli/output.py:1587
+#: dnf/cli/output.py:1467
 msgid "<unset>"
 msgstr "<未設定>"
 
-#: dnf/cli/output.py:1588
+#: dnf/cli/output.py:1468
 msgid "System"
 msgstr "システム"
 
-#: dnf/cli/output.py:1638
+#: dnf/cli/output.py:1518
 msgid "Command line"
 msgstr "コマンドライン"
 
 #. TRANSLATORS: user names who executed transaction in history command output
-#: dnf/cli/output.py:1649
+#: dnf/cli/output.py:1529
 msgid "User name"
 msgstr "ユーザー名"
 
-#: dnf/cli/output.py:1651
+#: dnf/cli/output.py:1531
 msgid "ID"
 msgstr "ID"
 
-#: dnf/cli/output.py:1653
+#: dnf/cli/output.py:1533
 msgid "Date and time"
 msgstr "日時"
 
-#: dnf/cli/output.py:1654
+#: dnf/cli/output.py:1534
 msgid "Action(s)"
 msgstr "動作"
 
-#: dnf/cli/output.py:1655
+#: dnf/cli/output.py:1535
 msgid "Altered"
 msgstr "変更されました"
 
-#: dnf/cli/output.py:1698
+#: dnf/cli/output.py:1578
 msgid "No transactions"
 msgstr "トランザクションがありません"
 
-#: dnf/cli/output.py:1699 dnf/cli/output.py:1715
+#: dnf/cli/output.py:1579 dnf/cli/output.py:1595
 msgid "Failed history info"
 msgstr "失敗した履歴情報"
 
-#: dnf/cli/output.py:1714
+#: dnf/cli/output.py:1594
 msgid "No transaction ID, or package, given"
 msgstr "トランザクション ID、またはパッケージが指定されていません"
 
-#: dnf/cli/output.py:1772
+#: dnf/cli/output.py:1652
 msgid "Erased"
 msgstr "削除されました"
 
-#: dnf/cli/output.py:1774
+#: dnf/cli/output.py:1653 dnf/cli/output.py:1820 dnf/util.py:590
+msgid "Downgraded"
+msgstr "ダウングレード済み"
+
+#: dnf/cli/output.py:1653 dnf/cli/output.py:1822 dnf/util.py:589
+msgid "Upgraded"
+msgstr "アップグレード済み"
+
+#: dnf/cli/output.py:1654
 msgid "Not installed"
 msgstr "インストールされていません"
 
-#: dnf/cli/output.py:1775
+#: dnf/cli/output.py:1655
 msgid "Newer"
 msgstr "新しい"
 
-#: dnf/cli/output.py:1775
+#: dnf/cli/output.py:1655
 msgid "Older"
 msgstr "古い"
 
-#: dnf/cli/output.py:1823 dnf/cli/output.py:1825
+#: dnf/cli/output.py:1703 dnf/cli/output.py:1705
 msgid "Transaction ID :"
 msgstr "トランザクション ID :"
 
-#: dnf/cli/output.py:1828
+#: dnf/cli/output.py:1708
 msgid "Begin time     :"
 msgstr "開始時間            :"
 
-#: dnf/cli/output.py:1831 dnf/cli/output.py:1833
+#: dnf/cli/output.py:1711 dnf/cli/output.py:1713
 msgid "Begin rpmdb    :"
 msgstr "開始 rpmdb          :"
 
-#: dnf/cli/output.py:1839
+#: dnf/cli/output.py:1719
 #, python-format
 msgid "(%u seconds)"
 msgstr "(%u 秒)"
 
-#: dnf/cli/output.py:1841
+#: dnf/cli/output.py:1721
 #, python-format
 msgid "(%u minutes)"
 msgstr "(%u 分)"
 
-#: dnf/cli/output.py:1843
+#: dnf/cli/output.py:1723
 #, python-format
 msgid "(%u hours)"
 msgstr "(%u 時間)"
 
-#: dnf/cli/output.py:1845
+#: dnf/cli/output.py:1725
 #, python-format
 msgid "(%u days)"
 msgstr "(%u 日)"
 
-#: dnf/cli/output.py:1846
+#: dnf/cli/output.py:1726
 msgid "End time       :"
 msgstr "終了時間            :"
 
-#: dnf/cli/output.py:1849 dnf/cli/output.py:1851
+#: dnf/cli/output.py:1729 dnf/cli/output.py:1731
 msgid "End rpmdb      :"
 msgstr "終了 rpmdb          :"
 
-#: dnf/cli/output.py:1858 dnf/cli/output.py:1860
+#: dnf/cli/output.py:1738 dnf/cli/output.py:1740
 msgid "User           :"
 msgstr "ユーザー            :"
 
-#: dnf/cli/output.py:1864 dnf/cli/output.py:1871
+#: dnf/cli/output.py:1744 dnf/cli/output.py:1751
 msgid "Aborted"
 msgstr "中断しました"
 
-#: dnf/cli/output.py:1864 dnf/cli/output.py:1867 dnf/cli/output.py:1869
-#: dnf/cli/output.py:1871 dnf/cli/output.py:1873 dnf/cli/output.py:1875
+#: dnf/cli/output.py:1744 dnf/cli/output.py:1747 dnf/cli/output.py:1749
+#: dnf/cli/output.py:1751 dnf/cli/output.py:1753 dnf/cli/output.py:1755
 msgid "Return-Code    :"
 msgstr "終了コード          :"
 
-#: dnf/cli/output.py:1867 dnf/cli/output.py:1875
+#: dnf/cli/output.py:1747 dnf/cli/output.py:1755
 msgid "Success"
 msgstr "成功"
 
-#: dnf/cli/output.py:1869
+#: dnf/cli/output.py:1749
 msgid "Failures:"
 msgstr "失敗:"
 
-#: dnf/cli/output.py:1873
+#: dnf/cli/output.py:1753
 msgid "Failure:"
 msgstr "失敗しました:"
 
-#: dnf/cli/output.py:1883 dnf/cli/output.py:1885
+#: dnf/cli/output.py:1763 dnf/cli/output.py:1765
 msgid "Releasever     :"
 msgstr "Releasever     :"
 
-#: dnf/cli/output.py:1890 dnf/cli/output.py:1892
+#: dnf/cli/output.py:1770 dnf/cli/output.py:1772
 msgid "Command Line   :"
 msgstr "コマンドライン      :"
 
-#: dnf/cli/output.py:1897 dnf/cli/output.py:1899
+#: dnf/cli/output.py:1777 dnf/cli/output.py:1779
 msgid "Comment        :"
 msgstr "コメント        :"
 
-#: dnf/cli/output.py:1903
+#: dnf/cli/output.py:1783
 msgid "Transaction performed with:"
 msgstr "実行されたトランザクション:"
 
-#: dnf/cli/output.py:1912
+#: dnf/cli/output.py:1792
 msgid "Packages Altered:"
 msgstr "変更されたパッケージ:"
 
-#: dnf/cli/output.py:1918
+#: dnf/cli/output.py:1798
 msgid "Scriptlet output:"
 msgstr "Scriptlet の出力:"
 
-#: dnf/cli/output.py:1925
+#: dnf/cli/output.py:1805
 msgid "Errors:"
 msgstr "エラー:"
 
-#: dnf/cli/output.py:1934
+#: dnf/cli/output.py:1814
 msgid "Dep-Install"
 msgstr "Dep-Install"
 
-#: dnf/cli/output.py:1935
+#: dnf/cli/output.py:1815
 msgid "Obsoleted"
 msgstr "廃止された"
 
-#: dnf/cli/output.py:1936 dnf/transaction.py:84 dnf/transaction.py:85
+#: dnf/cli/output.py:1816 dnf/transaction.py:84 dnf/transaction.py:85
 msgid "Obsoleting"
 msgstr "廃止"
 
-#: dnf/cli/output.py:1937
+#: dnf/cli/output.py:1817
 msgid "Erase"
 msgstr "削除"
 
-#: dnf/cli/output.py:1938
+#: dnf/cli/output.py:1818
 msgid "Reinstall"
 msgstr "再インストール"
 
-#: dnf/cli/output.py:2016
+#: dnf/cli/output.py:1892
 #, python-format
 msgid "---> Package %s.%s %s will be installed"
 msgstr "---> パッケージ %s.%s %s はインストールされます"
 
-#: dnf/cli/output.py:2018
+#: dnf/cli/output.py:1894
 #, python-format
 msgid "---> Package %s.%s %s will be an upgrade"
 msgstr "---> パッケージ %s.%s %s はアップグレードされます"
 
-#: dnf/cli/output.py:2020
+#: dnf/cli/output.py:1896
 #, python-format
 msgid "---> Package %s.%s %s will be erased"
 msgstr "---> パッケージ %s.%s %s は消去されます"
 
-#: dnf/cli/output.py:2022
+#: dnf/cli/output.py:1898
 #, python-format
 msgid "---> Package %s.%s %s will be reinstalled"
 msgstr "---> パッケージ %s.%s %s は再インストールされます"
 
-#: dnf/cli/output.py:2024
+#: dnf/cli/output.py:1900
 #, python-format
 msgid "---> Package %s.%s %s will be a downgrade"
 msgstr "---> パッケージ %s.%s %s はダウングレードされます"
 
-#: dnf/cli/output.py:2026
+#: dnf/cli/output.py:1902
 #, python-format
 msgid "---> Package %s.%s %s will be obsoleting"
 msgstr "---> パッケージ %s.%s %s は廃止となります"
 
-#: dnf/cli/output.py:2028
+#: dnf/cli/output.py:1904
 #, python-format
 msgid "---> Package %s.%s %s will be upgraded"
 msgstr "---> パッケージ %s.%s %s はアップグレードされます"
 
-#: dnf/cli/output.py:2030
+#: dnf/cli/output.py:1906
 #, python-format
 msgid "---> Package %s.%s %s will be obsoleted"
 msgstr "---> パッケージ %s.%s %s は廃止されます"
 
-#: dnf/cli/output.py:2039
+#: dnf/cli/output.py:1915
 msgid "--> Starting dependency resolution"
 msgstr "--> 依存関係の解決を開始しました"
 
-#: dnf/cli/output.py:2044
+#: dnf/cli/output.py:1919
 msgid "--> Finished dependency resolution"
 msgstr "--> 依存関係の解決が完了しました"
 
-#: dnf/cli/output.py:2058 dnf/crypto.py:132
+#: dnf/cli/output.py:1933 dnf/crypto.py:132
 #, python-format
 msgid ""
 "Importing GPG key 0x%s:\n"
@@ -3512,16 +3476,14 @@ msgid "Module or Group '%s' does not exist."
 msgstr "モジュールまたはグループ '%s' は存在しません。"
 
 #: dnf/comps.py:599
-#, fuzzy, python-format
-#| msgid "Environment '%s' is not installed."
+#, python-format
 msgid "Environment id '%s' does not exist."
-msgstr "環境 '%s' はインストールされていません。"
+msgstr "環境 id '%s' は存在しません。"
 
-#: dnf/comps.py:622 dnf/transaction_sr.py:443 dnf/transaction_sr.py:453
-#, fuzzy, python-format
-#| msgid "Environment '%s' is not installed."
+#: dnf/comps.py:622 dnf/transaction_sr.py:477 dnf/transaction_sr.py:487
+#, python-format
 msgid "Environment id '%s' is not installed."
-msgstr "環境 '%s' はインストールされていません。"
+msgstr "環境 id '%s' はインストールされていません。"
 
 #: dnf/comps.py:639
 #, python-format
@@ -3534,10 +3496,9 @@ msgid "Environment '%s' is not available."
 msgstr "環境 '%s' は利用不可です。"
 
 #: dnf/comps.py:673
-#, fuzzy, python-format
-#| msgid "Group_id '%s' does not exist."
+#, python-format
 msgid "Group id '%s' does not exist."
-msgstr "Group_id '%s' は存在しません。"
+msgstr "グループ id '%s' は存在しません。"
 
 #: dnf/conf/config.py:136
 #, python-format
@@ -3588,7 +3549,7 @@ msgstr "repo %s には setopt の前に %s attr. がありませんでした"
 #: dnf/conf/read.py:51
 #, python-format
 msgid "Warning: failed loading '%s', skipping."
-msgstr "警告:  '%s' のロードに失敗、スキップします。"
+msgstr "警告: '%s' のロードに失敗、スキップします。"
 
 #: dnf/conf/read.py:63
 msgid "Bad id for repo: {} ({}), byte = {} {}"
@@ -3628,6 +3589,11 @@ msgstr "repo %s: 0x%s はインポート済みです"
 msgid "repo %s: imported key 0x%s."
 msgstr "repo %s: インポート済みの鍵 0x%s。"
 
+#: dnf/crypto.py:177
+#, python-format
+msgid "retrieving repo key for %s unencrypted from %s"
+msgstr "%s から暗号化されていない %s の repo キーを取得しています"
+
 #: dnf/db/group.py:293
 msgid ""
 "No available modular metadata for modular package '{}', it cannot be "
@@ -3710,7 +3676,7 @@ msgid "Modular dependency problem with Defaults:"
 msgid_plural "Modular dependency problems with Defaults:"
 msgstr[0] "デフォルトのモジュラー依存問題:"
 
-#: dnf/exceptions.py:131 dnf/module/module_base.py:686
+#: dnf/exceptions.py:131 dnf/module/module_base.py:841
 msgid "Modular dependency problem:"
 msgid_plural "Modular dependency problems:"
 msgstr[0] "モジュラーの依存に関する問題:"
@@ -3764,8 +3730,8 @@ msgstr ""
 "\n"
 "ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled, [a]ctive"
 
-#: dnf/module/module_base.py:54 dnf/module/module_base.py:421
-#: dnf/module/module_base.py:477 dnf/module/module_base.py:543
+#: dnf/module/module_base.py:54 dnf/module/module_base.py:547
+#: dnf/module/module_base.py:603 dnf/module/module_base.py:669
 msgid "Ignoring unnecessary profile: '{}/{}'"
 msgstr "不要なプロファイルを無視します: '{}/{}'"
 
@@ -3774,17 +3740,17 @@ msgstr "不要なプロファイルを無視します: '{}/{}'"
 msgid "All matches for argument '{0}' in module '{1}:{2}' are not active"
 msgstr "モジュール '{1}:{2}' の引数 '{0}' に一致するものはすべて非アクティブです"
 
-#: dnf/module/module_base.py:92
+#: dnf/module/module_base.py:92 dnf/module/module_base.py:202
 #, python-brace-format
 msgid "Installing module '{0}' from Fail-Safe repository {1} is not allowed"
 msgstr "フェイルセーフレポジトリー {1} からのモジュール '{0}' インストールは許可されていません"
 
-#: dnf/module/module_base.py:102
+#: dnf/module/module_base.py:102 dnf/module/module_base.py:212
 msgid ""
 "Unable to match profile for argument {}. Available profiles for '{}:{}': {}"
 msgstr "引数 {} でプロファイルが見つかりません。利用可能プロファイル '{}:{}': {}"
 
-#: dnf/module/module_base.py:106
+#: dnf/module/module_base.py:106 dnf/module/module_base.py:216
 msgid "Unable to match profile for argument {}"
 msgstr "引数 {} でプロファイルが見つかりません"
 
@@ -3800,41 +3766,55 @@ msgstr "モジュール {}:{} にプロファイルがありません"
 msgid "Default profile {} not available in module {}:{}"
 msgstr "デフォルトのプロファイル {} はモジュール {}:{} で利用不可です"
 
-#: dnf/module/module_base.py:142
+#: dnf/module/module_base.py:142 dnf/module/module_base.py:245
 msgid "Installing module from Fail-Safe repository is not allowed"
 msgstr "フェイルセーフレポジトリーからのモジュールインストールは許可されていません"
 
-#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
-#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
-#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
-#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
+#: dnf/module/module_base.py:194
+#, python-brace-format
+msgid "No active matches for argument '{0}' in module '{1}:{2}'"
+msgstr "モジュール '{1}:{2}' の引数 '{0}' には、アクティブな一致がありません"
+
+#: dnf/module/module_base.py:226
+#, python-brace-format
+msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'"
+msgstr "インストールされたプロファイル '{0}' は、モジュール '{1}' ストリーム '{2}' では利用できません"
+
+#: dnf/module/module_base.py:265
+msgid "No packages available to distrosync for package name '{}'"
+msgstr "パッケージ名 '{}' 向けに distrosync するパッケージはありません"
+
+#: dnf/module/module_base.py:308 dnf/module/module_base.py:452
+#: dnf/module/module_base.py:477 dnf/module/module_base.py:496
+#: dnf/module/module_base.py:543 dnf/module/module_base.py:599
+#: dnf/module/module_base.py:665 dnf/module/module_base.py:827
 msgid "Unable to resolve argument {}"
 msgstr "引数 {} を解決できません"
 
-#: dnf/module/module_base.py:160
-msgid "No match for package {}"
-msgstr "パッケージ {} に一致するものはありません"
-
-#: dnf/module/module_base.py:204
+#: dnf/module/module_base.py:319
 #, python-brace-format
 msgid "Upgrading module '{0}' from Fail-Safe repository {1} is not allowed"
 msgstr "フェイルセーフレポジトリー {1} からのモジュール '{0}' アップグレードは許可されていません"
 
-#: dnf/module/module_base.py:223 dnf/module/module_base.py:251
+#: dnf/module/module_base.py:338 dnf/module/module_base.py:366
 msgid "Unable to match profile in argument {}"
 msgstr "引数 {} でプロファイルを一致できません"
 
-#: dnf/module/module_base.py:231
+#: dnf/module/module_base.py:346
 msgid "Upgrading module from Fail-Safe repository is not allowed"
 msgstr "フェイルセーフレポジトリーからのモジュールアップグレードは許可されていません"
 
-#: dnf/module/module_base.py:367
+#: dnf/module/module_base.py:500
 msgid ""
 "Only module name is required. Ignoring unneeded information in argument: "
 "'{}'"
 msgstr "モジュール名のみが必要です。引数で不必要な情報を無視します: '{}'"
 
-#: dnf/package.py:298
+#: dnf/module/module_base.py:828
+msgid "No match for package {}"
+msgstr "パッケージ {} に一致するものはありません"
+
+#: dnf/package.py:333
 #, python-format
 msgid "%s: %s check failed: %s vs %s"
 msgstr "%s: %s の確認に失敗しました: %s vs %s"
@@ -3848,12 +3828,12 @@ msgstr "%s は空のファイルです"
 #: dnf/persistor.py:91
 #, python-format
 msgid "Failed to load expired repos cache: %s"
-msgstr ""
+msgstr "期限切れのリポジトリーキャッシュのロードに失敗しました: %s"
 
 #: dnf/persistor.py:99
 #, python-format
 msgid "Failed to store expired repos cache: %s"
-msgstr ""
+msgstr "期限切れのリポジトリーキャッシュの保存に失敗しました: %s"
 
 #: dnf/persistor.py:106
 msgid "Failed storing last makecache time."
@@ -3915,6 +3895,14 @@ msgstr "%s から %s repo を追加しました"
 msgid "Errors occurred during test transaction."
 msgstr "テストトランザクション中にエラーが発生しました。"
 
+#: dnf/sack.py:47
+msgid ""
+"allow_vendor_change is disabled. This option is currently not supported for "
+"downgrade and distro-sync commands"
+msgstr ""
+"allow_vendor_change は無効になっています。このオプションは、downgrade コマンドおよび distro-sync "
+"コマンドではサポートされていません"
+
 #. TRANSLATORS: This is for a single package currently being downgraded.
 #: dnf/transaction.py:80
 msgctxt "currently"
@@ -3961,168 +3949,200 @@ msgstr "scriptletの実行中"
 msgid "Preparing"
 msgstr "準備"
 
-#: dnf/transaction_sr.py:60
+#: dnf/transaction_sr.py:66
 #, python-brace-format
-msgid "Errors in \"{filename}\":"
-msgstr ""
+msgid ""
+"The following problems occurred while replaying the transaction from file "
+"\"{filename}\":"
+msgstr "ファイル \"{filename}\" からのトランザクションの再生中に以下の問題が発生しました。"
 
-#: dnf/transaction_sr.py:70
-#, python-brace-format
-msgid "Error in \"{filename}\": {error}"
-msgstr ""
+#: dnf/transaction_sr.py:68
+msgid "The following problems occurred while running a transaction:"
+msgstr "トランザクションの実行中に以下の問題が発生しました。"
 
-#: dnf/transaction_sr.py:87
+#: dnf/transaction_sr.py:89
 #, python-brace-format
 msgid "Invalid major version \"{major}\", number expected."
-msgstr ""
+msgstr "無効なメジャーバージョン \"{major}\"。数字が必要です。"
 
-#: dnf/transaction_sr.py:95
+#: dnf/transaction_sr.py:97
 #, python-brace-format
 msgid "Invalid minor version \"{minor}\", number expected."
-msgstr ""
+msgstr "無効なマイナーバージョン \"{minor}\"。数字が必要です。"
 
-#: dnf/transaction_sr.py:101
+#: dnf/transaction_sr.py:103
 #, python-brace-format
 msgid ""
 "Incompatible major version \"{major}\", supported major version is "
 "\"{major_supp}\"."
-msgstr ""
+msgstr "互換性のないメジャーバージョン \"{major}\"。サポートされているメジャーバージョンは \"{major_supp}\" です。"
+
+#: dnf/transaction_sr.py:224
+msgid ""
+"Conflicting TransactionReplay arguments have been specified: filename, data"
+msgstr "競合する TransactionReplay 引数が指定されています。filename, data"
 
-#: dnf/transaction_sr.py:244
+#: dnf/transaction_sr.py:265
 #, python-brace-format
 msgid "Unexpected type of \"{id}\", {exp} expected."
-msgstr ""
+msgstr "予期しない {id}\" のタイプ。{exp} が必要です。"
 
-#: dnf/transaction_sr.py:250
+#: dnf/transaction_sr.py:271
 #, python-brace-format
 msgid "Missing key \"{key}\"."
-msgstr ""
+msgstr "\"{key}\" キーがありません。"
 
-#: dnf/transaction_sr.py:263
+#: dnf/transaction_sr.py:285
 #, python-brace-format
 msgid "Missing object key \"{key}\" in an rpm."
-msgstr ""
+msgstr "オブジェクトキー \"{key}\" が rpm にありません。"
 
-#: dnf/transaction_sr.py:267
+#: dnf/transaction_sr.py:289
 #, python-brace-format
 msgid "Unexpected value of package reason \"{reason}\" for rpm nevra \"{nevra}\"."
-msgstr ""
+msgstr "rpm nevra \"{nevra}\" の予期しないパッケージ理由 \"{reason}\" の値。"
 
-#: dnf/transaction_sr.py:275
+#: dnf/transaction_sr.py:297
 #, python-brace-format
 msgid "Cannot parse NEVRA for package \"{nevra}\"."
-msgstr ""
+msgstr "パッケージ \"{nevra}\" の NEVRA を解析できません。"
 
-#: dnf/transaction_sr.py:286
+#: dnf/transaction_sr.py:321
 #, python-brace-format
 msgid "Cannot find rpm nevra \"{nevra}\"."
-msgstr ""
+msgstr "rpm nevra \"{nevra}\" を見つけることはできません。"
 
-#: dnf/transaction_sr.py:301
-#, fuzzy, python-brace-format
-#| msgid "Package %s is already installed."
+#: dnf/transaction_sr.py:336
+#, python-brace-format
 msgid "Package \"{na}\" is already installed for action \"{action}\"."
-msgstr "パッケージ %s は既にインストールされています。"
+msgstr "パッケージ \"{na}\" は、アクション \"{action}\" 用に既にインストールされています。"
 
-#: dnf/transaction_sr.py:311
+#: dnf/transaction_sr.py:345
 #, python-brace-format
 msgid ""
 "Package nevra \"{nevra}\" not available in repositories for action "
 "\"{action}\"."
-msgstr ""
+msgstr "アクション \"{action}\" に利用できる パッケージ nevra \"{nevra}\" はレポジトリーにありません。"
 
-#: dnf/transaction_sr.py:322
+#: dnf/transaction_sr.py:356
 #, python-brace-format
 msgid "Package nevra \"{nevra}\" not installed for action \"{action}\"."
-msgstr ""
+msgstr "アクション \"{action}\" には、パッケージ nevra \"{nevra}\" インストールされていません。"
 
-#: dnf/transaction_sr.py:336
+#: dnf/transaction_sr.py:370
 #, python-brace-format
 msgid "Unexpected value of package action \"{action}\" for rpm nevra \"{nevra}\"."
-msgstr ""
+msgstr "rpm nevra \"{nevra}\" の、パッケージアクション \"{action}\" の予期しない値。"
 
-#: dnf/transaction_sr.py:343
-#, fuzzy, python-format
-#| msgid "Module or Group '%s' is not available."
+#: dnf/transaction_sr.py:377
+#, python-format
 msgid "Group id '%s' is not available."
-msgstr "モジュールまたはグループ '%s' は利用不可です。"
+msgstr "グループ id '%s' は利用できません。"
 
-#: dnf/transaction_sr.py:364
+#: dnf/transaction_sr.py:398
 #, python-brace-format
 msgid "Missing object key \"{key}\" in groups.packages."
-msgstr ""
+msgstr "オブジェクトキー \"{key}\" が groups.packages に含まれません。"
 
-#: dnf/transaction_sr.py:377 dnf/transaction_sr.py:387
-#, fuzzy, python-format
-#| msgid "Module or Group '%s' is not installed."
+#: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421
+#, python-format
 msgid "Group id '%s' is not installed."
-msgstr "モジュールまたはグループ '%s' がインストールされていません。"
+msgstr "グループ id '%s' がインストールされていません。"
 
-#: dnf/transaction_sr.py:398
-#, fuzzy, python-format
-#| msgid "Environment '%s' is not available."
+#: dnf/transaction_sr.py:432
+#, python-format
 msgid "Environment id '%s' is not available."
-msgstr "環境 '%s' は利用不可です。"
+msgstr "環境 id '%s' は利用できません。"
 
-#: dnf/transaction_sr.py:422
+#: dnf/transaction_sr.py:456
 #, python-brace-format
 msgid ""
 "Invalid value \"{group_type}\" of environments.groups.group_type, only "
 "\"mandatory\" or \"optional\" is supported."
 msgstr ""
+"environments.groups.group_type の無効な値 \"{group_type}\"。\"mandatory\" または "
+"\"optional\" のみに対応しています。"
 
-#: dnf/transaction_sr.py:430
+#: dnf/transaction_sr.py:464
 #, python-brace-format
 msgid "Missing object key \"{key}\" in environments.groups."
-msgstr ""
+msgstr "オブジェクトキー \"{key}\" が environments.groups に含まれません。"
 
-#: dnf/transaction_sr.py:508
+#: dnf/transaction_sr.py:542
 #, python-brace-format
 msgid "Unexpected value of group action \"{action}\" for group \"{group}\"."
-msgstr ""
+msgstr "グループ \"{group}\" の グループアクション \"{action}\" の予期しない値。"
 
-#: dnf/transaction_sr.py:513
+#: dnf/transaction_sr.py:547
 #, python-brace-format
 msgid "Missing object key \"{key}\" in a group."
-msgstr ""
+msgstr "オブジェクトキー \"{key}\" がグループ内にありません。"
 
-#: dnf/transaction_sr.py:537
+#: dnf/transaction_sr.py:571
 #, python-brace-format
 msgid "Unexpected value of environment action \"{action}\" for environment \"{env}\"."
-msgstr ""
+msgstr "環境 \"{env}\" の環境アクション \"{action}\" の予期しない値。"
 
-#: dnf/transaction_sr.py:542
+#: dnf/transaction_sr.py:576
 #, python-brace-format
 msgid "Missing object key \"{key}\" in an environment."
-msgstr ""
+msgstr "オブジェクトキー \"{key}\" が環境にありません。"
 
-#: dnf/transaction_sr.py:581
+#: dnf/transaction_sr.py:615
 #, python-brace-format
 msgid ""
 "Package nevra \"{nevra}\", which is not present in the transaction file, was"
 " pulled into the transaction."
-msgstr ""
+msgstr "トランザクションファイルに存在しないパッケージ nevra \"{nevra}\" がトランザクションにプルされていました。"
 
 # translation auto-copied from project jbpm-designer, version 6.0.1, document
 # org.jbpm/jbpm-designer-
 # api/resources/org/jbpm/designer/resources/i18n/DesignerConstants, author
 # nmirasch
-#: dnf/util.py:391 dnf/util.py:393
+#: dnf/util.py:393 dnf/util.py:395
 msgid "Problem"
 msgstr "問題"
 
-#: dnf/util.py:444
+#: dnf/util.py:446
 msgid "TransactionItem not found for key: {}"
 msgstr "TransactionItemが見つかりません鍵: {}"
 
-#: dnf/util.py:454
+#: dnf/util.py:456
 msgid "TransactionSWDBItem not found for key: {}"
 msgstr "TransactionSWDBItemが見つかりません鍵: {}"
 
-#: dnf/util.py:457
+#: dnf/util.py:459
 msgid "Errors occurred during transaction."
 msgstr "トランザクション中にエラーが発生しました。"
 
+#: dnf/util.py:595
+msgid "Reinstalled"
+msgstr "再インストール済み"
+
+#: dnf/util.py:596
+msgid "Skipped"
+msgstr "スキップ済み"
+
+#: dnf/util.py:597
+msgid "Removed"
+msgstr "削除しました"
+
+#: dnf/util.py:600
+msgid "Failed"
+msgstr "失敗しました"
+
+#~ msgid "Action not handled: {}"
+#~ msgstr "動作は対処されていません: {}"
+
+#~ msgid "no package matched"
+#~ msgstr "一致したパッケージはありません。"
+
+#~ msgid "Not found given transaction ID"
+#~ msgstr "指定されたトランザクション ID は見つかりません"
+
+#~ msgid "Undoing transaction {}, from {}"
+#~ msgstr "トランザクション {} を {} から取り消しています"
+
 #~ msgid "format for displaying found packages"
 #~ msgstr "見つかったパッケージを表示する形式"
 
diff --git a/po/ko.po b/po/ko.po
index 449f6130..9f37ae13 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -5,7 +5,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-10-05 09:18-0400\n"
+"POT-Creation-Date: 2021-02-22 09:22+0100\n"
 "PO-Revision-Date: 2020-09-12 11:29+0000\n"
 "Last-Translator: Ludek Janda <ljanda@redhat.com>\n"
 "Language-Team: Korean <https://translate.fedoraproject.org/projects/dnf/dnf-master/ko/>\n"
@@ -72,7 +72,7 @@ msgstr "알 수없는 설정: %s=%s in %s; %s"
 msgid "Unknown configuration option: %s = %s in %s"
 msgstr "알 수없는 옵션 : %s = %s in %s"
 
-#: dnf/automatic/main.py:237 dnf/cli/cli.py:299
+#: dnf/automatic/main.py:237 dnf/cli/cli.py:304
 msgid "GPG check FAILED"
 msgstr "GPG 확인 실패"
 
@@ -85,9 +85,11 @@ msgid "Started dnf-automatic."
 msgstr "dnf-automatic을 시작했습니다."
 
 #: dnf/automatic/main.py:308
-#, python-format
-msgid "Sleep for %s seconds"
-msgstr "%s 초 동안 절전합니다"
+#, fuzzy
+#| msgid "Sleep for %s seconds"
+msgid "Sleep for {} second"
+msgid_plural "Sleep for {} seconds"
+msgstr[0] "%s 초 동안 절전합니다"
 
 #: dnf/automatic/main.py:315
 msgid "System is off-line."
@@ -99,7 +101,7 @@ msgstr ""
 msgid "Error: %s"
 msgstr "오류: %s"
 
-#: dnf/base.py:146
+#: dnf/base.py:146 dnf/base.py:472 dnf/base.py:474
 msgid "loading repo '{}' failure: {}"
 msgstr "repo '{}'의 로드에 실패했습니다 : {}"
 
@@ -107,236 +109,236 @@ msgstr "repo '{}'의 로드에 실패했습니다 : {}"
 msgid "Loading repository '{}' has failed"
 msgstr "리포지토리 '{}'의 로드에 실패했습니다"
 
-#: dnf/base.py:320
+#: dnf/base.py:322
 msgid "Metadata timer caching disabled when running on metered connection."
 msgstr "데이터 통신 연결을 사용할 때 메타 데이터 타이머 캐싱을 비활성화합니다."
 
-#: dnf/base.py:325
+#: dnf/base.py:327
 msgid "Metadata timer caching disabled when running on a battery."
 msgstr "배터리를 사용할할 때 메타 데이터 타이머 캐싱을 비활성화합니다."
 
-#: dnf/base.py:330
+#: dnf/base.py:332
 msgid "Metadata timer caching disabled."
 msgstr "메타 데이터 타이머 캐싱이 비활성화되었습니다."
 
-#: dnf/base.py:335
+#: dnf/base.py:337
 msgid "Metadata cache refreshed recently."
 msgstr "최근에 메타 데이터 캐시가 새로 고쳐졌습니다."
 
-#: dnf/base.py:341 dnf/cli/commands/__init__.py:91
+#: dnf/base.py:343 dnf/cli/commands/__init__.py:91
 msgid "There are no enabled repositories in \"{}\"."
 msgstr "\"{}\"에 사용 가능한 저장소가 없습니다."
 
-#: dnf/base.py:348
+#: dnf/base.py:350
 #, python-format
 msgid "%s: will never be expired and will not be refreshed."
 msgstr "%s: 만료되지 않고 새로 고침되지 않습니다."
 
-#: dnf/base.py:350
+#: dnf/base.py:352
 #, python-format
 msgid "%s: has expired and will be refreshed."
 msgstr "%s: 만료되어 새로 고침됩니다."
 
 #. expires within the checking period:
-#: dnf/base.py:354
+#: dnf/base.py:356
 #, python-format
 msgid "%s: metadata will expire after %d seconds and will be refreshed now"
 msgstr "%s: 메타 데이터는 %d 초 이후에 만료되며 이제 새로 고침됩니다."
 
-#: dnf/base.py:358
+#: dnf/base.py:360
 #, python-format
 msgid "%s: will expire after %d seconds."
 msgstr "%s: %d 초 후에 만료됩니다."
 
 #. performs the md sync
-#: dnf/base.py:364
+#: dnf/base.py:366
 msgid "Metadata cache created."
 msgstr "메타 데이터 캐시가 생성되었습니다."
 
-#: dnf/base.py:397
+#: dnf/base.py:399 dnf/base.py:466
 #, python-format
 msgid "%s: using metadata from %s."
 msgstr "%s: %s에서 메타 데이터 사용 중"
 
-#: dnf/base.py:409
+#: dnf/base.py:411 dnf/base.py:479
 #, python-format
 msgid "Ignoring repositories: %s"
 msgstr "리포지토리를 무시합니다: %s"
 
-#: dnf/base.py:412
+#: dnf/base.py:414
 #, python-format
 msgid "Last metadata expiration check: %s ago on %s."
 msgstr "마지막 메타 데이터 만료 확인 :%s. %s 이전에 확인"
 
-#: dnf/base.py:443
+#: dnf/base.py:507
 msgid ""
 "The downloaded packages were saved in cache until the next successful "
 "transaction."
 msgstr "다운로드된 패키지는 다음 번 성공적인 트랜잭션까지 캐시에 저장됩니다."
 
-#: dnf/base.py:445
+#: dnf/base.py:509
 #, python-format
 msgid "You can remove cached packages by executing '%s'."
 msgstr "'%s'을/를 실행하여 캐시 패키지를 삭제할 수 있습니다."
 
-#: dnf/base.py:535
+#: dnf/base.py:599
 #, python-format
 msgid "Invalid tsflag in config file: %s"
 msgstr "설정 파일에서 tsflag 사용이 잘못되었습니다: %s"
 
-#: dnf/base.py:591
+#: dnf/base.py:655
 #, python-format
 msgid "Failed to add groups file for repository: %s - %s"
 msgstr "리포지토리의 그룹 파일을 추가하지 못했습니다. %s - %s"
 
-#: dnf/base.py:823
+#: dnf/base.py:887
 msgid "Running transaction check"
 msgstr "트랜잭션 확인 실행 중"
 
-#: dnf/base.py:831
+#: dnf/base.py:895
 msgid "Error: transaction check vs depsolve:"
 msgstr "오류 : 트랜잭션 확인 및 종속성 해결 오류"
 
-#: dnf/base.py:837
+#: dnf/base.py:901
 msgid "Transaction check succeeded."
 msgstr "트랜잭션 확인에 성공했습니다."
 
-#: dnf/base.py:840
+#: dnf/base.py:904
 msgid "Running transaction test"
 msgstr "트랜잭션 테스트 실행 중"
 
-#: dnf/base.py:850 dnf/base.py:992
+#: dnf/base.py:914 dnf/base.py:1065
 msgid "RPM: {}"
 msgstr "RPM: {}"
 
-#: dnf/base.py:851
+#: dnf/base.py:915
 msgid "Transaction test error:"
 msgstr "트랜잭션 테스트 오류:"
 
-#: dnf/base.py:862
+#: dnf/base.py:926
 msgid "Transaction test succeeded."
 msgstr "트랜잭션 테스트에 성공했습니다."
 
-#: dnf/base.py:883
+#: dnf/base.py:947
 msgid "Running transaction"
 msgstr "트랜잭션 실행 중"
 
-#: dnf/base.py:911
+#: dnf/base.py:984
 msgid "Disk Requirements:"
 msgstr "디스크 요구 사항 :"
 
-#: dnf/base.py:914
+#: dnf/base.py:987
 #, python-brace-format
 msgid "At least {0}MB more space needed on the {1} filesystem."
 msgid_plural "At least {0}MB more space needed on the {1} filesystem."
 msgstr[0] "{1} 파일 시스템에 최소 {0}MB의 공간이 더 필요합니다."
 
-#: dnf/base.py:921
+#: dnf/base.py:994
 msgid "Error Summary"
 msgstr "오류 요약"
 
-#: dnf/base.py:947
+#: dnf/base.py:1020
 #, python-brace-format
 msgid "RPMDB altered outside of {prog}."
 msgstr "RPMDB는 {prog} 외부에서 변경되었습니다."
 
-#: dnf/base.py:993 dnf/base.py:1001
+#: dnf/base.py:1066 dnf/base.py:1074
 msgid "Could not run transaction."
 msgstr "트랜잭션을 실행할 수 없습니다."
 
-#: dnf/base.py:996
+#: dnf/base.py:1069
 msgid "Transaction couldn't start:"
 msgstr "트랜잭션을 시작할 수 없습니다 :"
 
-#: dnf/base.py:1010
+#: dnf/base.py:1083
 #, python-format
 msgid "Failed to remove transaction file %s"
 msgstr "%s 트랜잭션 파일을 삭제하지 못했습니다"
 
-#: dnf/base.py:1092
+#: dnf/base.py:1165
 msgid "Some packages were not downloaded. Retrying."
 msgstr "일부 패키지가 다운로드되지 않았습니다. 다시 시도 중입니다."
 
-#: dnf/base.py:1122
+#: dnf/base.py:1195
 #, python-format
 msgid "Delta RPMs reduced %.1f MB of updates to %.1f MB (%d.1%% saved)"
 msgstr "Delta RPM이 %.1f MB의 업데이트를 %.1f MB로 줄였습니다. (%d.1 %% 절약됨)"
 
-#: dnf/base.py:1125
+#: dnf/base.py:1198
 #, python-format
 msgid ""
 "Failed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)"
 msgstr "Delta RPM은 %.1f MB의 업데이트를 %.1f MB로 줄이는데 실패했습니다. (%d.1 %% 손실됨)"
 
-#: dnf/base.py:1167
+#: dnf/base.py:1240
 msgid "Cannot add local packages, because transaction job already exists"
 msgstr "트랜잭션 작업이 이미 존재하므로 로컬 패키지를 추가할 수 없습니다"
 
-#: dnf/base.py:1181
+#: dnf/base.py:1254
 msgid "Could not open: {}"
 msgstr "열 수 없음 : {}"
 
-#: dnf/base.py:1219
+#: dnf/base.py:1292
 #, python-format
 msgid "Public key for %s is not installed"
 msgstr "%s의 공개 키는 설치되어 있지 않습니다."
 
-#: dnf/base.py:1223
+#: dnf/base.py:1296
 #, python-format
 msgid "Problem opening package %s"
 msgstr "%s 패키지를 여는 중에 문제가 발생했습니다"
 
-#: dnf/base.py:1231
+#: dnf/base.py:1304
 #, python-format
 msgid "Public key for %s is not trusted"
 msgstr "%s의 공개 키는 신뢰할 수 없습니다"
 
-#: dnf/base.py:1235
+#: dnf/base.py:1308
 #, python-format
 msgid "Package %s is not signed"
 msgstr "%s 패키지가 서명되지 않았습니다"
 
-#: dnf/base.py:1265
+#: dnf/base.py:1338
 #, python-format
 msgid "Cannot remove %s"
 msgstr "%s을/를 삭제할 수 없습니다."
 
-#: dnf/base.py:1269
+#: dnf/base.py:1342
 #, python-format
 msgid "%s removed"
 msgstr "%s가 삭제되었습니다"
 
-#: dnf/base.py:1549
+#: dnf/base.py:1622
 msgid "No match for group package \"{}\""
 msgstr "그룹 패키지 \"{}\"에 일치하는 항목이 없습니다"
 
-#: dnf/base.py:1635
+#: dnf/base.py:1708
 #, python-format
 msgid "Adding packages from group '%s': %s"
 msgstr "'%s' 그룹에서 패키지 추가: %s"
 
-#: dnf/base.py:1658 dnf/cli/cli.py:219 dnf/cli/commands/__init__.py:442
+#: dnf/base.py:1731 dnf/cli/cli.py:220 dnf/cli/commands/__init__.py:442
 #: dnf/cli/commands/__init__.py:499 dnf/cli/commands/__init__.py:592
 #: dnf/cli/commands/__init__.py:641 dnf/cli/commands/install.py:80
 #: dnf/cli/commands/install.py:103 dnf/cli/commands/install.py:110
 msgid "Nothing to do."
 msgstr "처리가 필요하지 않습니다"
 
-#: dnf/base.py:1676
+#: dnf/base.py:1749
 msgid "No groups marked for removal."
 msgstr "제거할 패키지 그룹이 없습니다"
 
-#: dnf/base.py:1710
+#: dnf/base.py:1783
 msgid "No group marked for upgrade."
 msgstr "업그레이드용으로 표시된 그룹이 없습니다."
 
-#: dnf/base.py:1925
+#: dnf/base.py:1997
 #, python-format
 msgid "Package %s not installed, cannot downgrade it."
 msgstr "%s 패키지가 설치되어 있지 않기 때문에 다운 그레이드할 수 없습니다."
 
-#: dnf/base.py:1927 dnf/base.py:1946 dnf/base.py:1959 dnf/base.py:1980
-#: dnf/base.py:2029 dnf/base.py:2037 dnf/base.py:2172 dnf/cli/cli.py:411
+#: dnf/base.py:1999 dnf/base.py:2018 dnf/base.py:2031 dnf/base.py:2052
+#: dnf/base.py:2101 dnf/base.py:2109 dnf/base.py:2243 dnf/cli/cli.py:416
 #: dnf/cli/commands/__init__.py:425 dnf/cli/commands/__init__.py:482
 #: dnf/cli/commands/__init__.py:586 dnf/cli/commands/__init__.py:633
 #: dnf/cli/commands/__init__.py:711 dnf/cli/commands/install.py:147
@@ -346,141 +348,127 @@ msgstr "%s 패키지가 설치되어 있지 않기 때문에 다운 그레이드
 msgid "No match for argument: %s"
 msgstr "일치하는 인수가 없습니다 : %s"
 
-#: dnf/base.py:1934
+#: dnf/base.py:2006
 #, python-format
 msgid "Package %s of lower version already installed, cannot downgrade it."
 msgstr "%s 패키지의 하위 버전이 이미 설치되어 있으므로 다운 그레이드할 수 없습니다."
 
-#: dnf/base.py:1957
+#: dnf/base.py:2029
 #, python-format
 msgid "Package %s not installed, cannot reinstall it."
 msgstr "%s 패키지가 설치되어 있지 않기 때문에 다시 설치할 수 없습니다."
 
-#: dnf/base.py:1972
+#: dnf/base.py:2044
 #, python-format
 msgid "File %s is a source package and cannot be updated, ignoring."
 msgstr "%s 파일은 소스 패키지이며 업데이트할 수 없습니다. 무시합니다."
 
-#: dnf/base.py:1978
+#: dnf/base.py:2050
 #, python-format
 msgid "Package %s not installed, cannot update it."
 msgstr "%s 패키지가 설치되어 있지 않기 때문에 업데이트할 수 없습니다."
 
-#: dnf/base.py:1987
+#: dnf/base.py:2059
 #, python-format
 msgid ""
 "The same or higher version of %s is already installed, cannot update it."
 msgstr "%s 이상의 버전이 이미 설치되어 있으므로 업데이트할 수 없습니다."
 
-#: dnf/base.py:2026 dnf/cli/commands/reinstall.py:81
+#: dnf/base.py:2098 dnf/cli/commands/reinstall.py:81
 #, python-format
 msgid "Package %s available, but not installed."
 msgstr "%s 패키지는 사용할 수는 있지만 설치되어 있지 않습니다."
 
-#: dnf/base.py:2032
+#: dnf/base.py:2104
 #, python-format
 msgid "Package %s available, but installed for different architecture."
 msgstr "%s 패키지는 사용 가능하지만 다른 아키텍처 용으로 설치되어 있습니다."
 
-#: dnf/base.py:2057 dnf/base.py:2250 dnf/cli/cli.py:668 dnf/cli/cli.py:699
+#: dnf/base.py:2129
 #, python-format
 msgid "No package %s installed."
 msgstr "%s 패키지는 설치되어 있지 않습니다"
 
-#: dnf/base.py:2075 dnf/cli/commands/install.py:136
+#: dnf/base.py:2147 dnf/cli/commands/install.py:136
 #: dnf/cli/commands/remove.py:133
 #, python-format
 msgid "Not a valid form: %s"
 msgstr "잘못된 형식: %s"
 
-#: dnf/base.py:2091 dnf/cli/commands/__init__.py:681
-#: dnf/cli/commands/remove.py:163
+#: dnf/base.py:2162 dnf/cli/commands/__init__.py:681
+#: dnf/cli/commands/remove.py:162
 msgid "No packages marked for removal."
 msgstr "제거 대상 패키지가 없습니다."
 
-#: dnf/base.py:2179 dnf/cli/cli.py:422
+#: dnf/base.py:2250 dnf/cli/cli.py:427
 #, python-format
 msgid "Packages for argument %s available, but not installed."
 msgstr "%s 인수에 대한 패키지를 사용할 수 있지만 설치되어 있지 않습니다."
 
-#: dnf/base.py:2184
+#: dnf/base.py:2255
 #, python-format
 msgid "Package %s of lowest version already installed, cannot downgrade it."
 msgstr "%s 패키지의 최하위 버전이 이미 설치되어 있으므로 다운 그레이드할 수 없습니다."
 
-#: dnf/base.py:2242
-msgid "Action not handled: {}"
-msgstr "작업이 처리되지 않았습니다: {}"
-
-#: dnf/base.py:2256 dnf/cli/cli.py:419 dnf/cli/cli.py:673 dnf/cli/cli.py:703
-#: dnf/cli/commands/group.py:400 dnf/cli/commands/history.py:169
-#, python-format
-msgid "No package %s available."
-msgstr "사용 가능한 패키지 %s가 없습니다."
-
-#: dnf/base.py:2269
-msgid "no package matched"
-msgstr "일치하는 패키지가 없습니다."
-
-#: dnf/base.py:2290
+#: dnf/base.py:2302
 msgid "No security updates needed, but {} update available"
 msgstr "보안 업데이트가 필요하지 않지만 {} 업데이트가 가능합니다"
 
-#: dnf/base.py:2292
+#: dnf/base.py:2304
 msgid "No security updates needed, but {} updates available"
 msgstr "보안 업데이트는 필요하지 않지만 {} 업데이트가 가능합니다"
 
-#: dnf/base.py:2296
+#: dnf/base.py:2308
 msgid "No security updates needed for \"{}\", but {} update available"
 msgstr "\"{}\"에는 보안 업데이트가 필요하지 않지만 {} 업데이트가 가능합니다"
 
-#: dnf/base.py:2298
+#: dnf/base.py:2310
 msgid "No security updates needed for \"{}\", but {} updates available"
 msgstr "\"{}\"에는 보안 업데이트가 필요하지 않지만 {} 업데이트가 가능합니다"
 
 #. raise an exception, because po.repoid is not in self.repos
-#: dnf/base.py:2319
+#: dnf/base.py:2331
 #, python-format
 msgid "Unable to retrieve a key for a commandline package: %s"
 msgstr ""
 
-#: dnf/base.py:2327
+#: dnf/base.py:2339
 #, python-format
 msgid ". Failing package is: %s"
 msgstr "실패한 패키지는 다음과 같습니다. %s"
 
-#: dnf/base.py:2328
+#: dnf/base.py:2340
 #, python-format
 msgid "GPG Keys are configured as: %s"
 msgstr "GPG 키는 다음과 같이 설정되어 있습니다. %s"
 
-#: dnf/base.py:2340
+#: dnf/base.py:2352
 #, python-format
 msgid "GPG key at %s (0x%s) is already installed"
 msgstr "%s (0x%s)의 GPG 키가 이미 설치되어 있습니다"
 
-#: dnf/base.py:2373
+#: dnf/base.py:2385
 msgid "The key has been approved."
 msgstr "키가 승인되었습니다."
 
-#: dnf/base.py:2376
+#: dnf/base.py:2388
 msgid "The key has been rejected."
 msgstr "키가 거부되었습니다."
 
-#: dnf/base.py:2409
+#: dnf/base.py:2421
 #, python-format
 msgid "Key import failed (code %d)"
 msgstr "키 가져 오기에 실패했습니다 (코드 %d)"
 
-#: dnf/base.py:2411
+#: dnf/base.py:2423
 msgid "Key imported successfully"
 msgstr "키 가져오기에 성공했습니다"
 
-#: dnf/base.py:2415
+#: dnf/base.py:2427
 msgid "Didn't install any keys"
 msgstr "키를 하나도 설치하지 못했습니다"
 
-#: dnf/base.py:2418
+#: dnf/base.py:2430
 #, python-format
 msgid ""
 "The GPG keys listed for the \"%s\" repository are already installed but they are not correct for this package.\n"
@@ -489,49 +477,49 @@ msgstr ""
 "해당 GPG 키는 \"%s\"저장소가 이미 설치되어 있지만이 패키지에 맞지 않습니다.\n"
 "이 저장소에 대해 올바른 키 URL이 구성되었는지 확인하십시오."
 
-#: dnf/base.py:2429
+#: dnf/base.py:2441
 msgid "Import of key(s) didn't help, wrong key(s)?"
 msgstr "가져온 키에 문제가 있습니다. 잘못된 키입니까?"
 
-#: dnf/base.py:2482
+#: dnf/base.py:2494
 msgid "  * Maybe you meant: {}"
 msgstr "  * 다음을 의미할 수도 있습니다: {}"
 
-#: dnf/base.py:2514
+#: dnf/base.py:2526
 msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum"
 msgstr "로컬 저장소 \"{}\"의 \"{}\"패키지에 잘못된 체크섬이 있습니다"
 
-#: dnf/base.py:2517
+#: dnf/base.py:2529
 msgid "Some packages from local repository have incorrect checksum"
 msgstr "로컬 저장소의 일부 패키지에 잘못된 체크섬이 있습니다"
 
-#: dnf/base.py:2520
+#: dnf/base.py:2532
 msgid "Package \"{}\" from repository \"{}\" has incorrect checksum"
 msgstr "저장소 \"{}\"의 패키지 \"{}\"에 잘못된 체크섬이 있습니다"
 
-#: dnf/base.py:2523
+#: dnf/base.py:2535
 msgid ""
 "Some packages have invalid cache, but cannot be downloaded due to \"--"
 "cacheonly\" option"
 msgstr "일부 패키지에는 유효하지 않은 캐시가 있지만 \"--cacheonly\"옵션으로 인해 다운로드할 수 없습니다"
 
-#: dnf/base.py:2541 dnf/base.py:2561
+#: dnf/base.py:2553 dnf/base.py:2573
 msgid "No match for argument"
 msgstr "일치하는 인수가 없습니다"
 
-#: dnf/base.py:2549 dnf/base.py:2569
+#: dnf/base.py:2561 dnf/base.py:2581
 msgid "All matches were filtered out by exclude filtering for argument"
 msgstr "모든 일치 항목이 인수의 제외 필터로 필터링되었습니다"
 
-#: dnf/base.py:2551
+#: dnf/base.py:2563
 msgid "All matches were filtered out by modular filtering for argument"
 msgstr "모든 일치 항목이 인수의 모듈식 필터로 필터링되었습니다"
 
-#: dnf/base.py:2567
+#: dnf/base.py:2579
 msgid "All matches were installed from a different repository for argument"
 msgstr "모든 일치 항목이 인수의 다른 리포지토리에서 설치되었습니다"
 
-#: dnf/base.py:2583
+#: dnf/base.py:2626
 #, python-format
 msgid "Package %s is already installed."
 msgstr "패키지 %s이/가 이미 설치되어 있습니다."
@@ -551,8 +539,8 @@ msgstr "\"%s\" 파일의 구문 분석에 실패했습니다 : %s"
 msgid "Cannot read file \"%s\": %s"
 msgstr "\"%s\" 파일을 읽을 수 없습니다: %s"
 
-#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:902
-#: dnf/cli/cli.py:906 dnf/cli/commands/alias.py:108
+#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:803
+#: dnf/cli/cli.py:807 dnf/cli/commands/alias.py:108
 #, python-format
 msgid "Config error: %s"
 msgstr "설정 오류: %s"
@@ -583,7 +571,7 @@ msgid ""
 "stream '{2}'"
 msgstr "이 작업은 '{0}' 모듈을 '{1}' 스트림에서 ‘{2}' 스트림으로 전환합니다"
 
-#: dnf/cli/cli.py:172
+#: dnf/cli/cli.py:173
 #, python-brace-format
 msgid ""
 "It is not possible to switch enabled streams of a module.\n"
@@ -592,35 +580,35 @@ msgstr ""
 "활성화된 모듈 스트림을 전환 할 수 없습니다.\n"
 "설치된 모든 내용을 모듈에서 제거하고 ‘{prog} module reset <module_name>' 명령을 사용하여 모듈을 재설정하는 것이 좋습니다. 모듈을 재설정한 후 다른 스트림을 설치할 수 있습니다."
 
-#: dnf/cli/cli.py:210
+#: dnf/cli/cli.py:211
 #, python-brace-format
 msgid "{prog} will only download packages for the transaction."
 msgstr "{prog}은/는 트랜잭션용 패키지 만 다운로드합니다."
 
-#: dnf/cli/cli.py:213
+#: dnf/cli/cli.py:214
 #, python-brace-format
 msgid ""
 "{prog} will only download packages, install gpg keys, and check the "
 "transaction."
 msgstr "{prog}은/는 패키지 만 다운로드하고 gpg 키를 설치하며 트랜잭션을 확인합니다."
 
-#: dnf/cli/cli.py:217
+#: dnf/cli/cli.py:218
 msgid "Operation aborted."
 msgstr "작업이 중지됨."
 
-#: dnf/cli/cli.py:224
+#: dnf/cli/cli.py:225
 msgid "Downloading Packages:"
 msgstr "패키지 다운로드중:"
 
-#: dnf/cli/cli.py:230
+#: dnf/cli/cli.py:231
 msgid "Error downloading packages:"
 msgstr "패키지 다운로드중 오류 발생:"
 
-#: dnf/cli/cli.py:258
+#: dnf/cli/cli.py:263
 msgid "Transaction failed"
 msgstr "트랜잭션 실패"
 
-#: dnf/cli/cli.py:281
+#: dnf/cli/cli.py:286
 msgid ""
 "Refusing to automatically import keys when running unattended.\n"
 "Use \"-y\" to override."
@@ -628,117 +616,96 @@ msgstr ""
 "키를 자동으로 가져 오는 것을 거부합니다.\n"
 "동작을 무시하려면 \"-y\"를 사용하십시오."
 
-#: dnf/cli/cli.py:331
+#: dnf/cli/cli.py:336
 msgid "Changelogs for {}"
 msgstr "{}의 변경 사항"
 
-#: dnf/cli/cli.py:364 dnf/cli/cli.py:505 dnf/cli/cli.py:511
+#: dnf/cli/cli.py:369 dnf/cli/cli.py:510 dnf/cli/cli.py:516
 msgid "Obsoleting Packages"
 msgstr "더 이상 사용되지 않는 패키지"
 
-#: dnf/cli/cli.py:393
+#: dnf/cli/cli.py:398
 msgid "No packages marked for distribution synchronization."
 msgstr "배포 동기화가 필요한 패키지가 없습니다."
 
-#: dnf/cli/cli.py:428
+#: dnf/cli/cli.py:424 dnf/cli/commands/group.py:395
+#, python-format
+msgid "No package %s available."
+msgstr "사용 가능한 패키지 %s가 없습니다."
+
+#: dnf/cli/cli.py:433
 msgid "No packages marked for downgrade."
 msgstr "다운 그레이드 대상으로 표시된 패키지가 없습니다."
 
-#: dnf/cli/cli.py:479
+#: dnf/cli/cli.py:484
 msgid "Installed Packages"
 msgstr "설치된 패키지"
 
-#: dnf/cli/cli.py:487
+#: dnf/cli/cli.py:492
 msgid "Available Packages"
 msgstr "사용 가능한 패키지"
 
-#: dnf/cli/cli.py:491
+#: dnf/cli/cli.py:496
 msgid "Autoremove Packages"
 msgstr "패키지 자동 삭제"
 
 # ctx::sourcefile::Systems Navigation Menu
-#: dnf/cli/cli.py:493
+#: dnf/cli/cli.py:498
 msgid "Extra Packages"
 msgstr "추가 패키지"
 
-#: dnf/cli/cli.py:497
+#: dnf/cli/cli.py:502
 msgid "Available Upgrades"
 msgstr "사용 가능한 업그레이드"
 
-#: dnf/cli/cli.py:513
+#: dnf/cli/cli.py:518
 msgid "Recently Added Packages"
 msgstr "최근에 추가 된 패키지"
 
-#: dnf/cli/cli.py:518
+#: dnf/cli/cli.py:522
 msgid "No matching Packages to list"
 msgstr "목록과 일치하는 패키지가 없습니다"
 
-#: dnf/cli/cli.py:599
+#: dnf/cli/cli.py:603
 msgid "No Matches found"
 msgstr "검색 결과가 없습니다"
 
-#: dnf/cli/cli.py:609
-msgid "No transaction ID given"
-msgstr "지정된 트랜잭션 ID가 없습니다"
-
-#: dnf/cli/cli.py:614
-msgid "Not found given transaction ID"
-msgstr "주어진 트랜잭션 ID를 찾을 수 없습니다"
-
-#: dnf/cli/cli.py:623
-msgid "Found more than one transaction ID!"
-msgstr "두 개 이상의 트랜잭션 ID를 찾았습니다!"
-
-#: dnf/cli/cli.py:640
-#, python-format
-msgid "Transaction history is incomplete, before %u."
-msgstr "%u이전 트랜잭션 내역이 불완전합니다."
-
-#: dnf/cli/cli.py:642
-#, python-format
-msgid "Transaction history is incomplete, after %u."
-msgstr "%u이후 트랜잭션 내역이 불완전합니다."
-
-#: dnf/cli/cli.py:689
-msgid "Undoing transaction {}, from {}"
-msgstr "{}에서 {} 트랜잭션 실행을 취소하고 있습니다"
-
-#: dnf/cli/cli.py:769 dnf/cli/commands/shell.py:237
+#: dnf/cli/cli.py:670 dnf/cli/commands/shell.py:237
 #, python-format
 msgid "Unknown repo: '%s'"
 msgstr "알 수 없는 저장소: '%s'"
 
-#: dnf/cli/cli.py:783
+#: dnf/cli/cli.py:684
 #, python-format
 msgid "No repository match: %s"
 msgstr "일치하는 저장소가 없습니다 : %s"
 
-#: dnf/cli/cli.py:817
+#: dnf/cli/cli.py:718
 msgid ""
 "This command has to be run with superuser privileges (under the root user on"
 " most systems)."
 msgstr "이 명령은 수퍼 유저 권한으로 실행해야합니다 (대부분의 시스템에서 root 사용자로 실행)."
 
-#: dnf/cli/cli.py:847
+#: dnf/cli/cli.py:748
 #, python-format
 msgid "No such command: %s. Please use %s --help"
 msgstr "명령을 찾을 수 없습니다: %s . %s --help를 사용하십시오"
 
-#: dnf/cli/cli.py:850
+#: dnf/cli/cli.py:751
 #, python-format, python-brace-format
 msgid ""
 "It could be a {PROG} plugin command, try: \"{prog} install 'dnf-"
 "command(%s)'\""
 msgstr "{PROG} 플러그인 명령일 수 있습니다: \"{prog} 'dnf-command(%s)'\""
 
-#: dnf/cli/cli.py:854
+#: dnf/cli/cli.py:755
 #, python-brace-format
 msgid ""
 "It could be a {prog} plugin command, but loading of plugins is currently "
 "disabled."
 msgstr "{prog} 플러그인 명령일 수 있지만 플러그인 로딩은 현재 비활성화되어 있습니다."
 
-#: dnf/cli/cli.py:912
+#: dnf/cli/cli.py:813
 msgid ""
 "--destdir or --downloaddir must be used with --downloadonly or download or "
 "system-upgrade command."
@@ -746,7 +713,7 @@ msgstr ""
 "--destdir 또는 --downloaddir은 --downloadonly 또는 download 또는 system-upgrade 명령과"
 " 함께 사용해야합니다."
 
-#: dnf/cli/cli.py:918
+#: dnf/cli/cli.py:819
 msgid ""
 "--enable, --set-enabled and --disable, --set-disabled must be used with "
 "config-manager command."
@@ -754,7 +721,7 @@ msgstr ""
 "--enable, --set-enabled 및 --disable, --set-disabled는 config-manager 명령과 함께 "
 "사용해야합니다."
 
-#: dnf/cli/cli.py:1000
+#: dnf/cli/cli.py:901
 msgid ""
 "Warning: Enforcing GPG signature check globally as per active RPM security "
 "policy (see 'gpgcheck' in dnf.conf(5) for how to squelch this message)"
@@ -762,38 +729,38 @@ msgstr ""
 "경고: 활성화된 RPM 보안 정책에 따라 GPG 서명 검사를 전체적으로 시행합니다 (이 메시지를 제거하는 방법은 dnf.conf (5)의"
 " 'gpgcheck' 참조)"
 
-#: dnf/cli/cli.py:1020
+#: dnf/cli/cli.py:921
 msgid "Config file \"{}\" does not exist"
 msgstr "\"{}\" 설정 파일이 존재하지 않습니다"
 
-#: dnf/cli/cli.py:1040
+#: dnf/cli/cli.py:941
 msgid ""
 "Unable to detect release version (use '--releasever' to specify release "
 "version)"
 msgstr "릴리스 버전을 찾을 수 없습니다 ('--releasever'를 사용하여 릴리스 버전을 지정하십시오)"
 
-#: dnf/cli/cli.py:1127 dnf/cli/commands/repoquery.py:471
+#: dnf/cli/cli.py:1028 dnf/cli/commands/repoquery.py:471
 msgid "argument {}: not allowed with argument {}"
 msgstr "인수 {}: 인수 {}과 함께 사용할 수 없습니다"
 
-#: dnf/cli/cli.py:1134
+#: dnf/cli/cli.py:1035
 #, python-format
 msgid "Command \"%s\" already defined"
 msgstr "\"%s\" 명령이 이미 정의되어 있습니다"
 
-#: dnf/cli/cli.py:1154
+#: dnf/cli/cli.py:1055
 msgid "Excludes in dnf.conf: "
 msgstr "dnf.conf에서 제외: "
 
-#: dnf/cli/cli.py:1157
+#: dnf/cli/cli.py:1058
 msgid "Includes in dnf.conf: "
 msgstr "dnf.conf에 포함:. "
 
-#: dnf/cli/cli.py:1160
+#: dnf/cli/cli.py:1061
 msgid "Excludes in repo "
 msgstr "리포지토리에서 제외 "
 
-#: dnf/cli/cli.py:1163
+#: dnf/cli/cli.py:1064
 msgid "Includes in repo "
 msgstr "리포지토리에 포함 "
 
@@ -849,7 +816,7 @@ msgid "show all packages (default)"
 msgstr "모든 패키지 표시 (기본값)"
 
 #: dnf/cli/commands/__init__.py:171 dnf/cli/commands/__init__.py:743
-#: dnf/cli/commands/module.py:351
+#: dnf/cli/commands/module.py:373
 msgid "show only available packages"
 msgstr "사용 가능한 패키지 만 표시"
 
@@ -1174,78 +1141,78 @@ msgstr "그룹 정보를 표시하거나 사용합니다"
 msgid "No group data available for configured repositories."
 msgstr "설정된 리포지토리에 사용할 수있는 그룹 데이터가 없습니다."
 
-#: dnf/cli/commands/group.py:129
+#: dnf/cli/commands/group.py:126
 #, python-format
 msgid "Warning: Group %s does not exist."
 msgstr "경고: %s 그룹이 존재하지 않습니다."
 
-#: dnf/cli/commands/group.py:170
+#: dnf/cli/commands/group.py:167
 msgid "Warning: No groups match:"
 msgstr "경고: 일치하는 그룹이 없습니다"
 
-#: dnf/cli/commands/group.py:182 dnf/cli/commands/group.py:193
-#: dnf/cli/output.py:1226
+#: dnf/cli/commands/group.py:179 dnf/cli/commands/group.py:190
+#: dnf/cli/output.py:1139
 msgid "<name-unset>"
 msgstr "<name-unset>"
 
-#: dnf/cli/commands/group.py:199
+#: dnf/cli/commands/group.py:196
 msgid "Available Environment Groups:"
 msgstr "사용 가능한 환경 그룹 :"
 
-#: dnf/cli/commands/group.py:201
+#: dnf/cli/commands/group.py:198
 msgid "Installed Environment Groups:"
 msgstr "설치된 환경 그룹 :"
 
-#: dnf/cli/commands/group.py:208 dnf/cli/commands/group.py:294
+#: dnf/cli/commands/group.py:205 dnf/cli/commands/group.py:291
 msgid "Installed Groups:"
 msgstr "설치된 그룹 :"
 
-#: dnf/cli/commands/group.py:215 dnf/cli/commands/group.py:301
+#: dnf/cli/commands/group.py:212 dnf/cli/commands/group.py:298
 msgid "Installed Language Groups:"
 msgstr "설치된 언어 그룹 :"
 
-#: dnf/cli/commands/group.py:225 dnf/cli/commands/group.py:308
+#: dnf/cli/commands/group.py:222 dnf/cli/commands/group.py:305
 msgid "Available Groups:"
 msgstr "사용 가능한 그룹 :"
 
-#: dnf/cli/commands/group.py:232 dnf/cli/commands/group.py:315
+#: dnf/cli/commands/group.py:229 dnf/cli/commands/group.py:312
 msgid "Available Language Groups:"
 msgstr "사용 가능한 언어 그룹 :"
 
-#: dnf/cli/commands/group.py:322
+#: dnf/cli/commands/group.py:319
 msgid "include optional packages from group"
 msgstr "그룹의 선택 패키지를 포함합니다"
 
-#: dnf/cli/commands/group.py:325
+#: dnf/cli/commands/group.py:322
 msgid "show also hidden groups"
 msgstr "숨겨진 그룹도 표시합니다"
 
-#: dnf/cli/commands/group.py:327
+#: dnf/cli/commands/group.py:324
 msgid "show only installed groups"
 msgstr "설치된 그룹 만 표시합니다"
 
-#: dnf/cli/commands/group.py:329
+#: dnf/cli/commands/group.py:326
 msgid "show only available groups"
 msgstr "사용 가능한 그룹 만 표시합니다"
 
-#: dnf/cli/commands/group.py:331
+#: dnf/cli/commands/group.py:328
 msgid "show also ID of groups"
 msgstr "그룹 ID 표시"
 
-#: dnf/cli/commands/group.py:333
+#: dnf/cli/commands/group.py:330
 msgid "available subcommands: {} (default), {}"
 msgstr "사용 가능한 하위 명령: {} (기본값), {}"
 
-#: dnf/cli/commands/group.py:337
+#: dnf/cli/commands/group.py:334
 msgid "argument for group subcommand"
 msgstr "그룹 하위 명령의 인수"
 
-#: dnf/cli/commands/group.py:346
+#: dnf/cli/commands/group.py:343
 #, python-format
 msgid "Invalid groups sub-command, use: %s."
 msgstr "그룹 하위 명령이 잘못되었습니다. %s을/를 사용합니다."
 
-#: dnf/cli/commands/group.py:403
+#: dnf/cli/commands/group.py:398
 msgid "Unable to find a mandatory group package."
 msgstr "필수 그룹 패키지를 찾을 수 없습니다."
 
@@ -1295,30 +1262,58 @@ msgstr "주어진 거래 ID가 없습니다."
 msgid "More than one argument given as transaction file name."
 msgstr "트랜잭션 파일을 제거하지 못했습니다. %s"
 
-#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:126
+#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:130
 msgid "No transaction ID or package name given."
 msgstr "트랜잭션 ID 또는 패키지 이름이 없습니다."
 
-#: dnf/cli/commands/history.py:138
+#: dnf/cli/commands/history.py:142
 #, python-format
 msgid "You don't have access to the history DB: %s"
 msgstr "기록 DB에 액세스할 수 없습니다: %s"
 
-#: dnf/cli/commands/history.py:147
+#: dnf/cli/commands/history.py:151
 #, python-format
 msgid ""
 "Cannot undo transaction %s, doing so would result in an inconsistent package"
 " database."
 msgstr "%s 트랜잭션을 취소할 수 없습니다. 취소하면 패키지 데이터베이스가 일치하지 않게 됩니다."
 
-#: dnf/cli/commands/history.py:152
+#: dnf/cli/commands/history.py:156
 #, python-format
 msgid ""
 "Cannot rollback transaction %s, doing so would result in an inconsistent "
 "package database."
 msgstr "%s 트랜잭션을 롤백할 수 없습니다. 이렇게하면 패키지 데이터베이스가 일치하지 않게 됩니다."
 
-#: dnf/cli/commands/history.py:222
+#: dnf/cli/commands/history.py:175
+msgid "No transaction ID given"
+msgstr "지정된 트랜잭션 ID가 없습니다"
+
+#: dnf/cli/commands/history.py:179
+#, fuzzy, python-brace-format
+#| msgid "TransactionItem not found for key: {}"
+msgid "Transaction ID \"{0}\" not found."
+msgstr "{} 키에 대한 TransactionItem을 찾을 수 없습니다"
+
+#: dnf/cli/commands/history.py:185
+msgid "Found more than one transaction ID!"
+msgstr "두 개 이상의 트랜잭션 ID를 찾았습니다!"
+
+#: dnf/cli/commands/history.py:203
+#, python-format
+msgid "Transaction history is incomplete, before %u."
+msgstr "%u이전 트랜잭션 내역이 불완전합니다."
+
+#: dnf/cli/commands/history.py:205
+#, python-format
+msgid "Transaction history is incomplete, after %u."
+msgstr "%u이후 트랜잭션 내역이 불완전합니다."
+
+#: dnf/cli/commands/history.py:256
+msgid "No packages to list"
+msgstr "목록에 패키지가 없습니다"
+
+#: dnf/cli/commands/history.py:279
 msgid ""
 "Invalid transaction ID range definition '{}'.\n"
 "Use '<transaction-id>..<transaction-id>'."
@@ -1326,7 +1321,7 @@ msgstr ""
 "잘못된 트랜잭션 ID 범위 정의 '{}'. \n"
 "'<transaction-id>..<transaction-id>' 사용."
 
-#: dnf/cli/commands/history.py:226
+#: dnf/cli/commands/history.py:283
 msgid ""
 "Can't convert '{}' to transaction ID.\n"
 "Use '<number>', 'last', 'last-<number>'."
@@ -1334,38 +1329,32 @@ msgstr ""
 "'{}'을 (를) 트랜잭션 ID로 변환할 수 없습니다. \n"
 "'<number>', 'last', 'last-<number>' 사용."
 
-#: dnf/cli/commands/history.py:255
+#: dnf/cli/commands/history.py:312
 msgid "No transaction which manipulates package '{}' was found."
 msgstr "패키지 '{}'을 (를) 사용하는 트랜잭션이 없습니다."
 
-#: dnf/cli/commands/history.py:305
-#, python-brace-format
-msgid "Transaction ID \"{id}\" not found."
-msgstr ""
-
-#: dnf/cli/commands/history.py:313
+#: dnf/cli/commands/history.py:357
 msgid "{} exists, overwrite?"
 msgstr ""
 
-#: dnf/cli/commands/history.py:316
+#: dnf/cli/commands/history.py:360
 msgid "Not overwriting {}, exiting."
 msgstr ""
 
-#: dnf/cli/commands/history.py:323
+#: dnf/cli/commands/history.py:367
 #, fuzzy
 #| msgid "Transaction test succeeded."
 msgid "Transaction saved to {}."
 msgstr "트랜잭션 테스트가 완료되었습니다."
 
-#: dnf/cli/commands/history.py:326
+#: dnf/cli/commands/history.py:370
 #, fuzzy
 #| msgid "Errors occurred during transaction."
 msgid "Error storing transaction: {}"
 msgstr "거래 중에 오류가 발생했습니다."
 
-#: dnf/cli/commands/history.py:350
-msgid ""
-"Warning, the following problems occurred while replaying the transaction:"
+#: dnf/cli/commands/history.py:386
+msgid "Warning, the following problems occurred while running a transaction:"
 msgstr ""
 
 #: dnf/cli/commands/install.py:47
@@ -1385,7 +1374,7 @@ msgstr "일치하는 항목을 찾을 수 없습니다"
 msgid "Not a valid rpm file path: %s"
 msgstr "올바른 rpm 파일 경로가 아닙니다. %s"
 
-#: dnf/cli/commands/install.py:167
+#: dnf/cli/commands/install.py:166
 #, python-brace-format
 msgid "There are following alternatives for \"{0}\": {1}"
 msgstr "다음은 “{0}\"의 대안입니다. {1}"
@@ -1428,7 +1417,7 @@ msgid "%s marked as group installed."
 msgstr "%s은/는 그룹이 설치한 것으로 표시되었습니다"
 
 #: dnf/cli/commands/mark.py:85 dnf/cli/commands/shell.py:129
-#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:279
+#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:282
 msgid "Error:"
 msgstr "오류:"
 
@@ -1484,42 +1473,46 @@ msgid "Package {} belongs to multiple modules, skipping"
 msgstr "{} 패키지는 여러 모듈에 속합니다. 건너 뛰기"
 
 #: dnf/cli/commands/module.py:277
+msgid "switch a module to a stream and distrosync rpm packages"
+msgstr ""
+
+#: dnf/cli/commands/module.py:299
 msgid "list modular packages"
 msgstr "모듈 패키지 목록"
 
-#: dnf/cli/commands/module.py:292
+#: dnf/cli/commands/module.py:314
 msgid "list packages belonging to a module"
 msgstr "모듈에 속하는 패키지를 나열하십시오"
 
-#: dnf/cli/commands/module.py:327
+#: dnf/cli/commands/module.py:349
 msgid "Interact with Modules."
 msgstr "모듈과 상호 작용합니다."
 
-#: dnf/cli/commands/module.py:340
+#: dnf/cli/commands/module.py:362
 msgid "show only enabled modules"
 msgstr "활성화된 모듈 만 표시"
 
-#: dnf/cli/commands/module.py:343
+#: dnf/cli/commands/module.py:365
 msgid "show only disabled modules"
 msgstr "비활성화된 모듈 만 표시"
 
-#: dnf/cli/commands/module.py:346
+#: dnf/cli/commands/module.py:368
 msgid "show only installed modules or packages"
 msgstr "설치된 모듈 또는 패키지 만 표시"
 
-#: dnf/cli/commands/module.py:349
+#: dnf/cli/commands/module.py:371
 msgid "show profile content"
 msgstr "프로파일 내용 표시"
 
-#: dnf/cli/commands/module.py:354
+#: dnf/cli/commands/module.py:376
 msgid "remove all modular packages"
 msgstr "모든 모듈 패키지 삭제"
 
-#: dnf/cli/commands/module.py:364
+#: dnf/cli/commands/module.py:386
 msgid "Module specification"
 msgstr "모듈 사양"
 
-#: dnf/cli/commands/module.py:386
+#: dnf/cli/commands/module.py:408
 msgid "{} {} {}: too few arguments"
 msgstr "{} {} {}: 인수가 부족합니다"
 
@@ -2004,22 +1997,22 @@ msgstr "KEYWORD"
 msgid "Keyword to search for"
 msgstr "검색 키워드"
 
-#: dnf/cli/commands/search.py:61 dnf/cli/output.py:506
+#: dnf/cli/commands/search.py:61 dnf/cli/output.py:460
 msgctxt "long"
 msgid "Name"
 msgstr "이름"
 
-#: dnf/cli/commands/search.py:62 dnf/cli/output.py:559
+#: dnf/cli/commands/search.py:62 dnf/cli/output.py:513
 msgctxt "long"
 msgid "Summary"
 msgstr "요약"
 
-#: dnf/cli/commands/search.py:63 dnf/cli/output.py:569
+#: dnf/cli/commands/search.py:63 dnf/cli/output.py:523
 msgctxt "long"
 msgid "Description"
 msgstr "설명"
 
-#: dnf/cli/commands/search.py:64 dnf/cli/output.py:562
+#: dnf/cli/commands/search.py:64 dnf/cli/output.py:516
 msgid "URL"
 msgstr "URL"
 
@@ -2162,16 +2155,16 @@ msgstr ""
 "run                      트랜잭션 세트 분석 및 실행\n"
 "exit (or quit)           쉘 종료"
 
-#: dnf/cli/commands/shell.py:259
+#: dnf/cli/commands/shell.py:262
 #, python-format
 msgid "Error: Cannot open %s for reading"
 msgstr "오류: 읽기 전용 %s를 열 수 없습니다"
 
-#: dnf/cli/commands/shell.py:281 dnf/cli/main.py:187
+#: dnf/cli/commands/shell.py:284 dnf/cli/main.py:187
 msgid "Complete!"
 msgstr "완료되었습니다!"
 
-#: dnf/cli/commands/shell.py:291
+#: dnf/cli/commands/shell.py:294
 msgid "Leaving Shell"
 msgstr "쉘 나가기"
 
@@ -2364,8 +2357,8 @@ msgstr "파일"
 
 # translation auto-copied from project subscription-manager, version 1.11.X,
 # document keys
-#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1499
-#: dnf/cli/output.py:1772 dnf/cli/output.py:1774
+#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1652
+#: dnf/cli/output.py:1654 dnf/util.py:591
 msgid "Installed"
 msgstr "설치됨"
 
@@ -2688,13 +2681,13 @@ msgstr "‘%s' 인수를 인코딩할 수 없습니다: %s"
 #. Translators: This is abbreviated 'Name'. Should be no longer
 #. than 12 characters. You can use the full version if it is short
 #. enough in your language.
-#: dnf/cli/output.py:505
+#: dnf/cli/output.py:459
 msgctxt "short"
 msgid "Name"
 msgstr "이름"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:511
+#: dnf/cli/output.py:465
 msgid "Epoch"
 msgstr "기간"
 
@@ -2702,38 +2695,38 @@ msgstr "기간"
 #. use the full (unabbreviated) term 'Version' if you think that
 #. the translation to your language is not too long and will
 #. always fit to limited space.
-#: dnf/cli/output.py:512 dnf/cli/output.py:1335
+#: dnf/cli/output.py:466 dnf/cli/output.py:1248
 msgctxt "short"
 msgid "Version"
 msgstr "버전"
 
 #. Translators: This is the full (unabbreviated) term 'Version'.
-#: dnf/cli/output.py:513 dnf/cli/output.py:1337
+#: dnf/cli/output.py:467 dnf/cli/output.py:1250
 msgctxt "long"
 msgid "Version"
 msgstr "버전"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:516
+#: dnf/cli/output.py:470
 msgid "Release"
 msgstr "릴리즈"
 
 #. Translators: This is abbreviated 'Architecture', used when
 #. we have not enough space to display the full word.
-#: dnf/cli/output.py:517 dnf/cli/output.py:1326
+#: dnf/cli/output.py:471 dnf/cli/output.py:1239
 msgctxt "short"
 msgid "Arch"
 msgstr "아키텍처"
 
 #. Translators: This is the full word 'Architecture', used when
 #. we have enough space.
-#: dnf/cli/output.py:518 dnf/cli/output.py:1329
+#: dnf/cli/output.py:472 dnf/cli/output.py:1242
 msgctxt "long"
 msgid "Architecture"
 msgstr "아키텍처"
 
 #. Translators: This is the full (unabbreviated) term 'Size'.
-#: dnf/cli/output.py:520 dnf/cli/output.py:1352
+#: dnf/cli/output.py:474 dnf/cli/output.py:1265
 msgctxt "long"
 msgid "Size"
 msgstr "크기"
@@ -2742,32 +2735,32 @@ msgstr "크기"
 #. not be longer than 5 characters. If the term 'Size' in your
 #. language is not longer than 5 characters then you can use it
 #. unabbreviated.
-#: dnf/cli/output.py:520 dnf/cli/output.py:1350
+#: dnf/cli/output.py:474 dnf/cli/output.py:1263
 msgctxt "short"
 msgid "Size"
 msgstr "크기"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:524
+#: dnf/cli/output.py:478
 msgid "Source"
 msgstr "소스"
 
 #. Translators: This is abbreviated 'Repository', used when
 #. we have not enough space to display the full word.
-#: dnf/cli/output.py:525 dnf/cli/output.py:1341
+#: dnf/cli/output.py:479 dnf/cli/output.py:1254
 msgctxt "short"
 msgid "Repo"
 msgstr "리포지터리"
 
 #. Translators: This is the full word 'Repository', used when
 #. we have enough space.
-#: dnf/cli/output.py:526 dnf/cli/output.py:1344
+#: dnf/cli/output.py:480 dnf/cli/output.py:1257
 msgctxt "long"
 msgid "Repository"
 msgstr "리포지터리"
 
 #. Translators: This message should be no longer than 12 chars.
-#: dnf/cli/output.py:533
+#: dnf/cli/output.py:487
 msgid "From repo"
 msgstr "리포지터리에서"
 
@@ -2775,314 +2768,310 @@ msgstr "리포지터리에서"
 #. print(_("Committer   : %s") % ucd(pkg.committer))
 #. print(_("Committime  : %s") % time.ctime(pkg.committime))
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:539
+#: dnf/cli/output.py:493
 msgid "Packager"
 msgstr "패키지 프로그램"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:541
+#: dnf/cli/output.py:495
 msgid "Buildtime"
 msgstr "빌드 시간"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:545
+#: dnf/cli/output.py:499
 msgid "Install time"
 msgstr "설치 시간"
 
 #. Translators: This message should be no longer than 12 chars.
-#: dnf/cli/output.py:554
+#: dnf/cli/output.py:508
 msgid "Installed by"
 msgstr "설치자"
 
 #. Translators: This is abbreviated 'Summary'. Should be no longer
 #. than 12 characters. You can use the full version if it is short
 #. enough in your language.
-#: dnf/cli/output.py:558
+#: dnf/cli/output.py:512
 msgctxt "short"
 msgid "Summary"
 msgstr "요약"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:564
+#: dnf/cli/output.py:518
 msgid "License"
 msgstr "라이센스"
 
 #. Translators: This is abbreviated 'Description'. Should be no longer
 #. than 12 characters. You can use the full version if it is short
 #. enough in your language.
-#: dnf/cli/output.py:568
+#: dnf/cli/output.py:522
 msgctxt "short"
 msgid "Description"
 msgstr "설명"
 
-#: dnf/cli/output.py:695
-msgid "No packages to list"
-msgstr "목록에 패키지가 없습니다"
-
-#: dnf/cli/output.py:706
+#: dnf/cli/output.py:650
 msgid "y"
 msgstr "y"
 
-#: dnf/cli/output.py:706
+#: dnf/cli/output.py:650
 msgid "yes"
 msgstr "예"
 
-#: dnf/cli/output.py:707
+#: dnf/cli/output.py:651
 msgid "n"
 msgstr "n"
 
-#: dnf/cli/output.py:707
+#: dnf/cli/output.py:651
 msgid "no"
 msgstr "아니요"
 
-#: dnf/cli/output.py:711
+#: dnf/cli/output.py:655
 msgid "Is this ok [y/N]: "
 msgstr "정말입니까 [y/N]: "
 
-#: dnf/cli/output.py:715
+#: dnf/cli/output.py:659
 msgid "Is this ok [Y/n]: "
 msgstr "정말입니까 [Y/n]: "
 
-#: dnf/cli/output.py:795
+#: dnf/cli/output.py:739
 #, python-format
 msgid "Group: %s"
 msgstr "그룹 %s"
 
-#: dnf/cli/output.py:799
+#: dnf/cli/output.py:743
 #, python-format
 msgid " Group-Id: %s"
 msgstr " 그룹 ID: %s"
 
-#: dnf/cli/output.py:801 dnf/cli/output.py:840
+#: dnf/cli/output.py:745 dnf/cli/output.py:784
 #, python-format
 msgid " Description: %s"
 msgstr " 설명: %s"
 
-#: dnf/cli/output.py:803
+#: dnf/cli/output.py:747
 #, python-format
 msgid " Language: %s"
 msgstr " 언어: %s"
 
-#: dnf/cli/output.py:806
+#: dnf/cli/output.py:750
 msgid " Mandatory Packages:"
 msgstr " 필수 패키지 :"
 
-#: dnf/cli/output.py:807
+#: dnf/cli/output.py:751
 msgid " Default Packages:"
 msgstr " 기본 패키지 :"
 
-#: dnf/cli/output.py:808
+#: dnf/cli/output.py:752
 msgid " Optional Packages:"
 msgstr " 선택적인 패키지 :"
 
-#: dnf/cli/output.py:809
+#: dnf/cli/output.py:753
 msgid " Conditional Packages:"
 msgstr " 추가 가능 패키지 :"
 
-#: dnf/cli/output.py:834
+#: dnf/cli/output.py:778
 #, python-format
 msgid "Environment Group: %s"
 msgstr "환경 그룹 : %s"
 
-#: dnf/cli/output.py:837
+#: dnf/cli/output.py:781
 #, python-format
 msgid " Environment-Id: %s"
 msgstr " 환경 -ID : %s"
 
-#: dnf/cli/output.py:843
+#: dnf/cli/output.py:787
 msgid " Mandatory Groups:"
 msgstr " 필수 그룹 :"
 
-#: dnf/cli/output.py:844
+#: dnf/cli/output.py:788
 msgid " Optional Groups:"
 msgstr " 선택적인 그룹 :"
 
-#: dnf/cli/output.py:865
+#: dnf/cli/output.py:809
 msgid "Matched from:"
 msgstr "일치하는 항목 :"
 
-#: dnf/cli/output.py:879
+#: dnf/cli/output.py:823
 #, python-format
 msgid "Filename    : %s"
 msgstr "파일 이름 : %s"
 
-#: dnf/cli/output.py:904
+#: dnf/cli/output.py:848
 #, python-format
 msgid "Repo        : %s"
 msgstr "리포지토리      : %s"
 
-#: dnf/cli/output.py:913
+#: dnf/cli/output.py:857
 msgid "Description : "
 msgstr "설명 : "
 
-#: dnf/cli/output.py:917
+#: dnf/cli/output.py:861
 #, python-format
 msgid "URL         : %s"
 msgstr "URL         : %s"
 
-#: dnf/cli/output.py:921
+#: dnf/cli/output.py:865
 #, python-format
 msgid "License     : %s"
 msgstr "라이센스    : %s"
 
-#: dnf/cli/output.py:927
+#: dnf/cli/output.py:871
 #, python-format
 msgid "Provide    : %s"
 msgstr "제공        : %s"
 
-#: dnf/cli/output.py:947
+#: dnf/cli/output.py:891
 #, python-format
 msgid "Other       : %s"
 msgstr "기타       : %s"
 
-#: dnf/cli/output.py:996
+#: dnf/cli/output.py:940
 msgid "There was an error calculating total download size"
 msgstr "총 다운로드 크기를 계산하는 중에 오류가 발생했습니다"
 
-#: dnf/cli/output.py:1002
+#: dnf/cli/output.py:946
 #, python-format
 msgid "Total size: %s"
 msgstr "전체 크기: %s"
 
-#: dnf/cli/output.py:1005
+#: dnf/cli/output.py:949
 #, python-format
 msgid "Total download size: %s"
 msgstr "총 다운로드 크기 : %s"
 
-#: dnf/cli/output.py:1008
+#: dnf/cli/output.py:952
 #, python-format
 msgid "Installed size: %s"
 msgstr "설치된 크기 : %s"
 
-#: dnf/cli/output.py:1026
+#: dnf/cli/output.py:970
 msgid "There was an error calculating installed size"
 msgstr "설치된 크기를 계산하는 동안 오류가 발생했습니다"
 
-#: dnf/cli/output.py:1030
+#: dnf/cli/output.py:974
 #, python-format
 msgid "Freed space: %s"
 msgstr "사용 가능한 공간 : %s"
 
-#: dnf/cli/output.py:1039
+#: dnf/cli/output.py:983
 msgid "Marking packages as installed by the group:"
 msgstr "그룹에 설치된 패키지 표시:"
 
-#: dnf/cli/output.py:1046
+#: dnf/cli/output.py:990
 msgid "Marking packages as removed by the group:"
 msgstr "그룹에 의해 제거된 패키지 표시:"
 
-#: dnf/cli/output.py:1056
+#: dnf/cli/output.py:1000
 msgid "Group"
 msgstr "그룹"
 
-#: dnf/cli/output.py:1056
+#: dnf/cli/output.py:1000
 msgid "Packages"
 msgstr "패키지"
 
-#: dnf/cli/output.py:1133
+#: dnf/cli/output.py:1046
 msgid "Installing group/module packages"
 msgstr "그룹 / 모듈 패키지 설치"
 
-#: dnf/cli/output.py:1134
+#: dnf/cli/output.py:1047
 msgid "Installing group packages"
 msgstr "그룹 패키지 설치"
 
 #. TRANSLATORS: This is for a list of packages to be installed.
-#: dnf/cli/output.py:1138
+#: dnf/cli/output.py:1051
 msgctxt "summary"
 msgid "Installing"
 msgstr "설치 중"
 
 #. TRANSLATORS: This is for a list of packages to be upgraded.
-#: dnf/cli/output.py:1140
+#: dnf/cli/output.py:1053
 msgctxt "summary"
 msgid "Upgrading"
 msgstr "업그레이드 중"
 
 #. TRANSLATORS: This is for a list of packages to be reinstalled.
-#: dnf/cli/output.py:1142
+#: dnf/cli/output.py:1055
 msgctxt "summary"
 msgid "Reinstalling"
 msgstr "재설치 중"
 
-#: dnf/cli/output.py:1144
+#: dnf/cli/output.py:1057
 msgid "Installing dependencies"
 msgstr "종속 패키지 설치 중"
 
-#: dnf/cli/output.py:1145
+#: dnf/cli/output.py:1058
 msgid "Installing weak dependencies"
 msgstr "취약한 종속 패키지 설치 중"
 
 #. TRANSLATORS: This is for a list of packages to be removed.
 # translation auto-copied from project subscription-manager, version 1.11.X,
 # document keys
-#: dnf/cli/output.py:1147
+#: dnf/cli/output.py:1060
 msgid "Removing"
 msgstr "삭제 중"
 
-#: dnf/cli/output.py:1148
+#: dnf/cli/output.py:1061
 msgid "Removing dependent packages"
 msgstr "종속 패키지 제거"
 
-#: dnf/cli/output.py:1149
+#: dnf/cli/output.py:1062
 msgid "Removing unused dependencies"
 msgstr "사용하지 않는 종속 패키지 제거"
 
 #. TRANSLATORS: This is for a list of packages to be downgraded.
-#: dnf/cli/output.py:1151
+#: dnf/cli/output.py:1064
 msgctxt "summary"
 msgid "Downgrading"
 msgstr "다운그레이드 중"
 
-#: dnf/cli/output.py:1176
+#: dnf/cli/output.py:1089
 msgid "Installing module profiles"
 msgstr "모듈 프로파일 설치"
 
-#: dnf/cli/output.py:1185
+#: dnf/cli/output.py:1098
 msgid "Disabling module profiles"
 msgstr "모듈 프로파일 비활성화"
 
-#: dnf/cli/output.py:1194
+#: dnf/cli/output.py:1107
 msgid "Enabling module streams"
 msgstr "모듈 스트림 활성화"
 
-#: dnf/cli/output.py:1202
+#: dnf/cli/output.py:1115
 msgid "Switching module streams"
 msgstr "모듈 스트림 전환"
 
-#: dnf/cli/output.py:1210
+#: dnf/cli/output.py:1123
 msgid "Disabling modules"
 msgstr "모듈 비활성화"
 
-#: dnf/cli/output.py:1218
+#: dnf/cli/output.py:1131
 msgid "Resetting modules"
 msgstr "모듈 재설정"
 
-#: dnf/cli/output.py:1230
+#: dnf/cli/output.py:1143
 msgid "Installing Environment Groups"
 msgstr "환경 그룹 설치"
 
-#: dnf/cli/output.py:1237
+#: dnf/cli/output.py:1150
 msgid "Upgrading Environment Groups"
 msgstr "환경 그룹 업그레이드"
 
-#: dnf/cli/output.py:1244
+#: dnf/cli/output.py:1157
 msgid "Removing Environment Groups"
 msgstr "환경 그룹 제거"
 
-#: dnf/cli/output.py:1251
+#: dnf/cli/output.py:1164
 msgid "Installing Groups"
 msgstr "그룹 설치"
 
-#: dnf/cli/output.py:1258
+#: dnf/cli/output.py:1171
 msgid "Upgrading Groups"
 msgstr "그룹 업그레이드"
 
-#: dnf/cli/output.py:1265
+#: dnf/cli/output.py:1178
 msgid "Removing Groups"
 msgstr "그룹 제거"
 
-#: dnf/cli/output.py:1281
+#: dnf/cli/output.py:1194
 #, python-format
 msgid ""
 "Skipping packages with conflicts:\n"
@@ -3091,12 +3080,12 @@ msgstr ""
 "충돌 패키지 건너 뛰기 :\n"
 "(업그레이드를 강제하려면 명령행에 '%s' 추가)"
 
-#: dnf/cli/output.py:1291
+#: dnf/cli/output.py:1204
 #, python-format
 msgid "Skipping packages with broken dependencies%s"
 msgstr "손상된 종속성이 있는 %s 패키지 건너 뛰기"
 
-#: dnf/cli/output.py:1295
+#: dnf/cli/output.py:1208
 msgid " or part of a group"
 msgstr " 또는 그룹의 일부"
 
@@ -3104,22 +3093,22 @@ msgstr " 또는 그룹의 일부"
 #. use the full (unabbreviated) term 'Package' if you think that
 #. the translation to your language is not too long and will
 #. always fit to limited space.
-#: dnf/cli/output.py:1320
+#: dnf/cli/output.py:1233
 msgctxt "short"
 msgid "Package"
 msgstr "패키지"
 
 #. Translators: This is the full (unabbreviated) term 'Package'.
-#: dnf/cli/output.py:1322
+#: dnf/cli/output.py:1235
 msgctxt "long"
 msgid "Package"
 msgstr "패키지"
 
-#: dnf/cli/output.py:1371
+#: dnf/cli/output.py:1284
 msgid "replacing"
 msgstr "교체"
 
-#: dnf/cli/output.py:1378
+#: dnf/cli/output.py:1291
 #, python-format
 msgid ""
 "\n"
@@ -3131,292 +3120,276 @@ msgstr ""
 "%s\n"
 
 #. TODO: remove
-#: dnf/cli/output.py:1383 dnf/cli/output.py:1932 dnf/cli/output.py:1933
+#: dnf/cli/output.py:1296 dnf/cli/output.py:1812 dnf/cli/output.py:1813
 msgid "Install"
 msgstr "설치"
 
 # ctx::sourcefile::Navigation Menu
-#: dnf/cli/output.py:1387 dnf/cli/output.py:1941
+#: dnf/cli/output.py:1300 dnf/cli/output.py:1821
 msgid "Upgrade"
 msgstr "업그레이드"
 
-#: dnf/cli/output.py:1388
+#: dnf/cli/output.py:1301
 msgid "Remove"
 msgstr "삭제"
 
-#: dnf/cli/output.py:1390 dnf/cli/output.py:1939
+#: dnf/cli/output.py:1303 dnf/cli/output.py:1819
 msgid "Downgrade"
 msgstr "다운 그레이드"
 
-#: dnf/cli/output.py:1391
+#: dnf/cli/output.py:1304
 msgid "Skip"
 msgstr "건너뛰기"
 
-#: dnf/cli/output.py:1400 dnf/cli/output.py:1416
+#: dnf/cli/output.py:1313 dnf/cli/output.py:1329
 msgid "Package"
 msgid_plural "Packages"
 msgstr[0] "패키지"
 
-#: dnf/cli/output.py:1418
+#: dnf/cli/output.py:1331
 msgid "Dependent package"
 msgid_plural "Dependent packages"
 msgstr[0] "종속 패키지"
 
-#: dnf/cli/output.py:1497 dnf/cli/output.py:1773 dnf/cli/output.py:1942
-msgid "Upgraded"
-msgstr "업그레이드 됨"
-
-#: dnf/cli/output.py:1498 dnf/cli/output.py:1773 dnf/cli/output.py:1940
-msgid "Downgraded"
-msgstr "다운 그레이드"
-
-#: dnf/cli/output.py:1503
-msgid "Reinstalled"
-msgstr "다시 설치됨"
-
-#: dnf/cli/output.py:1504
-msgid "Skipped"
-msgstr "건너 뛰기됨"
-
-#: dnf/cli/output.py:1505
-msgid "Removed"
-msgstr "제거됨"
-
-#: dnf/cli/output.py:1508
-msgid "Failed"
-msgstr "실패하였습니다"
-
 # auto translated by TM merge from project: RHOSP Director Installation and
 # Usage , version: 11-Korean, DocId: master
-#: dnf/cli/output.py:1559
+#: dnf/cli/output.py:1439
 msgid "Total"
 msgstr "합계"
 
-#: dnf/cli/output.py:1587
+#: dnf/cli/output.py:1467
 msgid "<unset>"
 msgstr "<unset>"
 
-#: dnf/cli/output.py:1588
+#: dnf/cli/output.py:1468
 msgid "System"
 msgstr "시스템"
 
-#: dnf/cli/output.py:1638
+#: dnf/cli/output.py:1518
 msgid "Command line"
 msgstr "명령행"
 
 #. TRANSLATORS: user names who executed transaction in history command output
-#: dnf/cli/output.py:1649
+#: dnf/cli/output.py:1529
 msgid "User name"
 msgstr "사용자 이름"
 
 # translation auto-copied from project subscription-manager, version 1.11.X,
 # document keys
-#: dnf/cli/output.py:1651
+#: dnf/cli/output.py:1531
 msgid "ID"
 msgstr "ID"
 
-#: dnf/cli/output.py:1653
+#: dnf/cli/output.py:1533
 msgid "Date and time"
 msgstr "날짜와 시간"
 
-#: dnf/cli/output.py:1654
+#: dnf/cli/output.py:1534
 msgid "Action(s)"
 msgstr "작업"
 
-#: dnf/cli/output.py:1655
+#: dnf/cli/output.py:1535
 msgid "Altered"
 msgstr "변경됨"
 
-#: dnf/cli/output.py:1698
+#: dnf/cli/output.py:1578
 msgid "No transactions"
 msgstr "트랜잭션 없음"
 
-#: dnf/cli/output.py:1699 dnf/cli/output.py:1715
+#: dnf/cli/output.py:1579 dnf/cli/output.py:1595
 msgid "Failed history info"
 msgstr "실패 기록 정보"
 
-#: dnf/cli/output.py:1714
+#: dnf/cli/output.py:1594
 msgid "No transaction ID, or package, given"
 msgstr "트랜잭션 ID 또는 패키지가 지정되지 않았습니다"
 
-#: dnf/cli/output.py:1772
+#: dnf/cli/output.py:1652
 msgid "Erased"
 msgstr "삭제됨"
 
-#: dnf/cli/output.py:1774
+#: dnf/cli/output.py:1653 dnf/cli/output.py:1820 dnf/util.py:590
+msgid "Downgraded"
+msgstr "다운 그레이드"
+
+#: dnf/cli/output.py:1653 dnf/cli/output.py:1822 dnf/util.py:589
+msgid "Upgraded"
+msgstr "업그레이드 됨"
+
+#: dnf/cli/output.py:1654
 msgid "Not installed"
 msgstr "설치되지 않음"
 
-#: dnf/cli/output.py:1775
+#: dnf/cli/output.py:1655
 msgid "Newer"
 msgstr "최신"
 
-#: dnf/cli/output.py:1775
+#: dnf/cli/output.py:1655
 msgid "Older"
 msgstr "이전"
 
-#: dnf/cli/output.py:1823 dnf/cli/output.py:1825
+#: dnf/cli/output.py:1703 dnf/cli/output.py:1705
 msgid "Transaction ID :"
 msgstr "트랜잭션 ID :"
 
-#: dnf/cli/output.py:1828
+#: dnf/cli/output.py:1708
 msgid "Begin time     :"
 msgstr "시작 시간 :"
 
-#: dnf/cli/output.py:1831 dnf/cli/output.py:1833
+#: dnf/cli/output.py:1711 dnf/cli/output.py:1713
 msgid "Begin rpmdb    :"
 msgstr "rpmdb 시작 :"
 
-#: dnf/cli/output.py:1839
+#: dnf/cli/output.py:1719
 #, python-format
 msgid "(%u seconds)"
 msgstr "(%u 초)"
 
-#: dnf/cli/output.py:1841
+#: dnf/cli/output.py:1721
 #, python-format
 msgid "(%u minutes)"
 msgstr "(%u 분)"
 
-#: dnf/cli/output.py:1843
+#: dnf/cli/output.py:1723
 #, python-format
 msgid "(%u hours)"
 msgstr "(%u 시간)"
 
-#: dnf/cli/output.py:1845
+#: dnf/cli/output.py:1725
 #, python-format
 msgid "(%u days)"
 msgstr "(%u 일)"
 
-#: dnf/cli/output.py:1846
+#: dnf/cli/output.py:1726
 msgid "End time       :"
 msgstr "종료 시간 :"
 
-#: dnf/cli/output.py:1849 dnf/cli/output.py:1851
+#: dnf/cli/output.py:1729 dnf/cli/output.py:1731
 msgid "End rpmdb      :"
 msgstr "rpmdb 종료:"
 
-#: dnf/cli/output.py:1858 dnf/cli/output.py:1860
+#: dnf/cli/output.py:1738 dnf/cli/output.py:1740
 msgid "User           :"
 msgstr "사용자            :"
 
-#: dnf/cli/output.py:1864 dnf/cli/output.py:1871
+#: dnf/cli/output.py:1744 dnf/cli/output.py:1751
 msgid "Aborted"
 msgstr "중지됨"
 
-#: dnf/cli/output.py:1864 dnf/cli/output.py:1867 dnf/cli/output.py:1869
-#: dnf/cli/output.py:1871 dnf/cli/output.py:1873 dnf/cli/output.py:1875
+#: dnf/cli/output.py:1744 dnf/cli/output.py:1747 dnf/cli/output.py:1749
+#: dnf/cli/output.py:1751 dnf/cli/output.py:1753 dnf/cli/output.py:1755
 msgid "Return-Code    :"
 msgstr "반환 코드 :"
 
-#: dnf/cli/output.py:1867 dnf/cli/output.py:1875
+#: dnf/cli/output.py:1747 dnf/cli/output.py:1755
 msgid "Success"
 msgstr "성공"
 
-#: dnf/cli/output.py:1869
+#: dnf/cli/output.py:1749
 msgid "Failures:"
 msgstr "실패 :"
 
-#: dnf/cli/output.py:1873
+#: dnf/cli/output.py:1753
 msgid "Failure:"
 msgstr "실패:"
 
-#: dnf/cli/output.py:1883 dnf/cli/output.py:1885
+#: dnf/cli/output.py:1763 dnf/cli/output.py:1765
 msgid "Releasever     :"
 msgstr "Releasever     :"
 
-#: dnf/cli/output.py:1890 dnf/cli/output.py:1892
+#: dnf/cli/output.py:1770 dnf/cli/output.py:1772
 msgid "Command Line   :"
 msgstr "명령 줄 :"
 
-#: dnf/cli/output.py:1897 dnf/cli/output.py:1899
+#: dnf/cli/output.py:1777 dnf/cli/output.py:1779
 msgid "Comment        :"
 msgstr "댓글 :"
 
-#: dnf/cli/output.py:1903
+#: dnf/cli/output.py:1783
 msgid "Transaction performed with:"
 msgstr "실행된 트랜잭션:"
 
-#: dnf/cli/output.py:1912
+#: dnf/cli/output.py:1792
 msgid "Packages Altered:"
 msgstr "변경된 패키지 :"
 
-#: dnf/cli/output.py:1918
+#: dnf/cli/output.py:1798
 msgid "Scriptlet output:"
 msgstr "Scriptlet 출력 :"
 
-#: dnf/cli/output.py:1925
+#: dnf/cli/output.py:1805
 msgid "Errors:"
 msgstr "오류 :"
 
-#: dnf/cli/output.py:1934
+#: dnf/cli/output.py:1814
 msgid "Dep-Install"
 msgstr "Dep-Install"
 
-#: dnf/cli/output.py:1935
+#: dnf/cli/output.py:1815
 msgid "Obsoleted"
 msgstr "사용 중지됨"
 
-#: dnf/cli/output.py:1936 dnf/transaction.py:84 dnf/transaction.py:85
+#: dnf/cli/output.py:1816 dnf/transaction.py:84 dnf/transaction.py:85
 msgid "Obsoleting"
 msgstr "사용 중지"
 
-#: dnf/cli/output.py:1937
+#: dnf/cli/output.py:1817
 msgid "Erase"
 msgstr "삭제"
 
-#: dnf/cli/output.py:1938
+#: dnf/cli/output.py:1818
 msgid "Reinstall"
 msgstr "재설치"
 
-#: dnf/cli/output.py:2016
+#: dnf/cli/output.py:1892
 #, python-format
 msgid "---> Package %s.%s %s will be installed"
 msgstr "---> 패키지 %s.%s %s이/가 설치됩니다"
 
-#: dnf/cli/output.py:2018
+#: dnf/cli/output.py:1894
 #, python-format
 msgid "---> Package %s.%s %s will be an upgrade"
 msgstr "---> 패키지 %s.%s %s이/가 업그레이드됩니다"
 
-#: dnf/cli/output.py:2020
+#: dnf/cli/output.py:1896
 #, python-format
 msgid "---> Package %s.%s %s will be erased"
 msgstr "---> 패키지 %s.%s %s이/가 제거됩니다"
 
-#: dnf/cli/output.py:2022
+#: dnf/cli/output.py:1898
 #, python-format
 msgid "---> Package %s.%s %s will be reinstalled"
 msgstr "---> 패키지 %s.%s %s이/가 다시 설치됩니다"
 
-#: dnf/cli/output.py:2024
+#: dnf/cli/output.py:1900
 #, python-format
 msgid "---> Package %s.%s %s will be a downgrade"
 msgstr "---> 패키지 %s.%s %s이/가 다운그레이드됩니다"
 
-#: dnf/cli/output.py:2026
+#: dnf/cli/output.py:1902
 #, python-format
 msgid "---> Package %s.%s %s will be obsoleting"
 msgstr "---> 패키지 %s.%s %s이/가 더 이상 사용되지 않습니다"
 
-#: dnf/cli/output.py:2028
+#: dnf/cli/output.py:1904
 #, python-format
 msgid "---> Package %s.%s %s will be upgraded"
 msgstr "---> 패키지 %s.%s %s이/가 업그레이드됩니다"
 
-#: dnf/cli/output.py:2030
+#: dnf/cli/output.py:1906
 #, python-format
 msgid "---> Package %s.%s %s will be obsoleted"
 msgstr "---> 패키지 %s.%s %s이/가 더 이상 사용되지 않습니다"
 
-#: dnf/cli/output.py:2039
+#: dnf/cli/output.py:1915
 msgid "--> Starting dependency resolution"
 msgstr "-> 종석성 해결 시작"
 
-#: dnf/cli/output.py:2044
+#: dnf/cli/output.py:1919
 msgid "--> Finished dependency resolution"
 msgstr "-> 종속성 해결 완료"
 
-#: dnf/cli/output.py:2058 dnf/crypto.py:132
+#: dnf/cli/output.py:1933 dnf/crypto.py:132
 #, python-format
 msgid ""
 "Importing GPG key 0x%s:\n"
@@ -3503,7 +3476,7 @@ msgstr "모듈 또는 그룹 '%s'이/가 존재하지 않습니다."
 msgid "Environment id '%s' does not exist."
 msgstr "환경 '%s'이 설치되지 않았습니다."
 
-#: dnf/comps.py:622 dnf/transaction_sr.py:443 dnf/transaction_sr.py:453
+#: dnf/comps.py:622 dnf/transaction_sr.py:477 dnf/transaction_sr.py:487
 #, fuzzy, python-format
 #| msgid "Environment '%s' is not installed."
 msgid "Environment id '%s' is not installed."
@@ -3614,6 +3587,11 @@ msgstr "repo %s: 0x%s을/를 이미 가져왔습니다"
 msgid "repo %s: imported key 0x%s."
 msgstr "repo %s: 0x%s 키를 가져왔습니다."
 
+#: dnf/crypto.py:177
+#, python-format
+msgid "retrieving repo key for %s unencrypted from %s"
+msgstr ""
+
 #: dnf/db/group.py:293
 msgid ""
 "No available modular metadata for modular package '{}', it cannot be "
@@ -3698,7 +3676,7 @@ msgid "Modular dependency problem with Defaults:"
 msgid_plural "Modular dependency problems with Defaults:"
 msgstr[0] "기본값의 모듈 종속성 문제 :"
 
-#: dnf/exceptions.py:131 dnf/module/module_base.py:686
+#: dnf/exceptions.py:131 dnf/module/module_base.py:841
 msgid "Modular dependency problem:"
 msgid_plural "Modular dependency problems:"
 msgstr[0] "모듈 종속성 문제 :"
@@ -3752,8 +3730,8 @@ msgstr ""
 "\n"
 "힌트 : [d] efault, [e] nabled, [x] disabled, [i] stalled, [a] ctive"
 
-#: dnf/module/module_base.py:54 dnf/module/module_base.py:421
-#: dnf/module/module_base.py:477 dnf/module/module_base.py:543
+#: dnf/module/module_base.py:54 dnf/module/module_base.py:547
+#: dnf/module/module_base.py:603 dnf/module/module_base.py:669
 msgid "Ignoring unnecessary profile: '{}/{}'"
 msgstr "불필요한 프로파일을 무시합니다: '{}/{}'"
 
@@ -3762,17 +3740,17 @@ msgstr "불필요한 프로파일을 무시합니다: '{}/{}'"
 msgid "All matches for argument '{0}' in module '{1}:{2}' are not active"
 msgstr "모듈 '{1}:{2}'의 인수 '{0}'에 대한 모든 일치 항목이 활성화되지 않았습니다"
 
-#: dnf/module/module_base.py:92
+#: dnf/module/module_base.py:92 dnf/module/module_base.py:202
 #, python-brace-format
 msgid "Installing module '{0}' from Fail-Safe repository {1} is not allowed"
 msgstr "Fail-Safe 리포지토리 {1}에서 모듈 '{0}’을/를 설치할 수 없습니다"
 
-#: dnf/module/module_base.py:102
+#: dnf/module/module_base.py:102 dnf/module/module_base.py:212
 msgid ""
 "Unable to match profile for argument {}. Available profiles for '{}:{}': {}"
 msgstr "인수 {}의 프로파일을 찾을 수 없습니다. '{}:{}'에 사용 가능한 프로파일: {}"
 
-#: dnf/module/module_base.py:106
+#: dnf/module/module_base.py:106 dnf/module/module_base.py:216
 msgid "Unable to match profile for argument {}"
 msgstr "인수 {}의 프로파일을 찾을 수 없습니다"
 
@@ -3788,41 +3766,58 @@ msgstr "{} : {} 모듈에 대한 프로파일이 없습니다"
 msgid "Default profile {} not available in module {}:{}"
 msgstr "{} 모듈에서 기본 프로필 {}을 (를) 사용할 수 없음 : {}"
 
-#: dnf/module/module_base.py:142
+#: dnf/module/module_base.py:142 dnf/module/module_base.py:245
 msgid "Installing module from Fail-Safe repository is not allowed"
 msgstr "Fail-Safe 리포지토리에서 모듈을 설치할 수 없습니다"
 
-#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
-#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
-#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
-#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
+#: dnf/module/module_base.py:194
+#, fuzzy, python-brace-format
+#| msgid ""
+#| "All matches for argument '{0}' in module '{1}:{2}' are not active"
+msgid "No active matches for argument '{0}' in module '{1}:{2}'"
+msgstr "모듈 '{1}:{2}'의 인수 '{0}'에 대한 모든 일치 항목이 활성화되지 않았습니다"
+
+#: dnf/module/module_base.py:226
+#, fuzzy, python-brace-format
+#| msgid "Default profile {} not available in module {}:{}"
+msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'"
+msgstr "{} 모듈에서 기본 프로필 {}을 (를) 사용할 수 없음 : {}"
+
+#: dnf/module/module_base.py:265
+msgid "No packages available to distrosync for package name '{}'"
+msgstr ""
+
+#: dnf/module/module_base.py:308 dnf/module/module_base.py:452
+#: dnf/module/module_base.py:477 dnf/module/module_base.py:496
+#: dnf/module/module_base.py:543 dnf/module/module_base.py:599
+#: dnf/module/module_base.py:665 dnf/module/module_base.py:827
 msgid "Unable to resolve argument {}"
 msgstr "인수 {}을 (를) 구문 분석할 수 없습니다"
 
-#: dnf/module/module_base.py:160
-msgid "No match for package {}"
-msgstr "{} 패키지와 일치하지 않습니다"
-
-#: dnf/module/module_base.py:204
+#: dnf/module/module_base.py:319
 #, python-brace-format
 msgid "Upgrading module '{0}' from Fail-Safe repository {1} is not allowed"
 msgstr "Fail-Safe 리포지토리 {1}에서 모듈 '{0}’을/를 업그레이드할 수 없습니다"
 
-#: dnf/module/module_base.py:223 dnf/module/module_base.py:251
+#: dnf/module/module_base.py:338 dnf/module/module_base.py:366
 msgid "Unable to match profile in argument {}"
 msgstr "인수 {}에서 프로파일이 일치하지 않습니다"
 
-#: dnf/module/module_base.py:231
+#: dnf/module/module_base.py:346
 msgid "Upgrading module from Fail-Safe repository is not allowed"
 msgstr "Fail-Safe 리포지토리에서 모듈을 업그레이드할 수 없습니다"
 
-#: dnf/module/module_base.py:367
+#: dnf/module/module_base.py:500
 msgid ""
 "Only module name is required. Ignoring unneeded information in argument: "
 "'{}'"
 msgstr "모듈 이름만 필요합니다. '{}'인수에서 불필요한 정보를 무시합니다"
 
-#: dnf/package.py:298
+#: dnf/module/module_base.py:828
+msgid "No match for package {}"
+msgstr "{} 패키지와 일치하지 않습니다"
+
+#: dnf/package.py:333
 #, python-format
 msgid "%s: %s check failed: %s vs %s"
 msgstr "%s: %s 확인 실패 : %s 대 %s"
@@ -3903,6 +3898,12 @@ msgstr "%s 에서 %s repo를 추가했습니다"
 msgid "Errors occurred during test transaction."
 msgstr "트랜잭션 테스트 중에 오류가 발생했습니다."
 
+#: dnf/sack.py:47
+msgid ""
+"allow_vendor_change is disabled. This option is currently not supported for "
+"downgrade and distro-sync commands"
+msgstr ""
+
 #. TRANSLATORS: This is for a single package currently being downgraded.
 #: dnf/transaction.py:80
 msgctxt "currently"
@@ -3949,163 +3950,199 @@ msgstr "scriptlet 실행 중"
 msgid "Preparing"
 msgstr "준비 중"
 
-#: dnf/transaction_sr.py:60
+#: dnf/transaction_sr.py:66
 #, python-brace-format
-msgid "Errors in \"{filename}\":"
+msgid ""
+"The following problems occurred while replaying the transaction from file "
+"\"{filename}\":"
 msgstr ""
 
-#: dnf/transaction_sr.py:70
-#, python-brace-format
-msgid "Error in \"{filename}\": {error}"
-msgstr ""
+#: dnf/transaction_sr.py:68
+#, fuzzy
+#| msgid "Errors occurred during transaction."
+msgid "The following problems occurred while running a transaction:"
+msgstr "트랜잭션 중에 오류가 발생했습니다."
 
-#: dnf/transaction_sr.py:87
+#: dnf/transaction_sr.py:89
 #, python-brace-format
 msgid "Invalid major version \"{major}\", number expected."
 msgstr ""
 
-#: dnf/transaction_sr.py:95
+#: dnf/transaction_sr.py:97
 #, python-brace-format
 msgid "Invalid minor version \"{minor}\", number expected."
 msgstr ""
 
-#: dnf/transaction_sr.py:101
+#: dnf/transaction_sr.py:103
 #, python-brace-format
 msgid ""
 "Incompatible major version \"{major}\", supported major version is "
 "\"{major_supp}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:244
+#: dnf/transaction_sr.py:224
+msgid ""
+"Conflicting TransactionReplay arguments have been specified: filename, data"
+msgstr ""
+
+#: dnf/transaction_sr.py:265
 #, python-brace-format
 msgid "Unexpected type of \"{id}\", {exp} expected."
 msgstr ""
 
-#: dnf/transaction_sr.py:250
+#: dnf/transaction_sr.py:271
 #, python-brace-format
 msgid "Missing key \"{key}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:263
+#: dnf/transaction_sr.py:285
 #, python-brace-format
 msgid "Missing object key \"{key}\" in an rpm."
 msgstr ""
 
-#: dnf/transaction_sr.py:267
+#: dnf/transaction_sr.py:289
 #, python-brace-format
 msgid "Unexpected value of package reason \"{reason}\" for rpm nevra \"{nevra}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:275
+#: dnf/transaction_sr.py:297
 #, python-brace-format
 msgid "Cannot parse NEVRA for package \"{nevra}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:286
+#: dnf/transaction_sr.py:321
 #, python-brace-format
 msgid "Cannot find rpm nevra \"{nevra}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:301
+#: dnf/transaction_sr.py:336
 #, python-brace-format
 msgid "Package \"{na}\" is already installed for action \"{action}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:311
+#: dnf/transaction_sr.py:345
 #, python-brace-format
 msgid ""
 "Package nevra \"{nevra}\" not available in repositories for action "
 "\"{action}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:322
+#: dnf/transaction_sr.py:356
 #, python-brace-format
 msgid "Package nevra \"{nevra}\" not installed for action \"{action}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:336
+#: dnf/transaction_sr.py:370
 #, python-brace-format
 msgid "Unexpected value of package action \"{action}\" for rpm nevra \"{nevra}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:343
+#: dnf/transaction_sr.py:377
 #, fuzzy, python-format
 #| msgid "Group_id '%s' does not exist."
 msgid "Group id '%s' is not available."
 msgstr "Group_id '%s' 존재하지 않는다."
 
-#: dnf/transaction_sr.py:364
+#: dnf/transaction_sr.py:398
 #, python-brace-format
 msgid "Missing object key \"{key}\" in groups.packages."
 msgstr ""
 
-#: dnf/transaction_sr.py:377 dnf/transaction_sr.py:387
+#: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421
 #, fuzzy, python-format
 #| msgid "Environment '%s' is not installed."
 msgid "Group id '%s' is not installed."
 msgstr "환경 '%s'이 설치되지 않았습니다."
 
-#: dnf/transaction_sr.py:398
+#: dnf/transaction_sr.py:432
 #, fuzzy, python-format
 #| msgid "Environment '%s' is not installed."
 msgid "Environment id '%s' is not available."
 msgstr "환경 '%s'이 설치되지 않았습니다."
 
-#: dnf/transaction_sr.py:422
+#: dnf/transaction_sr.py:456
 #, python-brace-format
 msgid ""
 "Invalid value \"{group_type}\" of environments.groups.group_type, only "
 "\"mandatory\" or \"optional\" is supported."
 msgstr ""
 
-#: dnf/transaction_sr.py:430
+#: dnf/transaction_sr.py:464
 #, python-brace-format
 msgid "Missing object key \"{key}\" in environments.groups."
 msgstr ""
 
-#: dnf/transaction_sr.py:508
+#: dnf/transaction_sr.py:542
 #, python-brace-format
 msgid "Unexpected value of group action \"{action}\" for group \"{group}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:513
+#: dnf/transaction_sr.py:547
 #, python-brace-format
 msgid "Missing object key \"{key}\" in a group."
 msgstr ""
 
-#: dnf/transaction_sr.py:537
+#: dnf/transaction_sr.py:571
 #, python-brace-format
 msgid "Unexpected value of environment action \"{action}\" for environment \"{env}\"."
 msgstr ""
 
-#: dnf/transaction_sr.py:542
+#: dnf/transaction_sr.py:576
 #, python-brace-format
 msgid "Missing object key \"{key}\" in an environment."
 msgstr ""
 
-#: dnf/transaction_sr.py:581
+#: dnf/transaction_sr.py:615
 #, python-brace-format
 msgid ""
 "Package nevra \"{nevra}\", which is not present in the transaction file, was"
 " pulled into the transaction."
 msgstr ""
 
-#: dnf/util.py:391 dnf/util.py:393
+#: dnf/util.py:393 dnf/util.py:395
 msgid "Problem"
 msgstr "문제"
 
-#: dnf/util.py:444
+#: dnf/util.py:446
 msgid "TransactionItem not found for key: {}"
 msgstr "{} 키에 대한 TransactionItem을 찾을 수 없습니다"
 
-#: dnf/util.py:454
+#: dnf/util.py:456
 msgid "TransactionSWDBItem not found for key: {}"
 msgstr "{} 키에 대한 TransactionSWDBItem을 찾을 수 없습니다"
 
-#: dnf/util.py:457
+#: dnf/util.py:459
 msgid "Errors occurred during transaction."
 msgstr "트랜잭션 중에 오류가 발생했습니다."
 
+#: dnf/util.py:595
+msgid "Reinstalled"
+msgstr "다시 설치됨"
+
+#: dnf/util.py:596
+msgid "Skipped"
+msgstr "건너 뛰기됨"
+
+#: dnf/util.py:597
+msgid "Removed"
+msgstr "제거됨"
+
+#: dnf/util.py:600
+msgid "Failed"
+msgstr "실패하였습니다"
+
+#~ msgid "Action not handled: {}"
+#~ msgstr "작업이 처리되지 않았습니다: {}"
+
+#~ msgid "no package matched"
+#~ msgstr "일치하는 패키지가 없습니다."
+
+#~ msgid "Not found given transaction ID"
+#~ msgstr "주어진 트랜잭션 ID를 찾을 수 없습니다"
+
+#~ msgid "Undoing transaction {}, from {}"
+#~ msgstr "{}에서 {} 트랜잭션 실행을 취소하고 있습니다"
+
 #~ msgid "format for displaying found packages"
 #~ msgstr "발견 된 패키지를 표시하기위한 형식"
 
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 7ede4ed8..d1c433a3 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -26,20 +26,21 @@
 # Anonymous <noreply@weblate.org>, 2020.
 # Hongqiao Chen <harrychen0314@gmail.com>, 2020.
 # Harry Chen <harrychen0314@gmail.com>, 2020.
+# Sundeep Anand <suanand@redhat.com>, 2021.
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-10-05 09:18-0400\n"
-"PO-Revision-Date: 2020-08-02 08:29+0000\n"
-"Last-Translator: Charles Lee <lchopn@gmail.com>\n"
-"Language-Team: Chinese (Simplified) <https://translate.fedoraproject.org/projects/dnf/dnf-master/zh_CN/>\n"
+"POT-Creation-Date: 2021-02-22 09:22+0100\n"
+"PO-Revision-Date: 2021-03-08 10:29+0000\n"
+"Last-Translator: Sundeep Anand <suanand@redhat.com>\n"
+"Language-Team: Chinese (Simplified) <https://translate.fedoraproject.org/projects/dnf/dnf-rhel-8/zh_CN/>\n"
 "Language: zh_CN\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.1.1\n"
+"X-Generator: Weblate 4.5.1\n"
 
 #: dnf/automatic/emitter.py:32
 #, python-format
@@ -96,7 +97,7 @@ msgstr "未知配置值: %s=%s 在 %s 中; %s"
 msgid "Unknown configuration option: %s = %s in %s"
 msgstr "未知配置选项:%s = %s 在 %s 中"
 
-#: dnf/automatic/main.py:237 dnf/cli/cli.py:299
+#: dnf/automatic/main.py:237 dnf/cli/cli.py:304
 msgid "GPG check FAILED"
 msgstr "GPG 检查失败"
 
@@ -109,9 +110,9 @@ msgid "Started dnf-automatic."
 msgstr "启动的 dnf-automatic。"
 
 #: dnf/automatic/main.py:308
-#, python-format
-msgid "Sleep for %s seconds"
-msgstr "休眠 %s 秒"
+msgid "Sleep for {} second"
+msgid_plural "Sleep for {} seconds"
+msgstr[0] "休眠 {} 秒"
 
 #: dnf/automatic/main.py:315
 msgid "System is off-line."
@@ -123,7 +124,7 @@ msgstr "系统离线。"
 msgid "Error: %s"
 msgstr "错误:%s"
 
-#: dnf/base.py:146
+#: dnf/base.py:146 dnf/base.py:472 dnf/base.py:474
 msgid "loading repo '{}' failure: {}"
 msgstr "加载仓库 '{}' 失败:{}"
 
@@ -131,236 +132,236 @@ msgstr "加载仓库 '{}' 失败:{}"
 msgid "Loading repository '{}' has failed"
 msgstr "加载仓库 '{}' 失败"
 
-#: dnf/base.py:320
+#: dnf/base.py:322
 msgid "Metadata timer caching disabled when running on metered connection."
 msgstr "在使用按流量计费的连接时禁用元数据计时缓存。"
 
-#: dnf/base.py:325
+#: dnf/base.py:327
 msgid "Metadata timer caching disabled when running on a battery."
 msgstr "在使用电池时禁用元数据计时缓存。"
 
-#: dnf/base.py:330
+#: dnf/base.py:332
 msgid "Metadata timer caching disabled."
 msgstr "元数据计时缓存已禁用。"
 
-#: dnf/base.py:335
+#: dnf/base.py:337
 msgid "Metadata cache refreshed recently."
 msgstr "元数据缓存近期已刷新。"
 
-#: dnf/base.py:341 dnf/cli/commands/__init__.py:91
+#: dnf/base.py:343 dnf/cli/commands/__init__.py:91
 msgid "There are no enabled repositories in \"{}\"."
 msgstr "在\"{}\"中没有被启用的仓库。"
 
-#: dnf/base.py:348
+#: dnf/base.py:350
 #, python-format
 msgid "%s: will never be expired and will not be refreshed."
 msgstr "%s: 永远不过期并不会被刷新。"
 
-#: dnf/base.py:350
+#: dnf/base.py:352
 #, python-format
 msgid "%s: has expired and will be refreshed."
 msgstr "%s: 已过期并不会被刷新。"
 
 #. expires within the checking period:
-#: dnf/base.py:354
+#: dnf/base.py:356
 #, python-format
 msgid "%s: metadata will expire after %d seconds and will be refreshed now"
 msgstr "%s: 元数据将在 %d 秒后过期,现在将会被刷新"
 
-#: dnf/base.py:358
+#: dnf/base.py:360
 #, python-format
 msgid "%s: will expire after %d seconds."
 msgstr "%s: 将会在 %d 秒后过期。"
 
 #. performs the md sync
-#: dnf/base.py:364
+#: dnf/base.py:366
 msgid "Metadata cache created."
 msgstr "元数据缓存已建立。"
 
-#: dnf/base.py:397
+#: dnf/base.py:399 dnf/base.py:466
 #, python-format
 msgid "%s: using metadata from %s."
 msgstr "%s:正在使用截止于 %s 的元数据。"
 
-#: dnf/base.py:409
+#: dnf/base.py:411 dnf/base.py:479
 #, python-format
 msgid "Ignoring repositories: %s"
 msgstr "正在忽略仓库:%s"
 
-#: dnf/base.py:412
+#: dnf/base.py:414
 #, python-format
 msgid "Last metadata expiration check: %s ago on %s."
 msgstr "上次元数据过期检查:%s 前,执行于 %s。"
 
-#: dnf/base.py:443
+#: dnf/base.py:507
 msgid ""
 "The downloaded packages were saved in cache until the next successful "
 "transaction."
 msgstr "下载的软件包保存在缓存中,直到下次成功执行事务。"
 
-#: dnf/base.py:445
+#: dnf/base.py:509
 #, python-format
 msgid "You can remove cached packages by executing '%s'."
 msgstr "您可以通过执行 '%s' 删除软件包缓存。"
 
-#: dnf/base.py:535
+#: dnf/base.py:599
 #, python-format
 msgid "Invalid tsflag in config file: %s"
 msgstr "配置文件 %s 中使用 tsflag 是错误的"
 
-#: dnf/base.py:591
+#: dnf/base.py:655
 #, python-format
 msgid "Failed to add groups file for repository: %s - %s"
 msgstr "为仓库 %s 添加组文件时失败:%s"
 
-#: dnf/base.py:823
+#: dnf/base.py:887
 msgid "Running transaction check"
 msgstr "运行事务检查"
 
-#: dnf/base.py:831
+#: dnf/base.py:895
 msgid "Error: transaction check vs depsolve:"
 msgstr "错误:事务检查与依赖解决错误:"
 
-#: dnf/base.py:837
+#: dnf/base.py:901
 msgid "Transaction check succeeded."
 msgstr "事务检查成功。"
 
-#: dnf/base.py:840
+#: dnf/base.py:904
 msgid "Running transaction test"
 msgstr "运行事务测试"
 
-#: dnf/base.py:850 dnf/base.py:992
+#: dnf/base.py:914 dnf/base.py:1065
 msgid "RPM: {}"
 msgstr "RPM软件包: {}"
 
-#: dnf/base.py:851
+#: dnf/base.py:915
 msgid "Transaction test error:"
 msgstr "事物测试失败:"
 
-#: dnf/base.py:862
+#: dnf/base.py:926
 msgid "Transaction test succeeded."
 msgstr "事务测试成功。"
 
-#: dnf/base.py:883
+#: dnf/base.py:947
 msgid "Running transaction"
 msgstr "运行事务"
 
-#: dnf/base.py:911
+#: dnf/base.py:984
 msgid "Disk Requirements:"
 msgstr "磁盘需求:"
 
-#: dnf/base.py:914
+#: dnf/base.py:987
 #, python-brace-format
 msgid "At least {0}MB more space needed on the {1} filesystem."
 msgid_plural "At least {0}MB more space needed on the {1} filesystem."
 msgstr[0] "在文件系统{1}上至少需要{0}MB的可用空间。"
 
-#: dnf/base.py:921
+#: dnf/base.py:994
 msgid "Error Summary"
 msgstr "错误汇总"
 
-#: dnf/base.py:947
+#: dnf/base.py:1020
 #, python-brace-format
 msgid "RPMDB altered outside of {prog}."
 msgstr "RPMDB 在 {prog} 外被改动了。"
 
-#: dnf/base.py:993 dnf/base.py:1001
+#: dnf/base.py:1066 dnf/base.py:1074
 msgid "Could not run transaction."
 msgstr "不能执行事务。"
 
-#: dnf/base.py:996
+#: dnf/base.py:1069
 msgid "Transaction couldn't start:"
 msgstr "事务无法启动:"
 
-#: dnf/base.py:1010
+#: dnf/base.py:1083
 #, python-format
 msgid "Failed to remove transaction file %s"
 msgstr "移除事务文件 %s 失败"
 
-#: dnf/base.py:1092
+#: dnf/base.py:1165
 msgid "Some packages were not downloaded. Retrying."
 msgstr "某些软件包没有被下载。正在重试。"
 
-#: dnf/base.py:1122
+#: dnf/base.py:1195
 #, python-format
 msgid "Delta RPMs reduced %.1f MB of updates to %.1f MB (%d.1%% saved)"
 msgstr "增量 RPM 将 %.1f MB 的更新减少至 %.1f MB(已节省 %d.1%% )"
 
-#: dnf/base.py:1125
+#: dnf/base.py:1198
 #, python-format
 msgid ""
 "Failed Delta RPMs increased %.1f MB of updates to %.1f MB (%d.1%% wasted)"
 msgstr "增量 RPM 未能将 %.1f MB 的更新减少至 %.1f MB(已浪费 %d.1%% )"
 
-#: dnf/base.py:1167
+#: dnf/base.py:1240
 msgid "Cannot add local packages, because transaction job already exists"
 msgstr "由于事物已经存在,无法添加本地软件包"
 
-#: dnf/base.py:1181
+#: dnf/base.py:1254
 msgid "Could not open: {}"
 msgstr "无法打开: {}"
 
-#: dnf/base.py:1219
+#: dnf/base.py:1292
 #, python-format
 msgid "Public key for %s is not installed"
 msgstr "%s 的公钥没有安装"
 
-#: dnf/base.py:1223
+#: dnf/base.py:1296
 #, python-format
 msgid "Problem opening package %s"
 msgstr "打开软件包 %s 出现问题"
 
-#: dnf/base.py:1231
+#: dnf/base.py:1304
 #, python-format
 msgid "Public key for %s is not trusted"
 msgstr "%s 的公钥不可信任"
 
-#: dnf/base.py:1235
+#: dnf/base.py:1308
 #, python-format
 msgid "Package %s is not signed"
 msgstr "软件包 %s 没有签名"
 
-#: dnf/base.py:1265
+#: dnf/base.py:1338
 #, python-format
 msgid "Cannot remove %s"
 msgstr "无法删除 %s"
 
-#: dnf/base.py:1269
+#: dnf/base.py:1342
 #, python-format
 msgid "%s removed"
 msgstr "%s 已删除"
 
-#: dnf/base.py:1549
+#: dnf/base.py:1622
 msgid "No match for group package \"{}\""
 msgstr "没有和组 \"{}\" 匹配的"
 
-#: dnf/base.py:1635
+#: dnf/base.py:1708
 #, python-format
 msgid "Adding packages from group '%s': %s"
 msgstr "从组 '%s': %s 添加软件包"
 
-#: dnf/base.py:1658 dnf/cli/cli.py:219 dnf/cli/commands/__init__.py:442
+#: dnf/base.py:1731 dnf/cli/cli.py:220 dnf/cli/commands/__init__.py:442
 #: dnf/cli/commands/__init__.py:499 dnf/cli/commands/__init__.py:592
 #: dnf/cli/commands/__init__.py:641 dnf/cli/commands/install.py:80
 #: dnf/cli/commands/install.py:103 dnf/cli/commands/install.py:110
 msgid "Nothing to do."
 msgstr "无需任何处理。"
 
-#: dnf/base.py:1676
+#: dnf/base.py:1749
 msgid "No groups marked for removal."
 msgstr "没有软件包组需要移除。"
 
-#: dnf/base.py:1710
+#: dnf/base.py:1783
 msgid "No group marked for upgrade."
 msgstr "没有标记为要升级的组。"
 
-#: dnf/base.py:1925
+#: dnf/base.py:1997
 #, python-format
 msgid "Package %s not installed, cannot downgrade it."
 msgstr "软件包 %s 并没有能够安装,无法进行降级操作。"
 
-#: dnf/base.py:1927 dnf/base.py:1946 dnf/base.py:1959 dnf/base.py:1980
-#: dnf/base.py:2029 dnf/base.py:2037 dnf/base.py:2172 dnf/cli/cli.py:411
+#: dnf/base.py:1999 dnf/base.py:2018 dnf/base.py:2031 dnf/base.py:2052
+#: dnf/base.py:2101 dnf/base.py:2109 dnf/base.py:2243 dnf/cli/cli.py:416
 #: dnf/cli/commands/__init__.py:425 dnf/cli/commands/__init__.py:482
 #: dnf/cli/commands/__init__.py:586 dnf/cli/commands/__init__.py:633
 #: dnf/cli/commands/__init__.py:711 dnf/cli/commands/install.py:147
@@ -370,141 +371,127 @@ msgstr "软件包 %s 并没有能够安装,无法进行降级操作。"
 msgid "No match for argument: %s"
 msgstr "未找到匹配的参数: %s"
 
-#: dnf/base.py:1934
+#: dnf/base.py:2006
 #, python-format
 msgid "Package %s of lower version already installed, cannot downgrade it."
 msgstr "软件包 %s 的低版本已经安装,无法进行降级。"
 
-#: dnf/base.py:1957
+#: dnf/base.py:2029
 #, python-format
 msgid "Package %s not installed, cannot reinstall it."
 msgstr "软件包 %s 未能够安装成功,无法进行重新安装。"
 
-#: dnf/base.py:1972
+#: dnf/base.py:2044
 #, python-format
 msgid "File %s is a source package and cannot be updated, ignoring."
 msgstr "%s 文件无法被升级,已忽略。"
 
-#: dnf/base.py:1978
+#: dnf/base.py:2050
 #, python-format
 msgid "Package %s not installed, cannot update it."
 msgstr "软件包 %s 未安装,无法更新。"
 
-#: dnf/base.py:1987
+#: dnf/base.py:2059
 #, python-format
 msgid ""
 "The same or higher version of %s is already installed, cannot update it."
 msgstr "已经安装了软件包%s的相同或更高版本,无法更新。"
 
-#: dnf/base.py:2026 dnf/cli/commands/reinstall.py:81
+#: dnf/base.py:2098 dnf/cli/commands/reinstall.py:81
 #, python-format
 msgid "Package %s available, but not installed."
 msgstr "软件包 %s 可用,但没有被安装。"
 
-#: dnf/base.py:2032
+#: dnf/base.py:2104
 #, python-format
 msgid "Package %s available, but installed for different architecture."
 msgstr "软件包 %s 可用,当是为其它架构安装。"
 
-#: dnf/base.py:2057 dnf/base.py:2250 dnf/cli/cli.py:668 dnf/cli/cli.py:699
+#: dnf/base.py:2129
 #, python-format
 msgid "No package %s installed."
 msgstr "没有软件包 %s 安装。"
 
-#: dnf/base.py:2075 dnf/cli/commands/install.py:136
+#: dnf/base.py:2147 dnf/cli/commands/install.py:136
 #: dnf/cli/commands/remove.py:133
 #, python-format
 msgid "Not a valid form: %s"
 msgstr "无效: %s"
 
-#: dnf/base.py:2091 dnf/cli/commands/__init__.py:681
-#: dnf/cli/commands/remove.py:163
+#: dnf/base.py:2162 dnf/cli/commands/__init__.py:681
+#: dnf/cli/commands/remove.py:162
 msgid "No packages marked for removal."
 msgstr "没有软件包需要移除。"
 
-#: dnf/base.py:2179 dnf/cli/cli.py:422
+#: dnf/base.py:2250 dnf/cli/cli.py:427
 #, python-format
 msgid "Packages for argument %s available, but not installed."
 msgstr "针对于参数 %s 的软件包可用, 但是目前没有安装。"
 
-#: dnf/base.py:2184
+#: dnf/base.py:2255
 #, python-format
 msgid "Package %s of lowest version already installed, cannot downgrade it."
 msgstr "软件包 %s 的最低版本已经安装,无法再进行降级。"
 
-#: dnf/base.py:2242
-msgid "Action not handled: {}"
-msgstr "操作没被处理:{}"
-
-#: dnf/base.py:2256 dnf/cli/cli.py:419 dnf/cli/cli.py:673 dnf/cli/cli.py:703
-#: dnf/cli/commands/group.py:400 dnf/cli/commands/history.py:169
-#, python-format
-msgid "No package %s available."
-msgstr "没有可用的软件包 %s。"
-
-#: dnf/base.py:2269
-msgid "no package matched"
-msgstr "没有能够与之匹配的软件包"
-
-#: dnf/base.py:2290
+#: dnf/base.py:2302
 msgid "No security updates needed, but {} update available"
 msgstr "没有必须的安全更新, 但是 {} 的更新可用"
 
-#: dnf/base.py:2292
+#: dnf/base.py:2304
 msgid "No security updates needed, but {} updates available"
 msgstr "没有必须的安全更新, 但是 {} 的更新可用"
 
-#: dnf/base.py:2296
+#: dnf/base.py:2308
 msgid "No security updates needed for \"{}\", but {} update available"
 msgstr "没有针对于\"{}\" 所必须的安全更新, 但是 {} 的更新可用"
 
-#: dnf/base.py:2298
+#: dnf/base.py:2310
 msgid "No security updates needed for \"{}\", but {} updates available"
 msgstr "没有针对于\"{}\" 所必须的安全更新, 但是 {} 的更新可用"
 
 #. raise an exception, because po.repoid is not in self.repos
-#: dnf/base.py:2319
+#: dnf/base.py:2331
 #, python-format
 msgid "Unable to retrieve a key for a commandline package: %s"
-msgstr ""
+msgstr "无法获取命令行软件包的密钥: %s"
 
-#: dnf/base.py:2327
+#: dnf/base.py:2339
 #, python-format
 msgid ". Failing package is: %s"
 msgstr ". 失败的软件包是:%s"
 
-#: dnf/base.py:2328
+#: dnf/base.py:2340
 #, python-format
 msgid "GPG Keys are configured as: %s"
 msgstr "GPG密钥配置为:%s"
 
-#: dnf/base.py:2340
+#: dnf/base.py:2352
 #, python-format
 msgid "GPG key at %s (0x%s) is already installed"
 msgstr "%s 的 GPG 公钥(0x%s)已安装"
 
-#: dnf/base.py:2373
+#: dnf/base.py:2385
 msgid "The key has been approved."
 msgstr "密钥已被确认。"
 
-#: dnf/base.py:2376
+#: dnf/base.py:2388
 msgid "The key has been rejected."
 msgstr "密钥已被拒绝。"
 
-#: dnf/base.py:2409
+#: dnf/base.py:2421
 #, python-format
 msgid "Key import failed (code %d)"
 msgstr "导入公钥失败(代码 %d)"
 
-#: dnf/base.py:2411
+#: dnf/base.py:2423
 msgid "Key imported successfully"
 msgstr "导入公钥成功"
 
-#: dnf/base.py:2415
+#: dnf/base.py:2427
 msgid "Didn't install any keys"
 msgstr "没有安装任何公钥"
 
-#: dnf/base.py:2418
+#: dnf/base.py:2430
 #, python-format
 msgid ""
 "The GPG keys listed for the \"%s\" repository are already installed but they are not correct for this package.\n"
@@ -513,49 +500,49 @@ msgstr ""
 "仓库 \"%s\" 的 GPG 公钥已安装,但是不适用于此软件包。\n"
 "请检查此仓库的公钥 URL 是否配置正确。"
 
-#: dnf/base.py:2429
+#: dnf/base.py:2441
 msgid "Import of key(s) didn't help, wrong key(s)?"
 msgstr "导入的密钥没有公钥,错误的公钥?"
 
-#: dnf/base.py:2482
+#: dnf/base.py:2494
 msgid "  * Maybe you meant: {}"
 msgstr "  * 可能您的意思是:{}"
 
-#: dnf/base.py:2514
+#: dnf/base.py:2526
 msgid "Package \"{}\" from local repository \"{}\" has incorrect checksum"
 msgstr "软件包 \"{}\"(来自于本地仓库 \"{}\")的 checksum 不正确"
 
-#: dnf/base.py:2517
+#: dnf/base.py:2529
 msgid "Some packages from local repository have incorrect checksum"
 msgstr "本地仓库的一些软件包校验值(checksum)不正确,无法确定软件包完整"
 
-#: dnf/base.py:2520
+#: dnf/base.py:2532
 msgid "Package \"{}\" from repository \"{}\" has incorrect checksum"
 msgstr "软件包 \"{}\"(来自仓库 \"{}\")的 checksum 不正确"
 
-#: dnf/base.py:2523
+#: dnf/base.py:2535
 msgid ""
 "Some packages have invalid cache, but cannot be downloaded due to \"--"
 "cacheonly\" option"
 msgstr "以下软件包有无效缓存,因为使用了 \"--cacheonly\" 选项不能下载"
 
-#: dnf/base.py:2541 dnf/base.py:2561
+#: dnf/base.py:2553 dnf/base.py:2573
 msgid "No match for argument"
 msgstr "未找到匹配的参数"
 
-#: dnf/base.py:2549 dnf/base.py:2569
+#: dnf/base.py:2561 dnf/base.py:2581
 msgid "All matches were filtered out by exclude filtering for argument"
 msgstr "由于您的搜索参数,所有相关结果都已被滤掉"
 
-#: dnf/base.py:2551
+#: dnf/base.py:2563
 msgid "All matches were filtered out by modular filtering for argument"
 msgstr "所有的匹配结果均已经被参数的模块化过滤条件筛除"
 
-#: dnf/base.py:2567
+#: dnf/base.py:2579
 msgid "All matches were installed from a different repository for argument"
 msgstr "已从另一个仓库安装了参数的所有匹配"
 
-#: dnf/base.py:2583
+#: dnf/base.py:2626
 #, python-format
 msgid "Package %s is already installed."
 msgstr "软件包 %s 已安装。"
@@ -575,8 +562,8 @@ msgstr "解析文件 \"%s\" 失败:%s"
 msgid "Cannot read file \"%s\": %s"
 msgstr "无法读取文件 \"%s\": %s"
 
-#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:902
-#: dnf/cli/cli.py:906 dnf/cli/commands/alias.py:108
+#: dnf/cli/aliases.py:115 dnf/cli/aliases.py:129 dnf/cli/cli.py:803
+#: dnf/cli/cli.py:807 dnf/cli/commands/alias.py:108
 #, python-format
 msgid "Config error: %s"
 msgstr "配置错误:%s"
@@ -607,7 +594,7 @@ msgid ""
 "stream '{2}'"
 msgstr "这个操作会把模块 '{0}' 从流 '{1}' 切换到流 '{2}'"
 
-#: dnf/cli/cli.py:172
+#: dnf/cli/cli.py:173
 #, python-brace-format
 msgid ""
 "It is not possible to switch enabled streams of a module.\n"
@@ -616,35 +603,35 @@ msgstr ""
 "无法切换已启用模块的流。\n"
 "推荐移除来自模块的所有已安装内容,然后通过 '{prog} module reset <module_name>' 命令重置模块。在您重置模块之后,就可以安装其他的流。"
 
-#: dnf/cli/cli.py:210
+#: dnf/cli/cli.py:211
 #, python-brace-format
 msgid "{prog} will only download packages for the transaction."
 msgstr "{prog}将仅会从事务下载软件包。"
 
-#: dnf/cli/cli.py:213
+#: dnf/cli/cli.py:214
 #, python-brace-format
 msgid ""
 "{prog} will only download packages, install gpg keys, and check the "
 "transaction."
 msgstr "{prog}将仅会下载软件包,导入gpg密钥并检查事务。"
 
-#: dnf/cli/cli.py:217
+#: dnf/cli/cli.py:218
 msgid "Operation aborted."
 msgstr "操作中止。"
 
-#: dnf/cli/cli.py:224
+#: dnf/cli/cli.py:225
 msgid "Downloading Packages:"
 msgstr "下载软件包:"
 
-#: dnf/cli/cli.py:230
+#: dnf/cli/cli.py:231
 msgid "Error downloading packages:"
 msgstr "下载软件包出错 :"
 
-#: dnf/cli/cli.py:258
+#: dnf/cli/cli.py:263
 msgid "Transaction failed"
 msgstr "事务失败"
 
-#: dnf/cli/cli.py:281
+#: dnf/cli/cli.py:286
 msgid ""
 "Refusing to automatically import keys when running unattended.\n"
 "Use \"-y\" to override."
@@ -652,116 +639,95 @@ msgstr ""
 "如果不加干预,拒绝自动导入公钥。\n"
 "指定 \"-y\" 改变这个行为。"
 
-#: dnf/cli/cli.py:331
+#: dnf/cli/cli.py:336
 msgid "Changelogs for {}"
 msgstr "{}的变更记录"
 
-#: dnf/cli/cli.py:364 dnf/cli/cli.py:505 dnf/cli/cli.py:511
+#: dnf/cli/cli.py:369 dnf/cli/cli.py:510 dnf/cli/cli.py:516
 msgid "Obsoleting Packages"
 msgstr "取代的软件包"
 
-#: dnf/cli/cli.py:393
+#: dnf/cli/cli.py:398
 msgid "No packages marked for distribution synchronization."
 msgstr "没有软件包需要发行版同步。"
 
-#: dnf/cli/cli.py:428
+#: dnf/cli/cli.py:424 dnf/cli/commands/group.py:395
+#, python-format
+msgid "No package %s available."
+msgstr "没有可用的软件包 %s。"
+
+#: dnf/cli/cli.py:433
 msgid "No packages marked for downgrade."
 msgstr "没有标记要降级的软件包。"
 
-#: dnf/cli/cli.py:479
+#: dnf/cli/cli.py:484
 msgid "Installed Packages"
 msgstr "已安装的软件包"
 
-#: dnf/cli/cli.py:487
+#: dnf/cli/cli.py:492
 msgid "Available Packages"
 msgstr "可安装的软件包"
 
-#: dnf/cli/cli.py:491
+#: dnf/cli/cli.py:496
 msgid "Autoremove Packages"
 msgstr "自动移除软件包"
 
-#: dnf/cli/cli.py:493
+#: dnf/cli/cli.py:498
 msgid "Extra Packages"
 msgstr "更多软件包"
 
-#: dnf/cli/cli.py:497
+#: dnf/cli/cli.py:502
 msgid "Available Upgrades"
 msgstr "可用升级"
 
-#: dnf/cli/cli.py:513
+#: dnf/cli/cli.py:518
 msgid "Recently Added Packages"
 msgstr "最近添加的软件包"
 
-#: dnf/cli/cli.py:518
+#: dnf/cli/cli.py:522
 msgid "No matching Packages to list"
 msgstr "没有匹配的软件包可以列出"
 
-#: dnf/cli/cli.py:599
+#: dnf/cli/cli.py:603
 msgid "No Matches found"
 msgstr "没有找到匹配的软件包"
 
-#: dnf/cli/cli.py:609
-msgid "No transaction ID given"
-msgstr "没有事务 ID"
-
-#: dnf/cli/cli.py:614
-msgid "Not found given transaction ID"
-msgstr "未找到指定事务 ID"
-
-#: dnf/cli/cli.py:623
-msgid "Found more than one transaction ID!"
-msgstr "找到多个事务 ID!"
-
-#: dnf/cli/cli.py:640
-#, python-format
-msgid "Transaction history is incomplete, before %u."
-msgstr "在 %u 之前,事务历史不完整。"
-
-#: dnf/cli/cli.py:642
-#, python-format
-msgid "Transaction history is incomplete, after %u."
-msgstr "在 %u 之后,事务历史不完整。"
-
-#: dnf/cli/cli.py:689
-msgid "Undoing transaction {}, from {}"
-msgstr "撤销事务 {},从 {}"
-
-#: dnf/cli/cli.py:769 dnf/cli/commands/shell.py:237
+#: dnf/cli/cli.py:670 dnf/cli/commands/shell.py:237
 #, python-format
 msgid "Unknown repo: '%s'"
 msgstr "未知仓库:'%s'"
 
-#: dnf/cli/cli.py:783
+#: dnf/cli/cli.py:684
 #, python-format
 msgid "No repository match: %s"
 msgstr "没有仓库匹配: %s"
 
-#: dnf/cli/cli.py:817
+#: dnf/cli/cli.py:718
 msgid ""
 "This command has to be run with superuser privileges (under the root user on"
 " most systems)."
 msgstr "运行此命令需要管理员特权(多数系统下是root用户)。"
 
-#: dnf/cli/cli.py:847
+#: dnf/cli/cli.py:748
 #, python-format
 msgid "No such command: %s. Please use %s --help"
 msgstr "未找到命令: %s。请使用 %s --help"
 
-#: dnf/cli/cli.py:850
+#: dnf/cli/cli.py:751
 #, python-format, python-brace-format
 msgid ""
 "It could be a {PROG} plugin command, try: \"{prog} install 'dnf-"
 "command(%s)'\""
 msgstr "它可能是一个{PROG}插件命令,尝试:\"{prog} install 'dnf-command(%s)'\""
 
-#: dnf/cli/cli.py:854
+#: dnf/cli/cli.py:755
 #, python-brace-format
 msgid ""
 "It could be a {prog} plugin command, but loading of plugins is currently "
 "disabled."
 msgstr "这可能是一个 {prog} 插件的命令,但是插件的加载当前已经禁用。"
 
-#: dnf/cli/cli.py:912
+#: dnf/cli/cli.py:813
 msgid ""
 "--destdir or --downloaddir must be used with --downloadonly or download or "
 "system-upgrade command."
@@ -769,51 +735,51 @@ msgstr ""
 "--destdir 或 --downloaddir 必须和 --downloadonly 或 download 或 system-upgrade "
 "命令一起使用。"
 
-#: dnf/cli/cli.py:918
+#: dnf/cli/cli.py:819
 msgid ""
 "--enable, --set-enabled and --disable, --set-disabled must be used with "
 "config-manager command."
 msgstr ""
 "--enable、--set-enabled 和 --disable、--set-disabled 必须和 config-manager 命令一起使用。"
 
-#: dnf/cli/cli.py:1000
+#: dnf/cli/cli.py:901
 msgid ""
 "Warning: Enforcing GPG signature check globally as per active RPM security "
 "policy (see 'gpgcheck' in dnf.conf(5) for how to squelch this message)"
 msgstr "警告:由于活动的RPM安全策略,强制执行全局GPG签名检查 (请参照dnf.conf(5)中的'gpgcheck'以了解如何阻止这条信息)"
 
-#: dnf/cli/cli.py:1020
+#: dnf/cli/cli.py:921
 msgid "Config file \"{}\" does not exist"
 msgstr "配置文件 \"{}\" 不存在"
 
-#: dnf/cli/cli.py:1040
+#: dnf/cli/cli.py:941
 msgid ""
 "Unable to detect release version (use '--releasever' to specify release "
 "version)"
 msgstr "无法找到发布版本(可用 '--releasever' 指定版本)"
 
-#: dnf/cli/cli.py:1127 dnf/cli/commands/repoquery.py:471
+#: dnf/cli/cli.py:1028 dnf/cli/commands/repoquery.py:471
 msgid "argument {}: not allowed with argument {}"
 msgstr "参数 {}:不允许与参数 {} 一起使用"
 
-#: dnf/cli/cli.py:1134
+#: dnf/cli/cli.py:1035
 #, python-format
 msgid "Command \"%s\" already defined"
 msgstr "命令 \"%s\" 已有定义"
 
-#: dnf/cli/cli.py:1154
+#: dnf/cli/cli.py:1055
 msgid "Excludes in dnf.conf: "
 msgstr "在 dnf.conf 中排除: "
 
-#: dnf/cli/cli.py:1157
+#: dnf/cli/cli.py:1058
 msgid "Includes in dnf.conf: "
 msgstr "在 dnf.conf 中包括: "
 
-#: dnf/cli/cli.py:1160
+#: dnf/cli/cli.py:1061
 msgid "Excludes in repo "
 msgstr "在 repo 中排除 "
 
-#: dnf/cli/cli.py:1163
+#: dnf/cli/cli.py:1064
 msgid "Includes in repo "
 msgstr "在 repo 中包括 "
 
@@ -870,7 +836,7 @@ msgid "show all packages (default)"
 msgstr "显示所有的软件包(默认)"
 
 #: dnf/cli/commands/__init__.py:171 dnf/cli/commands/__init__.py:743
-#: dnf/cli/commands/module.py:351
+#: dnf/cli/commands/module.py:373
 msgid "show only available packages"
 msgstr "只显示可用的软件包"
 
@@ -1195,78 +1161,78 @@ msgstr "显示或使用组信息"
 msgid "No group data available for configured repositories."
 msgstr "配置的软件源不包含组数据。"
 
-#: dnf/cli/commands/group.py:129
+#: dnf/cli/commands/group.py:126
 #, python-format
 msgid "Warning: Group %s does not exist."
 msgstr "警告:组 %s 不存在。"
 
-#: dnf/cli/commands/group.py:170
+#: dnf/cli/commands/group.py:167
 msgid "Warning: No groups match:"
 msgstr "警告:没有匹配的组:"
 
-#: dnf/cli/commands/group.py:182 dnf/cli/commands/group.py:193
-#: dnf/cli/output.py:1226
+#: dnf/cli/commands/group.py:179 dnf/cli/commands/group.py:190
+#: dnf/cli/output.py:1139
 msgid "<name-unset>"
 msgstr "<名称-未设定>"
 
-#: dnf/cli/commands/group.py:199
+#: dnf/cli/commands/group.py:196
 msgid "Available Environment Groups:"
 msgstr "可用环境组:"
 
-#: dnf/cli/commands/group.py:201
+#: dnf/cli/commands/group.py:198
 msgid "Installed Environment Groups:"
 msgstr "已安装的环境组:"
 
-#: dnf/cli/commands/group.py:208 dnf/cli/commands/group.py:294
+#: dnf/cli/commands/group.py:205 dnf/cli/commands/group.py:291
 msgid "Installed Groups:"
 msgstr "已安装组:"
 
-#: dnf/cli/commands/group.py:215 dnf/cli/commands/group.py:301
+#: dnf/cli/commands/group.py:212 dnf/cli/commands/group.py:298
 msgid "Installed Language Groups:"
 msgstr "已安装语言组:"
 
-#: dnf/cli/commands/group.py:225 dnf/cli/commands/group.py:308
+#: dnf/cli/commands/group.py:222 dnf/cli/commands/group.py:305
 msgid "Available Groups:"
 msgstr "可用组:"
 
-#: dnf/cli/commands/group.py:232 dnf/cli/commands/group.py:315
+#: dnf/cli/commands/group.py:229 dnf/cli/commands/group.py:312
 msgid "Available Language Groups:"
 msgstr "可用语言组:"
 
-#: dnf/cli/commands/group.py:322
+#: dnf/cli/commands/group.py:319
 msgid "include optional packages from group"
 msgstr "包含可选软件包"
 
-#: dnf/cli/commands/group.py:325
+#: dnf/cli/commands/group.py:322
 msgid "show also hidden groups"
 msgstr "同时显示已隐藏的软件组"
 
-#: dnf/cli/commands/group.py:327
+#: dnf/cli/commands/group.py:324
 msgid "show only installed groups"
 msgstr "只显示已安装的软件组"
 
-#: dnf/cli/commands/group.py:329
+#: dnf/cli/commands/group.py:326
 msgid "show only available groups"
 msgstr "只显示可获得的团队"
 
-#: dnf/cli/commands/group.py:331
+#: dnf/cli/commands/group.py:328
 msgid "show also ID of groups"
 msgstr "同时显示组的 ID"
 
-#: dnf/cli/commands/group.py:333
+#: dnf/cli/commands/group.py:330
 msgid "available subcommands: {} (default), {}"
 msgstr "可用的子命令:{} (默认), {}"
 
-#: dnf/cli/commands/group.py:337
+#: dnf/cli/commands/group.py:334
 msgid "argument for group subcommand"
 msgstr "组子命令的参数"
 
-#: dnf/cli/commands/group.py:346
+#: dnf/cli/commands/group.py:343
 #, python-format
 msgid "Invalid groups sub-command, use: %s."
 msgstr "无效的组子命令,请使用:%s 。"
 
-#: dnf/cli/commands/group.py:403
+#: dnf/cli/commands/group.py:398
 msgid "Unable to find a mandatory group package."
 msgstr "无法找到一个必须的组软件包。"
 
@@ -1276,25 +1242,25 @@ msgstr "显示或使用事务历史"
 
 #: dnf/cli/commands/history.py:66
 msgid "For the store command, file path to store the transaction to"
-msgstr ""
+msgstr "对于 store 命令,将事务保存到的文件路径"
 
 #: dnf/cli/commands/history.py:68
 msgid ""
 "For the replay command, don't check for installed packages matching those in"
 " transaction"
-msgstr ""
+msgstr "对于 replay 命令,不检查与事务中匹配的安装的软件包"
 
 #: dnf/cli/commands/history.py:71
 msgid ""
 "For the replay command, don't check for extra packages pulled into the "
 "transaction"
-msgstr ""
+msgstr "对于 replay 命令,不检查提取到事务中的额外的软件包"
 
 #: dnf/cli/commands/history.py:74
 msgid ""
 "For the replay command, skip packages that are not available or have missing"
 " dependencies"
-msgstr ""
+msgstr "对于 replay 命令,跳过不可用或者缺少依赖项的软件包"
 
 #: dnf/cli/commands/history.py:94
 msgid ""
@@ -1305,41 +1271,64 @@ msgstr ""
 "'{}' 需要一个事务 ID 或软件包名。"
 
 #: dnf/cli/commands/history.py:101
-#, fuzzy
-#| msgid "No transaction ID or package name given."
 msgid "No transaction file name given."
-msgstr "没有提供事务 ID 或软件包名。"
+msgstr "没有给定事务文件名称。"
 
 #: dnf/cli/commands/history.py:103
-#, fuzzy
-#| msgid "Failed to remove transaction file %s"
 msgid "More than one argument given as transaction file name."
-msgstr "移除事务文件 %s 失败"
+msgstr "提供了多于一个的作为事务文件名的参数。"
 
-#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:126
+#: dnf/cli/commands/history.py:122 dnf/cli/commands/history.py:130
 msgid "No transaction ID or package name given."
 msgstr "没有提供事务 ID 或软件包名。"
 
-#: dnf/cli/commands/history.py:138
+#: dnf/cli/commands/history.py:142
 #, python-format
 msgid "You don't have access to the history DB: %s"
 msgstr "你没有权限访问历史数据库:%s"
 
-#: dnf/cli/commands/history.py:147
+#: dnf/cli/commands/history.py:151
 #, python-format
 msgid ""
 "Cannot undo transaction %s, doing so would result in an inconsistent package"
 " database."
 msgstr "无法撤销事务 %s,这样做将可能导致不一致的软件包数据库。"
 
-#: dnf/cli/commands/history.py:152
+#: dnf/cli/commands/history.py:156
 #, python-format
 msgid ""
 "Cannot rollback transaction %s, doing so would result in an inconsistent "
 "package database."
 msgstr "无法回滚事务 %s,这样做将可能导致不一致的软件包数据库。"
 
-#: dnf/cli/commands/history.py:222
+#: dnf/cli/commands/history.py:175
+msgid "No transaction ID given"
+msgstr "没有事务 ID"
+
+#: dnf/cli/commands/history.py:179
+#, python-brace-format
+msgid "Transaction ID \"{0}\" not found."
+msgstr "没有找到事务 ID \"{0}\"。"
+
+#: dnf/cli/commands/history.py:185
+msgid "Found more than one transaction ID!"
+msgstr "找到多个事务 ID!"
+
+#: dnf/cli/commands/history.py:203
+#, python-format
+msgid "Transaction history is incomplete, before %u."
+msgstr "在 %u 之前,事务历史不完整。"
+
+#: dnf/cli/commands/history.py:205
+#, python-format
+msgid "Transaction history is incomplete, after %u."
+msgstr "在 %u 之后,事务历史不完整。"
+
+#: dnf/cli/commands/history.py:256
+msgid "No packages to list"
+msgstr "没有可以列出的软件包"
+
+#: dnf/cli/commands/history.py:279
 msgid ""
 "Invalid transaction ID range definition '{}'.\n"
 "Use '<transaction-id>..<transaction-id>'."
@@ -1347,7 +1336,7 @@ msgstr ""
 "无效的事务 ID 范围定义 '{}'。\n"
 "使用 '<transaction-id>..<transaction-id>'。"
 
-#: dnf/cli/commands/history.py:226
+#: dnf/cli/commands/history.py:283
 msgid ""
 "Can't convert '{}' to transaction ID.\n"
 "Use '<number>', 'last', 'last-<number>'."
@@ -1355,40 +1344,29 @@ msgstr ""
 "无法将 '{}' 转换为事务 ID。\n"
 "请使用 '<number>'、'last'、'last-<number>'。"
 
-#: dnf/cli/commands/history.py:255
+#: dnf/cli/commands/history.py:312
 msgid "No transaction which manipulates package '{}' was found."
 msgstr "没有找到操作软件包 '{}' 的事务。"
 
-#: dnf/cli/commands/history.py:305
-#, fuzzy, python-brace-format
-#| msgid "TransactionItem not found for key: {}"
-msgid "Transaction ID \"{id}\" not found."
-msgstr "找不到键的 TransactionItem: {}"
-
-#: dnf/cli/commands/history.py:313
+#: dnf/cli/commands/history.py:357
 msgid "{} exists, overwrite?"
-msgstr ""
+msgstr "{} 已存在,是否覆盖?"
 
-#: dnf/cli/commands/history.py:316
+#: dnf/cli/commands/history.py:360
 msgid "Not overwriting {}, exiting."
-msgstr ""
+msgstr "不覆盖 {},退出。"
 
-#: dnf/cli/commands/history.py:323
-#, fuzzy
-#| msgid "Transaction failed"
+#: dnf/cli/commands/history.py:367
 msgid "Transaction saved to {}."
-msgstr "事务失败"
+msgstr "事务保存到 {}。"
 
-#: dnf/cli/commands/history.py:326
-#, fuzzy
-#| msgid "Errors occurred during transaction."
+#: dnf/cli/commands/history.py:370
 msgid "Error storing transaction: {}"
-msgstr "事务过程中出现错误。"
+msgstr "存储事务出错:{}"
 
-#: dnf/cli/commands/history.py:350
-msgid ""
-"Warning, the following problems occurred while replaying the transaction:"
-msgstr ""
+#: dnf/cli/commands/history.py:386
+msgid "Warning, the following problems occurred while running a transaction:"
+msgstr "警告,在运行事务时发生以下问题:"
 
 #: dnf/cli/commands/install.py:47
 msgid "install a package or packages on your system"
@@ -1407,7 +1385,7 @@ msgstr "没有任何匹配"
 msgid "Not a valid rpm file path: %s"
 msgstr "RPM文件路径错误:%s"
 
-#: dnf/cli/commands/install.py:167
+#: dnf/cli/commands/install.py:166
 #, python-brace-format
 msgid "There are following alternatives for \"{0}\": {1}"
 msgstr "以下是 \"{0}\" 的替代 : {1}"
@@ -1450,7 +1428,7 @@ msgid "%s marked as group installed."
 msgstr "%s 已标记为已安装软件组。"
 
 #: dnf/cli/commands/mark.py:85 dnf/cli/commands/shell.py:129
-#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:279
+#: dnf/cli/commands/shell.py:237 dnf/cli/commands/shell.py:282
 msgid "Error:"
 msgstr "错误:"
 
@@ -1506,42 +1484,46 @@ msgid "Package {} belongs to multiple modules, skipping"
 msgstr "软件包 {} 属于多个模块,正在跳过"
 
 #: dnf/cli/commands/module.py:277
+msgid "switch a module to a stream and distrosync rpm packages"
+msgstr "将模块切换到流和 distrosync rpm 软件包"
+
+#: dnf/cli/commands/module.py:299
 msgid "list modular packages"
 msgstr "列出模块包"
 
-#: dnf/cli/commands/module.py:292
+#: dnf/cli/commands/module.py:314
 msgid "list packages belonging to a module"
 msgstr "列出属于一个模块的软件包"
 
-#: dnf/cli/commands/module.py:327
+#: dnf/cli/commands/module.py:349
 msgid "Interact with Modules."
 msgstr "与模块交互。"
 
-#: dnf/cli/commands/module.py:340
+#: dnf/cli/commands/module.py:362
 msgid "show only enabled modules"
 msgstr "只显示启用的模块"
 
-#: dnf/cli/commands/module.py:343
+#: dnf/cli/commands/module.py:365
 msgid "show only disabled modules"
 msgstr "只显示禁用的模块"
 
-#: dnf/cli/commands/module.py:346
+#: dnf/cli/commands/module.py:368
 msgid "show only installed modules or packages"
 msgstr "只显示已安装的模块或者软件包"
 
-#: dnf/cli/commands/module.py:349
+#: dnf/cli/commands/module.py:371
 msgid "show profile content"
 msgstr "显示档案内容"
 
-#: dnf/cli/commands/module.py:354
+#: dnf/cli/commands/module.py:376
 msgid "remove all modular packages"
 msgstr "移除所有模块包"
 
-#: dnf/cli/commands/module.py:364
+#: dnf/cli/commands/module.py:386
 msgid "Module specification"
 msgstr "模块规格"
 
-#: dnf/cli/commands/module.py:386
+#: dnf/cli/commands/module.py:408
 msgid "{} {} {}: too few arguments"
 msgstr "{} {} {}: 参数太少"
 
@@ -2026,22 +2008,22 @@ msgstr "KEYWORD"
 msgid "Keyword to search for"
 msgstr "要搜索的关键字"
 
-#: dnf/cli/commands/search.py:61 dnf/cli/output.py:506
+#: dnf/cli/commands/search.py:61 dnf/cli/output.py:460
 msgctxt "long"
 msgid "Name"
 msgstr "名称"
 
-#: dnf/cli/commands/search.py:62 dnf/cli/output.py:559
+#: dnf/cli/commands/search.py:62 dnf/cli/output.py:513
 msgctxt "long"
 msgid "Summary"
 msgstr "概况"
 
-#: dnf/cli/commands/search.py:63 dnf/cli/output.py:569
+#: dnf/cli/commands/search.py:63 dnf/cli/output.py:523
 msgctxt "long"
 msgid "Description"
 msgstr "描述"
 
-#: dnf/cli/commands/search.py:64 dnf/cli/output.py:562
+#: dnf/cli/commands/search.py:64 dnf/cli/output.py:516
 msgid "URL"
 msgstr "URL"
 
@@ -2184,16 +2166,16 @@ msgstr ""
 "run                      解析以及运行事务集\n"
 "exit (或 quit)           退出 shell"
 
-#: dnf/cli/commands/shell.py:259
+#: dnf/cli/commands/shell.py:262
 #, python-format
 msgid "Error: Cannot open %s for reading"
 msgstr "错误:无法打开%s来读取"
 
-#: dnf/cli/commands/shell.py:281 dnf/cli/main.py:187
+#: dnf/cli/commands/shell.py:284 dnf/cli/main.py:187
 msgid "Complete!"
 msgstr "完毕!"
 
-#: dnf/cli/commands/shell.py:291
+#: dnf/cli/commands/shell.py:294
 msgid "Leaving Shell"
 msgstr "离开终端"
 
@@ -2384,8 +2366,8 @@ msgstr "严重性"
 msgid "Files"
 msgstr "文件"
 
-#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1499
-#: dnf/cli/output.py:1772 dnf/cli/output.py:1774
+#: dnf/cli/commands/updateinfo.py:359 dnf/cli/output.py:1652
+#: dnf/cli/output.py:1654 dnf/util.py:591
 msgid "Installed"
 msgstr "已安装"
 
@@ -2706,13 +2688,13 @@ msgstr "无法编码参数 '%s': %s"
 #. Translators: This is abbreviated 'Name'. Should be no longer
 #. than 12 characters. You can use the full version if it is short
 #. enough in your language.
-#: dnf/cli/output.py:505
+#: dnf/cli/output.py:459
 msgctxt "short"
 msgid "Name"
 msgstr "名称"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:511
+#: dnf/cli/output.py:465
 msgid "Epoch"
 msgstr "时期"
 
@@ -2720,38 +2702,38 @@ msgstr "时期"
 #. use the full (unabbreviated) term 'Version' if you think that
 #. the translation to your language is not too long and will
 #. always fit to limited space.
-#: dnf/cli/output.py:512 dnf/cli/output.py:1335
+#: dnf/cli/output.py:466 dnf/cli/output.py:1248
 msgctxt "short"
 msgid "Version"
 msgstr "版本"
 
 #. Translators: This is the full (unabbreviated) term 'Version'.
-#: dnf/cli/output.py:513 dnf/cli/output.py:1337
+#: dnf/cli/output.py:467 dnf/cli/output.py:1250
 msgctxt "long"
 msgid "Version"
 msgstr "版本"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:516
+#: dnf/cli/output.py:470
 msgid "Release"
 msgstr "发布"
 
 #. Translators: This is abbreviated 'Architecture', used when
 #. we have not enough space to display the full word.
-#: dnf/cli/output.py:517 dnf/cli/output.py:1326
+#: dnf/cli/output.py:471 dnf/cli/output.py:1239
 msgctxt "short"
 msgid "Arch"
 msgstr "架构"
 
 #. Translators: This is the full word 'Architecture', used when
 #. we have enough space.
-#: dnf/cli/output.py:518 dnf/cli/output.py:1329
+#: dnf/cli/output.py:472 dnf/cli/output.py:1242
 msgctxt "long"
 msgid "Architecture"
 msgstr "架构"
 
 #. Translators: This is the full (unabbreviated) term 'Size'.
-#: dnf/cli/output.py:520 dnf/cli/output.py:1352
+#: dnf/cli/output.py:474 dnf/cli/output.py:1265
 msgctxt "long"
 msgid "Size"
 msgstr "大小"
@@ -2760,32 +2742,32 @@ msgstr "大小"
 #. not be longer than 5 characters. If the term 'Size' in your
 #. language is not longer than 5 characters then you can use it
 #. unabbreviated.
-#: dnf/cli/output.py:520 dnf/cli/output.py:1350
+#: dnf/cli/output.py:474 dnf/cli/output.py:1263
 msgctxt "short"
 msgid "Size"
 msgstr "大小"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:524
+#: dnf/cli/output.py:478
 msgid "Source"
 msgstr "源"
 
 #. Translators: This is abbreviated 'Repository', used when
 #. we have not enough space to display the full word.
-#: dnf/cli/output.py:525 dnf/cli/output.py:1341
+#: dnf/cli/output.py:479 dnf/cli/output.py:1254
 msgctxt "short"
 msgid "Repo"
 msgstr "仓库"
 
 #. Translators: This is the full word 'Repository', used when
 #. we have enough space.
-#: dnf/cli/output.py:526 dnf/cli/output.py:1344
+#: dnf/cli/output.py:480 dnf/cli/output.py:1257
 msgctxt "long"
 msgid "Repository"
 msgstr "仓库"
 
 #. Translators: This message should be no longer than 12 chars.
-#: dnf/cli/output.py:533
+#: dnf/cli/output.py:487
 msgid "From repo"
 msgstr "来自仓库"
 
@@ -2793,312 +2775,308 @@ msgstr "来自仓库"
 #. print(_("Committer   : %s") % ucd(pkg.committer))
 #. print(_("Committime  : %s") % time.ctime(pkg.committime))
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:539
+#: dnf/cli/output.py:493
 msgid "Packager"
 msgstr "打包者"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:541
+#: dnf/cli/output.py:495
 msgid "Buildtime"
 msgstr "构建时间"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:545
+#: dnf/cli/output.py:499
 msgid "Install time"
 msgstr "安装时间"
 
 #. Translators: This message should be no longer than 12 chars.
-#: dnf/cli/output.py:554
+#: dnf/cli/output.py:508
 msgid "Installed by"
 msgstr "安装者"
 
 #. Translators: This is abbreviated 'Summary'. Should be no longer
 #. than 12 characters. You can use the full version if it is short
 #. enough in your language.
-#: dnf/cli/output.py:558
+#: dnf/cli/output.py:512
 msgctxt "short"
 msgid "Summary"
 msgstr "概况"
 
 #. Translators: This message should be no longer than 12 characters.
-#: dnf/cli/output.py:564
+#: dnf/cli/output.py:518
 msgid "License"
 msgstr "协议"
 
 #. Translators: This is abbreviated 'Description'. Should be no longer
 #. than 12 characters. You can use the full version if it is short
 #. enough in your language.
-#: dnf/cli/output.py:568
+#: dnf/cli/output.py:522
 msgctxt "short"
 msgid "Description"
 msgstr "描述"
 
-#: dnf/cli/output.py:695
-msgid "No packages to list"
-msgstr "没有可以列出的软件包"
-
-#: dnf/cli/output.py:706
+#: dnf/cli/output.py:650
 msgid "y"
 msgstr "y"
 
-#: dnf/cli/output.py:706
+#: dnf/cli/output.py:650
 msgid "yes"
 msgstr "是"
 
-#: dnf/cli/output.py:707
+#: dnf/cli/output.py:651
 msgid "n"
 msgstr "n"
 
-#: dnf/cli/output.py:707
+#: dnf/cli/output.py:651
 msgid "no"
 msgstr "否"
 
-#: dnf/cli/output.py:711
+#: dnf/cli/output.py:655
 msgid "Is this ok [y/N]: "
 msgstr "确定吗?[y/N]: "
 
-#: dnf/cli/output.py:715
+#: dnf/cli/output.py:659
 msgid "Is this ok [Y/n]: "
 msgstr "确定吗?[Y/n]: "
 
-#: dnf/cli/output.py:795
+#: dnf/cli/output.py:739
 #, python-format
 msgid "Group: %s"
 msgstr "组:%s"
 
-#: dnf/cli/output.py:799
+#: dnf/cli/output.py:743
 #, python-format
 msgid " Group-Id: %s"
 msgstr " 组编号:%s"
 
-#: dnf/cli/output.py:801 dnf/cli/output.py:840
+#: dnf/cli/output.py:745 dnf/cli/output.py:784
 #, python-format
 msgid " Description: %s"
 msgstr " 描述:%s"
 
-#: dnf/cli/output.py:803
+#: dnf/cli/output.py:747
 #, python-format
 msgid " Language: %s"
 msgstr " 语言:%s"
 
-#: dnf/cli/output.py:806
+#: dnf/cli/output.py:750
 msgid " Mandatory Packages:"
 msgstr " 必要的软件包:"
 
-#: dnf/cli/output.py:807
+#: dnf/cli/output.py:751
 msgid " Default Packages:"
 msgstr " 默认的软件包:"
 
-#: dnf/cli/output.py:808
+#: dnf/cli/output.py:752
 msgid " Optional Packages:"
 msgstr " 可选的软件包:"
 
-#: dnf/cli/output.py:809
+#: dnf/cli/output.py:753
 msgid " Conditional Packages:"
 msgstr " 可能的软件包:"
 
-#: dnf/cli/output.py:834
+#: dnf/cli/output.py:778
 #, python-format
 msgid "Environment Group: %s"
 msgstr "环境组:%s"
 
-#: dnf/cli/output.py:837
+#: dnf/cli/output.py:781
 #, python-format
 msgid " Environment-Id: %s"
 msgstr " 环境-Id:%s"
 
-#: dnf/cli/output.py:843
+#: dnf/cli/output.py:787
 msgid " Mandatory Groups:"
 msgstr " 必选软件包组:"
 
-#: dnf/cli/output.py:844
+#: dnf/cli/output.py:788
 msgid " Optional Groups:"
 msgstr " 可选软件包组:"
 
-#: dnf/cli/output.py:865
+#: dnf/cli/output.py:809
 msgid "Matched from:"
 msgstr "匹配来源:"
 
-#: dnf/cli/output.py:879
+#: dnf/cli/output.py:823
 #, python-format
 msgid "Filename    : %s"
 msgstr "文件名    :%s"
 
-#: dnf/cli/output.py:904
+#: dnf/cli/output.py:848
 #, python-format
 msgid "Repo        : %s"
 msgstr "仓库        :%s"
 
-#: dnf/cli/output.py:913
+#: dnf/cli/output.py:857
 msgid "Description : "
 msgstr "描述: "
 
-#: dnf/cli/output.py:917
+#: dnf/cli/output.py:861
 #, python-format
 msgid "URL         : %s"
 msgstr "网址         :%s"
 
-#: dnf/cli/output.py:921
+#: dnf/cli/output.py:865
 #, python-format
 msgid "License     : %s"
 msgstr "协议     :%s"
 
-#: dnf/cli/output.py:927
+#: dnf/cli/output.py:871
 #, python-format
 msgid "Provide    : %s"
 msgstr "提供    : %s"
 
-#: dnf/cli/output.py:947
+#: dnf/cli/output.py:891
 #, python-format
 msgid "Other       : %s"
 msgstr "其它       : %s"
 
-#: dnf/cli/output.py:996
+#: dnf/cli/output.py:940
 msgid "There was an error calculating total download size"
 msgstr "计算总下载量时出错"
 
-#: dnf/cli/output.py:1002
+#: dnf/cli/output.py:946
 #, python-format
 msgid "Total size: %s"
 msgstr "总计:%s"
 
-#: dnf/cli/output.py:1005
+#: dnf/cli/output.py:949
 #, python-format
 msgid "Total download size: %s"
 msgstr "总下载:%s"
 
-#: dnf/cli/output.py:1008
+#: dnf/cli/output.py:952
 #, python-format
 msgid "Installed size: %s"
 msgstr "安装大小:%s"
 
-#: dnf/cli/output.py:1026
+#: dnf/cli/output.py:970
 msgid "There was an error calculating installed size"
 msgstr "计算安装大小时出错"
 
-#: dnf/cli/output.py:1030
+#: dnf/cli/output.py:974
 #, python-format
 msgid "Freed space: %s"
 msgstr "将会释放空间:%s"
 
-#: dnf/cli/output.py:1039
+#: dnf/cli/output.py:983
 msgid "Marking packages as installed by the group:"
 msgstr "标记软件包为遵循软件包组安装的:"
 
-#: dnf/cli/output.py:1046
+#: dnf/cli/output.py:990
 msgid "Marking packages as removed by the group:"
 msgstr "标记软件包为遵循软件包组移除的:"
 
-#: dnf/cli/output.py:1056
+#: dnf/cli/output.py:1000
 msgid "Group"
 msgstr "组"
 
-#: dnf/cli/output.py:1056
+#: dnf/cli/output.py:1000
 msgid "Packages"
 msgstr "软件包"
 
-#: dnf/cli/output.py:1133
+#: dnf/cli/output.py:1046
 msgid "Installing group/module packages"
 msgstr "安装组/模块包"
 
-#: dnf/cli/output.py:1134
+#: dnf/cli/output.py:1047
 msgid "Installing group packages"
 msgstr "安装软件包组"
 
 #. TRANSLATORS: This is for a list of packages to be installed.
-#: dnf/cli/output.py:1138
+#: dnf/cli/output.py:1051
 msgctxt "summary"
 msgid "Installing"
 msgstr "安装"
 
 #. TRANSLATORS: This is for a list of packages to be upgraded.
-#: dnf/cli/output.py:1140
+#: dnf/cli/output.py:1053
 msgctxt "summary"
 msgid "Upgrading"
 msgstr "升级"
 
 #. TRANSLATORS: This is for a list of packages to be reinstalled.
-#: dnf/cli/output.py:1142
+#: dnf/cli/output.py:1055
 msgctxt "summary"
 msgid "Reinstalling"
 msgstr "重新安装"
 
-#: dnf/cli/output.py:1144
+#: dnf/cli/output.py:1057
 msgid "Installing dependencies"
 msgstr "安装依赖关系"
 
-#: dnf/cli/output.py:1145
+#: dnf/cli/output.py:1058
 msgid "Installing weak dependencies"
 msgstr "安装弱的依赖"
 
 #. TRANSLATORS: This is for a list of packages to be removed.
-#: dnf/cli/output.py:1147
+#: dnf/cli/output.py:1060
 msgid "Removing"
 msgstr "移除"
 
-#: dnf/cli/output.py:1148
+#: dnf/cli/output.py:1061
 msgid "Removing dependent packages"
 msgstr "移除依赖的软件包"
 
-#: dnf/cli/output.py:1149
+#: dnf/cli/output.py:1062
 msgid "Removing unused dependencies"
 msgstr "清除未被使用的依赖关系"
 
 #. TRANSLATORS: This is for a list of packages to be downgraded.
-#: dnf/cli/output.py:1151
+#: dnf/cli/output.py:1064
 msgctxt "summary"
 msgid "Downgrading"
 msgstr "降级"
 
-#: dnf/cli/output.py:1176
+#: dnf/cli/output.py:1089
 msgid "Installing module profiles"
 msgstr "安装模块配置档案"
 
-#: dnf/cli/output.py:1185
+#: dnf/cli/output.py:1098
 msgid "Disabling module profiles"
 msgstr "禁用模块配置档案"
 
-#: dnf/cli/output.py:1194
+#: dnf/cli/output.py:1107
 msgid "Enabling module streams"
 msgstr "启用模块流"
 
-#: dnf/cli/output.py:1202
+#: dnf/cli/output.py:1115
 msgid "Switching module streams"
 msgstr "切换模块流"
 
-#: dnf/cli/output.py:1210
+#: dnf/cli/output.py:1123
 msgid "Disabling modules"
 msgstr "禁用模块"
 
-#: dnf/cli/output.py:1218
+#: dnf/cli/output.py:1131
 msgid "Resetting modules"
 msgstr "重置模块"
 
-#: dnf/cli/output.py:1230
+#: dnf/cli/output.py:1143
 msgid "Installing Environment Groups"
 msgstr "安装环境组"
 
-#: dnf/cli/output.py:1237
+#: dnf/cli/output.py:1150
 msgid "Upgrading Environment Groups"
 msgstr "升级环境组"
 
-#: dnf/cli/output.py:1244
+#: dnf/cli/output.py:1157
 msgid "Removing Environment Groups"
 msgstr "删除环境组"
 
-#: dnf/cli/output.py:1251
+#: dnf/cli/output.py:1164
 msgid "Installing Groups"
 msgstr "安装组"
 
-#: dnf/cli/output.py:1258
+#: dnf/cli/output.py:1171
 msgid "Upgrading Groups"
 msgstr "升级组"
 
-#: dnf/cli/output.py:1265
+#: dnf/cli/output.py:1178
 msgid "Removing Groups"
 msgstr "删除组"
 
-#: dnf/cli/output.py:1281
+#: dnf/cli/output.py:1194
 #, python-format
 msgid ""
 "Skipping packages with conflicts:\n"
@@ -3107,12 +3085,12 @@ msgstr ""
 "跳过有冲突的软件包:\n"
 "(添加 '%s' 至命令行来强制升级)"
 
-#: dnf/cli/output.py:1291
+#: dnf/cli/output.py:1204
 #, python-format
 msgid "Skipping packages with broken dependencies%s"
 msgstr "跳过存在损坏依赖关系的软件包 %s"
 
-#: dnf/cli/output.py:1295
+#: dnf/cli/output.py:1208
 msgid " or part of a group"
 msgstr " 或一个组的一部分"
 
@@ -3120,22 +3098,22 @@ msgstr " 或一个组的一部分"
 #. use the full (unabbreviated) term 'Package' if you think that
 #. the translation to your language is not too long and will
 #. always fit to limited space.
-#: dnf/cli/output.py:1320
+#: dnf/cli/output.py:1233
 msgctxt "short"
 msgid "Package"
 msgstr "软件包"
 
 #. Translators: This is the full (unabbreviated) term 'Package'.
-#: dnf/cli/output.py:1322
+#: dnf/cli/output.py:1235
 msgctxt "long"
 msgid "Package"
 msgstr "软件包"
 
-#: dnf/cli/output.py:1371
+#: dnf/cli/output.py:1284
 msgid "replacing"
 msgstr "替换"
 
-#: dnf/cli/output.py:1378
+#: dnf/cli/output.py:1291
 #, python-format
 msgid ""
 "\n"
@@ -3147,287 +3125,271 @@ msgstr ""
 "%s\n"
 
 #. TODO: remove
-#: dnf/cli/output.py:1383 dnf/cli/output.py:1932 dnf/cli/output.py:1933
+#: dnf/cli/output.py:1296 dnf/cli/output.py:1812 dnf/cli/output.py:1813
 msgid "Install"
 msgstr "安装"
 
-#: dnf/cli/output.py:1387 dnf/cli/output.py:1941
+#: dnf/cli/output.py:1300 dnf/cli/output.py:1821
 msgid "Upgrade"
 msgstr "升级"
 
-#: dnf/cli/output.py:1388
+#: dnf/cli/output.py:1301
 msgid "Remove"
 msgstr "移除"
 
-#: dnf/cli/output.py:1390 dnf/cli/output.py:1939
+#: dnf/cli/output.py:1303 dnf/cli/output.py:1819
 msgid "Downgrade"
 msgstr "降级"
 
-#: dnf/cli/output.py:1391
+#: dnf/cli/output.py:1304
 msgid "Skip"
 msgstr "跳过"
 
-#: dnf/cli/output.py:1400 dnf/cli/output.py:1416
+#: dnf/cli/output.py:1313 dnf/cli/output.py:1329
 msgid "Package"
 msgid_plural "Packages"
 msgstr[0] "软件包"
 
-#: dnf/cli/output.py:1418
+#: dnf/cli/output.py:1331
 msgid "Dependent package"
 msgid_plural "Dependent packages"
 msgstr[0] "依赖软件包"
 
-#: dnf/cli/output.py:1497 dnf/cli/output.py:1773 dnf/cli/output.py:1942
-msgid "Upgraded"
-msgstr "已升级"
-
-#: dnf/cli/output.py:1498 dnf/cli/output.py:1773 dnf/cli/output.py:1940
-msgid "Downgraded"
-msgstr "已降级"
-
-#: dnf/cli/output.py:1503
-msgid "Reinstalled"
-msgstr "已重装"
-
-#: dnf/cli/output.py:1504
-msgid "Skipped"
-msgstr "已跳过"
-
-#: dnf/cli/output.py:1505
-msgid "Removed"
-msgstr "已移除"
-
-#: dnf/cli/output.py:1508
-msgid "Failed"
-msgstr "失败"
-
-#: dnf/cli/output.py:1559
+#: dnf/cli/output.py:1439
 msgid "Total"
 msgstr "总计"
 
-#: dnf/cli/output.py:1587
+#: dnf/cli/output.py:1467
 msgid "<unset>"
 msgstr "<空>"
 
-#: dnf/cli/output.py:1588
+#: dnf/cli/output.py:1468
 msgid "System"
 msgstr "系统"
 
-#: dnf/cli/output.py:1638
+#: dnf/cli/output.py:1518
 msgid "Command line"
 msgstr "命令行"
 
 #. TRANSLATORS: user names who executed transaction in history command output
-#: dnf/cli/output.py:1649
+#: dnf/cli/output.py:1529
 msgid "User name"
 msgstr "用户名"
 
-#: dnf/cli/output.py:1651
+#: dnf/cli/output.py:1531
 msgid "ID"
 msgstr "ID"
 
-#: dnf/cli/output.py:1653
+#: dnf/cli/output.py:1533
 msgid "Date and time"
 msgstr "日期和时间"
 
-#: dnf/cli/output.py:1654
+#: dnf/cli/output.py:1534
 msgid "Action(s)"
 msgstr "操作"
 
-#: dnf/cli/output.py:1655
+#: dnf/cli/output.py:1535
 msgid "Altered"
 msgstr "更改"
 
-#: dnf/cli/output.py:1698
+#: dnf/cli/output.py:1578
 msgid "No transactions"
 msgstr "没有事务"
 
-#: dnf/cli/output.py:1699 dnf/cli/output.py:1715
+#: dnf/cli/output.py:1579 dnf/cli/output.py:1595
 msgid "Failed history info"
 msgstr "失败的历史信息"
 
-#: dnf/cli/output.py:1714
+#: dnf/cli/output.py:1594
 msgid "No transaction ID, or package, given"
 msgstr "未指定事务 ID、或者软件包"
 
-#: dnf/cli/output.py:1772
+#: dnf/cli/output.py:1652
 msgid "Erased"
 msgstr "已删除"
 
-#: dnf/cli/output.py:1774
+#: dnf/cli/output.py:1653 dnf/cli/output.py:1820 dnf/util.py:590
+msgid "Downgraded"
+msgstr "已降级"
+
+#: dnf/cli/output.py:1653 dnf/cli/output.py:1822 dnf/util.py:589
+msgid "Upgraded"
+msgstr "已升级"
+
+#: dnf/cli/output.py:1654
 msgid "Not installed"
 msgstr "未安装"
 
-#: dnf/cli/output.py:1775
+#: dnf/cli/output.py:1655
 msgid "Newer"
 msgstr "较早的"
 
-#: dnf/cli/output.py:1775
+#: dnf/cli/output.py:1655
 msgid "Older"
 msgstr "较老的"
 
-#: dnf/cli/output.py:1823 dnf/cli/output.py:1825
+#: dnf/cli/output.py:1703 dnf/cli/output.py:1705
 msgid "Transaction ID :"
 msgstr "事务 ID:"
 
-#: dnf/cli/output.py:1828
+#: dnf/cli/output.py:1708
 msgid "Begin time     :"
 msgstr "起始时间    :"
 
-#: dnf/cli/output.py:1831 dnf/cli/output.py:1833
+#: dnf/cli/output.py:1711 dnf/cli/output.py:1713
 msgid "Begin rpmdb    :"
 msgstr "起始 RPM 数据库     :"
 
-#: dnf/cli/output.py:1839
+#: dnf/cli/output.py:1719
 #, python-format
 msgid "(%u seconds)"
 msgstr "(%u 秒)"
 
-#: dnf/cli/output.py:1841
+#: dnf/cli/output.py:1721
 #, python-format
 msgid "(%u minutes)"
 msgstr "(%u 分钟)"
 
-#: dnf/cli/output.py:1843
+#: dnf/cli/output.py:1723
 #, python-format
 msgid "(%u hours)"
 msgstr "(%u 小时)"
 
-#: dnf/cli/output.py:1845
+#: dnf/cli/output.py:1725
 #, python-format
 msgid "(%u days)"
 msgstr "(%u 天)"
 
-#: dnf/cli/output.py:1846
+#: dnf/cli/output.py:1726
 msgid "End time       :"
 msgstr "结束时间       :"
 
-#: dnf/cli/output.py:1849 dnf/cli/output.py:1851
+#: dnf/cli/output.py:1729 dnf/cli/output.py:1731
 msgid "End rpmdb      :"
 msgstr "结束 RPM 数据库      :"
 
-#: dnf/cli/output.py:1858 dnf/cli/output.py:1860
+#: dnf/cli/output.py:1738 dnf/cli/output.py:1740
 msgid "User           :"
 msgstr "用户           :"
 
-#: dnf/cli/output.py:1864 dnf/cli/output.py:1871
+#: dnf/cli/output.py:1744 dnf/cli/output.py:1751
 msgid "Aborted"
 msgstr "已终止"
 
-#: dnf/cli/output.py:1864 dnf/cli/output.py:1867 dnf/cli/output.py:1869
-#: dnf/cli/output.py:1871 dnf/cli/output.py:1873 dnf/cli/output.py:1875
+#: dnf/cli/output.py:1744 dnf/cli/output.py:1747 dnf/cli/output.py:1749
+#: dnf/cli/output.py:1751 dnf/cli/output.py:1753 dnf/cli/output.py:1755
 msgid "Return-Code    :"
 msgstr "返回码    :"
 
-#: dnf/cli/output.py:1867 dnf/cli/output.py:1875
+#: dnf/cli/output.py:1747 dnf/cli/output.py:1755
 msgid "Success"
 msgstr "成功"
 
-#: dnf/cli/output.py:1869
+#: dnf/cli/output.py:1749
 msgid "Failures:"
 msgstr "失败:"
 
-#: dnf/cli/output.py:1873
+#: dnf/cli/output.py:1753
 msgid "Failure:"
 msgstr "失败:"
 
-#: dnf/cli/output.py:1883 dnf/cli/output.py:1885
+#: dnf/cli/output.py:1763 dnf/cli/output.py:1765
 msgid "Releasever     :"
 msgstr "Releasever     :"
 
-#: dnf/cli/output.py:1890 dnf/cli/output.py:1892
+#: dnf/cli/output.py:1770 dnf/cli/output.py:1772
 msgid "Command Line   :"
 msgstr "命令行   :"
 
-#: dnf/cli/output.py:1897 dnf/cli/output.py:1899
+#: dnf/cli/output.py:1777 dnf/cli/output.py:1779
 msgid "Comment        :"
 msgstr "注释        :"
 
-#: dnf/cli/output.py:1903
+#: dnf/cli/output.py:1783
 msgid "Transaction performed with:"
 msgstr "事务完成由:"
 
-#: dnf/cli/output.py:1912
+#: dnf/cli/output.py:1792
 msgid "Packages Altered:"
 msgstr "已改变的包:"
 
-#: dnf/cli/output.py:1918
+#: dnf/cli/output.py:1798
 msgid "Scriptlet output:"
 msgstr "Scriptlet 输出:"
 
-#: dnf/cli/output.py:1925
+#: dnf/cli/output.py:1805
 msgid "Errors:"
 msgstr "错误:"
 
-#: dnf/cli/output.py:1934
+#: dnf/cli/output.py:1814
 msgid "Dep-Install"
 msgstr "依赖安装"
 
-#: dnf/cli/output.py:1935
+#: dnf/cli/output.py:1815
 msgid "Obsoleted"
 msgstr "已废弃"
 
-#: dnf/cli/output.py:1936 dnf/transaction.py:84 dnf/transaction.py:85
+#: dnf/cli/output.py:1816 dnf/transaction.py:84 dnf/transaction.py:85
 msgid "Obsoleting"
 msgstr "废弃"
 
-#: dnf/cli/output.py:1937
+#: dnf/cli/output.py:1817
 msgid "Erase"
 msgstr "删除"
 
-#: dnf/cli/output.py:1938
+#: dnf/cli/output.py:1818
 msgid "Reinstall"
 msgstr "重装"
 
-#: dnf/cli/output.py:2016
+#: dnf/cli/output.py:1892
 #, python-format
 msgid "---> Package %s.%s %s will be installed"
 msgstr "---> 软件包 %s.%s %s 将会被安装"
 
-#: dnf/cli/output.py:2018
+#: dnf/cli/output.py:1894
 #, python-format
 msgid "---> Package %s.%s %s will be an upgrade"
 msgstr "---> 软件包 %s.%s %s 将作为一个更新"
 
-#: dnf/cli/output.py:2020
+#: dnf/cli/output.py:1896
 #, python-format
 msgid "---> Package %s.%s %s will be erased"
 msgstr "---> 软件包 %s.%s %s 将会被清除"
 
-#: dnf/cli/output.py:2022
+#: dnf/cli/output.py:1898
 #, python-format
 msgid "---> Package %s.%s %s will be reinstalled"
 msgstr "---> 软件包 %s.%s %s 将会被重新安装"
 
-#: dnf/cli/output.py:2024
+#: dnf/cli/output.py:1900
 #, python-format
 msgid "---> Package %s.%s %s will be a downgrade"
 msgstr "---> 软件包 %s.%s %s 将会被降级"
 
-#: dnf/cli/output.py:2026
+#: dnf/cli/output.py:1902
 #, python-format
 msgid "---> Package %s.%s %s will be obsoleting"
 msgstr "---> 软件包 %s.%s %s 将会废弃"
 
-#: dnf/cli/output.py:2028
+#: dnf/cli/output.py:1904
 #, python-format
 msgid "---> Package %s.%s %s will be upgraded"
 msgstr "---> 软件包 %s.%s %s 将会被升级"
 
-#: dnf/cli/output.py:2030
+#: dnf/cli/output.py:1906
 #, python-format
 msgid "---> Package %s.%s %s will be obsoleted"
 msgstr "---> 软件包 %s.%s %s 将会被废弃"
 
-#: dnf/cli/output.py:2039
+#: dnf/cli/output.py:1915
 msgid "--> Starting dependency resolution"
 msgstr "--> 开始解决依赖关系"
 
-#: dnf/cli/output.py:2044
+#: dnf/cli/output.py:1919
 msgid "--> Finished dependency resolution"
 msgstr "--> 依赖关系解决完成"
 
-#: dnf/cli/output.py:2058 dnf/crypto.py:132
+#: dnf/cli/output.py:1933 dnf/crypto.py:132
 #, python-format
 msgid ""
 "Importing GPG key 0x%s:\n"
@@ -3509,16 +3471,14 @@ msgid "Module or Group '%s' does not exist."
 msgstr "模块或者组 '%s' 不存在。"
 
 #: dnf/comps.py:599
-#, fuzzy, python-format
-#| msgid "Environment '%s' is not installed."
+#, python-format
 msgid "Environment id '%s' does not exist."
-msgstr "环境组 '%s' 没有安装。"
+msgstr "环境 id '%s' 不存在。"
 
-#: dnf/comps.py:622 dnf/transaction_sr.py:443 dnf/transaction_sr.py:453
-#, fuzzy, python-format
-#| msgid "Environment '%s' is not installed."
+#: dnf/comps.py:622 dnf/transaction_sr.py:477 dnf/transaction_sr.py:487
+#, python-format
 msgid "Environment id '%s' is not installed."
-msgstr "环境组 '%s' 没有安装。"
+msgstr "环境 id '%s' 没有安装。"
 
 #: dnf/comps.py:639
 #, python-format
@@ -3531,10 +3491,9 @@ msgid "Environment '%s' is not available."
 msgstr "环境 '%s' 不可用。"
 
 #: dnf/comps.py:673
-#, fuzzy, python-format
-#| msgid "Group_id '%s' does not exist."
+#, python-format
 msgid "Group id '%s' does not exist."
-msgstr "Group_id '%s' 不存在。"
+msgstr "组 id '%s' 不存在。"
 
 #: dnf/conf/config.py:136
 #, python-format
@@ -3593,7 +3552,7 @@ msgstr "repo 的 id 无效: {} ({}), byte = {} {}"
 
 #: dnf/conf/read.py:67
 msgid "Bad id for repo: {}, byte = {} {}"
-msgstr "repo 的 id 无效: %s, byte = %s %d"
+msgstr "repo 的 id 无效: {}, byte = {} {}"
 
 #: dnf/conf/read.py:75
 msgid "Repository '{}' ({}): Error parsing config: {}"
@@ -3625,6 +3584,11 @@ msgstr "repo %s: 0x%s 已被导入"
 msgid "repo %s: imported key 0x%s."
 msgstr "repo %s: 已导入密钥 0x%s。"
 
+#: dnf/crypto.py:177
+#, python-format
+msgid "retrieving repo key for %s unencrypted from %s"
+msgstr "为 %s 从 %s 获取的 repo 密钥未加密"
+
 #: dnf/db/group.py:293
 msgid ""
 "No available modular metadata for modular package '{}', it cannot be "
@@ -3707,7 +3671,7 @@ msgid "Modular dependency problem with Defaults:"
 msgid_plural "Modular dependency problems with Defaults:"
 msgstr[0] "默认设置中的模块依赖问题 :"
 
-#: dnf/exceptions.py:131 dnf/module/module_base.py:686
+#: dnf/exceptions.py:131 dnf/module/module_base.py:841
 msgid "Modular dependency problem:"
 msgid_plural "Modular dependency problems:"
 msgstr[0] "模块依赖问题:"
@@ -3761,27 +3725,27 @@ msgstr ""
 "\n"
 "提示 : [d]默认, [e]启用, [x]禁用, [i]已安装的, [a]活跃的"
 
-#: dnf/module/module_base.py:54 dnf/module/module_base.py:421
-#: dnf/module/module_base.py:477 dnf/module/module_base.py:543
+#: dnf/module/module_base.py:54 dnf/module/module_base.py:547
+#: dnf/module/module_base.py:603 dnf/module/module_base.py:669
 msgid "Ignoring unnecessary profile: '{}/{}'"
 msgstr "正在忽略无用的配置文件'{}/{}'"
 
 #: dnf/module/module_base.py:84
 #, python-brace-format
 msgid "All matches for argument '{0}' in module '{1}:{2}' are not active"
-msgstr "模块 '{1}:{2}' 中参数 '{0}' 的所有匹配项目都未激活"
+msgstr "模块 '{1}:{2}' 中的参数 '{0}' 的所有匹配项目都未激活"
 
-#: dnf/module/module_base.py:92
+#: dnf/module/module_base.py:92 dnf/module/module_base.py:202
 #, python-brace-format
 msgid "Installing module '{0}' from Fail-Safe repository {1} is not allowed"
-msgstr "不允许从失效保险仓库 {1} 安装模块 '{0}'"
+msgstr "不允许从 Fail-Safe repository {1} 安装模块 '{0}'"
 
-#: dnf/module/module_base.py:102
+#: dnf/module/module_base.py:102 dnf/module/module_base.py:212
 msgid ""
 "Unable to match profile for argument {}. Available profiles for '{}:{}': {}"
 msgstr "不能为参数 {} 匹配配置文件。'{}:{}' 可用的配置文件为 : {}"
 
-#: dnf/module/module_base.py:106
+#: dnf/module/module_base.py:106 dnf/module/module_base.py:216
 msgid "Unable to match profile for argument {}"
 msgstr "无法配置参数 {} 中的配置档案"
 
@@ -3797,41 +3761,55 @@ msgstr "没有模块 {}:{} 的配置文件"
 msgid "Default profile {} not available in module {}:{}"
 msgstr "默认配置文件 {} 在模块 {}:{} 中不可用"
 
-#: dnf/module/module_base.py:142
+#: dnf/module/module_base.py:142 dnf/module/module_base.py:245
 msgid "Installing module from Fail-Safe repository is not allowed"
 msgstr "不允许从失效保险仓库中安装模块"
 
-#: dnf/module/module_base.py:159 dnf/module/module_base.py:193
-#: dnf/module/module_base.py:337 dnf/module/module_base.py:355
-#: dnf/module/module_base.py:363 dnf/module/module_base.py:417
-#: dnf/module/module_base.py:473 dnf/module/module_base.py:539
+#: dnf/module/module_base.py:194
+#, python-brace-format
+msgid "No active matches for argument '{0}' in module '{1}:{2}'"
+msgstr "模块 '{1}:{2}' 中的参数 '{0}' 没有活跃的匹配"
+
+#: dnf/module/module_base.py:226
+#, python-brace-format
+msgid "Installed profile '{0}' is not available in module '{1}' stream '{2}'"
+msgstr "在模块 '{1}' 流 '{2}' 中没有安装的配置集 '{0}'"
+
+#: dnf/module/module_base.py:265
+msgid "No packages available to distrosync for package name '{}'"
+msgstr "软件包名称 '{}' 没有可用的软件包用于 distrosync"
+
+#: dnf/module/module_base.py:308 dnf/module/module_base.py:452
+#: dnf/module/module_base.py:477 dnf/module/module_base.py:496
+#: dnf/module/module_base.py:543 dnf/module/module_base.py:599
+#: dnf/module/module_base.py:665 dnf/module/module_base.py:827
 msgid "Unable to resolve argument {}"
 msgstr "无法解析参数 {}"
 
-#: dnf/module/module_base.py:160
-msgid "No match for package {}"
-msgstr "没有和{}匹配的软件包"
-
-#: dnf/module/module_base.py:204
+#: dnf/module/module_base.py:319
 #, python-brace-format
 msgid "Upgrading module '{0}' from Fail-Safe repository {1} is not allowed"
 msgstr "不允许从失效保险仓库 {1} 中升级模块 '{0}'"
 
-#: dnf/module/module_base.py:223 dnf/module/module_base.py:251
+#: dnf/module/module_base.py:338 dnf/module/module_base.py:366
 msgid "Unable to match profile in argument {}"
 msgstr "无法匹配参数 {} 中的配置档案"
 
-#: dnf/module/module_base.py:231
+#: dnf/module/module_base.py:346
 msgid "Upgrading module from Fail-Safe repository is not allowed"
 msgstr "不允许从失效保险仓库中升级模块"
 
-#: dnf/module/module_base.py:367
+#: dnf/module/module_base.py:500
 msgid ""
 "Only module name is required. Ignoring unneeded information in argument: "
 "'{}'"
 msgstr "只需要模块名。正在忽略'{}'中的无用信息"
 
-#: dnf/package.py:298
+#: dnf/module/module_base.py:828
+msgid "No match for package {}"
+msgstr "没有和{}匹配的软件包"
+
+#: dnf/package.py:333
 #, python-format
 msgid "%s: %s check failed: %s vs %s"
 msgstr "%s: %s 检查失败:%s vs %s"
@@ -3845,12 +3823,12 @@ msgstr "%s 为空文件"
 #: dnf/persistor.py:91
 #, python-format
 msgid "Failed to load expired repos cache: %s"
-msgstr ""
+msgstr "加载过期的仓库缓存失败: %s"
 
 #: dnf/persistor.py:99
 #, python-format
 msgid "Failed to store expired repos cache: %s"
-msgstr ""
+msgstr "存储已过期的仓库缓存失败: %s"
 
 #: dnf/persistor.py:106
 msgid "Failed storing last makecache time."
@@ -3912,6 +3890,12 @@ msgstr "已添加 %s 仓库来自 %s"
 msgid "Errors occurred during test transaction."
 msgstr "测试事务过程中出现错误。"
 
+#: dnf/sack.py:47
+msgid ""
+"allow_vendor_change is disabled. This option is currently not supported for "
+"downgrade and distro-sync commands"
+msgstr "allow_vendor_change 被禁用。目前不支持 downgrade 和 distro-sync 命令"
+
 #. TRANSLATORS: This is for a single package currently being downgraded.
 #: dnf/transaction.py:80
 msgctxt "currently"
@@ -3958,164 +3942,196 @@ msgstr "运行脚本"
 msgid "Preparing"
 msgstr "准备中"
 
-#: dnf/transaction_sr.py:60
+#: dnf/transaction_sr.py:66
 #, python-brace-format
-msgid "Errors in \"{filename}\":"
-msgstr ""
+msgid ""
+"The following problems occurred while replaying the transaction from file "
+"\"{filename}\":"
+msgstr "在从文件 \"{filename}\" replay 事务时发生以下问题:"
 
-#: dnf/transaction_sr.py:70
-#, python-brace-format
-msgid "Error in \"{filename}\": {error}"
-msgstr ""
+#: dnf/transaction_sr.py:68
+msgid "The following problems occurred while running a transaction:"
+msgstr "运行事务时发生以下问题:"
 
-#: dnf/transaction_sr.py:87
+#: dnf/transaction_sr.py:89
 #, python-brace-format
 msgid "Invalid major version \"{major}\", number expected."
-msgstr ""
+msgstr "无效的主版本 \"{major}\",需要是数字。"
 
-#: dnf/transaction_sr.py:95
+#: dnf/transaction_sr.py:97
 #, python-brace-format
 msgid "Invalid minor version \"{minor}\", number expected."
-msgstr ""
+msgstr "无效的次版本 \"{minor}\",需要是数字。"
 
-#: dnf/transaction_sr.py:101
+#: dnf/transaction_sr.py:103
 #, python-brace-format
 msgid ""
 "Incompatible major version \"{major}\", supported major version is "
 "\"{major_supp}\"."
-msgstr ""
+msgstr "不兼容的主版本 \"{major}\",支持的主版本是 \"{major_supp}\"。"
 
-#: dnf/transaction_sr.py:244
+#: dnf/transaction_sr.py:224
+msgid ""
+"Conflicting TransactionReplay arguments have been specified: filename, data"
+msgstr "指定了有冲突的 TransactionReplay 参数: filename、data"
+
+#: dnf/transaction_sr.py:265
 #, python-brace-format
 msgid "Unexpected type of \"{id}\", {exp} expected."
-msgstr ""
+msgstr "意外类型 \"{id}\",需要是 {exp}。"
 
-#: dnf/transaction_sr.py:250
+#: dnf/transaction_sr.py:271
 #, python-brace-format
 msgid "Missing key \"{key}\"."
-msgstr ""
+msgstr "缺少键 \"{key}\"。"
 
-#: dnf/transaction_sr.py:263
+#: dnf/transaction_sr.py:285
 #, python-brace-format
 msgid "Missing object key \"{key}\" in an rpm."
-msgstr ""
+msgstr "在 rpm 中缺少对象键 \"{key}\"。"
 
-#: dnf/transaction_sr.py:267
+#: dnf/transaction_sr.py:289
 #, python-brace-format
 msgid "Unexpected value of package reason \"{reason}\" for rpm nevra \"{nevra}\"."
-msgstr ""
+msgstr "rpm nevra \"{reason}\" 的软件包原因 \"{nevra}\" 的值无效。"
 
-#: dnf/transaction_sr.py:275
+#: dnf/transaction_sr.py:297
 #, python-brace-format
 msgid "Cannot parse NEVRA for package \"{nevra}\"."
-msgstr ""
+msgstr "无法为软件包 \"{nevra}\" 解析 NEVRA。"
 
-#: dnf/transaction_sr.py:286
+#: dnf/transaction_sr.py:321
 #, python-brace-format
 msgid "Cannot find rpm nevra \"{nevra}\"."
-msgstr ""
+msgstr "无法找到 rpm nevra \"{nevra}\"。"
 
-#: dnf/transaction_sr.py:301
-#, fuzzy, python-brace-format
-#| msgid "Package %s is already installed."
+#: dnf/transaction_sr.py:336
+#, python-brace-format
 msgid "Package \"{na}\" is already installed for action \"{action}\"."
-msgstr "软件包 %s 已安装。"
+msgstr "已为操作 \"{action}\" 安装了软件包 \"{na}\"。"
 
-#: dnf/transaction_sr.py:311
+#: dnf/transaction_sr.py:345
 #, python-brace-format
 msgid ""
 "Package nevra \"{nevra}\" not available in repositories for action "
 "\"{action}\"."
-msgstr ""
+msgstr "对于操作 \"{action}\",软件包 nevra \"{nevra}\" 没有包括在仓库中。"
 
-#: dnf/transaction_sr.py:322
+#: dnf/transaction_sr.py:356
 #, python-brace-format
 msgid "Package nevra \"{nevra}\" not installed for action \"{action}\"."
-msgstr ""
+msgstr "没有为操作 \"{action}\" 安装软件包 nevra \"{nevra}\"。"
 
-#: dnf/transaction_sr.py:336
+#: dnf/transaction_sr.py:370
 #, python-brace-format
 msgid "Unexpected value of package action \"{action}\" for rpm nevra \"{nevra}\"."
-msgstr ""
+msgstr "rpm nevra \"{action}\" 的软件包操作 \"{nevra}\" 无效。"
 
-#: dnf/transaction_sr.py:343
-#, fuzzy, python-format
-#| msgid "Module or Group '%s' is not available."
+#: dnf/transaction_sr.py:377
+#, python-format
 msgid "Group id '%s' is not available."
-msgstr "模块或者组 '%s' 不可用。"
+msgstr "组 id '%s' 不可用。"
 
-#: dnf/transaction_sr.py:364
+#: dnf/transaction_sr.py:398
 #, python-brace-format
 msgid "Missing object key \"{key}\" in groups.packages."
-msgstr ""
+msgstr "在 groups.packages 中缺少对象键 \"{key}\"。"
 
-#: dnf/transaction_sr.py:377 dnf/transaction_sr.py:387
-#, fuzzy, python-format
-#| msgid "Module or Group '%s' is not installed."
+#: dnf/transaction_sr.py:411 dnf/transaction_sr.py:421
+#, python-format
 msgid "Group id '%s' is not installed."
-msgstr "模块或者组 '%s' 未安装。"
+msgstr "组 id '%s' 没有安装。"
 
-#: dnf/transaction_sr.py:398
-#, fuzzy, python-format
-#| msgid "Environment '%s' is not available."
+#: dnf/transaction_sr.py:432
+#, python-format
 msgid "Environment id '%s' is not available."
-msgstr "环境 '%s' 不可用。"
+msgstr "环境 id '%s' 不可用。"
 
-#: dnf/transaction_sr.py:422
+#: dnf/transaction_sr.py:456
 #, python-brace-format
 msgid ""
 "Invalid value \"{group_type}\" of environments.groups.group_type, only "
 "\"mandatory\" or \"optional\" is supported."
 msgstr ""
+"environments.groups.group_type 无效的值 \"{group_type}\",只支持 \"mandatory\" 或 "
+"\"optional\"。"
 
-#: dnf/transaction_sr.py:430
+#: dnf/transaction_sr.py:464
 #, python-brace-format
 msgid "Missing object key \"{key}\" in environments.groups."
-msgstr ""
+msgstr "在 environment.groups 中缺少对象键 \"{key}\"。"
 
-#: dnf/transaction_sr.py:508
+#: dnf/transaction_sr.py:542
 #, python-brace-format
 msgid "Unexpected value of group action \"{action}\" for group \"{group}\"."
-msgstr ""
+msgstr "组 \"{action}\" 的组操作 \"{group}\" 的值无效。"
 
-#: dnf/transaction_sr.py:513
+#: dnf/transaction_sr.py:547
 #, python-brace-format
 msgid "Missing object key \"{key}\" in a group."
-msgstr ""
+msgstr "在一个组中缺少对象键 \"{key}\"。"
 
-#: dnf/transaction_sr.py:537
+#: dnf/transaction_sr.py:571
 #, python-brace-format
 msgid "Unexpected value of environment action \"{action}\" for environment \"{env}\"."
-msgstr ""
+msgstr "环境 \"{env}\" 的环境操作 \"{action}\" 的值无效。"
 
-#: dnf/transaction_sr.py:542
+#: dnf/transaction_sr.py:576
 #, python-brace-format
 msgid "Missing object key \"{key}\" in an environment."
-msgstr ""
+msgstr "在环境中缺少对象键 \"{key}\"。"
 
-#: dnf/transaction_sr.py:581
+#: dnf/transaction_sr.py:615
 #, python-brace-format
 msgid ""
 "Package nevra \"{nevra}\", which is not present in the transaction file, was"
 " pulled into the transaction."
-msgstr ""
+msgstr "软件包 nevra \"{nevra}\" 没有包括在事务文件中,但它被拉取到事务中。"
 
-#: dnf/util.py:391 dnf/util.py:393
+#: dnf/util.py:393 dnf/util.py:395
 msgid "Problem"
 msgstr "问题"
 
-#: dnf/util.py:444
+#: dnf/util.py:446
 msgid "TransactionItem not found for key: {}"
 msgstr "找不到键的 TransactionItem: {}"
 
-#: dnf/util.py:454
+#: dnf/util.py:456
 msgid "TransactionSWDBItem not found for key: {}"
 msgstr "找不到键的 TransactionSWDBItem: {}"
 
-#: dnf/util.py:457
+#: dnf/util.py:459
 msgid "Errors occurred during transaction."
 msgstr "事务过程中出现错误。"
 
+#: dnf/util.py:595
+msgid "Reinstalled"
+msgstr "已重装"
+
+#: dnf/util.py:596
+msgid "Skipped"
+msgstr "已跳过"
+
+#: dnf/util.py:597
+msgid "Removed"
+msgstr "已移除"
+
+#: dnf/util.py:600
+msgid "Failed"
+msgstr "失败"
+
+#~ msgid "Action not handled: {}"
+#~ msgstr "操作没被处理:{}"
+
+#~ msgid "no package matched"
+#~ msgstr "没有能够与之匹配的软件包"
+
+#~ msgid "Not found given transaction ID"
+#~ msgstr "未找到指定事务 ID"
+
+#~ msgid "Undoing transaction {}, from {}"
+#~ msgstr "撤销事务 {},从 {}"
+
 #~ msgid "format for displaying found packages"
 #~ msgstr "用于显示已查找到软件包的格式"
 
-- 
2.29.2