From ef4b9869dd297f6dd4396f6bddafb4421d331726 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 27 Sep 2022 16:02:30 -0400 Subject: [PATCH] import dnf-plugins-core-4.0.21-14.el8 --- ...12-Update-translations-RhBug-2017271.patch | 7024 +++++++++++++++++ ...odules-only-from-repo-they-are-handl.patch | 48 + ...at-repomanage-Add-new-option-oldonly.patch | 117 + ...-tsi-for-transaction_action-plugins-.patch | 28 + ...016-Fix-dnf-copr-enable-on-Fedora-35.patch | 28 + .../0017-Disable-dnf-playground-command.patch | 37 + ...Fix-baseurl-for-centos-stream-chroot.patch | 29 + ...precation-warning-in-plugins-copr.py.patch | 42 + ...verification-that-the-project-exists.patch | 49 + ...er-error-message-for-dnf-copr-enable.patch | 114 + ...w-specifying-protocol-as-part-of-hub.patch | 33 + ...chroots-for-CentOS-Stream-RhBug-2058.patch | 37 + SPECS/dnf-plugins-core.spec | 33 +- 13 files changed, 7618 insertions(+), 1 deletion(-) create mode 100644 SOURCES/0012-Update-translations-RhBug-2017271.patch create mode 100644 SOURCES/0013-repomanage-Use-modules-only-from-repo-they-are-handl.patch create mode 100644 SOURCES/0014-feat-repomanage-Add-new-option-oldonly.patch create mode 100644 SOURCES/0015-Skip-all-non-rpm-tsi-for-transaction_action-plugins-.patch create mode 100644 SOURCES/0016-Fix-dnf-copr-enable-on-Fedora-35.patch create mode 100644 SOURCES/0017-Disable-dnf-playground-command.patch create mode 100644 SOURCES/0018-Fix-baseurl-for-centos-stream-chroot.patch create mode 100644 SOURCES/0019-Silence-a-deprecation-warning-in-plugins-copr.py.patch create mode 100644 SOURCES/0020-Shorter-verification-that-the-project-exists.patch create mode 100644 SOURCES/0021-Better-error-message-for-dnf-copr-enable.patch create mode 100644 SOURCES/0022-copr-allow-specifying-protocol-as-part-of-hub.patch create mode 100644 SOURCES/0023-copr-Guess-EPEL-chroots-for-CentOS-Stream-RhBug-2058.patch diff --git a/SOURCES/0012-Update-translations-RhBug-2017271.patch b/SOURCES/0012-Update-translations-RhBug-2017271.patch new file mode 100644 index 0000000..eff2480 --- /dev/null +++ b/SOURCES/0012-Update-translations-RhBug-2017271.patch @@ -0,0 +1,7024 @@ +From 7844c40c75b3b753284982398962d399f63ef6f0 Mon Sep 17 00:00:00 2001 +From: Marek Blaha +Date: Fri, 18 Mar 2022 15:29:49 +0100 +Subject: [PATCH] Update translations (RhBug:2017271) + +--- + po/dnf-plugins-core.pot | 434 +++++++++++++++------ + po/fr.po | 518 ++++++++++++++++++------- + po/ja.po | 706 ++++++++++++++++++++++++---------- + po/ko.po | 832 +++++++++++++++++++++++++++------------- + po/zh_CN.po | 681 +++++++++++++++++++++----------- + po/zh_TW.po | 512 ++++++++++++++++++------- + 6 files changed, 2580 insertions(+), 1103 deletions(-) + +diff --git a/po/dnf-plugins-core.pot b/po/dnf-plugins-core.pot +index 7cd717e..3ec9a50 100644 +--- a/po/dnf-plugins-core.pot ++++ b/po/dnf-plugins-core.pot +@@ -8,7 +8,7 @@ msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2020-10-05 09:18-0400\n" ++"POT-Creation-Date: 2022-02-28 11:53+0100\n" + "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" + "Last-Translator: FULL NAME \n" + "Language-Team: LANGUAGE \n" +@@ -137,91 +137,91 @@ msgstr "" + msgid "Changelogs for {}" + msgstr "" + +-#: plugins/config_manager.py:37 ++#: plugins/config_manager.py:38 + #, python-brace-format + msgid "manage {prog} configuration options and repositories" + msgstr "" + +-#: plugins/config_manager.py:44 ++#: plugins/config_manager.py:45 + msgid "repo to modify" + msgstr "" + +-#: plugins/config_manager.py:47 ++#: plugins/config_manager.py:48 + msgid "save the current options (useful with --setopt)" + msgstr "" + +-#: plugins/config_manager.py:50 ++#: plugins/config_manager.py:51 + msgid "add (and enable) the repo from the specified file or url" + msgstr "" + +-#: plugins/config_manager.py:53 ++#: plugins/config_manager.py:54 + msgid "print current configuration values to stdout" + msgstr "" + +-#: plugins/config_manager.py:56 ++#: plugins/config_manager.py:57 + msgid "print variable values to stdout" + msgstr "" + +-#: plugins/config_manager.py:60 ++#: plugins/config_manager.py:61 + msgid "enable repos (automatically saves)" + msgstr "" + +-#: plugins/config_manager.py:63 ++#: plugins/config_manager.py:64 + msgid "disable repos (automatically saves)" + msgstr "" + +-#: plugins/config_manager.py:77 ++#: plugins/config_manager.py:78 + msgid "one of the following arguments is required: {}" + msgstr "" + +-#: plugins/config_manager.py:86 ++#: plugins/config_manager.py:87 + msgid "" + "Warning: --enablerepo/--disablerepo arguments have no meaningwith config " + "manager. Use --set-enabled/--set-disabled instead." + msgstr "" + +-#: plugins/config_manager.py:131 ++#: plugins/config_manager.py:132 + #, python-format + msgid "No matching repo to modify: %s." + msgstr "" + +-#: plugins/config_manager.py:182 ++#: plugins/config_manager.py:183 + #, python-format + msgid "Adding repo from: %s" + msgstr "" + +-#: plugins/config_manager.py:206 ++#: plugins/config_manager.py:207 + msgid "Configuration of repo failed" + msgid_plural "Configuration of repos failed" + msgstr[0] "" + msgstr[1] "" + +-#: plugins/config_manager.py:216 ++#: plugins/config_manager.py:217 + #, python-format + msgid "Could not save repo to repofile %s: %s" + msgstr "" + +-#: plugins/copr.py:59 ++#: plugins/copr.py:64 + msgid "y" + msgstr "" + +-#: plugins/copr.py:59 ++#: plugins/copr.py:64 + msgid "yes" + msgstr "" + +-#: plugins/copr.py:60 ++#: plugins/copr.py:65 + msgid "n" + msgstr "" + +-#: plugins/copr.py:60 ++#: plugins/copr.py:65 + msgid "no" + msgstr "" + +-#: plugins/copr.py:79 ++#: plugins/copr.py:84 + msgid "Interact with Copr repositories." + msgstr "" + +-#: plugins/copr.py:81 ++#: plugins/copr.py:86 + msgid "" + "\n" + " enable name/project [chroot]\n" +@@ -242,53 +242,63 @@ msgid "" + " " + msgstr "" + +-#: plugins/copr.py:107 ++#: plugins/copr.py:112 + msgid "List all installed Copr repositories (default)" + msgstr "" + +-#: plugins/copr.py:109 ++#: plugins/copr.py:114 + msgid "List enabled Copr repositories" + msgstr "" + +-#: plugins/copr.py:111 ++#: plugins/copr.py:116 + msgid "List disabled Copr repositories" + msgstr "" + +-#: plugins/copr.py:113 ++#: plugins/copr.py:118 + msgid "List available Copr repositories by user NAME" + msgstr "" + +-#: plugins/copr.py:115 ++#: plugins/copr.py:120 + msgid "Specify an instance of Copr to work with" + msgstr "" + +-#: plugins/copr.py:149 plugins/copr.py:217 plugins/copr.py:237 ++#: plugins/copr.py:154 plugins/copr.py:222 plugins/copr.py:249 + msgid "Error: " + msgstr "" + +-#: plugins/copr.py:150 ++#: plugins/copr.py:155 + msgid "" + "specify Copr hub either with `--hub` or using `copr_hub/copr_username/" + "copr_projectname` format" + msgstr "" + +-#: plugins/copr.py:153 ++#: plugins/copr.py:158 + msgid "multiple hubs specified" + msgstr "" + +-#: plugins/copr.py:218 plugins/copr.py:222 ++#: plugins/copr.py:223 plugins/copr.py:227 + msgid "exactly two additional parameters to copr command are required" + msgstr "" + +-#: plugins/copr.py:238 ++#: plugins/copr.py:232 ++msgid "Too many arguments." ++msgstr "" ++ ++#: plugins/copr.py:235 ++msgid "" ++"Bad format of optional chroot. The format is distribution-version-" ++"architecture." ++msgstr "" ++ ++#: plugins/copr.py:250 + msgid "use format `copr_username/copr_projectname` to reference copr project" + msgstr "" + +-#: plugins/copr.py:240 ++#: plugins/copr.py:252 + msgid "bad copr project format" + msgstr "" + +-#: plugins/copr.py:254 ++#: plugins/copr.py:266 + msgid "" + "\n" + "Enabling a Copr repository. Please note that this repository is not part\n" +@@ -304,71 +314,71 @@ msgid "" + "Bugzilla. In case of problems, contact the owner of this repository.\n" + msgstr "" + +-#: plugins/copr.py:271 ++#: plugins/copr.py:283 + msgid "Repository successfully enabled." + msgstr "" + +-#: plugins/copr.py:276 ++#: plugins/copr.py:288 + msgid "Repository successfully disabled." + msgstr "" + +-#: plugins/copr.py:280 ++#: plugins/copr.py:292 + msgid "Repository successfully removed." + msgstr "" + +-#: plugins/copr.py:284 plugins/copr.py:693 ++#: plugins/copr.py:296 plugins/copr.py:697 + msgid "Unknown subcommand {}." + msgstr "" + +-#: plugins/copr.py:341 ++#: plugins/copr.py:353 + msgid "" + "* These coprs have repo file with an old format that contains no information " + "about Copr hub - the default one was assumed. Re-enable the project to fix " + "this." + msgstr "" + +-#: plugins/copr.py:353 ++#: plugins/copr.py:366 + msgid "Can't parse repositories for username '{}'." + msgstr "" + +-#: plugins/copr.py:356 ++#: plugins/copr.py:369 + msgid "List of {} coprs" + msgstr "" + +-#: plugins/copr.py:364 ++#: plugins/copr.py:374 + msgid "No description given" + msgstr "" + +-#: plugins/copr.py:376 ++#: plugins/copr.py:386 + msgid "Can't parse search for '{}'." + msgstr "" + +-#: plugins/copr.py:379 ++#: plugins/copr.py:389 + msgid "Matched: {}" + msgstr "" + +-#: plugins/copr.py:387 ++#: plugins/copr.py:394 + msgid "No description given." + msgstr "" + +-#: plugins/copr.py:410 ++#: plugins/copr.py:416 + msgid "Safe and good answer. Exiting." + msgstr "" + +-#: plugins/copr.py:417 ++#: plugins/copr.py:423 + msgid "This command has to be run under the root user." + msgstr "" + +-#: plugins/copr.py:481 ++#: plugins/copr.py:485 + msgid "" + "This repository does not have any builds yet so you cannot enable it now." + msgstr "" + +-#: plugins/copr.py:484 ++#: plugins/copr.py:488 + msgid "Such repository does not exist." + msgstr "" + +-#: plugins/copr.py:528 ++#: plugins/copr.py:532 + #, python-brace-format + msgid "" + "Maintainer of the enabled Copr repository decided to make\n" +@@ -385,44 +395,44 @@ msgid "" + "These repositories have been enabled automatically." + msgstr "" + +-#: plugins/copr.py:549 ++#: plugins/copr.py:553 + msgid "Do you want to keep them enabled?" + msgstr "" + +-#: plugins/copr.py:582 ++#: plugins/copr.py:586 + #, python-brace-format + msgid "Failed to remove copr repo {0}/{1}/{2}" + msgstr "" + +-#: plugins/copr.py:593 ++#: plugins/copr.py:597 + msgid "Failed to disable copr repo {}/{}" + msgstr "" + +-#: plugins/copr.py:611 plugins/copr.py:648 ++#: plugins/copr.py:615 plugins/copr.py:652 + msgid "Unknown response from server." + msgstr "" + +-#: plugins/copr.py:633 ++#: plugins/copr.py:637 + msgid "Interact with Playground repository." + msgstr "" + +-#: plugins/copr.py:639 ++#: plugins/copr.py:643 + msgid "Enabling a Playground repository." + msgstr "" + +-#: plugins/copr.py:640 ++#: plugins/copr.py:644 + msgid "Do you want to continue?" + msgstr "" + +-#: plugins/copr.py:683 ++#: plugins/copr.py:687 + msgid "Playground repositories successfully enabled." + msgstr "" + +-#: plugins/copr.py:686 ++#: plugins/copr.py:690 + msgid "Playground repositories successfully disabled." + msgstr "" + +-#: plugins/copr.py:690 ++#: plugins/copr.py:694 + msgid "Playground repositories successfully updated." + msgstr "" + +@@ -541,7 +551,7 @@ msgstr "" + msgid "limit the query to packages of given architectures." + msgstr "" + +-#: plugins/download.py:62 ++#: plugins/download.py:62 plugins/modulesync.py:51 + msgid "resolve and download needed dependencies" + msgstr "" + +@@ -560,7 +570,7 @@ msgstr "" + msgid "when running with --url, limit to specific protocols" + msgstr "" + +-#: plugins/download.py:121 plugins/reposync.py:293 ++#: plugins/download.py:121 plugins/reposync.py:314 + #, python-format + msgid "Failed to get mirror for package: %s" + msgstr "" +@@ -583,6 +593,120 @@ msgstr "" + msgid "No package %s available." + msgstr "" + ++#: plugins/groups_manager.py:49 ++msgid "Invalid group id" ++msgstr "" ++ ++#: plugins/groups_manager.py:58 ++msgid "Invalid translated data, should be in form 'lang:text'" ++msgstr "" ++ ++#: plugins/groups_manager.py:61 ++msgid "Invalid/empty language for translated data" ++msgstr "" ++ ++#: plugins/groups_manager.py:71 ++msgid "Can't generate group id from '{}'. Please specify group id using --id." ++msgstr "" ++ ++#: plugins/groups_manager.py:79 ++msgid "create and edit groups metadata file" ++msgstr "" ++ ++#: plugins/groups_manager.py:90 ++msgid "load groups metadata from file" ++msgstr "" ++ ++#: plugins/groups_manager.py:93 ++msgid "save groups metadata to file" ++msgstr "" ++ ++#: plugins/groups_manager.py:95 ++msgid "load and save groups metadata to file" ++msgstr "" ++ ++#: plugins/groups_manager.py:97 ++msgid "print the result metadata to stdout" ++msgstr "" ++ ++#: plugins/groups_manager.py:100 ++msgid "group id" ++msgstr "" ++ ++#: plugins/groups_manager.py:101 ++msgid "group name" ++msgstr "" ++ ++#: plugins/groups_manager.py:103 ++msgid "group description" ++msgstr "" ++ ++#: plugins/groups_manager.py:105 ++msgid "group display order" ++msgstr "" ++ ++#: plugins/groups_manager.py:108 ++msgid "translated name for the group" ++msgstr "" ++ ++#: plugins/groups_manager.py:111 ++msgid "translated description for the group" ++msgstr "" ++ ++#: plugins/groups_manager.py:115 ++msgid "make the group user visible (default)" ++msgstr "" ++ ++#: plugins/groups_manager.py:118 ++msgid "make the group user invisible" ++msgstr "" ++ ++#: plugins/groups_manager.py:123 ++msgid "add packages to the mandatory section" ++msgstr "" ++ ++#: plugins/groups_manager.py:125 ++msgid "add packages to the optional section" ++msgstr "" ++ ++#: plugins/groups_manager.py:127 ++msgid "remove packages from the group instead of adding them" ++msgstr "" ++ ++#: plugins/groups_manager.py:129 ++msgid "include also direct dependencies for packages" ++msgstr "" ++ ++#: plugins/groups_manager.py:132 ++msgid "package specification" ++msgstr "" ++ ++#: plugins/groups_manager.py:156 ++msgid "Can't edit group without specifying it (use --id or --name)" ++msgstr "" ++ ++#: plugins/groups_manager.py:190 ++msgid "Can't load file \"{}\": {}" ++msgstr "" ++ ++#: plugins/groups_manager.py:206 ++msgid "Can't save file \"{}\": {}" ++msgstr "" ++ ++#: plugins/groups_manager.py:261 ++msgid "No match for argument: {}" ++msgstr "" ++ ++#: plugins/groups_manager.py:298 ++msgid "Can't remove packages from non-existent group" ++msgstr "" ++ ++#: plugins/groups_manager.py:307 ++msgid "" ++"Group id '{}' generated from '{}' is duplicit. Please specify group id using " ++"--id." ++msgstr "" ++ + #: plugins/leaves.py:32 + msgid "List installed packages not required by any other package" + msgstr "" +@@ -615,43 +739,103 @@ msgstr "" + msgid "Migrating history data..." + msgstr "" + +-#: plugins/needs_restarting.py:65 ++#: plugins/modulesync.py:37 ++msgid "" ++"Download packages from modules and/or create a repository with modular data" ++msgstr "" ++ ++#: plugins/modulesync.py:44 ++msgid "MODULE" ++msgstr "" ++ ++#: plugins/modulesync.py:45 ++msgid "modules to download" ++msgstr "" ++ ++#: plugins/modulesync.py:47 ++msgid "enable repositories with source packages" ++msgstr "" ++ ++#: plugins/modulesync.py:49 ++msgid "enable repositories with debug-info and debug-source packages" ++msgstr "" ++ ++#: plugins/modulesync.py:53 ++msgid "download only packages from newest modules" ++msgstr "" ++ ++#: plugins/modulesync.py:85 ++msgid "Unable to find a match for argument: '{}'" ++msgid_plural "Unable to find a match for arguments: '{}'" ++msgstr[0] "" ++msgstr[1] "" ++ ++#: plugins/modulesync.py:107 ++msgid "" ++"Creation of repository failed with return code {}. All downloaded content " ++"was kept on the system" ++msgstr "" ++ ++#: plugins/modulesync.py:144 ++#, python-brace-format ++msgid "No match for artifact '{0}' from module '{1}'" ++msgstr "" ++ ++#: plugins/modulesync.py:162 ++#, python-brace-format ++msgid "No match for package name '{0}' in profile {1} from module {2}" ++msgstr "" ++ ++#: plugins/modulesync.py:166 ++msgid "No mach for argument '{}'" ++msgstr "" ++ ++#. TODO(jmracek) Shell we end with an error or with RC 1? ++#: plugins/modulesync.py:198 ++msgid "Unable to satisfy require {}" ++msgstr "" ++ ++#: plugins/needs_restarting.py:66 + #, python-brace-format + msgid "" + "No installed package found for package name \"{pkg}\" specified in needs-" + "restarting file \"{file}\"." + msgstr "" + +-#: plugins/needs_restarting.py:199 ++#: plugins/needs_restarting.py:220 + msgid "determine updated binaries that need restarting" + msgstr "" + +-#: plugins/needs_restarting.py:204 ++#: plugins/needs_restarting.py:225 + msgid "only consider this user's processes" + msgstr "" + +-#: plugins/needs_restarting.py:206 ++#: plugins/needs_restarting.py:227 + msgid "" + "only report whether a reboot is required (exit code 1) or not (exit code 0)" + msgstr "" + + #: plugins/needs_restarting.py:230 ++msgid "only report affected systemd services" ++msgstr "" ++ ++#: plugins/needs_restarting.py:253 + msgid "Core libraries or services have been updated since boot-up:" + msgstr "" + +-#: plugins/needs_restarting.py:235 ++#: plugins/needs_restarting.py:258 + msgid "Reboot is required to fully utilize these updates." + msgstr "" + +-#: plugins/needs_restarting.py:236 ++#: plugins/needs_restarting.py:259 + msgid "More information:" + msgstr "" + +-#: plugins/needs_restarting.py:240 ++#: plugins/needs_restarting.py:263 + msgid "No core libraries or services have been updated since boot-up." + msgstr "" + +-#: plugins/needs_restarting.py:242 ++#: plugins/needs_restarting.py:265 + msgid "Reboot should not be necessary." + msgstr "" + +@@ -666,13 +850,13 @@ msgstr "" + msgid "Bad Transaction State: %s" + msgstr "" + +-#: plugins/post-transaction-actions.py:153 +-#: plugins/post-transaction-actions.py:155 ++#: plugins/post-transaction-actions.py:157 ++#: plugins/post-transaction-actions.py:159 + #, python-format + msgid "post-transaction-actions: %s" + msgstr "" + +-#: plugins/post-transaction-actions.py:157 ++#: plugins/post-transaction-actions.py:161 + #, python-format + msgid "post-transaction-actions: Bad Command \"%s\": %s" + msgstr "" +@@ -843,112 +1027,124 @@ msgstr "" + msgid "Pass either --old or --new, not both!" + msgstr "" + +-#: plugins/repomanage.py:71 ++#: plugins/repomanage.py:89 + msgid "No files to process" + msgstr "" + +-#: plugins/repomanage.py:93 ++#: plugins/repomanage.py:96 + msgid "Could not open {}" + msgstr "" + +-#: plugins/repomanage.py:177 ++#: plugins/repomanage.py:180 + msgid "Print the older packages" + msgstr "" + +-#: plugins/repomanage.py:179 ++#: plugins/repomanage.py:182 + msgid "Print the newest packages" + msgstr "" + +-#: plugins/repomanage.py:181 ++#: plugins/repomanage.py:184 + msgid "Space separated output, not newline" + msgstr "" + +-#: plugins/repomanage.py:183 ++#: plugins/repomanage.py:186 + msgid "Newest N packages to keep - defaults to 1" + msgstr "" + +-#: plugins/repomanage.py:186 ++#: plugins/repomanage.py:189 + msgid "Path to directory" + msgstr "" + +-#: plugins/reposync.py:54 ++#: plugins/reposync.py:55 + msgid "download all packages from remote repo" + msgstr "" + +-#: plugins/reposync.py:63 ++#: plugins/reposync.py:64 + msgid "download only packages for this ARCH" + msgstr "" + +-#: plugins/reposync.py:65 ++#: plugins/reposync.py:66 + msgid "delete local packages no longer present in repository" + msgstr "" + +-#: plugins/reposync.py:67 +-msgid "also download and uncompress comps.xml" +-msgstr "" +- +-#: plugins/reposync.py:69 ++#: plugins/reposync.py:68 + msgid "download all the metadata." + msgstr "" + +-#: plugins/reposync.py:71 +-msgid "download only newest packages per-repo" ++#: plugins/reposync.py:70 ++msgid "Remove packages that fail GPG signature checking after downloading" + msgstr "" + + #: plugins/reposync.py:73 +-msgid "where to store downloaded repositories" ++msgid "also download and uncompress comps.xml" + msgstr "" + + #: plugins/reposync.py:75 +-msgid "Don't add the reponame to the download path." +-msgstr "" +- +-#: plugins/reposync.py:77 + msgid "" + "where to store downloaded repository metadata. Defaults to the value of --" + "download-path." + msgstr "" + ++#: plugins/reposync.py:78 ++msgid "download only newest packages per-repo" ++msgstr "" ++ + #: plugins/reposync.py:80 +-msgid "operate on source packages" ++msgid "Don't add the reponame to the download path." + msgstr "" + + #: plugins/reposync.py:82 ++msgid "where to store downloaded repositories" ++msgstr "" ++ ++#: plugins/reposync.py:84 + msgid "try to set local timestamps of local files by the one on the server" + msgstr "" + +-#: plugins/reposync.py:85 ++#: plugins/reposync.py:87 ++msgid "download only source packages" ++msgstr "" ++ ++#: plugins/reposync.py:89 + msgid "Just list urls of what would be downloaded, don't download" + msgstr "" + +-#: plugins/reposync.py:109 ++#: plugins/reposync.py:113 + msgid "Can't use --norepopath with multiple repositories" + msgstr "" + +-#: plugins/reposync.py:127 ++#: plugins/reposync.py:132 + #, python-format + msgid "Failed to get mirror for metadata: %s" + msgstr "" + +-#: plugins/reposync.py:144 ++#: plugins/reposync.py:149 + msgid "Failed to get mirror for the group file." + msgstr "" + ++#: plugins/reposync.py:168 ++msgid "Removing {}: {}" ++msgstr "" ++ + #: plugins/reposync.py:175 ++msgid "GPG signature check failed." ++msgstr "" ++ ++#: plugins/reposync.py:196 + msgid "Download target '{}' is outside of download path '{}'." + msgstr "" + +-#: plugins/reposync.py:190 ++#: plugins/reposync.py:211 + #, python-format + msgid "[DELETED] %s" + msgstr "" + +-#: plugins/reposync.py:192 ++#: plugins/reposync.py:213 + #, python-format + msgid "failed to delete file %s" + msgstr "" + +-#: plugins/reposync.py:201 ++#: plugins/reposync.py:222 + #, python-format + msgid "comps.xml for repository %s saved" + msgstr "" +@@ -957,64 +1153,68 @@ msgstr "" + msgid "New leaves:" + msgstr "" + +-#: plugins/versionlock.py:32 ++#: plugins/versionlock.py:33 + #, python-format + msgid "Unable to read version lock configuration: %s" + msgstr "" + +-#: plugins/versionlock.py:33 ++#: plugins/versionlock.py:34 + msgid "Locklist not set" + msgstr "" + +-#: plugins/versionlock.py:34 ++#: plugins/versionlock.py:35 + msgid "Adding versionlock on:" + msgstr "" + +-#: plugins/versionlock.py:35 ++#: plugins/versionlock.py:36 + msgid "Adding exclude on:" + msgstr "" + +-#: plugins/versionlock.py:36 ++#: plugins/versionlock.py:37 + msgid "Package already locked in equivalent form:" + msgstr "" + +-#: plugins/versionlock.py:37 ++#: plugins/versionlock.py:38 + msgid "Package {} is already locked" + msgstr "" + +-#: plugins/versionlock.py:38 ++#: plugins/versionlock.py:39 + msgid "Package {} is already excluded" + msgstr "" + +-#: plugins/versionlock.py:39 ++#: plugins/versionlock.py:40 + msgid "Deleting versionlock for:" + msgstr "" + +-#: plugins/versionlock.py:40 ++#: plugins/versionlock.py:41 + msgid "No package found for:" + msgstr "" + +-#: plugins/versionlock.py:41 ++#: plugins/versionlock.py:42 + msgid "Excludes from versionlock plugin were not applied" + msgstr "" + +-#: plugins/versionlock.py:42 ++#: plugins/versionlock.py:43 + msgid "Versionlock plugin: number of lock rules from file \"{}\" applied: {}" + msgstr "" + +-#: plugins/versionlock.py:43 ++#: plugins/versionlock.py:44 + msgid "" + "Versionlock plugin: number of exclude rules from file \"{}\" applied: {}" + msgstr "" + +-#: plugins/versionlock.py:44 ++#: plugins/versionlock.py:45 + msgid "Versionlock plugin: could not parse pattern:" + msgstr "" + +-#: plugins/versionlock.py:130 ++#: plugins/versionlock.py:134 + msgid "control package version locks" + msgstr "" + +-#: plugins/versionlock.py:136 ++#: plugins/versionlock.py:140 + msgid "Use package specifications as they are, do not try to parse them" + msgstr "" ++ ++#: plugins/versionlock.py:160 ++msgid "Subcommand '{}' is deprecated. Use 'exclude' subcommand instead." ++msgstr "" +diff --git a/po/fr.po b/po/fr.po +index dfa06ad..f70bfb2 100644 +--- a/po/fr.po ++++ b/po/fr.po +@@ -3,23 +3,26 @@ + # José Fournier , 2017. #zanata + # Jérôme Fenal , 2017. #zanata + # Jean-Baptiste Holcroft , 2018. #zanata, 2020. +-# Ludek Janda , 2018. #zanata ++# Ludek Janda , 2018. #zanata, 2021, 2022. + # Jean-Baptiste Holcroft , 2019. #zanata, 2020. + # Julien Humbert , 2020. ++# Sundeep Anand , 2021. ++# Transtats , 2022. + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2020-10-05 09:18-0400\n" +-"PO-Revision-Date: 2020-07-09 13:27+0000\n" +-"Last-Translator: Julien Humbert \n" +-"Language-Team: French \n" ++"POT-Creation-Date: 2022-02-28 11:53+0100\n" ++"PO-Revision-Date: 2022-03-09 12:39+0000\n" ++"Last-Translator: Ludek Janda \n" ++"Language-Team: French \n" + "Language: fr\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=2; plural=n > 1;\n" +-"X-Generator: Weblate 4.1.1\n" ++"X-Generator: Weblate 4.11.2\n" + + #: plugins/builddep.py:45 + msgid "[PACKAGE|PACKAGE.spec]" +@@ -40,8 +43,7 @@ msgstr "définit une macro pour l’interprétation du fichier spec" + + #: plugins/builddep.py:95 + msgid "skip build dependencies not available in repositories" +-msgstr "" +-"ignorer les dépendances de compilation non disponibles dans les dépôts" ++msgstr "ignorer les dépendances de compilation non disponibles dans les dépôts" + + #: plugins/builddep.py:98 + msgid "treat commandline arguments as spec files" +@@ -60,8 +62,7 @@ msgid "Some packages could not be found." + msgstr "Certains paquets n’ont pu être trouvés." + + #. No provides, no files +-#. Richdeps can have no matches but it could be correct (solver must decide +-#. later) ++#. Richdeps can have no matches but it could be correct (solver must decide later) + #: plugins/builddep.py:173 + #, python-format + msgid "No matching package to install: '%s'" +@@ -150,45 +151,45 @@ msgstr "Liste tous les changements" + msgid "Changelogs for {}" + msgstr "Changements pour {}" + +-#: plugins/config_manager.py:37 ++#: plugins/config_manager.py:38 + #, python-brace-format + msgid "manage {prog} configuration options and repositories" + msgstr "gestion de la configuration et des dépôts {prog}" + +-#: plugins/config_manager.py:44 ++#: plugins/config_manager.py:45 + msgid "repo to modify" + msgstr "dépôt à modifier" + +-#: plugins/config_manager.py:47 ++#: plugins/config_manager.py:48 + msgid "save the current options (useful with --setopt)" + msgstr "enregistrer les options actuelles (utile avec --setopt)" + +-#: plugins/config_manager.py:50 ++#: plugins/config_manager.py:51 + msgid "add (and enable) the repo from the specified file or url" + msgstr "ajoute (et active) le dépôt à partir du fichier ou de l’url indiqué" + +-#: plugins/config_manager.py:53 ++#: plugins/config_manager.py:54 + msgid "print current configuration values to stdout" + msgstr "" + "affiche les valeurs de la configuration actuelle sur la sortie standard" + +-#: plugins/config_manager.py:56 ++#: plugins/config_manager.py:57 + msgid "print variable values to stdout" + msgstr "affiche les valeurs des variables sur la sortie standard" + +-#: plugins/config_manager.py:60 ++#: plugins/config_manager.py:61 + msgid "enable repos (automatically saves)" + msgstr "activer les dépôts (enregistre automatiquement)" + +-#: plugins/config_manager.py:63 ++#: plugins/config_manager.py:64 + msgid "disable repos (automatically saves)" + msgstr "désactiver les dépôts (enregistre automatiquement)" + +-#: plugins/config_manager.py:77 ++#: plugins/config_manager.py:78 + msgid "one of the following arguments is required: {}" + msgstr "un des paramètres suivants est nécessaire : {}" + +-#: plugins/config_manager.py:86 ++#: plugins/config_manager.py:87 + msgid "" + "Warning: --enablerepo/--disablerepo arguments have no meaningwith config " + "manager. Use --set-enabled/--set-disabled instead." +@@ -197,48 +198,48 @@ msgstr "" + "signification avec le gestionnaire de configuration. Utilisez plutôt --set-" + "enabled/--set-disabled." + +-#: plugins/config_manager.py:131 ++#: plugins/config_manager.py:132 + #, python-format + msgid "No matching repo to modify: %s." + msgstr "Aucun dépôt correspondant à modifier : %s." + +-#: plugins/config_manager.py:182 ++#: plugins/config_manager.py:183 + #, python-format + msgid "Adding repo from: %s" + msgstr "Ajout du dépôt depuis : %s" + +-#: plugins/config_manager.py:206 ++#: plugins/config_manager.py:207 + msgid "Configuration of repo failed" + msgid_plural "Configuration of repos failed" + msgstr[0] "La configuration du dépôt a échoué" + msgstr[1] "La configuration des dépôts a échoué" + +-#: plugins/config_manager.py:216 ++#: plugins/config_manager.py:217 + #, python-format + msgid "Could not save repo to repofile %s: %s" + msgstr "Sauvegarde impossible du dépôt dans le fichier du dépôt %s : %s" + +-#: plugins/copr.py:59 ++#: plugins/copr.py:64 + msgid "y" + msgstr "o" + +-#: plugins/copr.py:59 ++#: plugins/copr.py:64 + msgid "yes" + msgstr "oui" + +-#: plugins/copr.py:60 ++#: plugins/copr.py:65 + msgid "n" + msgstr "n" + +-#: plugins/copr.py:60 ++#: plugins/copr.py:65 + msgid "no" + msgstr "non" + +-#: plugins/copr.py:79 ++#: plugins/copr.py:84 + msgid "Interact with Copr repositories." + msgstr "Interagit avec les dépôts Copr." + +-#: plugins/copr.py:81 ++#: plugins/copr.py:86 + msgid "" + "\n" + " enable name/project [chroot]\n" +@@ -276,57 +277,69 @@ msgstr "" + " copr search tests\n" + " " + +-#: plugins/copr.py:107 ++#: plugins/copr.py:112 + msgid "List all installed Copr repositories (default)" + msgstr "Lister tous les dépôts Copr installés (par défaut)" + +-#: plugins/copr.py:109 ++#: plugins/copr.py:114 + msgid "List enabled Copr repositories" + msgstr "Lister les dépôts Copr activés" + +-#: plugins/copr.py:111 ++#: plugins/copr.py:116 + msgid "List disabled Copr repositories" + msgstr "Lister les dépôts Copr désactivés" + +-#: plugins/copr.py:113 ++#: plugins/copr.py:118 + msgid "List available Copr repositories by user NAME" + msgstr "Lister les dépôts Copr disponibles par NOM d’utilisateur" + +-#: plugins/copr.py:115 ++#: plugins/copr.py:120 + msgid "Specify an instance of Copr to work with" + msgstr "Précisez une instance Copr avec laquelle travailler" + +-#: plugins/copr.py:149 plugins/copr.py:217 plugins/copr.py:237 ++#: plugins/copr.py:154 plugins/copr.py:222 plugins/copr.py:249 + msgid "Error: " + msgstr "Erreur : " + +-#: plugins/copr.py:150 ++#: plugins/copr.py:155 + msgid "" +-"specify Copr hub either with `--hub` or using " +-"`copr_hub/copr_username/copr_projectname` format" ++"specify Copr hub either with `--hub` or using `copr_hub/copr_username/" ++"copr_projectname` format" + msgstr "" +-"précisez un hub Copr soit via `--hub` ou en utilisant le format " +-"`hub_copr/utilisateur_copr/projet_copr`" ++"précisez un hub Copr soit via `--hub` ou en utilisant le format `hub_copr/" ++"utilisateur_copr/projet_copr`" + +-#: plugins/copr.py:153 ++#: plugins/copr.py:158 + msgid "multiple hubs specified" + msgstr "de multiples hubs ont été renseignés" + +-#: plugins/copr.py:218 plugins/copr.py:222 ++#: plugins/copr.py:223 plugins/copr.py:227 + msgid "exactly two additional parameters to copr command are required" + msgstr "la commande copr requiert exactement deux paramètres additionnels" + +-#: plugins/copr.py:238 ++#: plugins/copr.py:232 ++msgid "Too many arguments." ++msgstr "Trop d'arguments." ++ ++#: plugins/copr.py:235 ++msgid "" ++"Bad format of optional chroot. The format is distribution-version-" ++"architecture." ++msgstr "" ++"Mauvais format du chroot optionnel. Le format est distribution-version-" ++"architecture." ++ ++#: plugins/copr.py:250 + msgid "use format `copr_username/copr_projectname` to reference copr project" + msgstr "" + "utilisez le format `copr_username/copr_projectname` pour faire référence au " + "projet copr" + +-#: plugins/copr.py:240 ++#: plugins/copr.py:252 + msgid "bad copr project format" + msgstr "mauvais format de projet copr" + +-#: plugins/copr.py:254 ++#: plugins/copr.py:266 + msgid "" + "\n" + "Enabling a Copr repository. Please note that this repository is not part\n" +@@ -334,7 +347,8 @@ msgid "" + "\n" + "The Fedora Project does not exercise any power over the contents of\n" + "this repository beyond the rules outlined in the Copr FAQ at\n" +-",\n" ++",\n" + "and packages are not held to any quality or security level.\n" + "\n" + "Please do not file bug reports about these packages in Fedora\n" +@@ -346,83 +360,85 @@ msgstr "" + "\n" + "Le projet Fedora n’exerce aucun pouvoir sur le contenu de ce dépôt au delà\n" + "des règles précisées dans la FAQ Copr \n" +-",\n" ++",\n" + "et les paquets ne sont tenus à aucun niveau de qualité ou de sécurité.\n" + "\n" +-"Veuillez ne pas signaler de bogues à propos de ces paquets dans le Bugzilla de Fedora.\n" ++"Veuillez ne pas signaler de bogues à propos de ces paquets dans le Bugzilla " ++"de Fedora.\n" + "En cas de problèmes, contactez le propriétaire de ce dépôt.\n" + +-#: plugins/copr.py:271 ++#: plugins/copr.py:283 + msgid "Repository successfully enabled." + msgstr "Activation du dépôt réussie." + +-#: plugins/copr.py:276 ++#: plugins/copr.py:288 + msgid "Repository successfully disabled." + msgstr "Désactivation du dépôt réussie." + +-#: plugins/copr.py:280 ++#: plugins/copr.py:292 + msgid "Repository successfully removed." + msgstr "Suppression du dépôt réussie." + +-#: plugins/copr.py:284 plugins/copr.py:693 ++#: plugins/copr.py:296 plugins/copr.py:697 + msgid "Unknown subcommand {}." + msgstr "Sous-commande inconnue {}." + +-#: plugins/copr.py:341 ++#: plugins/copr.py:353 + msgid "" +-"* These coprs have repo file with an old format that contains no information" +-" about Copr hub - the default one was assumed. Re-enable the project to fix " ++"* These coprs have repo file with an old format that contains no information " ++"about Copr hub - the default one was assumed. Re-enable the project to fix " + "this." + msgstr "" + "* Ces Copr ont des fichiers de dépôts avec un ancien format qui ne contient " + "aucune information à propos de Copr hub - celui par défaut a été utilisé. " + "Réactivez le projet pour résoudre le problème." + +-#: plugins/copr.py:353 ++#: plugins/copr.py:366 + msgid "Can't parse repositories for username '{}'." + msgstr "" + "Ne peut analyser les dépôts pour y chercher le nom d’utilisateur « {} »." + +-#: plugins/copr.py:356 ++#: plugins/copr.py:369 + msgid "List of {} coprs" + msgstr "Liste de {} coprs" + +-#: plugins/copr.py:364 ++#: plugins/copr.py:374 + msgid "No description given" + msgstr "Aucune description fournie" + +-#: plugins/copr.py:376 ++#: plugins/copr.py:386 + msgid "Can't parse search for '{}'." + msgstr "Impossible d’analyser la recherche pour « {} »." + +-#: plugins/copr.py:379 ++#: plugins/copr.py:389 + msgid "Matched: {}" + msgstr "Correspondance : {}" + +-#: plugins/copr.py:387 ++#: plugins/copr.py:394 + msgid "No description given." + msgstr "Pas de description fournie." + +-#: plugins/copr.py:410 ++#: plugins/copr.py:416 + msgid "Safe and good answer. Exiting." + msgstr "Réponse sûre et exacte. Fin." + +-#: plugins/copr.py:417 ++#: plugins/copr.py:423 + msgid "This command has to be run under the root user." + msgstr "Cette commande requiert les privilèges du super utilisateur." + +-#: plugins/copr.py:481 ++#: plugins/copr.py:485 + msgid "" + "This repository does not have any builds yet so you cannot enable it now." + msgstr "" + "Ce dépôt ne contient pas encore d’exécutables vous ne pouvez donc pas " + "l’activer." + +-#: plugins/copr.py:484 ++#: plugins/copr.py:488 + msgid "Such repository does not exist." + msgstr "Ce dépôt n’existe pas." + +-#: plugins/copr.py:528 ++#: plugins/copr.py:532 + #, python-brace-format + msgid "" + "Maintainer of the enabled Copr repository decided to make\n" +@@ -451,44 +467,44 @@ msgstr "" + "\n" + "Ces dépôts ont été activés automatiquement." + +-#: plugins/copr.py:549 ++#: plugins/copr.py:553 + msgid "Do you want to keep them enabled?" + msgstr "Souhaitez-vous les maintenir activés ?" + +-#: plugins/copr.py:582 ++#: plugins/copr.py:586 + #, python-brace-format + msgid "Failed to remove copr repo {0}/{1}/{2}" + msgstr "Échec de la suppression du dépôt Copr {0}/{1}/{2}" + +-#: plugins/copr.py:593 ++#: plugins/copr.py:597 + msgid "Failed to disable copr repo {}/{}" + msgstr "Échec de la désactivation du dépôt copr {}/{}" + +-#: plugins/copr.py:611 plugins/copr.py:648 ++#: plugins/copr.py:615 plugins/copr.py:652 + msgid "Unknown response from server." + msgstr "Réponse inconnue du serveur." + +-#: plugins/copr.py:633 ++#: plugins/copr.py:637 + msgid "Interact with Playground repository." + msgstr "Interagit avec le dépôt Playground." + +-#: plugins/copr.py:639 ++#: plugins/copr.py:643 + msgid "Enabling a Playground repository." + msgstr "Activation d’un dépôt Playground." + +-#: plugins/copr.py:640 ++#: plugins/copr.py:644 + msgid "Do you want to continue?" + msgstr "Souhaitez-vous continuer ?" + +-#: plugins/copr.py:683 ++#: plugins/copr.py:687 + msgid "Playground repositories successfully enabled." + msgstr "Activation des dépôts Playground réussie." + +-#: plugins/copr.py:686 ++#: plugins/copr.py:690 + msgid "Playground repositories successfully disabled." + msgstr "Désactivation des dépôts Playground réussie." + +-#: plugins/copr.py:690 ++#: plugins/copr.py:694 + msgid "Playground repositories successfully updated." + msgstr "Mise à jour des dépôts Playground réussie." + +@@ -574,8 +590,7 @@ msgstr "" + msgid "" + "Could not find debugsource package for the following available packages: %s" + msgstr "" +-"Impossible de trouver le paquet debugsource pour ces paquets disponibles : " +-"%s" ++"Impossible de trouver le paquet debugsource pour ces paquets disponibles : %s" + + #: plugins/debuginfo-install.py:190 + #, python-format +@@ -619,7 +634,7 @@ msgstr "télécharge plutôt le paquet -debugsource" + msgid "limit the query to packages of given architectures." + msgstr "limite les requêtes de paquets aux architectures spécifiées." + +-#: plugins/download.py:62 ++#: plugins/download.py:62 plugins/modulesync.py:51 + msgid "resolve and download needed dependencies" + msgstr "résout et télécharge les dépendances nécessaires" + +@@ -642,7 +657,7 @@ msgstr "" + msgid "when running with --url, limit to specific protocols" + msgstr "si --url est renseigné, limite aux protocoles spécifiés" + +-#: plugins/download.py:121 plugins/reposync.py:293 ++#: plugins/download.py:121 plugins/reposync.py:314 + #, python-format + msgid "Failed to get mirror for package: %s" + msgstr "Échec de l’obtention du miroir pour le paquet : %s" +@@ -665,6 +680,125 @@ msgstr "Aucune source définie pour %s" + msgid "No package %s available." + msgstr "Aucun paquet %s n’est disponible." + ++#: plugins/groups_manager.py:49 ++msgid "Invalid group id" ++msgstr "id de groupe invalide" ++ ++#: plugins/groups_manager.py:58 ++msgid "Invalid translated data, should be in form 'lang:text'" ++msgstr "Données traduites invalides, doivent être au format « lang : text »" ++ ++#: plugins/groups_manager.py:61 ++msgid "Invalid/empty language for translated data" ++msgstr "Langue non valide / vide pour les données traduites" ++ ++#: plugins/groups_manager.py:71 ++msgid "Can't generate group id from '{}'. Please specify group id using --id." ++msgstr "" ++"Impossible de générer l'id du groupe à partir de «{}». Veuillez spécifier " ++"l'id du groupe en utilisant --id." ++ ++#: plugins/groups_manager.py:79 ++msgid "create and edit groups metadata file" ++msgstr "créer et modifier le fichier de métadonnées des groupes" ++ ++#: plugins/groups_manager.py:90 ++msgid "load groups metadata from file" ++msgstr "charger des métadonnées de groupes à partir d'un fichier" ++ ++#: plugins/groups_manager.py:93 ++msgid "save groups metadata to file" ++msgstr "enregistrer les métadonnées des groupes dans un fichier" ++ ++#: plugins/groups_manager.py:95 ++msgid "load and save groups metadata to file" ++msgstr "charge et enregistre les métadonnées des groupes dans un fichier" ++ ++#: plugins/groups_manager.py:97 ++msgid "print the result metadata to stdout" ++msgstr "affiche les métadonnées du résultat sur la sortie standard" ++ ++#: plugins/groups_manager.py:100 ++msgid "group id" ++msgstr "id du groupe" ++ ++#: plugins/groups_manager.py:101 ++msgid "group name" ++msgstr "Nom du groupe" ++ ++#: plugins/groups_manager.py:103 ++msgid "group description" ++msgstr "description du groupe" ++ ++#: plugins/groups_manager.py:105 ++msgid "group display order" ++msgstr "ordre d'affichage du groupe" ++ ++#: plugins/groups_manager.py:108 ++msgid "translated name for the group" ++msgstr "nom traduit pour le groupe" ++ ++#: plugins/groups_manager.py:111 ++msgid "translated description for the group" ++msgstr "description traduite pour le groupe" ++ ++#: plugins/groups_manager.py:115 ++msgid "make the group user visible (default)" ++msgstr "rendre l'utilisateur du groupe visible (par défaut)" ++ ++#: plugins/groups_manager.py:118 ++msgid "make the group user invisible" ++msgstr "rendre l'utilisateur du groupe invisible" ++ ++#: plugins/groups_manager.py:123 ++msgid "add packages to the mandatory section" ++msgstr "ajoute les paquets à la section obligatoire" ++ ++#: plugins/groups_manager.py:125 ++msgid "add packages to the optional section" ++msgstr "ajoute les paquets à la section optionnelle" ++ ++#: plugins/groups_manager.py:127 ++msgid "remove packages from the group instead of adding them" ++msgstr "supprime les paquets du groupe au lieu de les ajouter" ++ ++#: plugins/groups_manager.py:129 ++msgid "include also direct dependencies for packages" ++msgstr "inclus également les dépendances directes pour les paquets" ++ ++#: plugins/groups_manager.py:132 ++msgid "package specification" ++msgstr "spécification du paquet" ++ ++#: plugins/groups_manager.py:156 ++msgid "Can't edit group without specifying it (use --id or --name)" ++msgstr "" ++"Un groupe ne peut pas être édité sans le spécifier (utilisez --id ou --name)" ++ ++#: plugins/groups_manager.py:190 ++msgid "Can't load file \"{}\": {}" ++msgstr "Impossible de charger le fichier « {} » : {}" ++ ++#: plugins/groups_manager.py:206 ++msgid "Can't save file \"{}\": {}" ++msgstr "Impossible d’enregistrer le fichier « {} » : {}" ++ ++#: plugins/groups_manager.py:261 ++msgid "No match for argument: {}" ++msgstr "Aucune correspondance pour l’argument : {}" ++ ++#: plugins/groups_manager.py:298 ++msgid "Can't remove packages from non-existent group" ++msgstr "Les paquets ne peuvent pas être retirés d'un groupe qui n'existe pas" ++ ++#: plugins/groups_manager.py:307 ++msgid "" ++"Group id '{}' generated from '{}' is duplicit. Please specify group id using " ++"--id." ++msgstr "" ++"L'id du groupe « {} » qui a été généré pour « {} » est en double. Veuillez " ++"le spécifier en utilisant --id." ++ + #: plugins/leaves.py:32 + msgid "List installed packages not required by any other package" + msgstr "" +@@ -698,7 +832,69 @@ msgstr "migrer les données d’historique, de groupe et de yumdb, vers dnf" + msgid "Migrating history data..." + msgstr "Migration des données d’historique …" + +-#: plugins/needs_restarting.py:65 ++#: plugins/modulesync.py:37 ++msgid "" ++"Download packages from modules and/or create a repository with modular data" ++msgstr "" ++"Télécharger les paquets des modules et/ou créer un référentiel avec les " ++"données des modules" ++ ++#: plugins/modulesync.py:44 ++msgid "MODULE" ++msgstr "MODULE" ++ ++#: plugins/modulesync.py:45 ++msgid "modules to download" ++msgstr "modules à télécharger" ++ ++#: plugins/modulesync.py:47 ++msgid "enable repositories with source packages" ++msgstr "activer les dépôts avec les paquets sources" ++ ++#: plugins/modulesync.py:49 ++msgid "enable repositories with debug-info and debug-source packages" ++msgstr "activer les dépôts avec les paquets debug-info et debug-source" ++ ++#: plugins/modulesync.py:53 ++msgid "download only packages from newest modules" ++msgstr "télécharger uniquement les paquets des modules les plus récents" ++ ++#: plugins/modulesync.py:85 ++msgid "Unable to find a match for argument: '{}'" ++msgid_plural "Unable to find a match for arguments: '{}'" ++msgstr[0] "Impossible de trouver une correspondance pour l'argument : '{}'" ++msgstr[1] "Impossible de trouver une correspondance pour les arguments : '{}'" ++ ++#: plugins/modulesync.py:107 ++msgid "" ++"Creation of repository failed with return code {}. All downloaded content " ++"was kept on the system" ++msgstr "" ++"La création du référentiel a échoué avec le code de retour {}. Tout le " ++"contenu téléchargé a été conservé sur le système" ++ ++#: plugins/modulesync.py:144 ++#, python-brace-format ++msgid "No match for artifact '{0}' from module '{1}'" ++msgstr "Aucune correspondance pour l'artefact '{0}' du module '{1}'" ++ ++#: plugins/modulesync.py:162 ++#, python-brace-format ++msgid "No match for package name '{0}' in profile {1} from module {2}" ++msgstr "" ++"Aucune correspondance pour le nom de paquet '{0}' dans le profil {1} du " ++"module {2}" ++ ++#: plugins/modulesync.py:166 ++msgid "No mach for argument '{}'" ++msgstr "Pas de correspondance pour l'argument '{}'" ++ ++#. TODO(jmracek) Shell we end with an error or with RC 1? ++#: plugins/modulesync.py:198 ++msgid "Unable to satisfy require {}" ++msgstr "Impossible de satisfaire le besoin {}" ++ ++#: plugins/needs_restarting.py:66 + #, python-brace-format + msgid "" + "No installed package found for package name \"{pkg}\" specified in needs-" +@@ -707,15 +903,15 @@ msgstr "" + "Aucun paquet installé trouvé pour le nom de paquet « {pkg} » spécifié dans " + "needs-restarting du fichier « {file} »." + +-#: plugins/needs_restarting.py:199 ++#: plugins/needs_restarting.py:220 + msgid "determine updated binaries that need restarting" + msgstr "détermine les binaires mis à jour qui nécessitent un redémarrage" + +-#: plugins/needs_restarting.py:204 ++#: plugins/needs_restarting.py:225 + msgid "only consider this user's processes" + msgstr "considère uniquement les processus de cet utilisateur" + +-#: plugins/needs_restarting.py:206 ++#: plugins/needs_restarting.py:227 + msgid "" + "only report whether a reboot is required (exit code 1) or not (exit code 0)" + msgstr "" +@@ -723,28 +919,32 @@ msgstr "" + "(exit code 0)" + + #: plugins/needs_restarting.py:230 ++msgid "only report affected systemd services" ++msgstr "signaler uniquement les services systemd affectés" ++ ++#: plugins/needs_restarting.py:253 + msgid "Core libraries or services have been updated since boot-up:" + msgstr "" + "les bibliothèques et les services de base ont été mis à jour depuis le " + "démarrage (boot-up) :" + +-#: plugins/needs_restarting.py:235 ++#: plugins/needs_restarting.py:258 + msgid "Reboot is required to fully utilize these updates." + msgstr "" + "Un nouveau démarrage est requis pour pouvoir bénéficier totalement de ces " + "mises à jour." + +-#: plugins/needs_restarting.py:236 ++#: plugins/needs_restarting.py:259 + msgid "More information:" + msgstr "Plus d’information :" + +-#: plugins/needs_restarting.py:240 ++#: plugins/needs_restarting.py:263 + msgid "No core libraries or services have been updated since boot-up." + msgstr "" + "Aucune bibliothèque ou service de base n’a été mis à jour depuis le " + "démarrage." + +-#: plugins/needs_restarting.py:242 ++#: plugins/needs_restarting.py:265 + msgid "Reboot should not be necessary." + msgstr "Un nouveau démarrage ne devrait pas être utile." + +@@ -759,13 +959,13 @@ msgstr "Mauvaise ligne d’action « %s » : %s" + msgid "Bad Transaction State: %s" + msgstr "Mauvais état de transaction : %s" + +-#: plugins/post-transaction-actions.py:153 +-#: plugins/post-transaction-actions.py:155 ++#: plugins/post-transaction-actions.py:157 ++#: plugins/post-transaction-actions.py:159 + #, python-format + msgid "post-transaction-actions: %s" + msgstr "post-transaction-actions : %s" + +-#: plugins/post-transaction-actions.py:157 ++#: plugins/post-transaction-actions.py:161 + #, python-format + msgid "post-transaction-actions: Bad Command \"%s\": %s" + msgstr "post-transaction-actions : mauvaise commande « %s » : %s" +@@ -822,11 +1022,10 @@ msgstr "Affichez des données supplémentaires sur la taille des changements." + + #: plugins/repodiff.py:69 + msgid "" +-"Compare packages also by arch. By default packages are compared just by " +-"name." ++"Compare packages also by arch. By default packages are compared just by name." + msgstr "" +-"Compare également les paquets par architecture. Par défaut, les paquets sont" +-" uniquement comparés par nom." ++"Compare également les paquets par architecture. Par défaut, les paquets sont " ++"uniquement comparés par nom." + + #: plugins/repodiff.py:72 + msgid "Output a simple one line message for modified packages." +@@ -953,119 +1152,133 @@ msgstr "Gère un dossier de paquets rpm" + msgid "Pass either --old or --new, not both!" + msgstr "Passez soit --old, soit --new, mais pas les deux !" + +-#: plugins/repomanage.py:71 ++#: plugins/repomanage.py:89 + msgid "No files to process" + msgstr "Aucun fichier à traiter" + +-#: plugins/repomanage.py:93 ++#: plugins/repomanage.py:96 + msgid "Could not open {}" + msgstr "Ouverture de {} impossible" + +-#: plugins/repomanage.py:177 ++#: plugins/repomanage.py:180 + msgid "Print the older packages" + msgstr "Afficher les paquets plus anciens" + +-#: plugins/repomanage.py:179 ++#: plugins/repomanage.py:182 + msgid "Print the newest packages" + msgstr "Afficher les paquets les plus récents" + +-#: plugins/repomanage.py:181 ++#: plugins/repomanage.py:184 + msgid "Space separated output, not newline" + msgstr "Sorties séparées par des espaces plutôt que des retours à la ligne" + +-#: plugins/repomanage.py:183 ++#: plugins/repomanage.py:186 + msgid "Newest N packages to keep - defaults to 1" + msgstr "N paquets les plus récents à conserver — par défaut 1" + +-#: plugins/repomanage.py:186 ++#: plugins/repomanage.py:189 + msgid "Path to directory" + msgstr "Chemin vers le répertoire" + +-#: plugins/reposync.py:54 ++#: plugins/reposync.py:55 + msgid "download all packages from remote repo" + msgstr "télécharger tous les paquets depuis le dépôt distant" + +-#: plugins/reposync.py:63 ++#: plugins/reposync.py:64 + msgid "download only packages for this ARCH" + msgstr "télécharger seulement les paquets s’appliquant à cette ARCH" + +-#: plugins/reposync.py:65 ++#: plugins/reposync.py:66 + msgid "delete local packages no longer present in repository" + msgstr "supprimer les paquets locaux qui ne sont plus présents dans le dépôt" + +-#: plugins/reposync.py:67 +-msgid "also download and uncompress comps.xml" +-msgstr "également télécharger et décompresser comps.xml" +- +-#: plugins/reposync.py:69 ++#: plugins/reposync.py:68 + msgid "download all the metadata." + msgstr "télécharger toutes les métadonnées." + +-#: plugins/reposync.py:71 +-msgid "download only newest packages per-repo" +-msgstr "ne télécharger que les nouveaux paquets per-rep" ++#: plugins/reposync.py:70 ++msgid "Remove packages that fail GPG signature checking after downloading" ++msgstr "" ++"Retire les paquets qui ont échoué la vérification de la signature GPG après " ++"téléchargement" + + #: plugins/reposync.py:73 +-msgid "where to store downloaded repositories" +-msgstr "lieu où stocker les dépôts téléchargés" ++msgid "also download and uncompress comps.xml" ++msgstr "également télécharger et décompresser comps.xml" + + #: plugins/reposync.py:75 +-msgid "Don't add the reponame to the download path." +-msgstr "N’ajoutez pas le nom du dépôt dans le chemin de téléchargement." +- +-#: plugins/reposync.py:77 + msgid "" +-"where to store downloaded repository metadata. Defaults to the value of " +-"--download-path." ++"where to store downloaded repository metadata. Defaults to the value of --" ++"download-path." + msgstr "" +-"là où stocker les métadonnées du dépôt. Prend par défaut la valeur de " +-"--download-path." ++"là où stocker les métadonnées du dépôt. Prend par défaut la valeur de --" ++"download-path." ++ ++#: plugins/reposync.py:78 ++msgid "download only newest packages per-repo" ++msgstr "ne télécharger que les nouveaux paquets per-rep" + + #: plugins/reposync.py:80 +-msgid "operate on source packages" +-msgstr "opère sur les paquets source" ++msgid "Don't add the reponame to the download path." ++msgstr "N’ajoutez pas le nom du dépôt dans le chemin de téléchargement." + + #: plugins/reposync.py:82 ++msgid "where to store downloaded repositories" ++msgstr "lieu où stocker les dépôts téléchargés" ++ ++#: plugins/reposync.py:84 + msgid "try to set local timestamps of local files by the one on the server" + msgstr "" + "essayez de définir les horodatages locaux des fichiers locaux par celui du " + "serveur" + +-#: plugins/reposync.py:85 ++#: plugins/reposync.py:87 ++msgid "download only source packages" ++msgstr "télécharger uniquement les packages sources" ++ ++#: plugins/reposync.py:89 + msgid "Just list urls of what would be downloaded, don't download" + msgstr "" + "Uniquement lister les URL qui seraient téléchargées, ne pas télécharger" + +-#: plugins/reposync.py:109 ++#: plugins/reposync.py:113 + msgid "Can't use --norepopath with multiple repositories" + msgstr "Impossible d’utiliser --norepopath avec de multiples dépôts" + +-#: plugins/reposync.py:127 ++#: plugins/reposync.py:132 + #, python-format + msgid "Failed to get mirror for metadata: %s" + msgstr "Échec de l’obtention du miroir pour les métadonnées : %s" + +-#: plugins/reposync.py:144 ++#: plugins/reposync.py:149 + msgid "Failed to get mirror for the group file." + msgstr "Échec de l’obtention du miroir pour le fichier de groupe." + ++#: plugins/reposync.py:168 ++msgid "Removing {}: {}" ++msgstr "Suppression de « {} » : {}" ++ + #: plugins/reposync.py:175 ++msgid "GPG signature check failed." ++msgstr "La vérification de la signature GPG a échoué." ++ ++#: plugins/reposync.py:196 + msgid "Download target '{}' is outside of download path '{}'." + msgstr "" + "La cible de téléchargement « {} » est en dehors du chemin de téléchargement " + "« {} »." + +-#: plugins/reposync.py:190 ++#: plugins/reposync.py:211 + #, python-format + msgid "[DELETED] %s" + msgstr "[DELETED] %s" + +-#: plugins/reposync.py:192 ++#: plugins/reposync.py:213 + #, python-format + msgid "failed to delete file %s" + msgstr "n’a pas pu supprimer le fichier %s" + +-#: plugins/reposync.py:201 ++#: plugins/reposync.py:222 + #, python-format + msgid "comps.xml for repository %s saved" + msgstr "comps.xml pour le dépôt %s sauvegardé" +@@ -1074,73 +1287,80 @@ msgstr "comps.xml pour le dépôt %s sauvegardé" + msgid "New leaves:" + msgstr "Nouvelles feuilles :" + +-#: plugins/versionlock.py:32 ++#: plugins/versionlock.py:33 + #, python-format + msgid "Unable to read version lock configuration: %s" + msgstr "Ne peut lire la configuration du verrouillage de version : %s" + +-#: plugins/versionlock.py:33 ++#: plugins/versionlock.py:34 + msgid "Locklist not set" + msgstr "Liste des verrouillages non établie" + +-#: plugins/versionlock.py:34 ++#: plugins/versionlock.py:35 + msgid "Adding versionlock on:" + msgstr "Verrouille la version de :" + +-#: plugins/versionlock.py:35 ++#: plugins/versionlock.py:36 + msgid "Adding exclude on:" + msgstr "Exclusion de :" + +-#: plugins/versionlock.py:36 ++#: plugins/versionlock.py:37 + msgid "Package already locked in equivalent form:" + msgstr "Paquet déjà verrouillé sous une forme équivalente :" + +-#: plugins/versionlock.py:37 ++#: plugins/versionlock.py:38 + msgid "Package {} is already locked" + msgstr "Le paquet {} est déjà verrouillé" + +-#: plugins/versionlock.py:38 ++#: plugins/versionlock.py:39 + msgid "Package {} is already excluded" + msgstr "Le paquet {} est déjà exclu" + +-#: plugins/versionlock.py:39 ++#: plugins/versionlock.py:40 + msgid "Deleting versionlock for:" + msgstr "Déverrouille la version de :" + +-#: plugins/versionlock.py:40 ++#: plugins/versionlock.py:41 + msgid "No package found for:" + msgstr "Aucun paquet trouvé pour :" + +-#: plugins/versionlock.py:41 ++#: plugins/versionlock.py:42 + msgid "Excludes from versionlock plugin were not applied" + msgstr "Les exclusions du plugin versionlock n’ont pas été appliquées" + +-#: plugins/versionlock.py:42 ++#: plugins/versionlock.py:43 + msgid "Versionlock plugin: number of lock rules from file \"{}\" applied: {}" + msgstr "" + "Plugin versionlock : nombre de règles de verrouillage du fichier \"{}\" " + "appliquées : {}" + +-#: plugins/versionlock.py:43 +-msgid "Versionlock plugin: number of exclude rules from file \"{}\" applied: {}" ++#: plugins/versionlock.py:44 ++msgid "" ++"Versionlock plugin: number of exclude rules from file \"{}\" applied: {}" + msgstr "" + "Plugin versionlock : nombre de règles d’exclusion du fichier \"{}\" " + "appliquées : {}" + +-#: plugins/versionlock.py:44 ++#: plugins/versionlock.py:45 + msgid "Versionlock plugin: could not parse pattern:" + msgstr "Plugin versionlock : n’a pas pu analyser le modèle :" + +-#: plugins/versionlock.py:130 ++#: plugins/versionlock.py:134 + msgid "control package version locks" + msgstr "contrôle le verrouillage de version des paquets" + +-#: plugins/versionlock.py:136 ++#: plugins/versionlock.py:140 + msgid "Use package specifications as they are, do not try to parse them" + msgstr "" + "Utiliser les spécifications de paquet telles quelles, ne pas essayer de les " + "analyser" + ++#: plugins/versionlock.py:160 ++msgid "Subcommand '{}' is deprecated. Use 'exclude' subcommand instead." ++msgstr "" ++"La sous-commande '{}' est obsolète. Utilisez plutôt la sous-commande " ++"'exclude'." ++ + #~ msgid "" + #~ "\n" + #~ "These repositories have been enabled automatically.\n" +diff --git a/po/ja.po b/po/ja.po +index 5e443ec..c5c4691 100644 +--- a/po/ja.po ++++ b/po/ja.po +@@ -1,20 +1,23 @@ + # Ooyama Yosiyuki , 2015. #zanata +-# Ludek Janda , 2018. #zanata ++# Ludek Janda , 2018. #zanata, 2021. + # Casey Jones , 2020. ++# Sundeep Anand , 2021. ++# Transtats , 2022. + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2020-10-05 09:18-0400\n" +-"PO-Revision-Date: 2020-05-04 06:40+0000\n" +-"Last-Translator: Casey Jones \n" +-"Language-Team: Japanese \n" ++"POT-Creation-Date: 2022-02-28 11:53+0100\n" ++"PO-Revision-Date: 2022-03-09 12:39+0000\n" ++"Last-Translator: Transtats \n" ++"Language-Team: Japanese \n" + "Language: ja\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=1; plural=0;\n" +-"X-Generator: Weblate 4.0.3\n" ++"X-Generator: Weblate 4.11.2\n" + + #: plugins/builddep.py:45 + msgid "[PACKAGE|PACKAGE.spec]" +@@ -35,7 +38,7 @@ msgstr "スペックファイルの解析にマクロを定義" + + #: plugins/builddep.py:95 + msgid "skip build dependencies not available in repositories" +-msgstr "" ++msgstr "リポジトリーで利用できないビルドの依存関係をスキップします" + + #: plugins/builddep.py:98 + msgid "treat commandline arguments as spec files" +@@ -54,8 +57,7 @@ msgid "Some packages could not be found." + msgstr "一部のパッケージは見つかりませんでした。" + + #. No provides, no files +-#. Richdeps can have no matches but it could be correct (solver must decide +-#. later) ++#. Richdeps can have no matches but it could be correct (solver must decide later) + #: plugins/builddep.py:173 + #, python-format + msgid "No matching package to install: '%s'" +@@ -64,7 +66,8 @@ msgstr "インストール用の一致するパッケージがありません: ' + #: plugins/builddep.py:191 + #, python-format + msgid "Failed to open: '%s', not a valid source rpm file." +-msgstr "開くことに失敗しました: '%s'、有効なソース rpm ファイルではありません。" ++msgstr "" ++"開くことに失敗しました: '%s'、有効なソース rpm ファイルではありません。" + + #: plugins/builddep.py:204 plugins/builddep.py:220 plugins/builddep.py:237 + msgid "Not all dependencies satisfied" +@@ -83,31 +86,35 @@ msgstr "一致するパッケージはありません: %s" + #: plugins/changelog.py:37 + #, python-brace-format + msgid "Not a valid date: \"{0}\"." +-msgstr "" ++msgstr "有効な日付ではありません: \"{0}\"。" + + #: plugins/changelog.py:43 + msgid "Show changelog data of packages" +-msgstr "" ++msgstr "パッケージの changelog データを表示します" + + #: plugins/changelog.py:51 + msgid "" + "show changelog entries since DATE. To avoid ambiguosity, YYYY-MM-DD format " + "is recommended." + msgstr "" ++"DATE 以降の changelog エントリーを表示します。不明瞭さを避けるため、YYYY-MM-" ++"DD のフォーマットが推奨されます。" + + #: plugins/changelog.py:55 + msgid "show given number of changelog entries per package" +-msgstr "" ++msgstr "パッケージごとの changelog エントリーの与えられた数を表示します" + + #: plugins/changelog.py:58 + msgid "" + "show only new changelog entries for packages, that provide an upgrade for " + "some of already installed packages." + msgstr "" ++"パッケージ向けの新しい changelog エントリーのみを表示します。これは、インス" ++"トール済みのパッケージの一部にアップグレードを提供します。" + + #: plugins/changelog.py:60 + msgid "PACKAGE" +-msgstr "" ++msgstr "パッケージ" + + #: plugins/changelog.py:81 plugins/debuginfo-install.py:90 + #, python-format +@@ -116,109 +123,113 @@ msgstr "一致した引数がありません: %s" + + #: plugins/changelog.py:109 + msgid "Listing changelogs since {}" +-msgstr "" ++msgstr "{} 以降の changelogs を一覧表示します" + + #: plugins/changelog.py:111 + msgid "Listing only latest changelog" + msgid_plural "Listing {} latest changelogs" +-msgstr[0] "" ++msgstr[0] "最新の changelog のみを一覧表示します" + + #: plugins/changelog.py:116 + msgid "Listing only new changelogs since installed version of the package" + msgstr "" ++"パッケージのインストールされたバージョン以降の新しい changelogs のみを一覧表" ++"示します" + + #: plugins/changelog.py:118 + msgid "Listing all changelogs" +-msgstr "" ++msgstr "すべての changelogs を一覧表示します" + + #: plugins/changelog.py:122 + msgid "Changelogs for {}" + msgstr "{} の Changelogs" + +-#: plugins/config_manager.py:37 ++#: plugins/config_manager.py:38 + #, python-brace-format + msgid "manage {prog} configuration options and repositories" +-msgstr "" ++msgstr "{prog} 設定オプションおよびリポジトリーを管理します" + +-#: plugins/config_manager.py:44 ++#: plugins/config_manager.py:45 + msgid "repo to modify" + msgstr "修正する repo" + +-#: plugins/config_manager.py:47 ++#: plugins/config_manager.py:48 + msgid "save the current options (useful with --setopt)" + msgstr "現在のオプションを保存 (--setopt で有用)" + +-#: plugins/config_manager.py:50 ++#: plugins/config_manager.py:51 + msgid "add (and enable) the repo from the specified file or url" + msgstr "指定されたファイルまたは url から repo を追加 (および有効化)" + +-#: plugins/config_manager.py:53 ++#: plugins/config_manager.py:54 + msgid "print current configuration values to stdout" + msgstr "stdout に現在の設定値を印刷" + +-#: plugins/config_manager.py:56 ++#: plugins/config_manager.py:57 + msgid "print variable values to stdout" + msgstr "stdout に変数値を印刷" + +-#: plugins/config_manager.py:60 ++#: plugins/config_manager.py:61 + msgid "enable repos (automatically saves)" +-msgstr "" ++msgstr "レポを有効にする (自動保存)" + +-#: plugins/config_manager.py:63 ++#: plugins/config_manager.py:64 + msgid "disable repos (automatically saves)" +-msgstr "" ++msgstr "レポを無効にする (自動保存)" + +-#: plugins/config_manager.py:77 ++#: plugins/config_manager.py:78 + msgid "one of the following arguments is required: {}" +-msgstr "" ++msgstr "以下のいずれかの引数が必要です。{}" + +-#: plugins/config_manager.py:86 ++#: plugins/config_manager.py:87 + msgid "" + "Warning: --enablerepo/--disablerepo arguments have no meaningwith config " + "manager. Use --set-enabled/--set-disabled instead." + msgstr "" ++"警告: --enablerepo/--disablerepo の引数は config manager では意味がありませ" ++"ん。代わりに -set-enabled/--set-disabled を使用してください。" + +-#: plugins/config_manager.py:131 ++#: plugins/config_manager.py:132 + #, python-format + msgid "No matching repo to modify: %s." + msgstr "修正用の一致する repo はありません: %s." + +-#: plugins/config_manager.py:182 ++#: plugins/config_manager.py:183 + #, python-format + msgid "Adding repo from: %s" + msgstr "repo の追加: %s" + +-#: plugins/config_manager.py:206 ++#: plugins/config_manager.py:207 + msgid "Configuration of repo failed" + msgid_plural "Configuration of repos failed" + msgstr[0] "repo の設定に失敗しました" + +-#: plugins/config_manager.py:216 ++#: plugins/config_manager.py:217 + #, python-format + msgid "Could not save repo to repofile %s: %s" + msgstr "repofile %s に repo を保存できませんでした: %s" + +-#: plugins/copr.py:59 ++#: plugins/copr.py:64 + msgid "y" + msgstr "y" + +-#: plugins/copr.py:59 ++#: plugins/copr.py:64 + msgid "yes" + msgstr "はい" + +-#: plugins/copr.py:60 ++#: plugins/copr.py:65 + msgid "n" + msgstr "n" + +-#: plugins/copr.py:60 ++#: plugins/copr.py:65 + msgid "no" + msgstr "いいえ" + +-#: plugins/copr.py:79 ++#: plugins/copr.py:84 + msgid "Interact with Copr repositories." + msgstr "Copr リポジトリーとの対話。" + +-#: plugins/copr.py:81 ++#: plugins/copr.py:86 + msgid "" + "\n" + " enable name/project [chroot]\n" +@@ -246,7 +257,7 @@ msgstr "" + " list --available-by-user=NAME\n" + " search project\n" + "\n" +-" Examples:\n" ++" 例:\n" + " copr enable rhscl/perl516 epel-6-x86_64\n" + " copr enable ignatenkobrain/ocltoys\n" + " copr disable rhscl/perl516\n" +@@ -256,53 +267,69 @@ msgstr "" + " copr search tests\n" + " " + +-#: plugins/copr.py:107 ++#: plugins/copr.py:112 + msgid "List all installed Copr repositories (default)" +-msgstr "インストール済みのすべての Copr リポジトリーを一覧表示します (デフォルト)" ++msgstr "" ++"インストール済みのすべての Copr リポジトリーを一覧表示します (デフォルト)" + +-#: plugins/copr.py:109 ++#: plugins/copr.py:114 + msgid "List enabled Copr repositories" + msgstr "有効化された Copr リポジトリーを一覧表示します" + +-#: plugins/copr.py:111 ++#: plugins/copr.py:116 + msgid "List disabled Copr repositories" + msgstr "無効化された Copr リポジトリーを一覧表示します" + +-#: plugins/copr.py:113 ++#: plugins/copr.py:118 + msgid "List available Copr repositories by user NAME" + msgstr "利用可能な Copr リポジトリーをユーザー NAME ごとに一覧表示します" + +-#: plugins/copr.py:115 ++#: plugins/copr.py:120 + msgid "Specify an instance of Copr to work with" +-msgstr "" ++msgstr "作業する Copr のインスタンスを指定します" + +-#: plugins/copr.py:149 plugins/copr.py:217 plugins/copr.py:237 ++#: plugins/copr.py:154 plugins/copr.py:222 plugins/copr.py:249 + msgid "Error: " + msgstr "エラー: " + +-#: plugins/copr.py:150 ++#: plugins/copr.py:155 + msgid "" +-"specify Copr hub either with `--hub` or using " +-"`copr_hub/copr_username/copr_projectname` format" ++"specify Copr hub either with `--hub` or using `copr_hub/copr_username/" ++"copr_projectname` format" + msgstr "" ++"`--hub` または `copr_hub/copr_username/copr_projectname` フォーマットを使っ" ++"て、Copr ハブを指定します" + +-#: plugins/copr.py:153 ++#: plugins/copr.py:158 + msgid "multiple hubs specified" +-msgstr "" ++msgstr "複数のハブが指定されています" + +-#: plugins/copr.py:218 plugins/copr.py:222 ++#: plugins/copr.py:223 plugins/copr.py:227 + msgid "exactly two additional parameters to copr command are required" + msgstr "copr コマンドに厳密に 2 つの追加パラメーターが必要です" + +-#: plugins/copr.py:238 ++#: plugins/copr.py:232 ++msgid "Too many arguments." ++msgstr "引数が多すぎます。" ++ ++#: plugins/copr.py:235 ++msgid "" ++"Bad format of optional chroot. The format is distribution-version-" ++"architecture." ++msgstr "オプションの chroot の形式が無効です。正しい形式は distribution-version-" ++"architecture です。" ++ ++#: plugins/copr.py:250 + msgid "use format `copr_username/copr_projectname` to reference copr project" +-msgstr "copr プロジェクトを参照するには `copr_username/copr_projectname` 形式を使用します" ++msgstr "" ++"copr プロジェクトを参照するには `copr_username/copr_projectname` 形式を使用し" ++"ます" + +-#: plugins/copr.py:240 ++#: plugins/copr.py:252 + msgid "bad copr project format" + msgstr "不正な copr プロジェクト形式" + +-#: plugins/copr.py:254 ++#: plugins/copr.py:266 + msgid "" + "\n" + "Enabling a Copr repository. Please note that this repository is not part\n" +@@ -310,78 +337,96 @@ msgid "" + "\n" + "The Fedora Project does not exercise any power over the contents of\n" + "this repository beyond the rules outlined in the Copr FAQ at\n" +-",\n" ++",\n" + "and packages are not held to any quality or security level.\n" + "\n" + "Please do not file bug reports about these packages in Fedora\n" + "Bugzilla. In case of problems, contact the owner of this repository.\n" + msgstr "" ++"\n" ++"Copr リポジトリーを有効化しています。このリポジトリーは\n" ++"主要ディストリビューションの一部ではないため、品質が一定していない点に注意し" ++"てください。\n" ++"\n" ++"Fedora Project は、このリポジトリーのコンテンツに関して、 の \n" ++"Copr FAQ で示されたルールを超えて権利を行使することは\n" ++"ありません。また、パッケージは、任意の品質またはセキュリ\n" ++"ティーレベルを固守していません。\n" ++"\n" ++"Fedora Bugzilla でこれらのパッケージに関するバグ報告をしないでください。\n" ++"問題が発生した場合は、このリポジトリーのオーナーに連絡してください。\n" + +-#: plugins/copr.py:271 ++#: plugins/copr.py:283 + msgid "Repository successfully enabled." + msgstr "リポジトリが正常に有効化されました。" + +-#: plugins/copr.py:276 ++#: plugins/copr.py:288 + msgid "Repository successfully disabled." + msgstr "リポジトリが正常に無効化されました。" + +-#: plugins/copr.py:280 ++#: plugins/copr.py:292 + msgid "Repository successfully removed." + msgstr "リポジトリーが正常に削除されました。" + +-#: plugins/copr.py:284 plugins/copr.py:693 ++#: plugins/copr.py:296 plugins/copr.py:697 + msgid "Unknown subcommand {}." + msgstr "不明なサブコマンド {}。" + +-#: plugins/copr.py:341 ++#: plugins/copr.py:353 + msgid "" +-"* These coprs have repo file with an old format that contains no information" +-" about Copr hub - the default one was assumed. Re-enable the project to fix " ++"* These coprs have repo file with an old format that contains no information " ++"about Copr hub - the default one was assumed. Re-enable the project to fix " + "this." + msgstr "" ++"* これらの coprs には、Copr ハブに関する情報がない古いフォーマットの repo " ++"ファイルがあります。デフォルトは仮定です。これを修正するには、プロジェクトを" ++"再度有効化してください。" + +-#: plugins/copr.py:353 ++#: plugins/copr.py:366 + msgid "Can't parse repositories for username '{}'." + msgstr "ユーザー名 '{}' のリポジトリーを解析できません。" + +-#: plugins/copr.py:356 ++#: plugins/copr.py:369 + msgid "List of {} coprs" + msgstr "{} coprs の一覧" + +-#: plugins/copr.py:364 ++#: plugins/copr.py:374 + msgid "No description given" + msgstr "説明がありません" + +-#: plugins/copr.py:376 ++#: plugins/copr.py:386 + msgid "Can't parse search for '{}'." + msgstr "'{}' の検索を解析できません。" + +-#: plugins/copr.py:379 ++#: plugins/copr.py:389 + msgid "Matched: {}" + msgstr "一致: {}" + +-#: plugins/copr.py:387 ++#: plugins/copr.py:394 + msgid "No description given." + msgstr "説明が与えられていません。" + +-#: plugins/copr.py:410 ++#: plugins/copr.py:416 + msgid "Safe and good answer. Exiting." + msgstr "安全で優れた回答。終了中。" + +-#: plugins/copr.py:417 ++#: plugins/copr.py:423 + msgid "This command has to be run under the root user." + msgstr "このコマンドは root ユーザーの下で実行する必要があります。" + +-#: plugins/copr.py:481 ++#: plugins/copr.py:485 + msgid "" + "This repository does not have any builds yet so you cannot enable it now." +-msgstr "このリポジトリーにはまだビルドがありませんので、今すぐ有効化できません。" ++msgstr "" ++"このリポジトリーにはまだビルドがありませんので、今すぐ有効化できません。" + +-#: plugins/copr.py:484 ++#: plugins/copr.py:488 + msgid "Such repository does not exist." + msgstr "そのようなリポジトリーは存在しません。" + +-#: plugins/copr.py:528 ++#: plugins/copr.py:532 + #, python-brace-format + msgid "" + "Maintainer of the enabled Copr repository decided to make\n" +@@ -397,47 +442,58 @@ msgid "" + "\n" + "These repositories have been enabled automatically." + msgstr "" ++"有効化した Copr リポジトリーの管理者は\n" ++"他のリポジトリーに依存するように決めました。\n" ++"そのようなリポジトリーは通常、主な Corp " ++"レジストリー(ランタイム依存関係を提供) から RPM を\n" ++"正常にインストールするために必要です。\n" ++"\n" ++"上記の品質とバグ報告についての注意点がここでも適用\n" ++"されますが、Fedora Project は内容を管理していないことに\n" ++"注意してください。以下のリストを確認してください。\n" ++"\n" ++"{0}\n" ++"\n" ++"これらのリポジトリーは自動的に有効になっています。" + +-#: plugins/copr.py:549 ++#: plugins/copr.py:553 + msgid "Do you want to keep them enabled?" +-msgstr "" ++msgstr "有効にしておきますか?" + +-#: plugins/copr.py:582 ++#: plugins/copr.py:586 + #, python-brace-format + msgid "Failed to remove copr repo {0}/{1}/{2}" +-msgstr "" ++msgstr "copr repo {0}/{1}/{2} の削除に失敗しました" + +-#: plugins/copr.py:593 ++#: plugins/copr.py:597 + msgid "Failed to disable copr repo {}/{}" +-msgstr "copr repo {}/{} の無効化に失敗しました。" ++msgstr "copr repo {}/{} の無効化に失敗しました" + +-#: plugins/copr.py:611 plugins/copr.py:648 ++#: plugins/copr.py:615 plugins/copr.py:652 + msgid "Unknown response from server." + msgstr "サーバーからの不明な応答です。" + +-#: plugins/copr.py:633 ++#: plugins/copr.py:637 + msgid "Interact with Playground repository." + msgstr "Playground リポジトリーとの対話。" + +-#: plugins/copr.py:639 +-#, fuzzy +-#| msgid "Interact with Playground repository." ++#: plugins/copr.py:643 + msgid "Enabling a Playground repository." +-msgstr "Playground リポジトリーとの対話。" ++msgstr "Playgroundのリポジトリーの有効化。" + +-#: plugins/copr.py:640 ++#: plugins/copr.py:644 + msgid "Do you want to continue?" +-msgstr "" ++msgstr "続行しますか?" + +-#: plugins/copr.py:683 ++#: plugins/copr.py:687 + msgid "Playground repositories successfully enabled." + msgstr "Playground リポジトリーが正常に有効化されました。" + +-#: plugins/copr.py:686 ++#: plugins/copr.py:690 + msgid "Playground repositories successfully disabled." + msgstr "Playground リポジトリーが正常に無効化されました。" + +-#: plugins/copr.py:690 ++#: plugins/copr.py:694 + msgid "Playground repositories successfully updated." + msgstr "Playground リポジトリーが正常に更新されました。" + +@@ -474,7 +530,9 @@ msgstr "記録されたパッケージの最新バージョンをインストー + msgid "" + "Ignore architecture and install missing packages matching the name, epoch, " + "version and release." +-msgstr "アーキテクチャーを無視し、名前、エポック、バージョン、およびリリースと一致する不足のパッケージをインストールします。" ++msgstr "" ++"アーキテクチャーを無視し、名前、エポック、バージョン、およびリリースと一致す" ++"る不足のパッケージをインストールします。" + + #: plugins/debug.py:196 + msgid "limit to specified type" +@@ -485,6 +543,8 @@ msgid "" + "Allow removing of install-only packages. Using this option may result in an " + "attempt to remove the running kernel." + msgstr "" ++"インストールのみのパッケージの削除を許可します。このオプションを使用すると、" ++"実行しているカーネルの削除を試みる可能性があります。" + + #: plugins/debug.py:202 + msgid "name of dump file" +@@ -509,24 +569,30 @@ msgstr "debuginfo パッケージのインストール" + msgid "" + "Could not find debuginfo package for the following available packages: %s" + msgstr "" ++"次の利用可能なパッケージの debuginfo パッケージが見つかりませんでした: %s" + + #: plugins/debuginfo-install.py:185 + #, python-format + msgid "" + "Could not find debugsource package for the following available packages: %s" + msgstr "" ++"次の利用可能なパッケージの debugsource パッケージが見つかりませんでした: %s" + + #: plugins/debuginfo-install.py:190 + #, python-format + msgid "" + "Could not find debuginfo package for the following installed packages: %s" + msgstr "" ++"次のインストールされたパッケージの debuginfo パッケージが見つかりませんでし" ++"た: %s" + + #: plugins/debuginfo-install.py:195 + #, python-format + msgid "" + "Could not find debugsource package for the following installed packages: %s" + msgstr "" ++"次のインストールされたパッケージの debugsource パッケージが見つかりませんでし" ++"た: %s" + + #: plugins/debuginfo-install.py:199 + msgid "Unable to find a match" +@@ -550,13 +616,13 @@ msgstr "代わりに -debuginfo パッケージをダウンロードします" + + #: plugins/download.py:57 + msgid "download the -debugsource package instead" +-msgstr "" ++msgstr "代わりに、-debugsource パッケージをダウンロードします" + + #: plugins/download.py:60 + msgid "limit the query to packages of given architectures." + msgstr "特定のアーキテクチャーのパッケージへのクエリーを制限します。" + +-#: plugins/download.py:62 ++#: plugins/download.py:62 plugins/modulesync.py:51 + msgid "resolve and download needed dependencies" + msgstr "必要な依存関係を解決し、ダウンロードします" + +@@ -565,17 +631,20 @@ msgid "" + "when running with --resolve, download all dependencies (do not exclude " + "already installed ones)" + msgstr "" ++"--resolve で実行する場合、すべての依存関係をダウンロードします (インストール" ++"済みのものを除外しないでください)" + + #: plugins/download.py:67 + msgid "" + "print list of urls where the rpms can be downloaded instead of downloading" +-msgstr "ダウンロードする代わりに、rpm をダウンロードできる url の一覧を印刷します" ++msgstr "" ++"ダウンロードする代わりに、rpm をダウンロードできる url の一覧を印刷します" + + #: plugins/download.py:72 + msgid "when running with --url, limit to specific protocols" + msgstr "--url で実行中の際は、特定のプロトコルに限定します" + +-#: plugins/download.py:121 plugins/reposync.py:293 ++#: plugins/download.py:121 plugins/reposync.py:314 + #, python-format + msgid "Failed to get mirror for package: %s" + msgstr "パッケージのミラー取得に失敗しました: %s" +@@ -598,9 +667,129 @@ msgstr "%s に対して定義されているソース rpm はありません" + msgid "No package %s available." + msgstr "利用可能なパッケージ %s はありません。" + ++#: plugins/groups_manager.py:49 ++msgid "Invalid group id" ++msgstr "'無効なグループ ID" ++ ++#: plugins/groups_manager.py:58 ++msgid "Invalid translated data, should be in form 'lang:text'" ++msgstr "無効な翻訳データです。'lang:text' の形式で指定する必要があります" ++ ++#: plugins/groups_manager.py:61 ++msgid "Invalid/empty language for translated data" ++msgstr "翻訳されたデータの無効または空な言語" ++ ++#: plugins/groups_manager.py:71 ++msgid "Can't generate group id from '{}'. Please specify group id using --id." ++msgstr "" ++"'{}' からグループ ID を生成できません。--id を使用してグループ ID を指定して" ++"ください。" ++ ++#: plugins/groups_manager.py:79 ++msgid "create and edit groups metadata file" ++msgstr "グループメタデータファイルの作成および編集" ++ ++#: plugins/groups_manager.py:90 ++msgid "load groups metadata from file" ++msgstr "ファイルからグループメタデータを読み込みます" ++ ++#: plugins/groups_manager.py:93 ++msgid "save groups metadata to file" ++msgstr "グループメタデータをファイルに保存します" ++ ++#: plugins/groups_manager.py:95 ++msgid "load and save groups metadata to file" ++msgstr "グループメタデータをファイルにロードして保存します" ++ ++#: plugins/groups_manager.py:97 ++msgid "print the result metadata to stdout" ++msgstr "生成されたメタデータを stdout に出力します" ++ ++#: plugins/groups_manager.py:100 ++msgid "group id" ++msgstr "グループ id" ++ ++#: plugins/groups_manager.py:101 ++msgid "group name" ++msgstr "グループ名" ++ ++#: plugins/groups_manager.py:103 ++msgid "group description" ++msgstr "グループ説明" ++ ++#: plugins/groups_manager.py:105 ++msgid "group display order" ++msgstr "グループ表示順序" ++ ++#: plugins/groups_manager.py:108 ++msgid "translated name for the group" ++msgstr "グループの翻訳名" ++ ++#: plugins/groups_manager.py:111 ++msgid "translated description for the group" ++msgstr "グループの翻訳説明" ++ ++#: plugins/groups_manager.py:115 ++msgid "make the group user visible (default)" ++msgstr "グループユーザーを表示させる (デフォルト)" ++ ++#: plugins/groups_manager.py:118 ++msgid "make the group user invisible" ++msgstr "グループユーザーを非表示の状態にする" ++ ++#: plugins/groups_manager.py:123 ++msgid "add packages to the mandatory section" ++msgstr "必須セクションへのパッケージの追加" ++ ++#: plugins/groups_manager.py:125 ++msgid "add packages to the optional section" ++msgstr "オプションセクションへのパッケージの追加" ++ ++#: plugins/groups_manager.py:127 ++msgid "remove packages from the group instead of adding them" ++msgstr "パッケージを追加する代わりに、グループからパッケージを削除します" ++ ++#: plugins/groups_manager.py:129 ++msgid "include also direct dependencies for packages" ++msgstr "リポジトリーの直接の依存関係を含みます" ++ ++#: plugins/groups_manager.py:132 ++msgid "package specification" ++msgstr "パッケージ仕様" ++ ++#: plugins/groups_manager.py:156 ++msgid "Can't edit group without specifying it (use --id or --name)" ++msgstr "" ++"指定せずにはグループを編集できません (--id または --name を使用してください)" ++ ++#: plugins/groups_manager.py:190 ++msgid "Can't load file \"{}\": {}" ++msgstr "ファイル '{}' を書き込みできません: {}" ++ ++#: plugins/groups_manager.py:206 ++msgid "Can't save file \"{}\": {}" ++msgstr "ファイル '{}' を保存できません: {}" ++ ++#: plugins/groups_manager.py:261 ++msgid "No match for argument: {}" ++msgstr "一致した引数がありません: {}" ++ ++#: plugins/groups_manager.py:298 ++msgid "Can't remove packages from non-existent group" ++msgstr "存在しないグループからパッケージを削除できません" ++ ++#: plugins/groups_manager.py:307 ++msgid "" ++"Group id '{}' generated from '{}' is duplicit. Please specify group id using " ++"--id." ++msgstr "" ++"'{}' から生成されたグループ ID '{}' は重複しています。--id を使用してグルー" ++"プ ID を指定してください。" ++ + #: plugins/leaves.py:32 + msgid "List installed packages not required by any other package" +-msgstr "他のパッケージから必要とされないインスール済みパッケージを一覧表示します" ++msgstr "" ++"他のパッケージから必要とされないインスール済みパッケージを一覧表示します" + + #: plugins/local.py:122 + msgid "Unable to create a directory '{}' due to '{}'" +@@ -630,67 +819,134 @@ msgstr "yum の履歴、グループ、および yumdb データを dnf へ移 + msgid "Migrating history data..." + msgstr "履歴データを移行中..." + +-#: plugins/needs_restarting.py:65 ++#: plugins/modulesync.py:37 ++msgid "" ++"Download packages from modules and/or create a repository with modular data" ++msgstr "モジュールからパッケージをダウンロードしたり、モジュラーデータでリポジトリー" ++"を作成したりします" ++ ++#: plugins/modulesync.py:44 ++msgid "MODULE" ++msgstr "MODULE" ++ ++#: plugins/modulesync.py:45 ++msgid "modules to download" ++msgstr "ダウンロードするモジュール" ++ ++#: plugins/modulesync.py:47 ++msgid "enable repositories with source packages" ++msgstr "ソースパッケージを含むリポジトリーを有効にします" ++ ++#: plugins/modulesync.py:49 ++msgid "enable repositories with debug-info and debug-source packages" ++msgstr "debug-info パッケージおよび debug-source " ++"パッケージでリポジトリーを有効にします" ++ ++#: plugins/modulesync.py:53 ++msgid "download only packages from newest modules" ++msgstr "最新のモジュールからパッケージのみをダウンロードします" ++ ++#: plugins/modulesync.py:85 ++msgid "Unable to find a match for argument: '{}'" ++msgid_plural "Unable to find a match for arguments: '{}'" ++msgstr[0] "引数に一致するものが見つかりませんでした: '{}'" ++ ++#: plugins/modulesync.py:107 ++msgid "" ++"Creation of repository failed with return code {}. All downloaded content " ++"was kept on the system" ++msgstr "リポジトリーの作成は戻りコード {} " ++"で失敗しました。ダウンロードされたコンテンツはすべてシステムに保持されました" ++ ++#: plugins/modulesync.py:144 ++#, python-brace-format ++msgid "No match for artifact '{0}' from module '{1}'" ++msgstr "モジュール '{1}' のアーティファクト '{0}' に一致するものはありません" ++ ++#: plugins/modulesync.py:162 ++#, python-brace-format ++msgid "No match for package name '{0}' in profile {1} from module {2}" ++msgstr "モジュール {2} からのプロファイル {1} のパッケージ名 '{0}' " ++"に一致するものはありません" ++ ++#: plugins/modulesync.py:166 ++msgid "No mach for argument '{}'" ++msgstr "引数 '{}' に一致するものはありません" ++ ++#. TODO(jmracek) Shell we end with an error or with RC 1? ++#: plugins/modulesync.py:198 ++msgid "Unable to satisfy require {}" ++msgstr "要求 {} を満たすことができません" ++ ++#: plugins/needs_restarting.py:66 + #, python-brace-format + msgid "" + "No installed package found for package name \"{pkg}\" specified in needs-" + "restarting file \"{file}\"." + msgstr "" ++"needs-restarting ファイル \"{file}\" に指定されている \"{pkg}\" " ++"というパッケージのインストール済みパッケージが見つかりません。" + +-#: plugins/needs_restarting.py:199 ++#: plugins/needs_restarting.py:220 + msgid "determine updated binaries that need restarting" + msgstr "再起動が必要な更新済みバイナリーを決定します" + +-#: plugins/needs_restarting.py:204 ++#: plugins/needs_restarting.py:225 + msgid "only consider this user's processes" + msgstr "このユーザーのプロセスのみを検討します" + +-#: plugins/needs_restarting.py:206 ++#: plugins/needs_restarting.py:227 + msgid "" + "only report whether a reboot is required (exit code 1) or not (exit code 0)" + msgstr "" ++"再起動が必要か (終了コード 1) 必要でないか (終了コード 0) のみを報告します" + + #: plugins/needs_restarting.py:230 ++msgid "only report affected systemd services" ++msgstr "影響を受ける systemd サービスのみを報告" ++ ++#: plugins/needs_restarting.py:253 + msgid "Core libraries or services have been updated since boot-up:" +-msgstr "" ++msgstr "起動以降にコアライブラリーまたはサービスがアップデートされました:" + +-#: plugins/needs_restarting.py:235 ++#: plugins/needs_restarting.py:258 + msgid "Reboot is required to fully utilize these updates." +-msgstr "" ++msgstr "これらのアップデートを完全に活用するには、再起動が必要です。" + +-#: plugins/needs_restarting.py:236 ++#: plugins/needs_restarting.py:259 + msgid "More information:" +-msgstr "" ++msgstr "詳細情報:" + +-#: plugins/needs_restarting.py:240 ++#: plugins/needs_restarting.py:263 + msgid "No core libraries or services have been updated since boot-up." + msgstr "" ++"起動以降にアップデートされたコアライブラリーまたはサービスはありません。" + +-#: plugins/needs_restarting.py:242 ++#: plugins/needs_restarting.py:265 + msgid "Reboot should not be necessary." +-msgstr "" ++msgstr "再起動な必要ありません。" + + #: plugins/post-transaction-actions.py:71 + #, python-format + msgid "Bad Action Line \"%s\": %s" +-msgstr "" ++msgstr "不正なアクション行 \"%s\": %s" + + #. unsupported state, skip it + #: plugins/post-transaction-actions.py:130 + #, python-format + msgid "Bad Transaction State: %s" +-msgstr "" ++msgstr "不正なトランザクション状態: %s" + +-#: plugins/post-transaction-actions.py:153 +-#: plugins/post-transaction-actions.py:155 ++#: plugins/post-transaction-actions.py:157 ++#: plugins/post-transaction-actions.py:159 + #, python-format + msgid "post-transaction-actions: %s" +-msgstr "" ++msgstr "post-transaction-actions: %s" + +-#: plugins/post-transaction-actions.py:157 ++#: plugins/post-transaction-actions.py:161 + #, python-format + msgid "post-transaction-actions: Bad Command \"%s\": %s" +-msgstr "" ++msgstr "post-transaction-actions: 不正なコマンド \"%s\": %s" + + #: plugins/repoclosure.py:42 + msgid "Display a list of unresolved dependencies for repositories" +@@ -718,129 +974,142 @@ msgstr "このパッケージのみのクロージャーを確認します" + + #: plugins/repodiff.py:45 + msgid "List differences between two sets of repositories" +-msgstr "" ++msgstr "2 セットのリポジトリー間の違いを一覧表示します" + + #: plugins/repodiff.py:58 + msgid "Specify old repository, can be used multiple times" +-msgstr "" ++msgstr "古いリポジトリーを指定します、これは複数回使用できます" + + #: plugins/repodiff.py:60 + msgid "Specify new repository, can be used multiple times" +-msgstr "" ++msgstr "新しいリポジトリーを指定します、これは複数回使用できます" + + #: plugins/repodiff.py:63 + msgid "" + "Specify architectures to compare, can be used multiple times. By default, " + "only source rpms are compared." + msgstr "" ++"比較するアーキテクチャーを指定します、これは複数回使用できます。デフォルト" ++"で、ソース rpms のみが比較されます。" + + #: plugins/repodiff.py:67 + msgid "Output additional data about the size of the changes." +-msgstr "" ++msgstr "変更サイズに関する追加データを出力します。" + + #: plugins/repodiff.py:69 + msgid "" +-"Compare packages also by arch. By default packages are compared just by " +-"name." ++"Compare packages also by arch. By default packages are compared just by name." + msgstr "" ++"パッケージを Arch でも比較します。デフォルトで、パッケージは名前のみで比較さ" ++"れます。" + + #: plugins/repodiff.py:72 + msgid "Output a simple one line message for modified packages." +-msgstr "" ++msgstr "変更されたパッケージに簡単な 1 行メッセージを出力します。" + + #: plugins/repodiff.py:74 + msgid "" + "Split the data for modified packages between upgraded and downgraded " + "packages." + msgstr "" ++"アップグレードされたパッケージとダウングレードされたパッケージとの間で、変更" ++"されたパッケージのデータを分割します。" + + #: plugins/repodiff.py:86 + msgid "Both old and new repositories must be set." +-msgstr "" ++msgstr "新旧両方のリポジトリーを設定する必要があります。" + + #: plugins/repodiff.py:178 + msgid "Size change: {} bytes" +-msgstr "" ++msgstr "サイズの変更: {} バイト" + + #: plugins/repodiff.py:184 + msgid "Added package : {}" +-msgstr "" ++msgstr "追加されたパッケージ : {}" + + #: plugins/repodiff.py:187 + msgid "Removed package: {}" +-msgstr "" ++msgstr "削除されたパッケージ: {}" + + #: plugins/repodiff.py:190 + msgid "Obsoleted by : {}" +-msgstr "" ++msgstr "により廃止されました: {}" + + #: plugins/repodiff.py:195 + msgid "" + "\n" + "Upgraded packages" + msgstr "" ++"\n" ++"アップグレードされたパッケージ" + + #: plugins/repodiff.py:200 + msgid "" + "\n" + "Downgraded packages" + msgstr "" ++"\n" ++"ダウングレードされたパッケージ" + + #: plugins/repodiff.py:207 + msgid "" + "\n" + "Modified packages" + msgstr "" ++"\n" ++"変更されたパッケージ" + + #: plugins/repodiff.py:212 + msgid "" + "\n" + "Summary" + msgstr "" ++"\n" ++"サマリー" + + #: plugins/repodiff.py:213 + msgid "Added packages: {}" +-msgstr "" ++msgstr "追加されたパッケージ: {}" + + #: plugins/repodiff.py:214 + msgid "Removed packages: {}" +-msgstr "" ++msgstr "削除されたパッケージ: {}" + + #: plugins/repodiff.py:216 + msgid "Upgraded packages: {}" +-msgstr "" ++msgstr "アップグレードされたパッケージ: {}" + + #: plugins/repodiff.py:217 + msgid "Downgraded packages: {}" +-msgstr "" ++msgstr "ダウングレードされたパッケージ: {}" + + #: plugins/repodiff.py:219 + msgid "Modified packages: {}" +-msgstr "" ++msgstr "変更されたパッケージ: {}" + + #: plugins/repodiff.py:222 + msgid "Size of added packages: {}" +-msgstr "" ++msgstr "追加されたパッケージのサイズ: {}" + + #: plugins/repodiff.py:223 + msgid "Size of removed packages: {}" +-msgstr "" ++msgstr "削除されたパッケージのサイズ: {}" + + #: plugins/repodiff.py:225 + msgid "Size of modified packages: {}" +-msgstr "" ++msgstr "変更されたパッケージのサイズ: {}" + + #: plugins/repodiff.py:228 + msgid "Size of upgraded packages: {}" +-msgstr "" ++msgstr "アップグレードされたパッケージのサイズ: {}" + + #: plugins/repodiff.py:230 + msgid "Size of downgraded packages: {}" +-msgstr "" ++msgstr "ダウングレードされたパッケージのサイズ: {}" + + #: plugins/repodiff.py:232 + msgid "Size change: {}" +-msgstr "" ++msgstr "サイズの変更: {}" + + #: plugins/repograph.py:50 + msgid "Output a full package dependency graph in dot format" +@@ -859,180 +1128,203 @@ msgstr "rpm パッケージのディレクトリーを管理します" + msgid "Pass either --old or --new, not both!" + msgstr "--old または --new のいずれかを渡します。両方ではありません。" + +-#: plugins/repomanage.py:71 ++#: plugins/repomanage.py:89 + msgid "No files to process" + msgstr "処理するファイルはありません" + +-#: plugins/repomanage.py:93 ++#: plugins/repomanage.py:96 + msgid "Could not open {}" + msgstr "{} を開くことができません" + +-#: plugins/repomanage.py:177 ++#: plugins/repomanage.py:180 + msgid "Print the older packages" + msgstr "古いパッケージを印刷します" + +-#: plugins/repomanage.py:179 ++#: plugins/repomanage.py:182 + msgid "Print the newest packages" + msgstr "最新のパッケージを印刷します" + +-#: plugins/repomanage.py:181 ++#: plugins/repomanage.py:184 + msgid "Space separated output, not newline" + msgstr "スペースで区切られた出力で、改行ではありません" + +-#: plugins/repomanage.py:183 ++#: plugins/repomanage.py:186 + msgid "Newest N packages to keep - defaults to 1" + msgstr "維持する最新の N パッケージ - デフォルトは 1 に設定されます" + +-#: plugins/repomanage.py:186 ++#: plugins/repomanage.py:189 + msgid "Path to directory" + msgstr "ディレクトリーへのパス" + +-#: plugins/reposync.py:54 ++#: plugins/reposync.py:55 + msgid "download all packages from remote repo" + msgstr "リモート repo からすべてのパッケージをダウンロードします" + +-#: plugins/reposync.py:63 ++#: plugins/reposync.py:64 + msgid "download only packages for this ARCH" + msgstr "この ARCH 向けのパッケージのみをダウンロード" + +-#: plugins/reposync.py:65 ++#: plugins/reposync.py:66 + msgid "delete local packages no longer present in repository" + msgstr "リポジトリーにもはや存在しないローカルパッケージを削除" + +-#: plugins/reposync.py:67 +-msgid "also download and uncompress comps.xml" +-msgstr "" +- +-#: plugins/reposync.py:69 ++#: plugins/reposync.py:68 + msgid "download all the metadata." +-msgstr "" ++msgstr "すべてのメタデータをダウンロードします。" + +-#: plugins/reposync.py:71 +-msgid "download only newest packages per-repo" +-msgstr "最新のパッケージ per-repo のみをダウンロード" ++#: plugins/reposync.py:70 ++msgid "Remove packages that fail GPG signature checking after downloading" ++msgstr "ダウンロード後に GPG 署名の確認に失敗するパッケージを削除します" + + #: plugins/reposync.py:73 +-msgid "where to store downloaded repositories" +-msgstr "" ++msgid "also download and uncompress comps.xml" ++msgstr "comps.xml もダウンロードして展開します" + + #: plugins/reposync.py:75 +-msgid "Don't add the reponame to the download path." +-msgstr "" +- +-#: plugins/reposync.py:77 + msgid "" +-"where to store downloaded repository metadata. Defaults to the value of " +-"--download-path." ++"where to store downloaded repository metadata. Defaults to the value of --" ++"download-path." + msgstr "" ++"ダウンロード済みリポジトリーメタデータの保管場所。初期値は --download-path で" ++"す。" ++ ++#: plugins/reposync.py:78 ++msgid "download only newest packages per-repo" ++msgstr "最新のパッケージ per-repo のみをダウンロード" + + #: plugins/reposync.py:80 +-msgid "operate on source packages" +-msgstr "ソースパッケージでの操作" ++msgid "Don't add the reponame to the download path." ++msgstr "ダウンロードパスにはリポネームを追加しないでください。" + + #: plugins/reposync.py:82 ++msgid "where to store downloaded repositories" ++msgstr "ダウンロード済みリポジトリーの保管場所" ++ ++#: plugins/reposync.py:84 + msgid "try to set local timestamps of local files by the one on the server" +-msgstr "" ++msgstr "サーバー上から、ローカルファイルのローカル timestamps の設定を試みます" ++ ++#: plugins/reposync.py:87 ++msgid "download only source packages" ++msgstr "ソースパッケージのみをダウンロード" + +-#: plugins/reposync.py:85 ++#: plugins/reposync.py:89 + msgid "Just list urls of what would be downloaded, don't download" + msgstr "" ++"ダウンロードする予定のものの URL をリストするだけで、ダウンロードしないでくだ" ++"さい" + +-#: plugins/reposync.py:109 ++#: plugins/reposync.py:113 + msgid "Can't use --norepopath with multiple repositories" +-msgstr "" ++msgstr "複数のリポジトリーでは -norepopath は使えません" + +-#: plugins/reposync.py:127 ++#: plugins/reposync.py:132 + #, python-format + msgid "Failed to get mirror for metadata: %s" +-msgstr "" ++msgstr "メタデータのミラー取得に失敗しました: %s" + +-#: plugins/reposync.py:144 ++#: plugins/reposync.py:149 + msgid "Failed to get mirror for the group file." +-msgstr "" ++msgstr "グループファイルのミラー取得に失敗しました。" ++ ++#: plugins/reposync.py:168 ++msgid "Removing {}: {}" ++msgstr "{} の削除中: {}" + + #: plugins/reposync.py:175 ++msgid "GPG signature check failed." ++msgstr "GPG 署名の確認に失敗しました。" ++ ++#: plugins/reposync.py:196 + msgid "Download target '{}' is outside of download path '{}'." +-msgstr "" ++msgstr "ダウンロードターゲット '{}' は、ダウンロードパス '{}' の外にあります。" + +-#: plugins/reposync.py:190 ++#: plugins/reposync.py:211 + #, python-format + msgid "[DELETED] %s" + msgstr "[DELETED] %s" + +-#: plugins/reposync.py:192 ++#: plugins/reposync.py:213 + #, python-format + msgid "failed to delete file %s" + msgstr "ファイル %s の削除に失敗しました" + +-#: plugins/reposync.py:201 ++#: plugins/reposync.py:222 + #, python-format + msgid "comps.xml for repository %s saved" + msgstr "リポジトリー %s の comps.xml が保存されました" + + #: plugins/show_leaves.py:54 + msgid "New leaves:" +-msgstr "新規のリーフパッケージ (他のパッケージから依存されていないパッケージ) :" ++msgstr "" ++"新規のリーフパッケージ (他のパッケージから依存されていないパッケージ) :" + +-#: plugins/versionlock.py:32 ++#: plugins/versionlock.py:33 + #, python-format + msgid "Unable to read version lock configuration: %s" + msgstr "バージョンロック設定の読み込みができません: %s" + +-#: plugins/versionlock.py:33 ++#: plugins/versionlock.py:34 + msgid "Locklist not set" + msgstr "ロックリストが設定されていません" + +-#: plugins/versionlock.py:34 ++#: plugins/versionlock.py:35 + msgid "Adding versionlock on:" + msgstr "versionlock を追加:" + +-#: plugins/versionlock.py:35 ++#: plugins/versionlock.py:36 + msgid "Adding exclude on:" + msgstr "除外を追加:" + +-#: plugins/versionlock.py:36 ++#: plugins/versionlock.py:37 + msgid "Package already locked in equivalent form:" +-msgstr "" ++msgstr "同等の形で既にロックされているパッケージ:" + +-#: plugins/versionlock.py:37 ++#: plugins/versionlock.py:38 + msgid "Package {} is already locked" +-msgstr "" ++msgstr "パッケージ {} は既にロックされています" + +-#: plugins/versionlock.py:38 ++#: plugins/versionlock.py:39 + msgid "Package {} is already excluded" +-msgstr "" ++msgstr "パッケージ{}はすでに除外されています" + +-#: plugins/versionlock.py:39 ++#: plugins/versionlock.py:40 + msgid "Deleting versionlock for:" + msgstr "versionlock を削除:" + +-#: plugins/versionlock.py:40 ++#: plugins/versionlock.py:41 + msgid "No package found for:" + msgstr "パッケージが見つかりませんでした:" + +-#: plugins/versionlock.py:41 ++#: plugins/versionlock.py:42 + msgid "Excludes from versionlock plugin were not applied" + msgstr "versionlock プラグインからの除外は適用されませんでした" + +-#: plugins/versionlock.py:42 ++#: plugins/versionlock.py:43 + msgid "Versionlock plugin: number of lock rules from file \"{}\" applied: {}" + msgstr "versionlock プラグイン: ファイル \"{}\" のロックルールの数を適用: {}" + +-#: plugins/versionlock.py:43 +-msgid "Versionlock plugin: number of exclude rules from file \"{}\" applied: {}" ++#: plugins/versionlock.py:44 ++msgid "" ++"Versionlock plugin: number of exclude rules from file \"{}\" applied: {}" + msgstr "versionlock プラグイン: ファイル \"{}\" の除外ルールの数を適用: {}" + +-#: plugins/versionlock.py:44 ++#: plugins/versionlock.py:45 + msgid "Versionlock plugin: could not parse pattern:" + msgstr "versionlock プラグイン: パターンを解析できませんでした:" + +-#: plugins/versionlock.py:130 ++#: plugins/versionlock.py:134 + msgid "control package version locks" + msgstr "パッケージバージョンロックの制御" + +-#: plugins/versionlock.py:136 ++#: plugins/versionlock.py:140 + msgid "Use package specifications as they are, do not try to parse them" +-msgstr "" ++msgstr "パッケージ仕様をそのまま使用し、解析を試みないでください" ++ ++#: plugins/versionlock.py:160 ++msgid "Subcommand '{}' is deprecated. Use 'exclude' subcommand instead." ++msgstr "サブコマンド '{}' は非推奨になりました。代わりに 'exclude' " ++"サブコマンドを使用してください。" + + #~ msgid "" + #~ "\n" +diff --git a/po/ko.po b/po/ko.po +index 3f4eb89..307ccc7 100644 +--- a/po/ko.po ++++ b/po/ko.po +@@ -1,222 +1,230 @@ + # Ludek Janda , 2018. #zanata, 2020. ++# simmon , 2021. ++# Kim InSoo , 2022. + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2020-10-05 09:18-0400\n" +-"PO-Revision-Date: 2020-09-12 11:29+0000\n" +-"Last-Translator: Ludek Janda \n" +-"Language-Team: Korean \n" ++"POT-Creation-Date: 2022-02-28 11:53+0100\n" ++"PO-Revision-Date: 2022-03-02 04:16+0000\n" ++"Last-Translator: Kim InSoo \n" ++"Language-Team: Korean \n" + "Language: ko\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=1; plural=0;\n" +-"X-Generator: Weblate 4.2.2\n" ++"X-Generator: Weblate 4.11\n" + + #: plugins/builddep.py:45 + msgid "[PACKAGE|PACKAGE.spec]" +-msgstr "" ++msgstr "[PACKAGE|PACKAGE.spec]" + + #: plugins/builddep.py:85 + #, python-format + msgid "'%s' is not of the format 'MACRO EXPR'" +-msgstr "" ++msgstr "'%s'는 'MACRO EXPR' 형식이 아닙니다" + + #: plugins/builddep.py:90 + msgid "packages with builddeps to install" +-msgstr "" ++msgstr "설치 할 builddeps가 있는 꾸러미(package)" + + #: plugins/builddep.py:93 + msgid "define a macro for spec file parsing" +-msgstr "" ++msgstr "특정한 파일 구문분석을 위해 매크로를 정의한다" + + #: plugins/builddep.py:95 + msgid "skip build dependencies not available in repositories" +-msgstr "" ++msgstr "저장소에서 사용 할 수 없는 구성 의존성을 건너띄기 한다" + + #: plugins/builddep.py:98 + msgid "treat commandline arguments as spec files" +-msgstr "" ++msgstr "명령줄 인수를 지정한 파일로 다룬다" + + #: plugins/builddep.py:100 + msgid "treat commandline arguments as source rpm" +-msgstr "" ++msgstr "명령줄 인수를 rpm 소스로 다룬다" + + #: plugins/builddep.py:144 + msgid "RPM: {}" +-msgstr "" ++msgstr "RPM: {}" + + #: plugins/builddep.py:153 + msgid "Some packages could not be found." +-msgstr "" ++msgstr "몇몇 꾸러미(packages)를 찾을 수 없습니다." + + #. No provides, no files +-#. Richdeps can have no matches but it could be correct (solver must decide +-#. later) ++#. Richdeps can have no matches but it could be correct (solver must decide later) + #: plugins/builddep.py:173 + #, python-format + msgid "No matching package to install: '%s'" +-msgstr "" ++msgstr "설치: '%s' 꾸러미(package)가 일치하지 않습니다" + + #: plugins/builddep.py:191 + #, python-format + msgid "Failed to open: '%s', not a valid source rpm file." +-msgstr "" ++msgstr "여는데 실패하였습니다: '%s', 유효한 rpm 파일 출처가 아닙니다." + + #: plugins/builddep.py:204 plugins/builddep.py:220 plugins/builddep.py:237 + msgid "Not all dependencies satisfied" +-msgstr "" ++msgstr "모든 의존성을 만족하지 않습니다" + + #: plugins/builddep.py:211 + #, python-format + msgid "Failed to open: '%s', not a valid spec file: %s" +-msgstr "" ++msgstr "여는데 실패하였습니다 '%s', 지정한 파일: %s가 유효하지 않습니다" + + #: plugins/builddep.py:230 plugins/repoclosure.py:118 + #, python-format + msgid "no package matched: %s" +-msgstr "일치하는 패키지 없음 : %s" ++msgstr "일치하는 꾸러미(package) 없음: %s" + + #: plugins/changelog.py:37 + #, python-brace-format + msgid "Not a valid date: \"{0}\"." +-msgstr "" ++msgstr "유효한 날자가 아닙니다: \"{0}\"." + + #: plugins/changelog.py:43 + msgid "Show changelog data of packages" +-msgstr "" ++msgstr "꾸러미(packages)의 변화 기록자료를 보여줍니다" + + #: plugins/changelog.py:51 + msgid "" + "show changelog entries since DATE. To avoid ambiguosity, YYYY-MM-DD format " + "is recommended." + msgstr "" ++"DATE 이후에 변화기록를 보여줍니다. 모호함을 피하기 위하여, YYYY-MM-DD 형식을 " ++"추천합니다." + + #: plugins/changelog.py:55 + msgid "show given number of changelog entries per package" +-msgstr "" ++msgstr "주어진 수의 꾸러미(package) 마다 변화기록 항목을 보여줍니다" + + #: plugins/changelog.py:58 + msgid "" + "show only new changelog entries for packages, that provide an upgrade for " + "some of already installed packages." + msgstr "" ++"몇몇 이미 설치된 꾸러미(package)들의 최신화를 제공하는 꾸러미를 위하여 새로" ++"운 변화기록만을 보여줍니다." + + #: plugins/changelog.py:60 + msgid "PACKAGE" +-msgstr "" ++msgstr "꾸러미(package)" + + #: plugins/changelog.py:81 plugins/debuginfo-install.py:90 + #, python-format + msgid "No match for argument: %s" +-msgstr "인수와 일치하는 항목 없음 : %s" ++msgstr "인수가 일치하지 않습니다: %s" + + #: plugins/changelog.py:109 + msgid "Listing changelogs since {}" +-msgstr "" ++msgstr "{} 이 후의 변화기록 목록" + + #: plugins/changelog.py:111 + msgid "Listing only latest changelog" + msgid_plural "Listing {} latest changelogs" +-msgstr[0] "" ++msgstr[0] "최신화된 변화기록 목록 {}" + + #: plugins/changelog.py:116 + msgid "Listing only new changelogs since installed version of the package" +-msgstr "" ++msgstr "꾸러미 설치 버전 이후의 새로운 변화 기록만 목록화함" + + #: plugins/changelog.py:118 + msgid "Listing all changelogs" +-msgstr "" ++msgstr "모든 변화기록 목록" + + #: plugins/changelog.py:122 + msgid "Changelogs for {}" +-msgstr "" ++msgstr "{}의 변경 사항" + +-#: plugins/config_manager.py:37 ++#: plugins/config_manager.py:38 + #, python-brace-format + msgid "manage {prog} configuration options and repositories" +-msgstr "" ++msgstr "{prog} 환경 선택과 저장소 관리" + +-#: plugins/config_manager.py:44 ++#: plugins/config_manager.py:45 + msgid "repo to modify" + msgstr "수정할 repo" + +-#: plugins/config_manager.py:47 ++#: plugins/config_manager.py:48 + msgid "save the current options (useful with --setopt)" + msgstr "현재 옵션 저장 (--setopt와 함께 유용함)" + +-#: plugins/config_manager.py:50 ++#: plugins/config_manager.py:51 + msgid "add (and enable) the repo from the specified file or url" + msgstr "지정된 파일 또는 URL에서 repo를 추가 (및 활성화)" + +-#: plugins/config_manager.py:53 ++#: plugins/config_manager.py:54 + msgid "print current configuration values to stdout" + msgstr "현재 구성 값을 표준 출력으로 인쇄" + +-#: plugins/config_manager.py:56 ++#: plugins/config_manager.py:57 + msgid "print variable values to stdout" + msgstr "변수 값을 표준 출력으로 출력" + +-#: plugins/config_manager.py:60 ++#: plugins/config_manager.py:61 + msgid "enable repos (automatically saves)" +-msgstr "" ++msgstr "저장소 활성화 (자동으로 저장합니다)" + +-#: plugins/config_manager.py:63 ++#: plugins/config_manager.py:64 + msgid "disable repos (automatically saves)" +-msgstr "" ++msgstr "저장소 비활성화 (자동으로 저장합니다)" + +-#: plugins/config_manager.py:77 ++#: plugins/config_manager.py:78 + msgid "one of the following arguments is required: {}" +-msgstr "" ++msgstr "다음 인수 중 하나가 필요합니다: {}" + +-#: plugins/config_manager.py:86 ++#: plugins/config_manager.py:87 + msgid "" + "Warning: --enablerepo/--disablerepo arguments have no meaningwith config " + "manager. Use --set-enabled/--set-disabled instead." + msgstr "" ++"경고: -- --enablerepo/--disablerepo 인수는 설정 관리자와 함께 의미를 갖고 있" ++"지 않습니다. 대신에 --set-enabled/--set-disabled를 사용하세요." + +-#: plugins/config_manager.py:131 ++#: plugins/config_manager.py:132 + #, python-format + msgid "No matching repo to modify: %s." + msgstr "수정할 일치하는 Repo가 없습니다. %s." + +-#: plugins/config_manager.py:182 ++#: plugins/config_manager.py:183 + #, python-format + msgid "Adding repo from: %s" + msgstr "다음 위치에서 레포 추가 : %s" + +-#: plugins/config_manager.py:206 ++#: plugins/config_manager.py:207 + msgid "Configuration of repo failed" + msgid_plural "Configuration of repos failed" +-msgstr[0] "저장소 구성에 실패했습니다." ++msgstr[0] "저장소 구성에 실패했습니다" + +-#: plugins/config_manager.py:216 ++#: plugins/config_manager.py:217 + #, python-format + msgid "Could not save repo to repofile %s: %s" + msgstr "repofile에 repo를 저장할 수 없습니다. %s: %s" + +-#: plugins/copr.py:59 ++#: plugins/copr.py:64 + msgid "y" + msgstr "y" + +-#: plugins/copr.py:59 ++#: plugins/copr.py:64 + msgid "yes" + msgstr "예" + +-#: plugins/copr.py:60 ++#: plugins/copr.py:65 + msgid "n" + msgstr "n" + +-#: plugins/copr.py:60 ++#: plugins/copr.py:65 + msgid "no" + msgstr "아니" + +-#: plugins/copr.py:79 ++#: plugins/copr.py:84 + msgid "Interact with Copr repositories." + msgstr "Copr 저장소와 상호 작용하십시오." + +-#: plugins/copr.py:81 ++#: plugins/copr.py:86 + msgid "" + "\n" + " enable name/project [chroot]\n" +@@ -237,56 +245,84 @@ msgid "" + " " + msgstr "" + "\n" +-" 프로젝트 이름 / 프로젝트 제거 - 설치 / 사용 / 사용 안 함 목록 - 사용 가능 사용자 = NAME 검색 프로젝트 예 : copr enable rhscl / perl516 epel-6-x86_64 copr enable ignatenkobrain / ocltoys copr 비활성화 rhscl / perl516 copr 제거 rhscl / perl516 copr 목록 - 사용 가능 목록 - 사용 가능 사용자 = ignatenkobrain copr 검색 테스트\n" ++" enable name/project [chroot]\n" ++" disable name/project\n" ++" remove name/project\n" ++" list --installed/enabled/disabled\n" ++" list --available-by-user=NAME\n" ++" search project\n" ++"\n" ++" Examples:\n" ++" copr enable rhscl/perl516 epel-6-x86_64\n" ++" copr enable ignatenkobrain/ocltoys\n" ++" copr disable rhscl/perl516\n" ++" copr remove rhscl/perl516\n" ++" copr list --enabled\n" ++" copr list --available-by-user=ignatenkobrain\n" ++" copr search tests\n" + " " + +-#: plugins/copr.py:107 ++#: plugins/copr.py:112 + msgid "List all installed Copr repositories (default)" + msgstr "설치된 모든 Copr 저장소 나열 (기본값)" + +-#: plugins/copr.py:109 ++#: plugins/copr.py:114 + msgid "List enabled Copr repositories" + msgstr "사용 가능한 Copr 저장소 목록" + +-#: plugins/copr.py:111 ++#: plugins/copr.py:116 + msgid "List disabled Copr repositories" + msgstr "비활성화 된 Copr 저장소 목록" + +-#: plugins/copr.py:113 ++#: plugins/copr.py:118 + msgid "List available Copr repositories by user NAME" + msgstr "사용자가 사용할 수있는 Copr 저장소를 나열합니다. NAME" + +-#: plugins/copr.py:115 ++#: plugins/copr.py:120 + msgid "Specify an instance of Copr to work with" +-msgstr "" ++msgstr "일하는 Copr의 예를 지정합니다" + +-#: plugins/copr.py:149 plugins/copr.py:217 plugins/copr.py:237 ++#: plugins/copr.py:154 plugins/copr.py:222 plugins/copr.py:249 + msgid "Error: " + msgstr "오류: " + +-#: plugins/copr.py:150 ++#: plugins/copr.py:155 + msgid "" +-"specify Copr hub either with `--hub` or using " +-"`copr_hub/copr_username/copr_projectname` format" ++"specify Copr hub either with `--hub` or using `copr_hub/copr_username/" ++"copr_projectname` format" + msgstr "" ++"Corp hub를 `--hub` 또는 사용하기 `copr_hub/copr_username/copr_projectname`형" ++"식으로 지정합니다" + +-#: plugins/copr.py:153 ++#: plugins/copr.py:158 + msgid "multiple hubs specified" +-msgstr "" ++msgstr "지정된 여러 허브" + +-#: plugins/copr.py:218 plugins/copr.py:222 ++#: plugins/copr.py:223 plugins/copr.py:227 + msgid "exactly two additional parameters to copr command are required" +-msgstr "copr 명령에 정확히 두 개의 추가 매개 변수가 필요합니다." ++msgstr "copr 명령에 정확히 두 개의 추가 매개 변수가 필요합니다" ++ ++#: plugins/copr.py:232 ++msgid "Too many arguments." ++msgstr "너무 많은 인수." + +-#: plugins/copr.py:238 ++#: plugins/copr.py:235 ++msgid "" ++"Bad format of optional chroot. The format is distribution-version-" ++"architecture." ++msgstr "선택적인 chroot의 나쁜 형식. 형식은 배포-버전-구조입니다." ++ ++#: plugins/copr.py:250 + msgid "use format `copr_username/copr_projectname` to reference copr project" +-msgstr "copr 프로젝트를 참조하기 위해`copr_username / copr_projectname` 형식을 사용하십시오" ++msgstr "" ++"copr 프로젝트를 참조하기 위해`copr_username / copr_projectname` 형식을 사용하" ++"십시오" + +-#: plugins/copr.py:240 ++#: plugins/copr.py:252 + msgid "bad copr project format" + msgstr "나쁜 copr 프로젝트 형식" + +-#: plugins/copr.py:254 ++#: plugins/copr.py:266 + msgid "" + "\n" + "Enabling a Copr repository. Please note that this repository is not part\n" +@@ -294,78 +330,95 @@ msgid "" + "\n" + "The Fedora Project does not exercise any power over the contents of\n" + "this repository beyond the rules outlined in the Copr FAQ at\n" +-",\n" ++",\n" + "and packages are not held to any quality or security level.\n" + "\n" + "Please do not file bug reports about these packages in Fedora\n" + "Bugzilla. In case of problems, contact the owner of this repository.\n" + msgstr "" ++"\n" ++"Core 저정소를 활성화합니다. 이 저장소는 주요 배포판 부분이 아님을 알고 있기 " ++"바라고,\n" ++"품질이 다를 수 있습니다.\n" ++"\n" ++"페도라 프로젝트는\n" ++"에\n" ++"Core FAQ에 있는 설명된 규칙을 넘는 저장소 내용 이상의 권한을 시험하지 않으" ++"며,\n" ++"그리고 꾸러미(package)는 어떤 품질이나 보안 수준을 유지하지 않습니다.\n" ++"\n" ++"페도라 버그질라에 이들 꾸러미에 대한 파일 결점 보고를 제출하지 마세요.\n" ++"이들 문제는, 이들 저장소 소유자와 접촉하세요.\n" + +-#: plugins/copr.py:271 ++#: plugins/copr.py:283 + msgid "Repository successfully enabled." + msgstr "저장소가 사용 설정되었습니다." + +-#: plugins/copr.py:276 ++#: plugins/copr.py:288 + msgid "Repository successfully disabled." + msgstr "저장소가 사용 중지되었습니다." + +-#: plugins/copr.py:280 ++#: plugins/copr.py:292 + msgid "Repository successfully removed." + msgstr "저장소가 제거되었습니다." + +-#: plugins/copr.py:284 plugins/copr.py:693 ++#: plugins/copr.py:296 plugins/copr.py:697 + msgid "Unknown subcommand {}." + msgstr "알 수없는 부속 명령 {}." + +-#: plugins/copr.py:341 ++#: plugins/copr.py:353 + msgid "" +-"* These coprs have repo file with an old format that contains no information" +-" about Copr hub - the default one was assumed. Re-enable the project to fix " ++"* These coprs have repo file with an old format that contains no information " ++"about Copr hub - the default one was assumed. Re-enable the project to fix " + "this." + msgstr "" ++"* 이들 coprs은 Copr hub에 대하여 어떤 정보도 포함하지 않는 오래된 형태의 저장" ++"소 파일을 갖고 있습니다. 이 문제를 수정하기 위하여 프로젝트를 재활성화하세요." + +-#: plugins/copr.py:353 ++#: plugins/copr.py:366 + msgid "Can't parse repositories for username '{}'." + msgstr "사용자 이름 '{}'에 대한 리포지토리를 구문 분석 할 수 없습니다." + +-#: plugins/copr.py:356 ++#: plugins/copr.py:369 + msgid "List of {} coprs" + msgstr "{} 명의 경찰 목록" + +-#: plugins/copr.py:364 ++#: plugins/copr.py:374 + msgid "No description given" +-msgstr "설명이 없습니다." ++msgstr "설명이 없습니다" + +-#: plugins/copr.py:376 ++#: plugins/copr.py:386 + msgid "Can't parse search for '{}'." + msgstr "'{}'에 대한 검색을 구문 분석 할 수 없습니다." + +-#: plugins/copr.py:379 ++#: plugins/copr.py:389 + msgid "Matched: {}" + msgstr "일치하는 항목 : {}" + +-#: plugins/copr.py:387 ++#: plugins/copr.py:394 + msgid "No description given." + msgstr "설명이 없습니다." + +-#: plugins/copr.py:410 ++#: plugins/copr.py:416 + msgid "Safe and good answer. Exiting." + msgstr "안전하고 좋은 대답. 나가기." + +-#: plugins/copr.py:417 ++#: plugins/copr.py:423 + msgid "This command has to be run under the root user." + msgstr "이 명령은 루트 사용자로 실행해야합니다." + +-#: plugins/copr.py:481 ++#: plugins/copr.py:485 + msgid "" + "This repository does not have any builds yet so you cannot enable it now." + msgstr "이 저장소에는 빌드가 아직 없으므로 지금 사용할 수 없습니다." + +-#: plugins/copr.py:484 ++#: plugins/copr.py:488 + msgid "Such repository does not exist." + msgstr "이러한 저장소는 존재하지 않습니다." + +-#: plugins/copr.py:528 ++#: plugins/copr.py:532 + #, python-brace-format + msgid "" + "Maintainer of the enabled Copr repository decided to make\n" +@@ -381,53 +434,63 @@ msgid "" + "\n" + "These repositories have been enabled automatically." + msgstr "" ++"활성화된 Core 저장소의 유지는 다른 저장소에 이를 독립적으로\n" ++"만드는 것으로 결정하였습니다.\n" ++"그런 저장소는 주요 Corp 저장소에서 성공적인 RPM 설치를\n" ++"위하여 일반적으로 필요합니다(이들은 실행 의존성을 제공합니다).\n" ++"\n" ++"위도 여기에 적용되며 품질과 결점-보고에 대한 참고 사항을 알아야 하고,\n" ++"페도라 프로젝트는 그 내용을 통제하지 않습니다.\n" ++"목록을 다시 검토합니다:\n" ++"\n" ++"{0}\n" ++"\n" ++"이들 저장소는 자동으로 활성화 됩니다." + +-#: plugins/copr.py:549 ++#: plugins/copr.py:553 + msgid "Do you want to keep them enabled?" +-msgstr "" ++msgstr "계속 사용하길 원하시나요?" + +-#: plugins/copr.py:582 ++#: plugins/copr.py:586 + #, python-brace-format + msgid "Failed to remove copr repo {0}/{1}/{2}" +-msgstr "" ++msgstr "copr repo {0}/{1}/{2} 제거를 실패하였습니다" + +-#: plugins/copr.py:593 ++#: plugins/copr.py:597 + msgid "Failed to disable copr repo {}/{}" +-msgstr "copr repo {} / {}를 사용 중지하지 못했습니다." ++msgstr "copr repo {} / {}를 사용 중지를 실패하였습니다" + +-#: plugins/copr.py:611 plugins/copr.py:648 ++#: plugins/copr.py:615 plugins/copr.py:652 + msgid "Unknown response from server." + msgstr "서버에서 알 수없는 응답." + +-#: plugins/copr.py:633 ++#: plugins/copr.py:637 + msgid "Interact with Playground repository." + msgstr "놀이터 저장소와 상호 작용하십시오." + +-#: plugins/copr.py:639 +-#, fuzzy +-#| msgid "Interact with Playground repository." ++#: plugins/copr.py:643 + msgid "Enabling a Playground repository." +-msgstr "놀이터 저장소와 상호 작용하십시오." ++msgstr "동작 저장소와 활용하기." + +-#: plugins/copr.py:640 ++#: plugins/copr.py:644 + msgid "Do you want to continue?" +-msgstr "" ++msgstr "계속하기를 원하십니까?" + +-#: plugins/copr.py:683 ++#: plugins/copr.py:687 + msgid "Playground repositories successfully enabled." + msgstr "놀이터 저장소를 사용하도록 설정했습니다." + +-#: plugins/copr.py:686 ++#: plugins/copr.py:690 + msgid "Playground repositories successfully disabled." + msgstr "놀이터 저장소가 사용 중지되었습니다." + +-#: plugins/copr.py:690 ++#: plugins/copr.py:694 + msgid "Playground repositories successfully updated." + msgstr "놀이터 저장소가 성공적으로 업데이트되었습니다." + + #: plugins/debug.py:53 + msgid "dump information about installed rpm packages to file" +-msgstr "설치된 rpm 패키지에 대한 정보를 파일에 덤프하십시오." ++msgstr "설치된 rpm 꾸러미(package)에 대한 정보를 파일에 덤프하십시오" + + #: plugins/debug.py:67 + msgid "do not attempt to dump the repository contents." +@@ -444,7 +507,7 @@ msgstr "작성된 출력 : %s" + + #: plugins/debug.py:172 + msgid "restore packages recorded in debug-dump file" +-msgstr "디버그 덤프 파일에 기록 된 패키지 복원" ++msgstr "디버그 덤프 파일에 기록 된 꾸러미(package) 복원" + + #: plugins/debug.py:185 + msgid "output commands that would be run to stdout." +@@ -452,13 +515,15 @@ msgstr "stdout으로 실행될 출력 명령." + + #: plugins/debug.py:188 + msgid "Install the latest version of recorded packages." +-msgstr "기록 된 패키지의 최신 버전을 설치하십시오." ++msgstr "기록 된 꾸러미의 최신 버전을 설치하십시오." + + #: plugins/debug.py:191 + msgid "" + "Ignore architecture and install missing packages matching the name, epoch, " + "version and release." +-msgstr "아키텍처를 무시하고 이름, 기원, 버전 및 릴리스와 일치하는 누락 된 패키지를 설치하십시오." ++msgstr "" ++"구조를 무시하고 이름, 기원, 버전및 출시와 일치하는 누락 된 꾸러미를 설치하십" ++"시오." + + #: plugins/debug.py:196 + msgid "limit to specified type" +@@ -469,6 +534,8 @@ msgid "" + "Allow removing of install-only packages. Using this option may result in an " + "attempt to remove the running kernel." + msgstr "" ++"설치전용 꾸리미 제거를 허용합니다. 이 선택의 사용은 동작하고 있는 커널을 제거" ++"하는 결과가 나타날 수 있습니다." + + #: plugins/debug.py:202 + msgid "name of dump file" +@@ -477,7 +544,7 @@ msgstr "덤프 파일의 이름" + #: plugins/debug.py:273 + #, python-format + msgid "Package %s is not available" +-msgstr "꾸러미 %s 사용할 수 없습니다" ++msgstr "꾸러미(package) %s 사용 할 수 없습니다" + + #: plugins/debug.py:283 + #, python-format +@@ -486,31 +553,39 @@ msgstr "잘못된 dnf 디버그 파일 : %s" + + #: plugins/debuginfo-install.py:56 + msgid "install debuginfo packages" +-msgstr "debuginfo 패키지 설치" ++msgstr "디버그정보 꾸러미(package) 설치" + + #: plugins/debuginfo-install.py:180 + #, python-format + msgid "" + "Could not find debuginfo package for the following available packages: %s" + msgstr "" ++"다음 사용가능한 꾸러미(package): %s 를 위하여 디버그정보 꾸러미를 찾을 수 없" ++"습니다" + + #: plugins/debuginfo-install.py:185 + #, python-format + msgid "" + "Could not find debugsource package for the following available packages: %s" + msgstr "" ++"다음 가용한 꾸러미(package): %s 를 위하여 디버그자원 꾸러미(package)를 찾을 " ++"수 없습니다" + + #: plugins/debuginfo-install.py:190 + #, python-format + msgid "" + "Could not find debuginfo package for the following installed packages: %s" + msgstr "" ++"다음 설치된 꾸러미(package): %s 를 위한 디버그정보 꾸러미(package)를 찾을 수 " ++"없습니다" + + #: plugins/debuginfo-install.py:195 + #, python-format + msgid "" + "Could not find debugsource package for the following installed packages: %s" + msgstr "" ++"다음 설치된 꾸러미(package): %s 를 위하여 디버그자원 꾸러미(package)를 찾을 " ++"수 없습니다" + + #: plugins/debuginfo-install.py:199 + msgid "Unable to find a match" +@@ -518,51 +593,53 @@ msgstr "일치하는 항목을 찾을 수 없습니다" + + #: plugins/download.py:41 + msgid "Download package to current directory" +-msgstr "현재 디렉토리에 패키지 다운로드" ++msgstr "현재 디렉토리에 꾸러미 내려받기" + + #: plugins/download.py:51 + msgid "packages to download" +-msgstr "다운로드 할 패키지" ++msgstr "내려받기 할 꾸러미" + + #: plugins/download.py:53 + msgid "download the src.rpm instead" +-msgstr "대신 src.rpm을 다운로드하십시오." ++msgstr "대신 src.rpm을 내려받으세요" + + #: plugins/download.py:55 + msgid "download the -debuginfo package instead" +-msgstr "대신 -debuginfo 패키지를 다운로드하십시오." ++msgstr "대신 -debuginfo 꾸러미(package)를 내려받아요" + + #: plugins/download.py:57 + msgid "download the -debugsource package instead" +-msgstr "" ++msgstr "대신 -debuginfo 꾸러미(package)를 내려받으세요" + + #: plugins/download.py:60 + msgid "limit the query to packages of given architectures." +-msgstr "쿼리를 주어진 아키텍처의 패키지로 제한하십시오." ++msgstr "요청를 주어진 구조 꾸러미(package)로 제한하십시오." + +-#: plugins/download.py:62 ++#: plugins/download.py:62 plugins/modulesync.py:51 + msgid "resolve and download needed dependencies" +-msgstr "필요한 종속성을 해결하고 다운로드하십시오." ++msgstr "필요한 종속성을 해결하고 내려받아요" + + #: plugins/download.py:64 + msgid "" + "when running with --resolve, download all dependencies (do not exclude " + "already installed ones)" + msgstr "" ++"--resolve 와 함께 실행 할 때에, 모든 의존성을 내려받습니다 (이미 설치된 것들" ++"은 포함하지 않습니다)" + + #: plugins/download.py:67 + msgid "" + "print list of urls where the rpms can be downloaded instead of downloading" +-msgstr "다운로드 대신 rpms를 다운로드 할 수있는 URL 목록 인쇄" ++msgstr "내려받기 대신 rpms를 내려받기 할 수 있는 URL 목록 인쇄" + + #: plugins/download.py:72 + msgid "when running with --url, limit to specific protocols" +-msgstr "--url을 사용하여 실행하면 특정 프로토콜로 제한됩니다." ++msgstr "--url을 사용하여 실행하면 특정 통신규약이 제한됩니다" + +-#: plugins/download.py:121 plugins/reposync.py:293 ++#: plugins/download.py:121 plugins/reposync.py:314 + #, python-format + msgid "Failed to get mirror for package: %s" +-msgstr "패키지 미러링에 실패했습니다. %s" ++msgstr "꾸러미 연결주소 얻기에 실패했습니다: %s" + + #: plugins/download.py:243 + msgid "Exiting due to strict setting." +@@ -570,7 +647,7 @@ msgstr "엄격한 설정으로 인해 종료됩니다." + + #: plugins/download.py:261 + msgid "Error in resolve of packages:" +-msgstr "패키지 해결 오류 :" ++msgstr "꾸러미(package) 해결 오류 :" + + #: plugins/download.py:279 + #, python-format +@@ -580,27 +657,145 @@ msgstr "소스 rpm이 정의되지 않았습니다. %s" + #: plugins/download.py:296 plugins/download.py:309 + #, python-format + msgid "No package %s available." +-msgstr "패키지 없음 %s 유효한." ++msgstr "가용한 꾸러미(package) %s가 없습니다." ++ ++#: plugins/groups_manager.py:49 ++msgid "Invalid group id" ++msgstr "유효하지 않는 그룹 id" ++ ++#: plugins/groups_manager.py:58 ++msgid "Invalid translated data, should be in form 'lang:text'" ++msgstr "잘못 번역된 자료, 형식 'lang:text' 에 있어야 합니다" ++ ++#: plugins/groups_manager.py:61 ++msgid "Invalid/empty language for translated data" ++msgstr "번역된 자료가 유효하지 않음/비워짐" ++ ++#: plugins/groups_manager.py:71 ++msgid "Can't generate group id from '{}'. Please specify group id using --id." ++msgstr "" ++"'{}' 에서 그룹 id를 발생 할 수 없습니다. --id를 사용하여 그룹 id를 지정해 주" ++"세요." ++ ++#: plugins/groups_manager.py:79 ++msgid "create and edit groups metadata file" ++msgstr "그룹 메타데이타 파일 생성하고 수정합니다" ++ ++#: plugins/groups_manager.py:90 ++msgid "load groups metadata from file" ++msgstr "파일에서 그룹 메타파일을 적재합니다" ++ ++#: plugins/groups_manager.py:93 ++msgid "save groups metadata to file" ++msgstr "그룹 메타자료를 파일에 저장합니다" ++ ++#: plugins/groups_manager.py:95 ++msgid "load and save groups metadata to file" ++msgstr "그룹 메타파일을 파일에 적재하고 저장합니다" ++ ++#: plugins/groups_manager.py:97 ++msgid "print the result metadata to stdout" ++msgstr "결과 메타데이타를 표준출력으로 출력한다" ++ ++#: plugins/groups_manager.py:100 ++msgid "group id" ++msgstr "그룹 id" ++ ++#: plugins/groups_manager.py:101 ++msgid "group name" ++msgstr "그룹 이름" ++ ++#: plugins/groups_manager.py:103 ++msgid "group description" ++msgstr "그룹 설명" ++ ++#: plugins/groups_manager.py:105 ++msgid "group display order" ++msgstr "그룸 표시 순서" ++ ++#: plugins/groups_manager.py:108 ++msgid "translated name for the group" ++msgstr "그룹을 위한 번역된 이름" ++ ++#: plugins/groups_manager.py:111 ++msgid "translated description for the group" ++msgstr "그룹을 위한 번역 설명" ++ ++#: plugins/groups_manager.py:115 ++msgid "make the group user visible (default)" ++msgstr "그룹 사용자를 표시 (기본값)" ++ ++#: plugins/groups_manager.py:118 ++msgid "make the group user invisible" ++msgstr "그룹 사용자를 보이지 않게 표시" ++ ++#: plugins/groups_manager.py:123 ++msgid "add packages to the mandatory section" ++msgstr "꾸러미(package)를 필 수 부분에 추가합니다" ++ ++#: plugins/groups_manager.py:125 ++msgid "add packages to the optional section" ++msgstr "꾸러미(package)를 선택 부분에 추가합니다" ++ ++#: plugins/groups_manager.py:127 ++msgid "remove packages from the group instead of adding them" ++msgstr "추가하기 대신에 그룹에서 꾸러미(package)를 제거합니다" ++ ++#: plugins/groups_manager.py:129 ++msgid "include also direct dependencies for packages" ++msgstr "꾸러미(package)를 위해 직접적인 의존성을 포함한다" ++ ++#: plugins/groups_manager.py:132 ++msgid "package specification" ++msgstr "꾸러미(package) 사양" ++ ++#: plugins/groups_manager.py:156 ++msgid "Can't edit group without specifying it (use --id or --name)" ++msgstr "이것(user --id 또느 --name)을 특정하지 않고 그룹을 수정 할 수 없습니다" ++ ++#: plugins/groups_manager.py:190 ++msgid "Can't load file \"{}\": {}" ++msgstr "파일 \"{}\": {} 를 적재 할 수 없습니다" ++ ++#: plugins/groups_manager.py:206 ++msgid "Can't save file \"{}\": {}" ++msgstr "파일 \"{}\": {}을 저장 할 수 없습니다" ++ ++#: plugins/groups_manager.py:261 ++msgid "No match for argument: {}" ++msgstr "일치하는 인수가 없습니다 :{}" ++ ++#: plugins/groups_manager.py:298 ++msgid "Can't remove packages from non-existent group" ++msgstr "존재하지 않는 그룹에서 꾸러미(package)를 제거 할 수 없습니다" ++ ++#: plugins/groups_manager.py:307 ++msgid "" ++"Group id '{}' generated from '{}' is duplicit. Please specify group id using " ++"--id." ++msgstr "" ++"'{}'에서 발생한 그룹 id '{}'는 중복되었습니다. --id를 사용하여 그룹 id를 지정" ++"하기 바랍니다." + + #: plugins/leaves.py:32 + msgid "List installed packages not required by any other package" +-msgstr "다른 패키지에서 필요하지 않은 설치된 패키지 나열" ++msgstr "다른 꾸러미(package)에서 필요하지 않은 설치된 꾸러미(packages) 나열" + + #: plugins/local.py:122 + msgid "Unable to create a directory '{}' due to '{}'" +-msgstr "'{}'(으)로 인해 '{}'디렉토리를 만들 수 없습니다." ++msgstr "'{}'(으)로 인해 '{}'디렉토리를 만들 수 없습니다" + + #: plugins/local.py:126 + msgid "'{}' is not a directory" +-msgstr "'{}'은 (는) 디렉토리가 아닙니다." ++msgstr "'{}'는 디렉토리가 아닙니다" + + #: plugins/local.py:135 + msgid "Copying '{}' to local repo" +-msgstr "'{}'을 (를) 로컬 저장소로 복사 중입니다." ++msgstr "'{}'을 로컬 저장소로 복사 중입니다" + + #: plugins/local.py:141 + msgid "Can't write file '{}'" +-msgstr "'{}'파일을 쓸 수 없습니다." ++msgstr "'{}'파일을 쓸 수 없습니다" + + #: plugins/local.py:156 + msgid "Rebuilding local repo" +@@ -608,73 +803,135 @@ msgstr "지역 레포 복구" + + #: plugins/migrate.py:45 + msgid "migrate yum's history, group and yumdb data to dnf" +-msgstr "yum의 히스토리, 그룹 및 yumdb 데이터를 dnf로 마이그레이션합니다." ++msgstr "yum 사용기록, 그룹 및 yumdb 데이터를 dnf로 마이그레이션합니다" + + #: plugins/migrate.py:54 + msgid "Migrating history data..." + msgstr "기록 데이터 마이그레이션 중 ..." + +-#: plugins/needs_restarting.py:65 ++#: plugins/modulesync.py:37 ++msgid "" ++"Download packages from modules and/or create a repository with modular data" ++msgstr "모듈에서 꾸러미를 내려 받기와/또는 모듈식 자료를 갖고 있는 저장소를 생성" ++ ++#: plugins/modulesync.py:44 ++msgid "MODULE" ++msgstr "모듈" ++ ++#: plugins/modulesync.py:45 ++msgid "modules to download" ++msgstr "내려받아야 할 모듈" ++ ++#: plugins/modulesync.py:47 ++msgid "enable repositories with source packages" ++msgstr "원천 꾸러미와 함께 저장소를 활성화" ++ ++#: plugins/modulesync.py:49 ++msgid "enable repositories with debug-info and debug-source packages" ++msgstr "디버그-정보와 디버그-원천 꾸러미와 함께 저장소 활성화" ++ ++#: plugins/modulesync.py:53 ++msgid "download only packages from newest modules" ++msgstr "최신 모듈에서 꾸러미만 내려받기" ++ ++#: plugins/modulesync.py:85 ++msgid "Unable to find a match for argument: '{}'" ++msgid_plural "Unable to find a match for arguments: '{}'" ++msgstr[0] "인수와 일치하는 항목을 찾을 수 없습니다: '{}'" ++ ++#: plugins/modulesync.py:107 ++msgid "" ++"Creation of repository failed with return code {}. All downloaded content " ++"was kept on the system" ++msgstr "반환 코드 {}로 인하여 저장소 생성에 실패함. 모두 내려받기된 내용은 " ++"시스템에서 보관됩니다" ++ ++#: plugins/modulesync.py:144 ++#, python-brace-format ++msgid "No match for artifact '{0}' from module '{1}'" ++msgstr "모듈 '{1}'에서 인위 결과물 '{0}'과 일치하는 부분이 없습니다" ++ ++#: plugins/modulesync.py:162 ++#, python-brace-format ++msgid "No match for package name '{0}' in profile {1} from module {2}" ++msgstr "모듈 {2}에서 프로파일 {1}인 꾸러미 이름 '{0}'과 일치하는 부분이 없습니다" ++ ++#: plugins/modulesync.py:166 ++msgid "No mach for argument '{}'" ++msgstr "인수와 일치하는 항목이 없습니다 '{}'" ++ ++#. TODO(jmracek) Shell we end with an error or with RC 1? ++#: plugins/modulesync.py:198 ++msgid "Unable to satisfy require {}" ++msgstr "필요사항 {}를 만족 할 수 없음" ++ ++#: plugins/needs_restarting.py:66 + #, python-brace-format + msgid "" + "No installed package found for package name \"{pkg}\" specified in needs-" + "restarting file \"{file}\"." +-msgstr "" ++msgstr "재시작이 필요한 파일 \"{file}\" 에 지정한 꾸러미 이름 \"{pkg}\"을 위하여 " ++"설치된 꾸러미를 찾을 수 없습니다." + +-#: plugins/needs_restarting.py:199 ++#: plugins/needs_restarting.py:220 + msgid "determine updated binaries that need restarting" + msgstr "다시 시작해야하는 업데이트 된 바이너리 결정" + +-#: plugins/needs_restarting.py:204 ++#: plugins/needs_restarting.py:225 + msgid "only consider this user's processes" +-msgstr "이 사용자의 프로세스 만 고려하십시오." ++msgstr "이 사용자의 프로세스만 고려하세요" + +-#: plugins/needs_restarting.py:206 ++#: plugins/needs_restarting.py:227 + msgid "" + "only report whether a reboot is required (exit code 1) or not (exit code 0)" + msgstr "" ++"재시작이 요구되는 (exit code 1) 또는 아닌(exit code0) 경우에만 보고합니다" + + #: plugins/needs_restarting.py:230 ++msgid "only report affected systemd services" ++msgstr "systemd 서비스에 영향을 미치는 것만 보고합니다" ++ ++#: plugins/needs_restarting.py:253 + msgid "Core libraries or services have been updated since boot-up:" +-msgstr "" ++msgstr "Core 라이브러리와 서비스는 재시작 이 후에 최신화 됩니다:" + +-#: plugins/needs_restarting.py:235 ++#: plugins/needs_restarting.py:258 + msgid "Reboot is required to fully utilize these updates." +-msgstr "" ++msgstr "재시작은 이들 최신화를 완전히 사용하려면 필요합니다." + +-#: plugins/needs_restarting.py:236 ++#: plugins/needs_restarting.py:259 + msgid "More information:" +-msgstr "" ++msgstr "자세한 정보:" + +-#: plugins/needs_restarting.py:240 ++#: plugins/needs_restarting.py:263 + msgid "No core libraries or services have been updated since boot-up." +-msgstr "" ++msgstr "핵심 라이브러리와 서비스는 재시작 이 후에 최신화 되지 않습니다." + +-#: plugins/needs_restarting.py:242 ++#: plugins/needs_restarting.py:265 + msgid "Reboot should not be necessary." +-msgstr "" ++msgstr "재시작은 필요하지 않을 수 있습니다." + + #: plugins/post-transaction-actions.py:71 + #, python-format + msgid "Bad Action Line \"%s\": %s" +-msgstr "" ++msgstr "잘못된 동작 선 \"%s\": %s" + + #. unsupported state, skip it + #: plugins/post-transaction-actions.py:130 + #, python-format + msgid "Bad Transaction State: %s" +-msgstr "" ++msgstr "잘못된 연결 상태: %s" + +-#: plugins/post-transaction-actions.py:153 +-#: plugins/post-transaction-actions.py:155 ++#: plugins/post-transaction-actions.py:157 ++#: plugins/post-transaction-actions.py:159 + #, python-format + msgid "post-transaction-actions: %s" +-msgstr "" ++msgstr "연결 후 동작: %s" + +-#: plugins/post-transaction-actions.py:157 ++#: plugins/post-transaction-actions.py:161 + #, python-format + msgid "post-transaction-actions: Bad Command \"%s\": %s" +-msgstr "" ++msgstr "연결 후 동작: 잘못된 명령 \"%s\": %s" + + #: plugins/repoclosure.py:42 + msgid "Display a list of unresolved dependencies for repositories" +@@ -686,149 +943,160 @@ msgstr "재구 축은 해결되지 않은 종속성으로 종료되었습니다. + + #: plugins/repoclosure.py:153 + msgid "check packages of the given archs, can be specified multiple times" +-msgstr "지정된 아치의 패키지를 검사하고 여러 번 지정할 수 있습니다." ++msgstr "지정된 아치의 꾸러미(package)를 검사하고 여러 번 지정할 수 있습니다" + + #: plugins/repoclosure.py:156 + msgid "Specify repositories to check" +-msgstr "확인할 저장소를 지정하십시오." ++msgstr "점검 할 저장소를 지정하세요" + + #: plugins/repoclosure.py:158 + msgid "Check only the newest packages in the repos" +-msgstr "리포지토리의 최신 패키지 만 확인하십시오." ++msgstr "저장소 최신 꾸러미(package)만 확인하세요" + + #: plugins/repoclosure.py:161 + msgid "Check closure for this package only" +-msgstr "이 패키지의 폐쇄 만 확인하십시오." ++msgstr "이 꾸러미(package)의 폐쇄만 확인하세요" + + #: plugins/repodiff.py:45 + msgid "List differences between two sets of repositories" +-msgstr "" ++msgstr "두 개의 저장소 구성 사이의 목록 차이점" + + #: plugins/repodiff.py:58 + msgid "Specify old repository, can be used multiple times" +-msgstr "" ++msgstr "여러번 사용될 수 있는, 오래된 저장소를 지정합니다" + + #: plugins/repodiff.py:60 + msgid "Specify new repository, can be used multiple times" +-msgstr "" ++msgstr "여러 번 사용 될 수 있는, 새로운 저장소를 지정합니다" + + #: plugins/repodiff.py:63 + msgid "" + "Specify architectures to compare, can be used multiple times. By default, " + "only source rpms are compared." + msgstr "" ++"비교 할 구조를 지정하고, 여러 번 사용 될 수 있습니다. 기본적으로, 자원 rpms" ++"만 비교됩니다." + + #: plugins/repodiff.py:67 + msgid "Output additional data about the size of the changes." +-msgstr "" ++msgstr "크기 변화에 대한 추가 자료를 출력합니다." + + #: plugins/repodiff.py:69 + msgid "" +-"Compare packages also by arch. By default packages are compared just by " +-"name." ++"Compare packages also by arch. By default packages are compared just by name." + msgstr "" ++"구조에 의해 꾸러미(package) 또한 비교합니다. 기본적으로 꾸러미(package)는 이" ++"름으로만 비교됩니다." + + #: plugins/repodiff.py:72 + msgid "Output a simple one line message for modified packages." +-msgstr "" ++msgstr "수정된 꾸러미(pacakage)지를 위해 단순히 한 줄 메시지를 출력합니다." + + #: plugins/repodiff.py:74 + msgid "" + "Split the data for modified packages between upgraded and downgraded " + "packages." +-msgstr "" ++msgstr "향상 또는 향상 꾸러미 사이에서 변형된 꾸러미를 위해 자료를 분할합니다." + + #: plugins/repodiff.py:86 + msgid "Both old and new repositories must be set." +-msgstr "" ++msgstr "오래된 것과 새로운 저장소 모두 구성되어야 합니다." + + #: plugins/repodiff.py:178 + msgid "Size change: {} bytes" +-msgstr "" ++msgstr "크기 변화: {} bytes" + + #: plugins/repodiff.py:184 + msgid "Added package : {}" +-msgstr "" ++msgstr "추가된 꾸러미(package) : {}" + + #: plugins/repodiff.py:187 + msgid "Removed package: {}" +-msgstr "" ++msgstr "제거된 꾸러미(package): {}" + + #: plugins/repodiff.py:190 + msgid "Obsoleted by : {}" +-msgstr "" ++msgstr "사용되지 않음 : {}" + + #: plugins/repodiff.py:195 + msgid "" + "\n" + "Upgraded packages" + msgstr "" ++"\n" ++"향상된 꾸러미(package)" + + #: plugins/repodiff.py:200 + msgid "" + "\n" + "Downgraded packages" + msgstr "" ++"\n" ++"꾸러미 하향설치" + + #: plugins/repodiff.py:207 + msgid "" + "\n" + "Modified packages" + msgstr "" ++"\n" ++"변형된 꾸러미(package)" + + #: plugins/repodiff.py:212 + msgid "" + "\n" + "Summary" + msgstr "" ++"\n" ++"요약" + + #: plugins/repodiff.py:213 + msgid "Added packages: {}" +-msgstr "" ++msgstr "추가된 꾸러미(package): {}" + + #: plugins/repodiff.py:214 + msgid "Removed packages: {}" +-msgstr "" ++msgstr "제거된 꾸러미(package): {}" + + #: plugins/repodiff.py:216 + msgid "Upgraded packages: {}" +-msgstr "" ++msgstr "향상된 꾸러미(package): {}" + + #: plugins/repodiff.py:217 + msgid "Downgraded packages: {}" +-msgstr "" ++msgstr "하향설치된 꾸러미: {}" + + #: plugins/repodiff.py:219 + msgid "Modified packages: {}" +-msgstr "" ++msgstr "변형된 꾸러미(package): {}" + + #: plugins/repodiff.py:222 + msgid "Size of added packages: {}" +-msgstr "" ++msgstr "크기가 증가된 꾸러미(package): {}" + + #: plugins/repodiff.py:223 + msgid "Size of removed packages: {}" +-msgstr "" ++msgstr "크기가 제거된 꾸러미(package): {}" + + #: plugins/repodiff.py:225 + msgid "Size of modified packages: {}" +-msgstr "" ++msgstr "크기가 변형된 꾸러미(package): {}" + + #: plugins/repodiff.py:228 + msgid "Size of upgraded packages: {}" +-msgstr "" ++msgstr "크기가 향상된 꾸러미: {}" + + #: plugins/repodiff.py:230 + msgid "Size of downgraded packages: {}" +-msgstr "" ++msgstr "크기가 하향설치된 꾸러미: {}" + + #: plugins/repodiff.py:232 + msgid "Size change: {}" +-msgstr "" ++msgstr "크기 변경: {}" + + #: plugins/repograph.py:50 + msgid "Output a full package dependency graph in dot format" +-msgstr "도트 형식의 전체 패키지 종속성 그래프 출력" ++msgstr "도트 형식의 전체 꾸러미(package) 종속성 그래프 출력" + + #: plugins/repograph.py:110 + #, python-format +@@ -837,186 +1105,206 @@ msgstr "아무것도 제공하지 않습니다 : '%s'" + + #: plugins/repomanage.py:45 + msgid "Manage a directory of rpm packages" +-msgstr "rpm 패키지 디렉토리 관리" ++msgstr "rpm 꾸러미(package) 디렉토리 관리" + + #: plugins/repomanage.py:59 + msgid "Pass either --old or --new, not both!" +-msgstr "--old 또는 --new 중 하나를 전달하십시오." ++msgstr "--old 또는 --new 중 하나를 전달하세요!" + +-#: plugins/repomanage.py:71 ++#: plugins/repomanage.py:89 + msgid "No files to process" +-msgstr "처리 할 파일이 없습니다." ++msgstr "처리 할 파일 없음" + +-#: plugins/repomanage.py:93 ++#: plugins/repomanage.py:96 + msgid "Could not open {}" +-msgstr "{}을 (를) 열 수 없습니다." ++msgstr "{}을 열 수 없습니다" + +-#: plugins/repomanage.py:177 ++#: plugins/repomanage.py:180 + msgid "Print the older packages" +-msgstr "이전 패키지 인쇄" ++msgstr "이전 꾸러미(package) 인쇄" + +-#: plugins/repomanage.py:179 ++#: plugins/repomanage.py:182 + msgid "Print the newest packages" +-msgstr "최신 패키지 인쇄" ++msgstr "최신 꾸러미(package) 인쇄" + +-#: plugins/repomanage.py:181 ++#: plugins/repomanage.py:184 + msgid "Space separated output, not newline" + msgstr "공백으로 구분 된 출력이 아닌 개행 문자" + +-#: plugins/repomanage.py:183 ++#: plugins/repomanage.py:186 + msgid "Newest N packages to keep - defaults to 1" +-msgstr "보관할 최신 N 패키지 - 기본값은 1입니다." ++msgstr "보관할 최신 N 꾸러미(package) - 기본값은 1입니다" + +-#: plugins/repomanage.py:186 ++#: plugins/repomanage.py:189 + msgid "Path to directory" + msgstr "디렉토리 경로" + +-#: plugins/reposync.py:54 ++#: plugins/reposync.py:55 + msgid "download all packages from remote repo" +-msgstr "원격 저장소에서 모든 패키지를 다운로드하십시오." ++msgstr "원격 저장소에서 모든 꾸러미(package)를 내려받아요" + +-#: plugins/reposync.py:63 ++#: plugins/reposync.py:64 + msgid "download only packages for this ARCH" +-msgstr "이 ARCH 용 패키지 만 다운로드하십시오." ++msgstr "이 ARCH용 꾸러미(package)만 내려받아요" + +-#: plugins/reposync.py:65 ++#: plugins/reposync.py:66 + msgid "delete local packages no longer present in repository" +-msgstr "저장소에 더 이상 존재하지 않는 로컬 패키지 삭제" ++msgstr "저장소에 더 이상 존재하지 않는 로컬 꾸러미(package) 삭제" + +-#: plugins/reposync.py:67 +-msgid "also download and uncompress comps.xml" +-msgstr "" +- +-#: plugins/reposync.py:69 ++#: plugins/reposync.py:68 + msgid "download all the metadata." +-msgstr "" ++msgstr "모든 메타데이타 내려받기." + +-#: plugins/reposync.py:71 +-msgid "download only newest packages per-repo" +-msgstr "repo 당 최신 패키지 만 다운로드하십시오." ++#: plugins/reposync.py:70 ++msgid "Remove packages that fail GPG signature checking after downloading" ++msgstr "내려받기 후에 점검한 GPG 서명이 실패한 꾸러미를 제거합니다" + + #: plugins/reposync.py:73 +-msgid "where to store downloaded repositories" +-msgstr "" ++msgid "also download and uncompress comps.xml" ++msgstr "또한 comps.xml 내려받기와 압축 풀기" + + #: plugins/reposync.py:75 +-msgid "Don't add the reponame to the download path." +-msgstr "" +- +-#: plugins/reposync.py:77 + msgid "" +-"where to store downloaded repository metadata. Defaults to the value of " +-"--download-path." ++"where to store downloaded repository metadata. Defaults to the value of --" ++"download-path." + msgstr "" ++"내려받은 저장소 메타데이타를 저장하기 위한 장소. --download-path의 값으로 기" ++"본 지정합니다." ++ ++#: plugins/reposync.py:78 ++msgid "download only newest packages per-repo" ++msgstr "저장소 최신 꾸러미(package)만 내려받아요" + + #: plugins/reposync.py:80 +-msgid "operate on source packages" +-msgstr "소스 패키지를 조작한다." ++msgid "Don't add the reponame to the download path." ++msgstr "내려받기 경로에 저장소이름을 추가하지 않습니다." + + #: plugins/reposync.py:82 ++msgid "where to store downloaded repositories" ++msgstr "내려받기 한 저장소를 저장할 위치" ++ ++#: plugins/reposync.py:84 + msgid "try to set local timestamps of local files by the one on the server" +-msgstr "" ++msgstr "서버에 있는 하나에서 로컬파일의 로컬 타임스템프 설정을 시도하세요" ++ ++#: plugins/reposync.py:87 ++msgid "download only source packages" ++msgstr "원천 꾸러미만 내려받기" + +-#: plugins/reposync.py:85 ++#: plugins/reposync.py:89 + msgid "Just list urls of what would be downloaded, don't download" +-msgstr "" ++msgstr "내려 받을 수 있는 url만 목록화하며, 내려 받지 않습니다" + +-#: plugins/reposync.py:109 ++#: plugins/reposync.py:113 + msgid "Can't use --norepopath with multiple repositories" +-msgstr "" ++msgstr "다중 저장소와 함께 --norepath를 사용 할 수 없습니다" + +-#: plugins/reposync.py:127 ++#: plugins/reposync.py:132 + #, python-format + msgid "Failed to get mirror for metadata: %s" +-msgstr "" ++msgstr "메타데이타에 대한 연결주소 얻기를 실패하였습니다:%s" + +-#: plugins/reposync.py:144 ++#: plugins/reposync.py:149 + msgid "Failed to get mirror for the group file." +-msgstr "" ++msgstr "그룹 파일을 위하여 연결주소 얻기에 실패하였습니다." ++ ++#: plugins/reposync.py:168 ++msgid "Removing {}: {}" ++msgstr "제거하기{}: {}" + + #: plugins/reposync.py:175 ++msgid "GPG signature check failed." ++msgstr "GPG 서명 점검이 실패하였습니다." ++ ++#: plugins/reposync.py:196 + msgid "Download target '{}' is outside of download path '{}'." +-msgstr "" ++msgstr "내려받기 대상 '{}'는 내려받기 경로'{}'의 밖에 있습니다." + +-#: plugins/reposync.py:190 ++#: plugins/reposync.py:211 + #, python-format + msgid "[DELETED] %s" + msgstr "[DELETED] %s" + +-#: plugins/reposync.py:192 ++#: plugins/reposync.py:213 + #, python-format + msgid "failed to delete file %s" + msgstr "파일을 삭제하지 못했습니다. %s" + +-#: plugins/reposync.py:201 ++#: plugins/reposync.py:222 + #, python-format + msgid "comps.xml for repository %s saved" + msgstr "저장소에 대한 comps.xml %s 저장된" + + #: plugins/show_leaves.py:54 + msgid "New leaves:" +-msgstr "새 잎 :" ++msgstr "독립 꾸러미(package):" + +-#: plugins/versionlock.py:32 ++#: plugins/versionlock.py:33 + #, python-format + msgid "Unable to read version lock configuration: %s" + msgstr "버전 잠금 설정을 읽을 수 없습니다 : %s" + +-#: plugins/versionlock.py:33 +-msgid "Locklist not set" +-msgstr "잠금 목록이 설정되지 않았습니다." +- + #: plugins/versionlock.py:34 +-msgid "Adding versionlock on:" +-msgstr "" ++msgid "Locklist not set" ++msgstr "잠금 목록 설정되지 않음" + + #: plugins/versionlock.py:35 +-msgid "Adding exclude on:" +-msgstr "" ++msgid "Adding versionlock on:" ++msgstr "버전잠금 설정 추가하기:" + + #: plugins/versionlock.py:36 +-msgid "Package already locked in equivalent form:" +-msgstr "" ++msgid "Adding exclude on:" ++msgstr "제외 하기 추가하기:" + + #: plugins/versionlock.py:37 +-msgid "Package {} is already locked" +-msgstr "" ++msgid "Package already locked in equivalent form:" ++msgstr "꾸러미(package)는 이미 동일한 형태로 잠겨졌습니다:" + + #: plugins/versionlock.py:38 +-msgid "Package {} is already excluded" +-msgstr "" ++msgid "Package {} is already locked" ++msgstr "꾸러미(package) {} 는 이미 잠겨졌습니다" + + #: plugins/versionlock.py:39 +-msgid "Deleting versionlock for:" +-msgstr "" ++msgid "Package {} is already excluded" ++msgstr "꾸러미(package) {} 는 이미 제외되었습니다" + + #: plugins/versionlock.py:40 +-msgid "No package found for:" +-msgstr "" ++msgid "Deleting versionlock for:" ++msgstr "버전 잠금을 제거하기:" + + #: plugins/versionlock.py:41 +-msgid "Excludes from versionlock plugin were not applied" +-msgstr "" ++msgid "No package found for:" ++msgstr "찾고자 하는 꾸러미(package)가 없습니다:" + + #: plugins/versionlock.py:42 +-msgid "Versionlock plugin: number of lock rules from file \"{}\" applied: {}" +-msgstr "" ++msgid "Excludes from versionlock plugin were not applied" ++msgstr "버전 잠금 플러그인에서 제외는 적용되지 않습니다" + + #: plugins/versionlock.py:43 +-msgid "Versionlock plugin: number of exclude rules from file \"{}\" applied: {}" +-msgstr "" ++msgid "Versionlock plugin: number of lock rules from file \"{}\" applied: {}" ++msgstr "버전 잠금 플러그인: 적용된 파일 \"{} \"에서 잠금 규칙의 수: {}" + + #: plugins/versionlock.py:44 ++msgid "" ++"Versionlock plugin: number of exclude rules from file \"{}\" applied: {}" ++msgstr "버전 잠금 플러그인: 적용된 파일 \"{} \"에서 제외 규칙의 수: {}" ++ ++#: plugins/versionlock.py:45 + msgid "Versionlock plugin: could not parse pattern:" +-msgstr "" ++msgstr "버전 잠금 플러그인: 유형을 구문 분석 할 수 없습니다:" + +-#: plugins/versionlock.py:130 ++#: plugins/versionlock.py:134 + msgid "control package version locks" +-msgstr "" ++msgstr "꾸러미 버전 잠금을 제어합니다" + +-#: plugins/versionlock.py:136 ++#: plugins/versionlock.py:140 + msgid "Use package specifications as they are, do not try to parse them" +-msgstr "" ++msgstr "꾸러미(package) 사양을 그대로 사용하며, 구문 분석을 시도하지 않습니다" ++ ++#: plugins/versionlock.py:160 ++msgid "Subcommand '{}' is deprecated. Use 'exclude' subcommand instead." ++msgstr "하위명령 '{}'는 더 이상 사용하지 않습니다. 대신에 하위명령 'exclude'를 " ++"사용합니다." + + #~ msgid "" + #~ "\n" +diff --git a/po/zh_CN.po b/po/zh_CN.po +index 151441d..5e5627e 100644 +--- a/po/zh_CN.po ++++ b/po/zh_CN.po +@@ -1,24 +1,28 @@ + # Tommy He , 2015. #zanata + # Tommy He , 2016. #zanata + # mosquito , 2016. #zanata +-# Charles Lee , 2017. #zanata, 2020. ++# Charles Lee , 2017. #zanata, 2020, 2021. + # cheng ye <18969068329@163.com>, 2017. #zanata +-# Ludek Janda , 2018. #zanata ++# Ludek Janda , 2018. #zanata, 2021. + # Hongqiao Chen , 2020. ++# Sundeep Anand , 2021. ++# Qiyu Yan , 2021. ++# Transtats , 2022. + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2020-10-05 09:18-0400\n" +-"PO-Revision-Date: 2020-07-09 13:27+0000\n" +-"Last-Translator: Charles Lee \n" +-"Language-Team: Chinese (Simplified) \n" ++"POT-Creation-Date: 2022-02-28 11:53+0100\n" ++"PO-Revision-Date: 2022-03-09 12:39+0000\n" ++"Last-Translator: Transtats \n" ++"Language-Team: Chinese (Simplified) \n" + "Language: zh_CN\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=1; plural=0;\n" +-"X-Generator: Weblate 4.1.1\n" ++"X-Generator: Weblate 4.11.2\n" + + #: plugins/builddep.py:45 + msgid "[PACKAGE|PACKAGE.spec]" +@@ -39,7 +43,7 @@ msgstr "定义一个用于处理 Spec 文件的宏" + + #: plugins/builddep.py:95 + msgid "skip build dependencies not available in repositories" +-msgstr "" ++msgstr "跳过存储库中不可用的构建依赖项" + + #: plugins/builddep.py:98 + msgid "treat commandline arguments as spec files" +@@ -51,15 +55,14 @@ msgstr "将命令行参数作为源码 RPM 处理" + + #: plugins/builddep.py:144 + msgid "RPM: {}" +-msgstr "" ++msgstr "RPM软件包: {}" + + #: plugins/builddep.py:153 + msgid "Some packages could not be found." + msgstr "某些软件包无法找到。" + + #. No provides, no files +-#. Richdeps can have no matches but it could be correct (solver must decide +-#. later) ++#. Richdeps can have no matches but it could be correct (solver must decide later) + #: plugins/builddep.py:173 + #, python-format + msgid "No matching package to install: '%s'" +@@ -87,27 +90,28 @@ msgstr "无匹配软件包: %s" + #: plugins/changelog.py:37 + #, python-brace-format + msgid "Not a valid date: \"{0}\"." +-msgstr "" ++msgstr "无效的日期 : \"{0}\"。" + + #: plugins/changelog.py:43 + msgid "Show changelog data of packages" +-msgstr "" ++msgstr "查看软件包的改变日志数据" + + #: plugins/changelog.py:51 + msgid "" + "show changelog entries since DATE. To avoid ambiguosity, YYYY-MM-DD format " + "is recommended." + msgstr "" ++"显示自 DATE 开始的改变日志信息。为了避免混淆,推荐使用 YYYY-MM-DD 格式。" + + #: plugins/changelog.py:55 + msgid "show given number of changelog entries per package" +-msgstr "" ++msgstr "每个软件包显示指定数量的改变日志信息" + + #: plugins/changelog.py:58 + msgid "" + "show only new changelog entries for packages, that provide an upgrade for " + "some of already installed packages." +-msgstr "" ++msgstr "只显示软件包新的改变日志信息,为已安装的软件包提供升级。" + + #: plugins/changelog.py:60 + msgid "PACKAGE" +@@ -120,109 +124,111 @@ msgstr "未找到匹配的参数: %s" + + #: plugins/changelog.py:109 + msgid "Listing changelogs since {}" +-msgstr "" ++msgstr "列出自 {} 后的改变日志信息" + + #: plugins/changelog.py:111 + msgid "Listing only latest changelog" + msgid_plural "Listing {} latest changelogs" +-msgstr[0] "" ++msgstr[0] "只列出最新 {} 项更改日志" + + #: plugins/changelog.py:116 + msgid "Listing only new changelogs since installed version of the package" +-msgstr "" ++msgstr "在列出安装的软件包版本后的新改变日志" + + #: plugins/changelog.py:118 + msgid "Listing all changelogs" +-msgstr "" ++msgstr "列出所有改变日志" + + #: plugins/changelog.py:122 + msgid "Changelogs for {}" + msgstr "{}的变更记录" + +-#: plugins/config_manager.py:37 ++#: plugins/config_manager.py:38 + #, python-brace-format + msgid "manage {prog} configuration options and repositories" +-msgstr "" ++msgstr "管理 {prog} 配置选项和软件仓库" + +-#: plugins/config_manager.py:44 ++#: plugins/config_manager.py:45 + msgid "repo to modify" + msgstr "要修改的仓库" + +-#: plugins/config_manager.py:47 ++#: plugins/config_manager.py:48 + msgid "save the current options (useful with --setopt)" + msgstr "保存当前选项(与 --setopt 和用)" + +-#: plugins/config_manager.py:50 ++#: plugins/config_manager.py:51 + msgid "add (and enable) the repo from the specified file or url" + msgstr "从指定文件或 URL 添加(并启用)仓库" + +-#: plugins/config_manager.py:53 ++#: plugins/config_manager.py:54 + msgid "print current configuration values to stdout" + msgstr "打印当前配置值到标准输出" + +-#: plugins/config_manager.py:56 ++#: plugins/config_manager.py:57 + msgid "print variable values to stdout" + msgstr "打印变量值到标准输出" + +-#: plugins/config_manager.py:60 ++#: plugins/config_manager.py:61 + msgid "enable repos (automatically saves)" +-msgstr "" ++msgstr "启用仓库(自动保存)" + +-#: plugins/config_manager.py:63 ++#: plugins/config_manager.py:64 + msgid "disable repos (automatically saves)" +-msgstr "" ++msgstr "禁用仓库(自动保存)" + +-#: plugins/config_manager.py:77 ++#: plugins/config_manager.py:78 + msgid "one of the following arguments is required: {}" +-msgstr "" ++msgstr "需要以下参数之一:{}" + +-#: plugins/config_manager.py:86 ++#: plugins/config_manager.py:87 + msgid "" + "Warning: --enablerepo/--disablerepo arguments have no meaningwith config " + "manager. Use --set-enabled/--set-disabled instead." + msgstr "" ++"警告:--enablerepo/--disablerepo 参数对于 config manager 没有作用。请使用 --" ++"set-enabled/--set-disabled。" + +-#: plugins/config_manager.py:131 ++#: plugins/config_manager.py:132 + #, python-format + msgid "No matching repo to modify: %s." + msgstr "没有匹配的仓库可以修改:%s 。" + +-#: plugins/config_manager.py:182 ++#: plugins/config_manager.py:183 + #, python-format + msgid "Adding repo from: %s" + msgstr "添加仓库自:%s" + +-#: plugins/config_manager.py:206 ++#: plugins/config_manager.py:207 + msgid "Configuration of repo failed" + msgid_plural "Configuration of repos failed" + msgstr[0] "配置仓库失败" + +-#: plugins/config_manager.py:216 ++#: plugins/config_manager.py:217 + #, python-format + msgid "Could not save repo to repofile %s: %s" + msgstr "无法保存仓库至仓库文件 %s:%s" + +-#: plugins/copr.py:59 ++#: plugins/copr.py:64 + msgid "y" + msgstr "y" + +-#: plugins/copr.py:59 ++#: plugins/copr.py:64 + msgid "yes" + msgstr "是" + +-#: plugins/copr.py:60 ++#: plugins/copr.py:65 + msgid "n" + msgstr "n" + +-#: plugins/copr.py:60 ++#: plugins/copr.py:65 + msgid "no" + msgstr "否" + +-#: plugins/copr.py:79 ++#: plugins/copr.py:84 + msgid "Interact with Copr repositories." +-msgstr "与 Copr 仓库交互" ++msgstr "与 Copr 仓库交互。" + +-#: plugins/copr.py:81 ++#: plugins/copr.py:86 + msgid "" + "\n" + " enable name/project [chroot]\n" +@@ -250,7 +256,7 @@ msgstr "" + " list --available-by-user=NAME\n" + " search project\n" + "\n" +-" Examples:\n" ++" 例如:\n" + " copr enable rhscl/perl516 epel-6-x86_64\n" + " copr enable ignatenkobrain/ocltoys\n" + " copr disable rhscl/perl516\n" +@@ -260,53 +266,65 @@ msgstr "" + " copr search tests\n" + " " + +-#: plugins/copr.py:107 ++#: plugins/copr.py:112 + msgid "List all installed Copr repositories (default)" + msgstr "列出所有安装的 Copr 仓库(默认)" + +-#: plugins/copr.py:109 ++#: plugins/copr.py:114 + msgid "List enabled Copr repositories" + msgstr "列出启动的 Copr 仓库" + +-#: plugins/copr.py:111 ++#: plugins/copr.py:116 + msgid "List disabled Copr repositories" + msgstr "列出禁用的 Copr 仓库" + +-#: plugins/copr.py:113 ++#: plugins/copr.py:118 + msgid "List available Copr repositories by user NAME" + msgstr "按照用户 NAME 列出可用的 Copr 仓库" + +-#: plugins/copr.py:115 ++#: plugins/copr.py:120 + msgid "Specify an instance of Copr to work with" +-msgstr "" ++msgstr "指定需要使用的 Copr 实例" + +-#: plugins/copr.py:149 plugins/copr.py:217 plugins/copr.py:237 ++#: plugins/copr.py:154 plugins/copr.py:222 plugins/copr.py:249 + msgid "Error: " + msgstr "错误: " + +-#: plugins/copr.py:150 ++#: plugins/copr.py:155 + msgid "" +-"specify Copr hub either with `--hub` or using " +-"`copr_hub/copr_username/copr_projectname` format" ++"specify Copr hub either with `--hub` or using `copr_hub/copr_username/" ++"copr_projectname` format" + msgstr "" ++"使用 `--hub` 或使用 `copr_hub/copr_username/copr_projectname` 格式指定 Copr " ++"hub" + +-#: plugins/copr.py:153 ++#: plugins/copr.py:158 + msgid "multiple hubs specified" +-msgstr "" ++msgstr "指定多个 hub" + +-#: plugins/copr.py:218 plugins/copr.py:222 ++#: plugins/copr.py:223 plugins/copr.py:227 + msgid "exactly two additional parameters to copr command are required" + msgstr "Copr 命令要求有且仅有两个额外参数" + +-#: plugins/copr.py:238 ++#: plugins/copr.py:232 ++msgid "Too many arguments." ++msgstr "参数过多。" ++ ++#: plugins/copr.py:235 ++msgid "" ++"Bad format of optional chroot. The format is distribution-version-" ++"architecture." ++msgstr "可选 chroot 的错误格式。格式为 distribution-version-architecture。" ++ ++#: plugins/copr.py:250 + msgid "use format `copr_username/copr_projectname` to reference copr project" + msgstr "使用格式 `copr_username/copr_projectname` 来引用 Copr 项目" + +-#: plugins/copr.py:240 ++#: plugins/copr.py:252 + msgid "bad copr project format" + msgstr "错误的 Copr 项目格式" + +-#: plugins/copr.py:254 ++#: plugins/copr.py:266 + msgid "" + "\n" + "Enabling a Copr repository. Please note that this repository is not part\n" +@@ -314,78 +332,93 @@ msgid "" + "\n" + "The Fedora Project does not exercise any power over the contents of\n" + "this repository beyond the rules outlined in the Copr FAQ at\n" +-",\n" ++",\n" + "and packages are not held to any quality or security level.\n" + "\n" + "Please do not file bug reports about these packages in Fedora\n" + "Bugzilla. In case of problems, contact the owner of this repository.\n" + msgstr "" ++"\n" ++"启用一个 Copr 仓库。请注意这个仓库\n" ++"不是主发行版本的一部分,质量可能会有所不同。\n" ++"\n" ++"Fedora 项目对其不行使除了于 Copr 常见问题\n" ++"\n" ++"中所提出的规则外的任何权力,并且其软件包不保证达到特定质量\n" ++"和安全水准。\n" ++"\n" ++"请不要在 Fedora Bugzilla 中报告这些软件包中出现的\n" ++"问题。当出现问题时,请联系仓库的所有者。\n" + +-#: plugins/copr.py:271 ++#: plugins/copr.py:283 + msgid "Repository successfully enabled." + msgstr "启用软件仓库成功。" + +-#: plugins/copr.py:276 ++#: plugins/copr.py:288 + msgid "Repository successfully disabled." + msgstr "禁用软件仓库成功。" + +-#: plugins/copr.py:280 ++#: plugins/copr.py:292 + msgid "Repository successfully removed." + msgstr "软件仓库已成功删除。" + +-#: plugins/copr.py:284 plugins/copr.py:693 ++#: plugins/copr.py:296 plugins/copr.py:697 + msgid "Unknown subcommand {}." + msgstr "未知的子命令 {}。" + +-#: plugins/copr.py:341 ++#: plugins/copr.py:353 + msgid "" +-"* These coprs have repo file with an old format that contains no information" +-" about Copr hub - the default one was assumed. Re-enable the project to fix " ++"* These coprs have repo file with an old format that contains no information " ++"about Copr hub - the default one was assumed. Re-enable the project to fix " + "this." + msgstr "" ++"* 这些 coprs 有使用旧格式的 repo 文件,它们没有包括 Copr hub 的信息 - 假设使" ++"用默认值。重新启用项目来解决这个问题。" + +-#: plugins/copr.py:353 ++#: plugins/copr.py:366 + msgid "Can't parse repositories for username '{}'." + msgstr "无法为用户名 username '{}' 解析仓库。" + +-#: plugins/copr.py:356 ++#: plugins/copr.py:369 + msgid "List of {} coprs" + msgstr "{} Coprs 列表" + +-#: plugins/copr.py:364 ++#: plugins/copr.py:374 + msgid "No description given" + msgstr "没有给出描述" + +-#: plugins/copr.py:376 ++#: plugins/copr.py:386 + msgid "Can't parse search for '{}'." + msgstr "无法解析针对 '{}' 的搜索。" + +-#: plugins/copr.py:379 ++#: plugins/copr.py:389 + msgid "Matched: {}" + msgstr "匹配:{}" + +-#: plugins/copr.py:387 ++#: plugins/copr.py:394 + msgid "No description given." + msgstr "没有给出描述。" + +-#: plugins/copr.py:410 ++#: plugins/copr.py:416 + msgid "Safe and good answer. Exiting." + msgstr "安全及明智的答案。退出。" + +-#: plugins/copr.py:417 ++#: plugins/copr.py:423 + msgid "This command has to be run under the root user." +-msgstr "该命令必须以 root 用户运行" ++msgstr "该命令必须以 root 用户运行。" + +-#: plugins/copr.py:481 ++#: plugins/copr.py:485 + msgid "" + "This repository does not have any builds yet so you cannot enable it now." + msgstr "该仓库尚未包含任何构建所以您现在无法启用它。" + +-#: plugins/copr.py:484 ++#: plugins/copr.py:488 + msgid "Such repository does not exist." + msgstr "该软件仓库不存在。" + +-#: plugins/copr.py:528 ++#: plugins/copr.py:532 + #, python-brace-format + msgid "" + "Maintainer of the enabled Copr repository decided to make\n" +@@ -401,47 +434,57 @@ msgid "" + "\n" + "These repositories have been enabled automatically." + msgstr "" ++"启用的 Copr 仓库的维护人员决定\n" ++"它需要依赖于其他仓库。这些仓库\n" ++"通常是必需的,如果需要从主 Copr 仓库\n" ++"(它们会提供运行时依赖软件包)安装 RPM。\n" ++"\n" ++"请注意上面关于质量和程序错误报告的备注\n" ++"也适用于这里,Fedora Project 不控制内容。\n" ++"请检查列表:\n" ++"\n" ++"{0}\n" ++"\n" ++"这些仓库已被自动启用。" + +-#: plugins/copr.py:549 ++#: plugins/copr.py:553 + msgid "Do you want to keep them enabled?" +-msgstr "" ++msgstr "您需要保持它们被启用吗?" + +-#: plugins/copr.py:582 ++#: plugins/copr.py:586 + #, python-brace-format + msgid "Failed to remove copr repo {0}/{1}/{2}" +-msgstr "" ++msgstr "删除 copr 仓库 {0}/{1}/{2} 失败" + +-#: plugins/copr.py:593 ++#: plugins/copr.py:597 + msgid "Failed to disable copr repo {}/{}" + msgstr "无法禁用 Copr 软件仓库 {}/{}" + +-#: plugins/copr.py:611 plugins/copr.py:648 ++#: plugins/copr.py:615 plugins/copr.py:652 + msgid "Unknown response from server." + msgstr "来自服务器的未知响应。" + +-#: plugins/copr.py:633 ++#: plugins/copr.py:637 + msgid "Interact with Playground repository." + msgstr "与 Playground 仓库交互。" + +-#: plugins/copr.py:639 +-#, fuzzy +-#| msgid "Interact with Playground repository." ++#: plugins/copr.py:643 + msgid "Enabling a Playground repository." +-msgstr "与 Playground 仓库交互。" ++msgstr "启用 Playground 仓库。" + +-#: plugins/copr.py:640 ++#: plugins/copr.py:644 + msgid "Do you want to continue?" +-msgstr "" ++msgstr "您希望继续吗?" + +-#: plugins/copr.py:683 ++#: plugins/copr.py:687 + msgid "Playground repositories successfully enabled." + msgstr "启用 Playground 仓库成功。" + +-#: plugins/copr.py:686 ++#: plugins/copr.py:690 + msgid "Playground repositories successfully disabled." + msgstr "禁用 Playground 仓库成功。" + +-#: plugins/copr.py:690 ++#: plugins/copr.py:694 + msgid "Playground repositories successfully updated." + msgstr "更新 Playground 仓库成功。" + +@@ -489,6 +532,8 @@ msgid "" + "Allow removing of install-only packages. Using this option may result in an " + "attempt to remove the running kernel." + msgstr "" ++"允许删除仅安装(install-only)的软件包。使用这个选项可能会导致尝试删除正在运行" ++"的内核。" + + #: plugins/debug.py:202 + msgid "name of dump file" +@@ -497,7 +542,7 @@ msgstr "转储文件名称" + #: plugins/debug.py:273 + #, python-format + msgid "Package %s is not available" +-msgstr "软件包 %s 不可用。" ++msgstr "软件包 %s 不可用" + + #: plugins/debug.py:283 + #, python-format +@@ -512,25 +557,25 @@ msgstr "安装调试信息软件包" + #, python-format + msgid "" + "Could not find debuginfo package for the following available packages: %s" +-msgstr "" ++msgstr "无法为以下可用的软件包找到 debuginfo 软件包: %s" + + #: plugins/debuginfo-install.py:185 + #, python-format + msgid "" + "Could not find debugsource package for the following available packages: %s" +-msgstr "" ++msgstr "无法为以下可用的软件包找到 debugsource 软件包: %s" + + #: plugins/debuginfo-install.py:190 + #, python-format + msgid "" + "Could not find debuginfo package for the following installed packages: %s" +-msgstr "" ++msgstr "无法为以下安装的软件包找到 debuginfo 软件包: %s" + + #: plugins/debuginfo-install.py:195 + #, python-format + msgid "" + "Could not find debugsource package for the following installed packages: %s" +-msgstr "" ++msgstr "无法为以下安装的软件包找到 debugsource 软件包: %s" + + #: plugins/debuginfo-install.py:199 + msgid "Unable to find a match" +@@ -554,13 +599,13 @@ msgstr "取而代之下载 -debuginfo 软件包" + + #: plugins/download.py:57 + msgid "download the -debugsource package instead" +-msgstr "" ++msgstr "取而代之下载 -debugsource 软件包" + + #: plugins/download.py:60 + msgid "limit the query to packages of given architectures." +-msgstr "限定查询指定架构的软件包" ++msgstr "限定查询指定架构的软件包。" + +-#: plugins/download.py:62 ++#: plugins/download.py:62 plugins/modulesync.py:51 + msgid "resolve and download needed dependencies" + msgstr "解析并下载所需的依赖关系" + +@@ -568,7 +613,7 @@ msgstr "解析并下载所需的依赖关系" + msgid "" + "when running with --resolve, download all dependencies (do not exclude " + "already installed ones)" +-msgstr "" ++msgstr "当运行时使用 --resolve,下载所有依赖软件包 (不排除已安装的软件包)" + + #: plugins/download.py:67 + msgid "" +@@ -579,7 +624,7 @@ msgstr "打印 rpm 可被下载的 url 列表而不是直接下载" + msgid "when running with --url, limit to specific protocols" + msgstr "当执行时带有 --url 参数,则限制使用指定协议" + +-#: plugins/download.py:121 plugins/reposync.py:293 ++#: plugins/download.py:121 plugins/reposync.py:314 + #, python-format + msgid "Failed to get mirror for package: %s" + msgstr "获取针对以下软件包的镜像失败:%s" +@@ -602,13 +647,127 @@ msgstr "未找到所定义 %s 的源代码软件包 SRPM" + msgid "No package %s available." + msgstr "没有可用的软件包 %s。" + ++#: plugins/groups_manager.py:49 ++msgid "Invalid group id" ++msgstr "无效的组 ID" ++ ++#: plugins/groups_manager.py:58 ++msgid "Invalid translated data, should be in form 'lang:text'" ++msgstr "无效的翻译数据,格式应该是 'lang:text'" ++ ++#: plugins/groups_manager.py:61 ++msgid "Invalid/empty language for translated data" ++msgstr "翻译数据的无效/空语言" ++ ++#: plugins/groups_manager.py:71 ++msgid "Can't generate group id from '{}'. Please specify group id using --id." ++msgstr "无法从 '{}' 生成组 ID。请使用 --id 指定组 ID。" ++ ++#: plugins/groups_manager.py:79 ++msgid "create and edit groups metadata file" ++msgstr "创建并编辑组元数据文件" ++ ++#: plugins/groups_manager.py:90 ++msgid "load groups metadata from file" ++msgstr "从文件加载组元数据" ++ ++#: plugins/groups_manager.py:93 ++msgid "save groups metadata to file" ++msgstr "将组元数据保存到文件中" ++ ++#: plugins/groups_manager.py:95 ++msgid "load and save groups metadata to file" ++msgstr "将组元数据加载并保存到文件中" ++ ++#: plugins/groups_manager.py:97 ++msgid "print the result metadata to stdout" ++msgstr "将结果元数据输出到标准输出" ++ ++#: plugins/groups_manager.py:100 ++msgid "group id" ++msgstr "组 id" ++ ++#: plugins/groups_manager.py:101 ++msgid "group name" ++msgstr "组名称" ++ ++#: plugins/groups_manager.py:103 ++msgid "group description" ++msgstr "组描述" ++ ++#: plugins/groups_manager.py:105 ++msgid "group display order" ++msgstr "组显示顺序" ++ ++#: plugins/groups_manager.py:108 ++msgid "translated name for the group" ++msgstr "组的翻译名称" ++ ++#: plugins/groups_manager.py:111 ++msgid "translated description for the group" ++msgstr "组的翻译描述" ++ ++#: plugins/groups_manager.py:115 ++msgid "make the group user visible (default)" ++msgstr "使组用户可见(默认)" ++ ++#: plugins/groups_manager.py:118 ++msgid "make the group user invisible" ++msgstr "使组用户不可见" ++ ++#: plugins/groups_manager.py:123 ++msgid "add packages to the mandatory section" ++msgstr "在必填部分添加软件包" ++ ++#: plugins/groups_manager.py:125 ++msgid "add packages to the optional section" ++msgstr "在可选部分添加软件包" ++ ++#: plugins/groups_manager.py:127 ++msgid "remove packages from the group instead of adding them" ++msgstr "从组群中删除软件包而不是添加它们" ++ ++#: plugins/groups_manager.py:129 ++msgid "include also direct dependencies for packages" ++msgstr "同时包括软件包的直接依赖软件包" ++ ++#: plugins/groups_manager.py:132 ++msgid "package specification" ++msgstr "软件包规格" ++ ++#: plugins/groups_manager.py:156 ++msgid "Can't edit group without specifying it (use --id or --name)" ++msgstr "没有指定组(使用 --id 或 --name)就无法编辑组" ++ ++#: plugins/groups_manager.py:190 ++msgid "Can't load file \"{}\": {}" ++msgstr "无法加载文件 \"{}\": {}" ++ ++#: plugins/groups_manager.py:206 ++msgid "Can't save file \"{}\": {}" ++msgstr "无法保存文件 \"{}\": {}" ++ ++#: plugins/groups_manager.py:261 ++msgid "No match for argument: {}" ++msgstr "未找到匹配的参数: {}" ++ ++#: plugins/groups_manager.py:298 ++msgid "Can't remove packages from non-existent group" ++msgstr "无法从不存在的组中删除软件包" ++ ++#: plugins/groups_manager.py:307 ++msgid "" ++"Group id '{}' generated from '{}' is duplicit. Please specify group id using " ++"--id." ++msgstr "从 '{}' 生成的组 id '{}' 是显式的。请使用 --id 指定组 ID。" ++ + #: plugins/leaves.py:32 + msgid "List installed packages not required by any other package" + msgstr "列出已安装但不被任何其他软件包所需要的软件包" + + #: plugins/local.py:122 + msgid "Unable to create a directory '{}' due to '{}'" +-msgstr "无法创建目录 '{}' 由于 '{}'" ++msgstr "无法创建目录 '{}' 由于 '{}'" + + #: plugins/local.py:126 + msgid "'{}' is not a directory" +@@ -634,67 +793,127 @@ msgstr "迁移 yum 的历史、分组以及 yumdb 数据至 dnf" + msgid "Migrating history data..." + msgstr "正在迁移历史数据…" + +-#: plugins/needs_restarting.py:65 ++#: plugins/modulesync.py:37 ++msgid "" ++"Download packages from modules and/or create a repository with modular data" ++msgstr "从模块下载软件包和/或创建带有模块化数据的存储库" ++ ++#: plugins/modulesync.py:44 ++msgid "MODULE" ++msgstr "模块" ++ ++#: plugins/modulesync.py:45 ++msgid "modules to download" ++msgstr "要下载的模块" ++ ++#: plugins/modulesync.py:47 ++msgid "enable repositories with source packages" ++msgstr "启用带有源软件包的软件仓库" ++ ++#: plugins/modulesync.py:49 ++msgid "enable repositories with debug-info and debug-source packages" ++msgstr "启用带有 debug-info 和 debug-source 软件包的软件仓库" ++ ++#: plugins/modulesync.py:53 ++msgid "download only packages from newest modules" ++msgstr "只从最新的模块中下载软件包" ++ ++#: plugins/modulesync.py:85 ++msgid "Unable to find a match for argument: '{}'" ++msgid_plural "Unable to find a match for arguments: '{}'" ++msgstr[0] "找不到与参数:'{}'相匹配的项" ++ ++#: plugins/modulesync.py:107 ++msgid "" ++"Creation of repository failed with return code {}. All downloaded content " ++"was kept on the system" ++msgstr "创建存储库会失败,并显示返回码 {}。所有下载的内容都保存在系统上" ++ ++#: plugins/modulesync.py:144 ++#, python-brace-format ++msgid "No match for artifact '{0}' from module '{1}'" ++msgstr "没有与模块 '{1}' 的工件 '{0}' 相匹配的项" ++ ++#: plugins/modulesync.py:162 ++#, python-brace-format ++msgid "No match for package name '{0}' in profile {1} from module {2}" ++msgstr "没有与模块 {2} 中配置文件 {1} 的软件包名称 '{0}' 相匹配的项" ++ ++#: plugins/modulesync.py:166 ++msgid "No mach for argument '{}'" ++msgstr "没有与参数 '{}' 相匹配的项" ++ ++#. TODO(jmracek) Shell we end with an error or with RC 1? ++#: plugins/modulesync.py:198 ++msgid "Unable to satisfy require {}" ++msgstr "无法满足要求 {}" ++ ++#: plugins/needs_restarting.py:66 + #, python-brace-format + msgid "" + "No installed package found for package name \"{pkg}\" specified in needs-" + "restarting file \"{file}\"." +-msgstr "" ++msgstr "未找到在需要重新启动文件 \"{file}\" 中指定的软件包名为 \"{pkg}\" " ++"的已安装的软件包。" + +-#: plugins/needs_restarting.py:199 ++#: plugins/needs_restarting.py:220 + msgid "determine updated binaries that need restarting" + msgstr "判断所升级的二进制文件是否需要重启" + +-#: plugins/needs_restarting.py:204 ++#: plugins/needs_restarting.py:225 + msgid "only consider this user's processes" + msgstr "仅考虑当前用户的进程" + +-#: plugins/needs_restarting.py:206 ++#: plugins/needs_restarting.py:227 + msgid "" + "only report whether a reboot is required (exit code 1) or not (exit code 0)" +-msgstr "" ++msgstr "只报告需要重新引导 (退出代码为 1) 或不需要重新引导 (退出代码为 0)" + + #: plugins/needs_restarting.py:230 ++msgid "only report affected systemd services" ++msgstr "只报告受影响的 systemd 服务" ++ ++#: plugins/needs_restarting.py:253 + msgid "Core libraries or services have been updated since boot-up:" +-msgstr "" ++msgstr "在引导后 Core 库或服务已被更新 :" + +-#: plugins/needs_restarting.py:235 ++#: plugins/needs_restarting.py:258 + msgid "Reboot is required to fully utilize these updates." +-msgstr "" ++msgstr "需要重新启动后才可以使这些更新完全生效。" + +-#: plugins/needs_restarting.py:236 ++#: plugins/needs_restarting.py:259 + msgid "More information:" +-msgstr "" ++msgstr "更多信息 :" + +-#: plugins/needs_restarting.py:240 ++#: plugins/needs_restarting.py:263 + msgid "No core libraries or services have been updated since boot-up." +-msgstr "" ++msgstr "在引导后没有 core 库或服务被更新。" + +-#: plugins/needs_restarting.py:242 ++#: plugins/needs_restarting.py:265 + msgid "Reboot should not be necessary." +-msgstr "" ++msgstr "不需要重新启动。" + + #: plugins/post-transaction-actions.py:71 + #, python-format + msgid "Bad Action Line \"%s\": %s" +-msgstr "" ++msgstr "错误的操作行“ %s”: %s" + + #. unsupported state, skip it + #: plugins/post-transaction-actions.py:130 + #, python-format + msgid "Bad Transaction State: %s" +-msgstr "" ++msgstr "错误的事务状态: %s" + +-#: plugins/post-transaction-actions.py:153 +-#: plugins/post-transaction-actions.py:155 ++#: plugins/post-transaction-actions.py:157 ++#: plugins/post-transaction-actions.py:159 + #, python-format + msgid "post-transaction-actions: %s" +-msgstr "" ++msgstr "事物后的操作: %s" + +-#: plugins/post-transaction-actions.py:157 ++#: plugins/post-transaction-actions.py:161 + #, python-format + msgid "post-transaction-actions: Bad Command \"%s\": %s" +-msgstr "" ++msgstr "事物后的操作 : 无效的命令 \"%s\": %s" + + #: plugins/repoclosure.py:42 + msgid "Display a list of unresolved dependencies for repositories" +@@ -722,129 +941,136 @@ msgstr "仅为该软件包检查依赖闭合性" + + #: plugins/repodiff.py:45 + msgid "List differences between two sets of repositories" +-msgstr "" ++msgstr "列出两组仓库中的不同" + + #: plugins/repodiff.py:58 + msgid "Specify old repository, can be used multiple times" +-msgstr "" ++msgstr "指定旧的仓库,可以使用多次" + + #: plugins/repodiff.py:60 + msgid "Specify new repository, can be used multiple times" +-msgstr "" ++msgstr "指定新的仓库,可以使用多次" + + #: plugins/repodiff.py:63 + msgid "" + "Specify architectures to compare, can be used multiple times. By default, " + "only source rpms are compared." +-msgstr "" ++msgstr "指定要比较的架构,可以使用多次。默认情况下,只比较源 rpms。" + + #: plugins/repodiff.py:67 + msgid "Output additional data about the size of the changes." +-msgstr "" ++msgstr "输出关于改变大小的额外数据。" + + #: plugins/repodiff.py:69 + msgid "" +-"Compare packages also by arch. By default packages are compared just by " +-"name." +-msgstr "" ++"Compare packages also by arch. By default packages are compared just by name." ++msgstr "同时按架构比较软件包。在默认情况下只按名称比较软件包。" + + #: plugins/repodiff.py:72 + msgid "Output a simple one line message for modified packages." +-msgstr "" ++msgstr "为修改的软件包输出一个简单的单行信息。" + + #: plugins/repodiff.py:74 + msgid "" + "Split the data for modified packages between upgraded and downgraded " + "packages." +-msgstr "" ++msgstr "在升级和降级的软件包间为修改的软件包分隔数据。" + + #: plugins/repodiff.py:86 + msgid "Both old and new repositories must be set." +-msgstr "" ++msgstr "新仓库和旧仓库都需要被设置。" + + #: plugins/repodiff.py:178 + msgid "Size change: {} bytes" +-msgstr "" ++msgstr "大小的变化 : {} 字节" + + #: plugins/repodiff.py:184 + msgid "Added package : {}" +-msgstr "" ++msgstr "添加的软件包 : {}" + + #: plugins/repodiff.py:187 + msgid "Removed package: {}" +-msgstr "" ++msgstr "删除的软件包 : {}" + + #: plugins/repodiff.py:190 + msgid "Obsoleted by : {}" +-msgstr "" ++msgstr "被下述软件包弃用:{}" + + #: plugins/repodiff.py:195 + msgid "" + "\n" + "Upgraded packages" + msgstr "" ++"\n" ++"升级的软件包" + + #: plugins/repodiff.py:200 + msgid "" + "\n" + "Downgraded packages" + msgstr "" ++"\n" ++"降级的软件包" + + #: plugins/repodiff.py:207 + msgid "" + "\n" + "Modified packages" + msgstr "" ++"\n" ++"修改的软件包" + + #: plugins/repodiff.py:212 + msgid "" + "\n" + "Summary" + msgstr "" ++"\n" ++"概述" + + #: plugins/repodiff.py:213 + msgid "Added packages: {}" +-msgstr "" ++msgstr "添加的软件包 : {}" + + #: plugins/repodiff.py:214 + msgid "Removed packages: {}" +-msgstr "" ++msgstr "删除的软件包 : {}" + + #: plugins/repodiff.py:216 + msgid "Upgraded packages: {}" +-msgstr "" ++msgstr "升级的软件包 : {}" + + #: plugins/repodiff.py:217 + msgid "Downgraded packages: {}" +-msgstr "" ++msgstr "降级的软件包 : {}" + + #: plugins/repodiff.py:219 + msgid "Modified packages: {}" +-msgstr "" ++msgstr "修改的软件包 : {}" + + #: plugins/repodiff.py:222 + msgid "Size of added packages: {}" +-msgstr "" ++msgstr "添加的软件包的大小 : {}" + + #: plugins/repodiff.py:223 + msgid "Size of removed packages: {}" +-msgstr "" ++msgstr "删除的软件包的大小 : {}" + + #: plugins/repodiff.py:225 + msgid "Size of modified packages: {}" +-msgstr "" ++msgstr "修改的软件包的大小 : {}" + + #: plugins/repodiff.py:228 + msgid "Size of upgraded packages: {}" +-msgstr "" ++msgstr "升级的软件包的大小 : {}" + + #: plugins/repodiff.py:230 + msgid "Size of downgraded packages: {}" +-msgstr "" ++msgstr "降级的软件包的大小 : {}" + + #: plugins/repodiff.py:232 + msgid "Size change: {}" +-msgstr "" ++msgstr "大小改变 : {}" + + #: plugins/repograph.py:50 + msgid "Output a full package dependency graph in dot format" +@@ -863,112 +1089,124 @@ msgstr "管理 RPM 软件包目录" + msgid "Pass either --old or --new, not both!" + msgstr "传入 --old 或者 --new,不可同时传入!" + +-#: plugins/repomanage.py:71 ++#: plugins/repomanage.py:89 + msgid "No files to process" + msgstr "没有可处理的文件" + +-#: plugins/repomanage.py:93 ++#: plugins/repomanage.py:96 + msgid "Could not open {}" + msgstr "无法打开 {}" + +-#: plugins/repomanage.py:177 ++#: plugins/repomanage.py:180 + msgid "Print the older packages" + msgstr "打印较旧的软件包" + +-#: plugins/repomanage.py:179 ++#: plugins/repomanage.py:182 + msgid "Print the newest packages" + msgstr "打印最新的软件包" + +-#: plugins/repomanage.py:181 ++#: plugins/repomanage.py:184 + msgid "Space separated output, not newline" + msgstr "用空格分割输出,而不是新行" + +-#: plugins/repomanage.py:183 ++#: plugins/repomanage.py:186 + msgid "Newest N packages to keep - defaults to 1" + msgstr "要保留的最新的 N 个软件包 - 默认值为 1" + +-#: plugins/repomanage.py:186 ++#: plugins/repomanage.py:189 + msgid "Path to directory" + msgstr "指向目录的路径" + +-#: plugins/reposync.py:54 ++#: plugins/reposync.py:55 + msgid "download all packages from remote repo" + msgstr "下载远程仓库中的全部软件包" + +-#: plugins/reposync.py:63 ++#: plugins/reposync.py:64 + msgid "download only packages for this ARCH" + msgstr "只下载这个 ARCH 的软件包" + +-#: plugins/reposync.py:65 ++#: plugins/reposync.py:66 + msgid "delete local packages no longer present in repository" + msgstr "删除已不在仓库中的本地软件包" + +-#: plugins/reposync.py:67 +-msgid "also download and uncompress comps.xml" +-msgstr "" +- +-#: plugins/reposync.py:69 ++#: plugins/reposync.py:68 + msgid "download all the metadata." +-msgstr "" ++msgstr "下载所有元数据。" + +-#: plugins/reposync.py:71 +-msgid "download only newest packages per-repo" +-msgstr "只下载最新的软件包 per-repo" ++#: plugins/reposync.py:70 ++msgid "Remove packages that fail GPG signature checking after downloading" ++msgstr "下载后删除无法通过 GPG 签名检查的软件包" + + #: plugins/reposync.py:73 +-msgid "where to store downloaded repositories" +-msgstr "" ++msgid "also download and uncompress comps.xml" ++msgstr "同时下载并解压 comps.xml" + + #: plugins/reposync.py:75 +-msgid "Don't add the reponame to the download path." +-msgstr "" +- +-#: plugins/reposync.py:77 + msgid "" +-"where to store downloaded repository metadata. Defaults to the value of " +-"--download-path." +-msgstr "" ++"where to store downloaded repository metadata. Defaults to the value of --" ++"download-path." ++msgstr "存储下载的仓库元数据的位置。默认为 --download-path 的值。" ++ ++#: plugins/reposync.py:78 ++msgid "download only newest packages per-repo" ++msgstr "只下载最新的软件包 per-repo" + + #: plugins/reposync.py:80 +-msgid "operate on source packages" +-msgstr "在源软件包中操作" ++msgid "Don't add the reponame to the download path." ++msgstr "不要在下载路径中添加仓库名(reponame)。" + + #: plugins/reposync.py:82 ++msgid "where to store downloaded repositories" ++msgstr "在何处存储已下载的仓库" ++ ++#: plugins/reposync.py:84 + msgid "try to set local timestamps of local files by the one on the server" +-msgstr "" ++msgstr "根据服务器上的文件设置本地文件的本地时间戳" ++ ++#: plugins/reposync.py:87 ++msgid "download only source packages" ++msgstr "只下载源软件包" + +-#: plugins/reposync.py:85 ++#: plugins/reposync.py:89 + msgid "Just list urls of what would be downloaded, don't download" +-msgstr "" ++msgstr "只列出要下载内容的 url,不实际下载" + +-#: plugins/reposync.py:109 ++#: plugins/reposync.py:113 + msgid "Can't use --norepopath with multiple repositories" +-msgstr "" ++msgstr "不能将 --norepopath 与多个仓库一起使用" + +-#: plugins/reposync.py:127 ++#: plugins/reposync.py:132 + #, python-format + msgid "Failed to get mirror for metadata: %s" +-msgstr "" ++msgstr "获取元数据镜像失败:%s" + +-#: plugins/reposync.py:144 ++#: plugins/reposync.py:149 + msgid "Failed to get mirror for the group file." +-msgstr "" ++msgstr "获取组文件镜像失败。" ++ ++#: plugins/reposync.py:168 ++msgid "Removing {}: {}" ++msgstr "正在删除 {}: {}" + + #: plugins/reposync.py:175 ++msgid "GPG signature check failed." ++msgstr "GPG 签名检查失败。" ++ ++#: plugins/reposync.py:196 + msgid "Download target '{}' is outside of download path '{}'." +-msgstr "" ++msgstr "下载的目标 '{}' 在下载路径 '{}' 以外。" + +-#: plugins/reposync.py:190 ++#: plugins/reposync.py:211 + #, python-format + msgid "[DELETED] %s" + msgstr "[DELETED] %s" + +-#: plugins/reposync.py:192 ++#: plugins/reposync.py:213 + #, python-format + msgid "failed to delete file %s" + msgstr "无法删除文件 %s" + +-#: plugins/reposync.py:201 ++#: plugins/reposync.py:222 + #, python-format + msgid "comps.xml for repository %s saved" + msgstr "仓库 %s 的 comps.xml 已保存" +@@ -977,66 +1215,71 @@ msgstr "仓库 %s 的 comps.xml 已保存" + msgid "New leaves:" + msgstr "新增保留项:" + +-#: plugins/versionlock.py:32 ++#: plugins/versionlock.py:33 + #, python-format + msgid "Unable to read version lock configuration: %s" + msgstr "无法读取版本锁配置: %s" + +-#: plugins/versionlock.py:33 ++#: plugins/versionlock.py:34 + msgid "Locklist not set" + msgstr "锁列表未设置" + +-#: plugins/versionlock.py:34 ++#: plugins/versionlock.py:35 + msgid "Adding versionlock on:" + msgstr "正在添加版本锁:" + +-#: plugins/versionlock.py:35 ++#: plugins/versionlock.py:36 + msgid "Adding exclude on:" + msgstr "正在添加排除:" + +-#: plugins/versionlock.py:36 ++#: plugins/versionlock.py:37 + msgid "Package already locked in equivalent form:" +-msgstr "" ++msgstr "软件包已使用等同的格式锁定:" + +-#: plugins/versionlock.py:37 ++#: plugins/versionlock.py:38 + msgid "Package {} is already locked" +-msgstr "" ++msgstr "软件包 {} 已被锁定" + +-#: plugins/versionlock.py:38 ++#: plugins/versionlock.py:39 + msgid "Package {} is already excluded" +-msgstr "" ++msgstr "软件包 {} 已被排除" + +-#: plugins/versionlock.py:39 ++#: plugins/versionlock.py:40 + msgid "Deleting versionlock for:" + msgstr "正在删除版本锁:" + +-#: plugins/versionlock.py:40 ++#: plugins/versionlock.py:41 + msgid "No package found for:" + msgstr "未找到软件包:" + +-#: plugins/versionlock.py:41 ++#: plugins/versionlock.py:42 + msgid "Excludes from versionlock plugin were not applied" + msgstr "从 versionlock 插件中排除的没有被应用" + +-#: plugins/versionlock.py:42 ++#: plugins/versionlock.py:43 + msgid "Versionlock plugin: number of lock rules from file \"{}\" applied: {}" + msgstr "Versionlock 插件: 文件 \"{}\" 中的锁定数量规则被应用:{}" + +-#: plugins/versionlock.py:43 +-msgid "Versionlock plugin: number of exclude rules from file \"{}\" applied: {}" ++#: plugins/versionlock.py:44 ++msgid "" ++"Versionlock plugin: number of exclude rules from file \"{}\" applied: {}" + msgstr "Versionlock 插件: 文件 \"{}\" 中的排除规则数量被应用:{}" + +-#: plugins/versionlock.py:44 ++#: plugins/versionlock.py:45 + msgid "Versionlock plugin: could not parse pattern:" + msgstr "Versionlock 插件:不能解析特征:" + +-#: plugins/versionlock.py:130 ++#: plugins/versionlock.py:134 + msgid "control package version locks" + msgstr "控制软件包版本锁" + +-#: plugins/versionlock.py:136 ++#: plugins/versionlock.py:140 + msgid "Use package specifications as they are, do not try to parse them" +-msgstr "" ++msgstr "按原样使用程序包规格,请勿尝试解析它们" ++ ++#: plugins/versionlock.py:160 ++msgid "Subcommand '{}' is deprecated. Use 'exclude' subcommand instead." ++msgstr "子命令 '{}' 已被弃用。改为使用 'exclude' 子命令。" + + #~ msgid "" + #~ "\n" +diff --git a/po/zh_TW.po b/po/zh_TW.po +index 755d9e6..f7ea95b 100644 +--- a/po/zh_TW.po ++++ b/po/zh_TW.po +@@ -10,10 +10,11 @@ msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: \n" +-"POT-Creation-Date: 2020-10-05 09:18-0400\n" ++"POT-Creation-Date: 2022-02-28 11:53+0100\n" + "PO-Revision-Date: 2020-08-28 21:29+0000\n" + "Last-Translator: Yi-Jyun Pan \n" +-"Language-Team: Chinese (Traditional) \n" ++"Language-Team: Chinese (Traditional) \n" + "Language: zh_TW\n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" +@@ -59,8 +60,7 @@ msgid "Some packages could not be found." + msgstr "有些軟體包遍尋不著。" + + #. No provides, no files +-#. Richdeps can have no matches but it could be correct (solver must decide +-#. later) ++#. Richdeps can have no matches but it could be correct (solver must decide later) + #: plugins/builddep.py:173 + #, python-format + msgid "No matching package to install: '%s'" +@@ -141,92 +141,92 @@ msgstr "列出所有變更記錄" + msgid "Changelogs for {}" + msgstr "{} 的變更記錄" + +-#: plugins/config_manager.py:37 ++#: plugins/config_manager.py:38 + #, python-brace-format + msgid "manage {prog} configuration options and repositories" + msgstr "管理 {prog} 的設定選項及軟體庫" + +-#: plugins/config_manager.py:44 ++#: plugins/config_manager.py:45 + msgid "repo to modify" + msgstr "要修改的軟體庫" + +-#: plugins/config_manager.py:47 ++#: plugins/config_manager.py:48 + msgid "save the current options (useful with --setopt)" + msgstr "儲存目前的選項(用於 --setopt)" + +-#: plugins/config_manager.py:50 ++#: plugins/config_manager.py:51 + msgid "add (and enable) the repo from the specified file or url" + msgstr "從指定的檔案或 URL 新增(並啟用)此軟體庫" + +-#: plugins/config_manager.py:53 ++#: plugins/config_manager.py:54 + msgid "print current configuration values to stdout" + msgstr "輸出目前的設定檔值至標準輸出" + +-#: plugins/config_manager.py:56 ++#: plugins/config_manager.py:57 + msgid "print variable values to stdout" + msgstr "輸出變數值至標準輸出" + +-#: plugins/config_manager.py:60 ++#: plugins/config_manager.py:61 + msgid "enable repos (automatically saves)" + msgstr "啟用軟體庫(自動儲存)" + +-#: plugins/config_manager.py:63 ++#: plugins/config_manager.py:64 + msgid "disable repos (automatically saves)" + msgstr "停用軟體庫(自動儲存)" + +-#: plugins/config_manager.py:77 ++#: plugins/config_manager.py:78 + msgid "one of the following arguments is required: {}" + msgstr "需要以下任一引數:{}" + +-#: plugins/config_manager.py:86 ++#: plugins/config_manager.py:87 + msgid "" + "Warning: --enablerepo/--disablerepo arguments have no meaningwith config " + "manager. Use --set-enabled/--set-disabled instead." + msgstr "" +-"警告:--enablerepo/--disablerepo 引數在組態管理員下沒有意義。請改用 --set-enabled/--set-" +-"disabled。" ++"警告:--enablerepo/--disablerepo 引數在組態管理員下沒有意義。請改用 --set-" ++"enabled/--set-disabled。" + +-#: plugins/config_manager.py:131 ++#: plugins/config_manager.py:132 + #, python-format + msgid "No matching repo to modify: %s." + msgstr "沒有符合要修改的軟體庫:%s。" + +-#: plugins/config_manager.py:182 ++#: plugins/config_manager.py:183 + #, python-format + msgid "Adding repo from: %s" + msgstr "從下述加入軟體庫:%s" + +-#: plugins/config_manager.py:206 ++#: plugins/config_manager.py:207 + msgid "Configuration of repo failed" + msgid_plural "Configuration of repos failed" + msgstr[0] "設定軟體庫失敗" + +-#: plugins/config_manager.py:216 ++#: plugins/config_manager.py:217 + #, python-format + msgid "Could not save repo to repofile %s: %s" + msgstr "無法儲存軟體庫至 repofile %s:%s" + +-#: plugins/copr.py:59 ++#: plugins/copr.py:64 + msgid "y" + msgstr "y" + +-#: plugins/copr.py:59 ++#: plugins/copr.py:64 + msgid "yes" + msgstr "yes" + +-#: plugins/copr.py:60 ++#: plugins/copr.py:65 + msgid "n" + msgstr "n" + +-#: plugins/copr.py:60 ++#: plugins/copr.py:65 + msgid "no" + msgstr "no" + +-#: plugins/copr.py:79 ++#: plugins/copr.py:84 + msgid "Interact with Copr repositories." + msgstr "與 Copr 軟體庫互動。" + +-#: plugins/copr.py:81 ++#: plugins/copr.py:86 + msgid "" + "\n" + " enable name/project [chroot]\n" +@@ -264,54 +264,67 @@ msgstr "" + " copr search tests\n" + " " + +-#: plugins/copr.py:107 ++#: plugins/copr.py:112 + msgid "List all installed Copr repositories (default)" + msgstr "列出所有安裝的 Copr 軟體庫(預設值)" + +-#: plugins/copr.py:109 ++#: plugins/copr.py:114 + msgid "List enabled Copr repositories" + msgstr "列出啟用的 Copr 軟體庫" + +-#: plugins/copr.py:111 ++#: plugins/copr.py:116 + msgid "List disabled Copr repositories" + msgstr "列出停用的 Copr 軟體庫" + +-#: plugins/copr.py:113 ++#: plugins/copr.py:118 + msgid "List available Copr repositories by user NAME" + msgstr "列出使用者 NAME 可用的 Copr 軟體庫" + +-#: plugins/copr.py:115 ++#: plugins/copr.py:120 + msgid "Specify an instance of Copr to work with" + msgstr "指定要使用 Copr 的實體:" + +-#: plugins/copr.py:149 plugins/copr.py:217 plugins/copr.py:237 ++#: plugins/copr.py:154 plugins/copr.py:222 plugins/copr.py:249 + msgid "Error: " + msgstr "錯誤: " + +-#: plugins/copr.py:150 ++#: plugins/copr.py:155 + msgid "" +-"specify Copr hub either with `--hub` or using " +-"`copr_hub/copr_username/copr_projectname` format" ++"specify Copr hub either with `--hub` or using `copr_hub/copr_username/" ++"copr_projectname` format" + msgstr "" +-"使用 `--hub` 或者用 `copr_hub/copr_username/copr_projectname` 格式指定 Copr hub" ++"使用 `--hub` 或者用 `copr_hub/copr_username/copr_projectname` 格式指定 Copr " ++"hub" + +-#: plugins/copr.py:153 ++#: plugins/copr.py:158 + msgid "multiple hubs specified" + msgstr "指定了多個 hub" + +-#: plugins/copr.py:218 plugins/copr.py:222 ++#: plugins/copr.py:223 plugins/copr.py:227 + msgid "exactly two additional parameters to copr command are required" + msgstr "傳入 copr 命令的選用參數必須剛好兩個" + +-#: plugins/copr.py:238 ++#: plugins/copr.py:232 ++#, fuzzy ++#| msgid "No match for argument: %s" ++msgid "Too many arguments." ++msgstr "引數不符:%s" ++ ++#: plugins/copr.py:235 ++msgid "" ++"Bad format of optional chroot. The format is distribution-version-" ++"architecture." ++msgstr "" ++ ++#: plugins/copr.py:250 + msgid "use format `copr_username/copr_projectname` to reference copr project" + msgstr "使用 `copr_username/copr_projectname` 格式來參照 Copr 專案" + +-#: plugins/copr.py:240 ++#: plugins/copr.py:252 + msgid "bad copr project format" + msgstr "Copr 專案格式無效" + +-#: plugins/copr.py:254 ++#: plugins/copr.py:266 + msgid "" + "\n" + "Enabling a Copr repository. Please note that this repository is not part\n" +@@ -319,7 +332,8 @@ msgid "" + "\n" + "The Fedora Project does not exercise any power over the contents of\n" + "this repository beyond the rules outlined in the Copr FAQ at\n" +-",\n" ++",\n" + "and packages are not held to any quality or security level.\n" + "\n" + "Please do not file bug reports about these packages in Fedora\n" +@@ -330,77 +344,80 @@ msgstr "" + "不是主散布版的一部分,並且品質不定。\n" + "\n" + "Fedora Project 不會對這個軟體庫的內容行使任何超出 Copr 常見問題\n" +-"()\n" ++"()\n" + "列出規則之外的權力,且軟體包並不保有任何的品質與安全性保證。\n" + "\n" + "請不要將這些軟體包的漏洞回報至 Fedora Bugzilla。\n" + "假如碰到問題,請聯絡此軟體庫的擁有者。\n" + +-#: plugins/copr.py:271 ++#: plugins/copr.py:283 + msgid "Repository successfully enabled." + msgstr "軟體庫成功啟用。" + +-#: plugins/copr.py:276 ++#: plugins/copr.py:288 + msgid "Repository successfully disabled." + msgstr "軟體庫成功停用。" + +-#: plugins/copr.py:280 ++#: plugins/copr.py:292 + msgid "Repository successfully removed." + msgstr "軟體庫成功移除。" + +-#: plugins/copr.py:284 plugins/copr.py:693 ++#: plugins/copr.py:296 plugins/copr.py:697 + msgid "Unknown subcommand {}." + msgstr "{} 子命令未知。" + +-#: plugins/copr.py:341 ++#: plugins/copr.py:353 + msgid "" +-"* These coprs have repo file with an old format that contains no information" +-" about Copr hub - the default one was assumed. Re-enable the project to fix " ++"* These coprs have repo file with an old format that contains no information " ++"about Copr hub - the default one was assumed. Re-enable the project to fix " + "this." +-msgstr "* 這些 Copr 包含可能沒有 Copr hub 資訊的舊格式 repo 檔案 — 已假設為預設 hub。請重新啟用專案以修正。" ++msgstr "" ++"* 這些 Copr 包含可能沒有 Copr hub 資訊的舊格式 repo 檔案 — 已假設為預設 hub。" ++"請重新啟用專案以修正。" + +-#: plugins/copr.py:353 ++#: plugins/copr.py:366 + msgid "Can't parse repositories for username '{}'." + msgstr "無法解析「{}」使用者名稱的軟體庫。" + +-#: plugins/copr.py:356 ++#: plugins/copr.py:369 + msgid "List of {} coprs" + msgstr "{} Copr 清單" + +-#: plugins/copr.py:364 ++#: plugins/copr.py:374 + msgid "No description given" + msgstr "沒有提供描述" + +-#: plugins/copr.py:376 ++#: plugins/copr.py:386 + msgid "Can't parse search for '{}'." + msgstr "無法解析「{}」搜尋。" + +-#: plugins/copr.py:379 ++#: plugins/copr.py:389 + msgid "Matched: {}" + msgstr "符合項目:{}" + +-#: plugins/copr.py:387 ++#: plugins/copr.py:394 + msgid "No description given." + msgstr "沒有提供描述。" + +-#: plugins/copr.py:410 ++#: plugins/copr.py:416 + msgid "Safe and good answer. Exiting." + msgstr "安全且更棒的回應。結束。" + +-#: plugins/copr.py:417 ++#: plugins/copr.py:423 + msgid "This command has to be run under the root user." + msgstr "此命令必須在 root 使用者下執行" + +-#: plugins/copr.py:481 ++#: plugins/copr.py:485 + msgid "" + "This repository does not have any builds yet so you cannot enable it now." + msgstr "這個軟體庫尚無任何組建,所以您尚無法啟用。" + +-#: plugins/copr.py:484 ++#: plugins/copr.py:488 + msgid "Such repository does not exist." + msgstr "不存在此軟體庫。" + +-#: plugins/copr.py:528 ++#: plugins/copr.py:532 + #, python-brace-format + msgid "" + "Maintainer of the enabled Copr repository decided to make\n" +@@ -417,44 +434,44 @@ msgid "" + "These repositories have been enabled automatically." + msgstr "" + +-#: plugins/copr.py:549 ++#: plugins/copr.py:553 + msgid "Do you want to keep them enabled?" + msgstr "是否保持啟用?" + +-#: plugins/copr.py:582 ++#: plugins/copr.py:586 + #, python-brace-format + msgid "Failed to remove copr repo {0}/{1}/{2}" + msgstr "無法移除 Copr 軟體庫 {0}/{1}/{2}" + +-#: plugins/copr.py:593 ++#: plugins/copr.py:597 + msgid "Failed to disable copr repo {}/{}" + msgstr "無法停用 Copr 軟體庫 {}/{}" + +-#: plugins/copr.py:611 plugins/copr.py:648 ++#: plugins/copr.py:615 plugins/copr.py:652 + msgid "Unknown response from server." + msgstr "未知的伺服器回應。" + +-#: plugins/copr.py:633 ++#: plugins/copr.py:637 + msgid "Interact with Playground repository." + msgstr "與 Playground 軟體庫互動。" + +-#: plugins/copr.py:639 ++#: plugins/copr.py:643 + msgid "Enabling a Playground repository." + msgstr "啟用 Playground 軟體庫。" + +-#: plugins/copr.py:640 ++#: plugins/copr.py:644 + msgid "Do you want to continue?" + msgstr "是否繼續?" + +-#: plugins/copr.py:683 ++#: plugins/copr.py:687 + msgid "Playground repositories successfully enabled." + msgstr "Playground 軟體庫成功啟用。" + +-#: plugins/copr.py:686 ++#: plugins/copr.py:690 + msgid "Playground repositories successfully disabled." + msgstr "Playground 軟體庫成功停用。" + +-#: plugins/copr.py:690 ++#: plugins/copr.py:694 + msgid "Playground repositories successfully updated." + msgstr "Playground 軟體庫成功更新。" + +@@ -501,7 +518,9 @@ msgstr "限縮至指定類型" + msgid "" + "Allow removing of install-only packages. Using this option may result in an " + "attempt to remove the running kernel." +-msgstr "允許移除僅安裝 (install-only) 軟體包。啟用這個選項可能會導致執行中內核被移除。" ++msgstr "" ++"允許移除僅安裝 (install-only) 軟體包。啟用這個選項可能會導致執行中內核被移" ++"除。" + + #: plugins/debug.py:202 + msgid "name of dump file" +@@ -573,7 +592,7 @@ msgstr "改下載 -debugsource 軟體包" + msgid "limit the query to packages of given architectures." + msgstr "將查詢限縮至指定架構的軟體包。" + +-#: plugins/download.py:62 ++#: plugins/download.py:62 plugins/modulesync.py:51 + msgid "resolve and download needed dependencies" + msgstr "解析並下載需要的依賴關係" + +@@ -592,7 +611,7 @@ msgstr "輸出可以下載 RPM 的 URL 清單而不下載" + msgid "when running with --url, limit to specific protocols" + msgstr "使用 --url 執行時,限縮至指定的通訊協定" + +-#: plugins/download.py:121 plugins/reposync.py:293 ++#: plugins/download.py:121 plugins/reposync.py:314 + #, python-format + msgid "Failed to get mirror for package: %s" + msgstr "無法取得軟體庫的鏡像站:%s" +@@ -615,6 +634,134 @@ msgstr "未指定 %s 的來源 RPM" + msgid "No package %s available." + msgstr "沒有 %s 軟體包可用。" + ++#: plugins/groups_manager.py:49 ++msgid "Invalid group id" ++msgstr "" ++ ++#: plugins/groups_manager.py:58 ++msgid "Invalid translated data, should be in form 'lang:text'" ++msgstr "" ++ ++#: plugins/groups_manager.py:61 ++msgid "Invalid/empty language for translated data" ++msgstr "" ++ ++#: plugins/groups_manager.py:71 ++msgid "Can't generate group id from '{}'. Please specify group id using --id." ++msgstr "" ++ ++#: plugins/groups_manager.py:79 ++msgid "create and edit groups metadata file" ++msgstr "" ++ ++#: plugins/groups_manager.py:90 ++msgid "load groups metadata from file" ++msgstr "" ++ ++#: plugins/groups_manager.py:93 ++msgid "save groups metadata to file" ++msgstr "" ++ ++#: plugins/groups_manager.py:95 ++msgid "load and save groups metadata to file" ++msgstr "" ++ ++#: plugins/groups_manager.py:97 ++#, fuzzy ++#| msgid "print variable values to stdout" ++msgid "print the result metadata to stdout" ++msgstr "輸出變數值至標準輸出" ++ ++#: plugins/groups_manager.py:100 ++msgid "group id" ++msgstr "" ++ ++#: plugins/groups_manager.py:101 ++msgid "group name" ++msgstr "" ++ ++#: plugins/groups_manager.py:103 ++#, fuzzy ++#| msgid "No description given" ++msgid "group description" ++msgstr "沒有提供描述" ++ ++#: plugins/groups_manager.py:105 ++msgid "group display order" ++msgstr "" ++ ++#: plugins/groups_manager.py:108 ++msgid "translated name for the group" ++msgstr "" ++ ++#: plugins/groups_manager.py:111 ++#, fuzzy ++#| msgid "Failed to get mirror for the group file." ++msgid "translated description for the group" ++msgstr "無法取得群組檔案的鏡像站。" ++ ++#: plugins/groups_manager.py:115 ++msgid "make the group user visible (default)" ++msgstr "" ++ ++#: plugins/groups_manager.py:118 ++msgid "make the group user invisible" ++msgstr "" ++ ++#: plugins/groups_manager.py:123 ++msgid "add packages to the mandatory section" ++msgstr "" ++ ++#: plugins/groups_manager.py:125 ++msgid "add packages to the optional section" ++msgstr "" ++ ++#: plugins/groups_manager.py:127 ++msgid "remove packages from the group instead of adding them" ++msgstr "" ++ ++#: plugins/groups_manager.py:129 ++#, fuzzy ++#| msgid "Display a list of unresolved dependencies for repositories" ++msgid "include also direct dependencies for packages" ++msgstr "顯示軟體庫中未回應的依賴關係列表" ++ ++#: plugins/groups_manager.py:132 ++msgid "package specification" ++msgstr "" ++ ++#: plugins/groups_manager.py:156 ++msgid "Can't edit group without specifying it (use --id or --name)" ++msgstr "" ++ ++#: plugins/groups_manager.py:190 ++#, fuzzy ++#| msgid "Can't write file '{}'" ++msgid "Can't load file \"{}\": {}" ++msgstr "無法寫入「{}」檔案" ++ ++#: plugins/groups_manager.py:206 ++#, fuzzy ++#| msgid "Can't write file '{}'" ++msgid "Can't save file \"{}\": {}" ++msgstr "無法寫入「{}」檔案" ++ ++#: plugins/groups_manager.py:261 ++#, fuzzy ++#| msgid "No match for argument: %s" ++msgid "No match for argument: {}" ++msgstr "引數不符:%s" ++ ++#: plugins/groups_manager.py:298 ++msgid "Can't remove packages from non-existent group" ++msgstr "" ++ ++#: plugins/groups_manager.py:307 ++msgid "" ++"Group id '{}' generated from '{}' is duplicit. Please specify group id using " ++"--id." ++msgstr "" ++ + #: plugins/leaves.py:32 + msgid "List installed packages not required by any other package" + msgstr "列出其他軟體包已經不需要的安裝軟體包" +@@ -647,43 +794,112 @@ msgstr "遷移 yum 的歷史記錄、群組與 yumdb 資料至 dnf" + msgid "Migrating history data..." + msgstr "正在遷移歷史資料…" + +-#: plugins/needs_restarting.py:65 ++#: plugins/modulesync.py:37 ++msgid "" ++"Download packages from modules and/or create a repository with modular data" ++msgstr "" ++ ++#: plugins/modulesync.py:44 ++msgid "MODULE" ++msgstr "" ++ ++#: plugins/modulesync.py:45 ++#, fuzzy ++#| msgid "packages to download" ++msgid "modules to download" ++msgstr "要下載的軟體包" ++ ++#: plugins/modulesync.py:47 ++#, fuzzy ++#| msgid "operate on source packages" ++msgid "enable repositories with source packages" ++msgstr "在來源軟體包上操作" ++ ++#: plugins/modulesync.py:49 ++msgid "enable repositories with debug-info and debug-source packages" ++msgstr "" ++ ++#: plugins/modulesync.py:53 ++#, fuzzy ++#| msgid "download all packages from remote repo" ++msgid "download only packages from newest modules" ++msgstr "從遠端軟體庫下載所有軟體包" ++ ++#: plugins/modulesync.py:85 ++#, fuzzy ++#| msgid "No match for argument: %s" ++msgid "Unable to find a match for argument: '{}'" ++msgid_plural "Unable to find a match for arguments: '{}'" ++msgstr[0] "引數不符:%s" ++ ++#: plugins/modulesync.py:107 ++msgid "" ++"Creation of repository failed with return code {}. All downloaded content " ++"was kept on the system" ++msgstr "" ++ ++#: plugins/modulesync.py:144 ++#, python-brace-format ++msgid "No match for artifact '{0}' from module '{1}'" ++msgstr "" ++ ++#: plugins/modulesync.py:162 ++#, python-brace-format ++msgid "No match for package name '{0}' in profile {1} from module {2}" ++msgstr "" ++ ++#: plugins/modulesync.py:166 ++#, fuzzy ++#| msgid "No match for argument: %s" ++msgid "No mach for argument '{}'" ++msgstr "引數不符:%s" ++ ++#. TODO(jmracek) Shell we end with an error or with RC 1? ++#: plugins/modulesync.py:198 ++msgid "Unable to satisfy require {}" ++msgstr "" ++ ++#: plugins/needs_restarting.py:66 + #, fuzzy, python-brace-format + msgid "" + "No installed package found for package name \"{pkg}\" specified in needs-" + "restarting file \"{file}\"." + msgstr "未安裝 \"{file}\" 需要重新啟動檔案中指定的 \"{pkg}\" 軟體包。" + +-#: plugins/needs_restarting.py:199 ++#: plugins/needs_restarting.py:220 + msgid "determine updated binaries that need restarting" + msgstr "決定需要重新啟動的已更新二進位檔" + +-#: plugins/needs_restarting.py:204 ++#: plugins/needs_restarting.py:225 + msgid "only consider this user's processes" + msgstr "只考慮此位使用者的處理程序" + +-#: plugins/needs_restarting.py:206 ++#: plugins/needs_restarting.py:227 + msgid "" + "only report whether a reboot is required (exit code 1) or not (exit code 0)" + msgstr "只回報是(錯誤碼 1)否(錯誤碼 0)需要重新啟動" + + #: plugins/needs_restarting.py:230 ++msgid "only report affected systemd services" ++msgstr "" ++ ++#: plugins/needs_restarting.py:253 + msgid "Core libraries or services have been updated since boot-up:" + msgstr "開機後更新過的核心函式庫或服務:" + +-#: plugins/needs_restarting.py:235 ++#: plugins/needs_restarting.py:258 + msgid "Reboot is required to fully utilize these updates." + msgstr "需要重新啟動,才可以完全套用這些更新。" + +-#: plugins/needs_restarting.py:236 ++#: plugins/needs_restarting.py:259 + msgid "More information:" + msgstr "更多資訊:" + +-#: plugins/needs_restarting.py:240 ++#: plugins/needs_restarting.py:263 + msgid "No core libraries or services have been updated since boot-up." + msgstr "開機後沒有更新過的核心函式庫或服務。" + +-#: plugins/needs_restarting.py:242 ++#: plugins/needs_restarting.py:265 + msgid "Reboot should not be necessary." + msgstr "應不需要重新啟動。" + +@@ -698,13 +914,13 @@ msgstr "動作列「%s」格式錯誤:%s" + msgid "Bad Transaction State: %s" + msgstr "無效的處理事項狀態:%s" + +-#: plugins/post-transaction-actions.py:153 +-#: plugins/post-transaction-actions.py:155 ++#: plugins/post-transaction-actions.py:157 ++#: plugins/post-transaction-actions.py:159 + #, python-format + msgid "post-transaction-actions: %s" + msgstr "post-transaction-actions:%s" + +-#: plugins/post-transaction-actions.py:157 ++#: plugins/post-transaction-actions.py:161 + #, python-format + msgid "post-transaction-actions: Bad Command \"%s\": %s" + msgstr "post-transaction-actions:「%s」命令無效:%s" +@@ -757,8 +973,7 @@ msgstr "輸出跟變更大小有關的額外資料。" + + #: plugins/repodiff.py:69 + msgid "" +-"Compare packages also by arch. By default packages are compared just by " +-"name." ++"Compare packages also by arch. By default packages are compared just by name." + msgstr "也依架構比較軟體包。預設情況下,軟體包只會依名稱比較。" + + #: plugins/repodiff.py:72 +@@ -885,112 +1100,126 @@ msgstr "管理 rpm 軟體包目錄" + msgid "Pass either --old or --new, not both!" + msgstr "只能傳入 --old 或 --new 任一,而非兩者!" + +-#: plugins/repomanage.py:71 ++#: plugins/repomanage.py:89 + msgid "No files to process" + msgstr "沒有要處理的檔案" + +-#: plugins/repomanage.py:93 ++#: plugins/repomanage.py:96 + msgid "Could not open {}" + msgstr "無法開啟 {}" + +-#: plugins/repomanage.py:177 ++#: plugins/repomanage.py:180 + msgid "Print the older packages" + msgstr "顯示較舊的軟體包" + +-#: plugins/repomanage.py:179 ++#: plugins/repomanage.py:182 + msgid "Print the newest packages" + msgstr "顯示較新的軟體包" + +-#: plugins/repomanage.py:181 ++#: plugins/repomanage.py:184 + msgid "Space separated output, not newline" + msgstr "以空白而非換行分割輸出" + +-#: plugins/repomanage.py:183 ++#: plugins/repomanage.py:186 + msgid "Newest N packages to keep - defaults to 1" + msgstr "保留最新 N 個軟體包 — 預設值為 1" + +-#: plugins/repomanage.py:186 ++#: plugins/repomanage.py:189 + msgid "Path to directory" + msgstr "目錄路徑" + +-#: plugins/reposync.py:54 ++#: plugins/reposync.py:55 + msgid "download all packages from remote repo" + msgstr "從遠端軟體庫下載所有軟體包" + +-#: plugins/reposync.py:63 ++#: plugins/reposync.py:64 + msgid "download only packages for this ARCH" + msgstr "只下載此 ARCH 的軟體包" + +-#: plugins/reposync.py:65 ++#: plugins/reposync.py:66 + msgid "delete local packages no longer present in repository" + msgstr "刪除已不在軟體庫提供的本機軟體包" + +-#: plugins/reposync.py:67 +-msgid "also download and uncompress comps.xml" +-msgstr "亦下載並解壓縮 comps.xml" +- +-#: plugins/reposync.py:69 ++#: plugins/reposync.py:68 + msgid "download all the metadata." + msgstr "下載所有中介資料。" + +-#: plugins/reposync.py:71 +-msgid "download only newest packages per-repo" +-msgstr "只下載每個軟體庫最新的軟體包" ++#: plugins/reposync.py:70 ++msgid "Remove packages that fail GPG signature checking after downloading" ++msgstr "" + + #: plugins/reposync.py:73 +-msgid "where to store downloaded repositories" +-msgstr "儲存下載軟體庫的位置" ++msgid "also download and uncompress comps.xml" ++msgstr "亦下載並解壓縮 comps.xml" + + #: plugins/reposync.py:75 +-msgid "Don't add the reponame to the download path." +-msgstr "不要將軟體庫名稱加進下載路徑中。" +- +-#: plugins/reposync.py:77 + msgid "" +-"where to store downloaded repository metadata. Defaults to the value of " +-"--download-path." ++"where to store downloaded repository metadata. Defaults to the value of --" ++"download-path." + msgstr "儲存下載軟體庫之中介資料的位置。預設值為 --download-path 的值。" + ++#: plugins/reposync.py:78 ++msgid "download only newest packages per-repo" ++msgstr "只下載每個軟體庫最新的軟體包" ++ + #: plugins/reposync.py:80 +-msgid "operate on source packages" +-msgstr "在來源軟體包上操作" ++msgid "Don't add the reponame to the download path." ++msgstr "不要將軟體庫名稱加進下載路徑中。" + + #: plugins/reposync.py:82 ++msgid "where to store downloaded repositories" ++msgstr "儲存下載軟體庫的位置" ++ ++#: plugins/reposync.py:84 + msgid "try to set local timestamps of local files by the one on the server" + msgstr "嘗試將本機檔案的本地時間戳設定與伺服器一致" + +-#: plugins/reposync.py:85 ++#: plugins/reposync.py:87 ++#, fuzzy ++#| msgid "operate on source packages" ++msgid "download only source packages" ++msgstr "在來源軟體包上操作" ++ ++#: plugins/reposync.py:89 + msgid "Just list urls of what would be downloaded, don't download" + msgstr "只列出會下載的 URL 而不下載" + +-#: plugins/reposync.py:109 ++#: plugins/reposync.py:113 + msgid "Can't use --norepopath with multiple repositories" + msgstr "無法在多個軟體庫使用 --norepopath" + +-#: plugins/reposync.py:127 ++#: plugins/reposync.py:132 + #, python-format + msgid "Failed to get mirror for metadata: %s" + msgstr "無法取得中介資料的鏡像站:%s" + +-#: plugins/reposync.py:144 ++#: plugins/reposync.py:149 + msgid "Failed to get mirror for the group file." + msgstr "無法取得群組檔案的鏡像站。" + ++#: plugins/reposync.py:168 ++msgid "Removing {}: {}" ++msgstr "" ++ + #: plugins/reposync.py:175 ++msgid "GPG signature check failed." ++msgstr "" ++ ++#: plugins/reposync.py:196 + msgid "Download target '{}' is outside of download path '{}'." + msgstr "下載目標「{}」在下載位置「{}」之外。" + +-#: plugins/reposync.py:190 ++#: plugins/reposync.py:211 + #, python-format + msgid "[DELETED] %s" + msgstr "[已刪除] %s" + +-#: plugins/reposync.py:192 ++#: plugins/reposync.py:213 + #, python-format + msgid "failed to delete file %s" + msgstr "無法刪除 %s 檔案" + +-#: plugins/reposync.py:201 ++#: plugins/reposync.py:222 + #, python-format + msgid "comps.xml for repository %s saved" + msgstr "已儲存 %s 軟體庫的 comps.xml" +@@ -999,67 +1228,72 @@ msgstr "已儲存 %s 軟體庫的 comps.xml" + msgid "New leaves:" + msgstr "新保留:" + +-#: plugins/versionlock.py:32 ++#: plugins/versionlock.py:33 + #, python-format + msgid "Unable to read version lock configuration: %s" + msgstr "無法讀取版本鎖設定:%s" + +-#: plugins/versionlock.py:33 ++#: plugins/versionlock.py:34 + msgid "Locklist not set" + msgstr "未設定鎖定列表" + +-#: plugins/versionlock.py:34 ++#: plugins/versionlock.py:35 + msgid "Adding versionlock on:" + msgstr "加入版本鎖於:" + +-#: plugins/versionlock.py:35 ++#: plugins/versionlock.py:36 + msgid "Adding exclude on:" + msgstr "加入排除於:" + +-#: plugins/versionlock.py:36 ++#: plugins/versionlock.py:37 + msgid "Package already locked in equivalent form:" + msgstr "版本已鎖定在下述等同格式:" + +-#: plugins/versionlock.py:37 ++#: plugins/versionlock.py:38 + msgid "Package {} is already locked" + msgstr "已鎖定 {} 軟體包" + +-#: plugins/versionlock.py:38 ++#: plugins/versionlock.py:39 + msgid "Package {} is already excluded" + msgstr "已排除 {} 軟體包" + +-#: plugins/versionlock.py:39 ++#: plugins/versionlock.py:40 + msgid "Deleting versionlock for:" + msgstr "刪除下述的版本鎖:" + +-#: plugins/versionlock.py:40 ++#: plugins/versionlock.py:41 + msgid "No package found for:" + msgstr "找不到下述的軟體包:" + +-#: plugins/versionlock.py:41 ++#: plugins/versionlock.py:42 + msgid "Excludes from versionlock plugin were not applied" + msgstr "不會套用到自 versionlock 插件排除的軟體包" + +-#: plugins/versionlock.py:42 ++#: plugins/versionlock.py:43 + msgid "Versionlock plugin: number of lock rules from file \"{}\" applied: {}" + msgstr "Versionlock 插件:已從「{}」檔案套用大量的鎖定規則:{}" + +-#: plugins/versionlock.py:43 +-msgid "Versionlock plugin: number of exclude rules from file \"{}\" applied: {}" ++#: plugins/versionlock.py:44 ++msgid "" ++"Versionlock plugin: number of exclude rules from file \"{}\" applied: {}" + msgstr "Versionlock 插件:已從「{}」檔案套用大量的排除規則:{}" + +-#: plugins/versionlock.py:44 ++#: plugins/versionlock.py:45 + msgid "Versionlock plugin: could not parse pattern:" + msgstr "Versionlock 插件:無法解析模式:" + +-#: plugins/versionlock.py:130 ++#: plugins/versionlock.py:134 + msgid "control package version locks" + msgstr "控制軟體包的版本鎖" + +-#: plugins/versionlock.py:136 ++#: plugins/versionlock.py:140 + msgid "Use package specifications as they are, do not try to parse them" + msgstr "使用其原本的軟體包規範,不要嘗試解析" + ++#: plugins/versionlock.py:160 ++msgid "Subcommand '{}' is deprecated. Use 'exclude' subcommand instead." ++msgstr "" ++ + #~ msgid "" + #~ "\n" + #~ "These repositories have been enabled automatically.\n" +-- +2.36.1 + diff --git a/SOURCES/0013-repomanage-Use-modules-only-from-repo-they-are-handl.patch b/SOURCES/0013-repomanage-Use-modules-only-from-repo-they-are-handl.patch new file mode 100644 index 0000000..1ddd4df --- /dev/null +++ b/SOURCES/0013-repomanage-Use-modules-only-from-repo-they-are-handl.patch @@ -0,0 +1,48 @@ +From e80f79b2f5e17a20065617c0b614b272dd53c57c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= +Date: Thu, 26 May 2022 07:21:45 +0200 +Subject: [PATCH] repomanage: Use modules only from repo they are handling + (RhBug:2072441) + += changelog = +msg: [repomanage] Modules are used only when they belong to target repo +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2072441 +--- + plugins/repomanage.py | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +diff --git a/plugins/repomanage.py b/plugins/repomanage.py +index 989bd78..67a6fc7 100644 +--- a/plugins/repomanage.py ++++ b/plugins/repomanage.py +@@ -66,7 +66,8 @@ class RepoManageCommand(dnf.cli.Command): + keepnum = int(self.opts.keep) # the number of items to keep + + try: +- repo_conf = self.base.repos.add_new_repo("repomanage_repo", self.base.conf, baseurl=[self.opts.path]) ++ REPOMANAGE_REPOID = "repomanage_repo" ++ repo_conf = self.base.repos.add_new_repo(REPOMANAGE_REPOID, self.base.conf, baseurl=[self.opts.path]) + # Always expire the repo, otherwise repomanage could use cached metadata and give identical results + # for multiple runs even if the actual repo changed in the meantime + repo_conf._repo.expire() +@@ -78,9 +79,13 @@ class RepoManageCommand(dnf.cli.Command): + module_packages = self.base._moduleContainer.getModulePackages() + + for module_package in module_packages: +- all_modular_artifacts.update(module_package.getArtifacts()) +- module_dict.setdefault(module_package.getNameStream(), {}).setdefault( +- module_package.getVersionNum(), []).append(module_package) ++ # Even though we load only REPOMANAGE_REPOID other modules can be loaded from system ++ # failsafe data automatically, we don't want them affecting repomanage results so ONLY ++ # use modules from REPOMANAGE_REPOID. ++ if module_package.getRepoID() == REPOMANAGE_REPOID: ++ all_modular_artifacts.update(module_package.getArtifacts()) ++ module_dict.setdefault(module_package.getNameStream(), {}).setdefault( ++ module_package.getVersionNum(), []).append(module_package) + + except dnf.exceptions.RepoError: + rpm_list = [] +-- +2.36.1 + diff --git a/SOURCES/0014-feat-repomanage-Add-new-option-oldonly.patch b/SOURCES/0014-feat-repomanage-Add-new-option-oldonly.patch new file mode 100644 index 0000000..66288c5 --- /dev/null +++ b/SOURCES/0014-feat-repomanage-Add-new-option-oldonly.patch @@ -0,0 +1,117 @@ +From eb1d6edf55c167d575ce3d16bd6349e382d05600 Mon Sep 17 00:00:00 2001 +From: Masahiro Matsuya +Date: Wed, 13 Apr 2022 18:42:03 +0900 +Subject: [PATCH] feat(repomanage): Add new option --oldonly + += changelog = +msg: repomanage: Add new option --oldonly +type: enhancement +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2034736 +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2058676 +--- + doc/repomanage.rst | 3 +++ + plugins/repomanage.py | 46 ++++++++++++++++++++++++++++++++++++++++--- + 2 files changed, 46 insertions(+), 3 deletions(-) + +diff --git a/doc/repomanage.rst b/doc/repomanage.rst +index e3171ef..3c01289 100644 +--- a/doc/repomanage.rst ++++ b/doc/repomanage.rst +@@ -47,6 +47,9 @@ The following options set what packages are displayed. These options are mutuall + ``--old`` + Show older packages (for a package or a stream show all versions except the newest one). + ++``--oldonly`` ++ Show older packages (same as --old, but exclude the newest packages even when it's included in the older stream versions). ++ + ``--new`` + Show newest packages. + +diff --git a/plugins/repomanage.py b/plugins/repomanage.py +index 67a6fc7..d23497a 100644 +--- a/plugins/repomanage.py ++++ b/plugins/repomanage.py +@@ -57,6 +57,12 @@ class RepoManageCommand(dnf.cli.Command): + def run(self): + if self.opts.new and self.opts.old: + raise dnf.exceptions.Error(_("Pass either --old or --new, not both!")) ++ if self.opts.new and self.opts.oldonly: ++ raise dnf.exceptions.Error(_("Pass either --oldonly or --new, not both!")) ++ if self.opts.old and self.opts.oldonly: ++ raise dnf.exceptions.Error(_("Pass either --old or --oldonly, not both!")) ++ if not self.opts.old and not self.opts.oldonly: ++ self.opts.new = True + + verfile = {} + pkgdict = {} +@@ -123,8 +129,7 @@ class RepoManageCommand(dnf.cli.Command): + # modular packages + keepnum_latest_stream_artifacts = set() + +- # if new +- if not self.opts.old: ++ if self.opts.new: + # regular packages + for (n, a) in pkgdict.keys(): + evrlist = pkgdict[(n, a)] +@@ -146,7 +151,6 @@ class RepoManageCommand(dnf.cli.Command): + for stream in streams_by_version[i]: + keepnum_latest_stream_artifacts.update(set(stream.getArtifacts())) + +- + if self.opts.old: + # regular packages + for (n, a) in pkgdict.keys(): +@@ -169,6 +173,40 @@ class RepoManageCommand(dnf.cli.Command): + for stream in streams_by_version[i]: + keepnum_latest_stream_artifacts.update(set(stream.getArtifacts())) + ++ if self.opts.oldonly: ++ # regular packages ++ for (n, a) in pkgdict.keys(): ++ evrlist = pkgdict[(n, a)] ++ ++ oldevrs = evrlist[:-keepnum] ++ ++ for package in oldevrs: ++ nevra = self._package_to_nevra(package) ++ for fpkg in verfile[nevra]: ++ outputpackages.append(fpkg) ++ ++ # modular packages ++ keepnum_newer_stream_artifacts = set() ++ ++ for streams_by_version in module_dict.values(): ++ sorted_stream_versions = sorted(streams_by_version.keys()) ++ ++ new_sorted_stream_versions = sorted_stream_versions[-keepnum:] ++ ++ for i in new_sorted_stream_versions: ++ for stream in streams_by_version[i]: ++ keepnum_newer_stream_artifacts.update(set(stream.getArtifacts())) ++ ++ for streams_by_version in module_dict.values(): ++ sorted_stream_versions = sorted(streams_by_version.keys()) ++ ++ old_sorted_stream_versions = sorted_stream_versions[:-keepnum] ++ ++ for i in old_sorted_stream_versions: ++ for stream in streams_by_version[i]: ++ for artifact in stream.getArtifacts(): ++ if artifact not in keepnum_newer_stream_artifacts: ++ keepnum_latest_stream_artifacts.add(artifact) + + modular_packages = [self._package_to_path(x) for x in query.filter(pkg__eq=query.filter(nevra_strict=keepnum_latest_stream_artifacts)).available()] + outputpackages = outputpackages + modular_packages +@@ -183,6 +221,8 @@ class RepoManageCommand(dnf.cli.Command): + def set_argparser(parser): + parser.add_argument("-o", "--old", action="store_true", + help=_("Print the older packages")) ++ parser.add_argument("-O", "--oldonly", action="store_true", ++ help=_("Print the older packages. Exclude the newest packages.")) + parser.add_argument("-n", "--new", action="store_true", + help=_("Print the newest packages")) + parser.add_argument("-s", "--space", action="store_true", +-- +2.36.1 + diff --git a/SOURCES/0015-Skip-all-non-rpm-tsi-for-transaction_action-plugins-.patch b/SOURCES/0015-Skip-all-non-rpm-tsi-for-transaction_action-plugins-.patch new file mode 100644 index 0000000..0ebf2f6 --- /dev/null +++ b/SOURCES/0015-Skip-all-non-rpm-tsi-for-transaction_action-plugins-.patch @@ -0,0 +1,28 @@ +From b4e0cafe70680db24ab3611e0fd4dd95c8311ccc Mon Sep 17 00:00:00 2001 +From: Jaroslav Mracek +Date: Tue, 26 Apr 2022 11:23:41 +0200 +Subject: [PATCH] Skip all non rpm tsi for transaction_action plugins + (rhbug:2023652) + +It prevent traceback in output when reason change is in transaction +--- + plugins/post-transaction-actions.py | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/plugins/post-transaction-actions.py b/plugins/post-transaction-actions.py +index 05a7841..1520c26 100644 +--- a/plugins/post-transaction-actions.py ++++ b/plugins/post-transaction-actions.py +@@ -115,6 +115,9 @@ class PostTransactionActions(dnf.Plugin): + in_ts_items.append(ts_item) + elif ts_item.action in dnf.transaction.BACKWARD_ACTIONS: + out_ts_items.append(ts_item) ++ else: ++ # The action is not rpm change. It can be a reason change, therefore we can skip that item ++ continue + all_ts_items.append(ts_item) + + commands_to_run = [] +-- +2.36.1 + diff --git a/SOURCES/0016-Fix-dnf-copr-enable-on-Fedora-35.patch b/SOURCES/0016-Fix-dnf-copr-enable-on-Fedora-35.patch new file mode 100644 index 0000000..3fad14d --- /dev/null +++ b/SOURCES/0016-Fix-dnf-copr-enable-on-Fedora-35.patch @@ -0,0 +1,28 @@ +From 76d7c9e2d2fa052cc6d9fab08af51c603d7e20e5 Mon Sep 17 00:00:00 2001 +From: Pavel Raiskup +Date: Fri, 16 Jul 2021 12:52:03 +0200 +Subject: [PATCH] Fix 'dnf copr enable' on Fedora 35 + +The output from linux_distribution() changed so it returns: +>>> distro.linux_distribution() +('Fedora Linux', '35', '') +--- + plugins/copr.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/plugins/copr.py b/plugins/copr.py +index 7fc6c6f..235989b 100644 +--- a/plugins/copr.py ++++ b/plugins/copr.py +@@ -430,7 +430,7 @@ Bugzilla. In case of problems, contact the owner of this repository. + dist = linux_distribution() + # Get distribution architecture + distarch = self.base.conf.substitutions['basearch'] +- if "Fedora" in dist: ++ if any([name in dist for name in ["Fedora", "Fedora Linux"]]): + if "Rawhide" in dist: + chroot = ("fedora-rawhide-" + distarch) + # workaround for enabling repos in Rawhide when VERSION in os-release +-- +2.36.1 + diff --git a/SOURCES/0017-Disable-dnf-playground-command.patch b/SOURCES/0017-Disable-dnf-playground-command.patch new file mode 100644 index 0000000..8016028 --- /dev/null +++ b/SOURCES/0017-Disable-dnf-playground-command.patch @@ -0,0 +1,37 @@ +From 517f0093218e3c23097d7e7e3f3d65930059ef82 Mon Sep 17 00:00:00 2001 +From: Silvie Chlupova +Date: Thu, 12 Aug 2021 16:24:56 +0200 +Subject: [PATCH] Disable dnf playground command + += changelog = +msg: playground command doesn't work +type: bugfix +related: https://bugzilla.redhat.com/show_bug.cgi?id=1955907 +--- + plugins/copr.py | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/plugins/copr.py b/plugins/copr.py +index 235989b..e1e7018 100644 +--- a/plugins/copr.py ++++ b/plugins/copr.py +@@ -122,6 +122,8 @@ class CoprCommand(dnf.cli.Command): + parser.add_argument('arg', nargs='*') + + def configure(self): ++ if self.cli.command.opts.command != "copr": ++ return + copr_hub = None + copr_plugin_config = ConfigParser() + config_files = [] +@@ -680,6 +682,7 @@ class PlaygroundCommand(CoprCommand): + choices=['enable', 'disable', 'upgrade']) + + def run(self): ++ raise dnf.exceptions.Error("Playground is temporarily unsupported") + subcommand = self.opts.subcommand[0] + chroot = self._guess_chroot() + if subcommand == "enable": +-- +2.36.1 + diff --git a/SOURCES/0018-Fix-baseurl-for-centos-stream-chroot.patch b/SOURCES/0018-Fix-baseurl-for-centos-stream-chroot.patch new file mode 100644 index 0000000..f9f84bc --- /dev/null +++ b/SOURCES/0018-Fix-baseurl-for-centos-stream-chroot.patch @@ -0,0 +1,29 @@ +From 7f9d6809f7cb9ac48f11ef02a4e7c0cadeef9594 Mon Sep 17 00:00:00 2001 +From: Silvie Chlupova +Date: Wed, 22 Sep 2021 22:35:21 +0200 +Subject: [PATCH] Fix baseurl for centos stream chroot + += changelog = +msg: dnf copr enable on CentOS Stream should enable centos stream chroot, not epel 8 +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1994154 +--- + plugins/copr.py | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/plugins/copr.py b/plugins/copr.py +index e1e7018..c216408 100644 +--- a/plugins/copr.py ++++ b/plugins/copr.py +@@ -457,6 +457,8 @@ Bugzilla. In case of problems, contact the owner of this repository. + chroot = ("opensuse-tumbleweed-{}".format(distarch)) + else: + chroot = ("opensuse-leap-{0}-{1}".format(dist[1], distarch)) ++ elif "CentOS Stream" in dist: ++ chroot = ("centos-stream-{0}-{1}".format(dist[1], distarch)) + else: + chroot = ("epel-%s-x86_64" % dist[1].split(".", 1)[0]) + return chroot +-- +2.36.1 + diff --git a/SOURCES/0019-Silence-a-deprecation-warning-in-plugins-copr.py.patch b/SOURCES/0019-Silence-a-deprecation-warning-in-plugins-copr.py.patch new file mode 100644 index 0000000..09efd6c --- /dev/null +++ b/SOURCES/0019-Silence-a-deprecation-warning-in-plugins-copr.py.patch @@ -0,0 +1,42 @@ +From a07db6dcd669eecb27b7ddbf1b85cd842bdcc35b Mon Sep 17 00:00:00 2001 +From: Otto Urpelainen +Date: Wed, 6 Oct 2021 22:08:54 +0300 +Subject: [PATCH] Silence a deprecation warning in plugins/copr.py + +In version 1.6.0, the 'distro' package deprecated linux_distribution(). +This causes a deprecation warning to printed to stdout +every time the user calls the copr plugin. + +In order to avoid the printout +and to protect against possible removal in the future, +the function is reimplemented +using still supported functions from 'distro'. + += changelog = +msg: [copr] Avoid using deprecated function distro.linux_distribution() +type: bugfix +resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2011550 +--- + plugins/copr.py | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/plugins/copr.py b/plugins/copr.py +index c216408..9f597dd 100644 +--- a/plugins/copr.py ++++ b/plugins/copr.py +@@ -38,7 +38,11 @@ import rpm + # If that fails, attempt to import the deprecated implementation + # from the platform module. + try: +- from distro import linux_distribution, os_release_attr ++ from distro import name, version, codename, os_release_attr ++ ++ # Re-implement distro.linux_distribution() to avoid a deprecation warning ++ def linux_distribution(): ++ return (name(), version(), codename()) + except ImportError: + def os_release_attr(_): + return "" +-- +2.36.1 + diff --git a/SOURCES/0020-Shorter-verification-that-the-project-exists.patch b/SOURCES/0020-Shorter-verification-that-the-project-exists.patch new file mode 100644 index 0000000..37ca545 --- /dev/null +++ b/SOURCES/0020-Shorter-verification-that-the-project-exists.patch @@ -0,0 +1,49 @@ +From bf230d570763acc6ccd4f4b3951f4b8325a8e4b8 Mon Sep 17 00:00:00 2001 +From: Silvie Chlupova +Date: Fri, 3 Sep 2021 15:45:43 +0200 +Subject: [PATCH] Shorter verification that the project exists + +--- + plugins/copr.py | 16 ++++++---------- + 1 file changed, 6 insertions(+), 10 deletions(-) + +diff --git a/plugins/copr.py b/plugins/copr.py +index 9f597dd..1539c0d 100644 +--- a/plugins/copr.py ++++ b/plugins/copr.py +@@ -70,8 +70,10 @@ NO = set([_('no'), _('n'), '']) + + if PY3: + from configparser import ConfigParser, NoOptionError, NoSectionError ++ from urllib.request import urlopen, HTTPError + else: + from ConfigParser import ConfigParser, NoOptionError, NoSectionError ++ from urllib2 import urlopen, HTTPError + + @dnf.plugin.register_command + class CoprCommand(dnf.cli.Command): +@@ -478,17 +480,11 @@ Bugzilla. In case of problems, contact the owner of this repository. + if os.path.exists(repo_filename): + os.remove(repo_filename) + if '404' in str(e): +- if PY3: +- import urllib.request +- try: +- res = urllib.request.urlopen(self.copr_url + "/coprs/" + project_name) +- status_code = res.getcode() +- except urllib.error.HTTPError as e: +- status_code = e.getcode() +- else: +- import urllib +- res = urllib.urlopen(self.copr_url + "/coprs/" + project_name) ++ try: ++ res = urlopen(self.copr_url + "/coprs/" + project_name) + status_code = res.getcode() ++ except HTTPError as e: ++ status_code = e.getcode() + if str(status_code) != '404': + raise dnf.exceptions.Error(_("This repository does not have" + " any builds yet so you cannot enable it now.")) +-- +2.36.1 + diff --git a/SOURCES/0021-Better-error-message-for-dnf-copr-enable.patch b/SOURCES/0021-Better-error-message-for-dnf-copr-enable.patch new file mode 100644 index 0000000..43368d0 --- /dev/null +++ b/SOURCES/0021-Better-error-message-for-dnf-copr-enable.patch @@ -0,0 +1,114 @@ +From 1d097d0e4ecfef78aec5d760278b44d5f3192cdc Mon Sep 17 00:00:00 2001 +From: Silvie Chlupova +Date: Mon, 2 Aug 2021 15:04:17 +0200 +Subject: [PATCH] Better error message for dnf copr enable + += changelog = +msg: show better error message if the command dnf copr enable fails +type: enhancement +--- + plugins/copr.py | 63 +++++++++++++++++++++++++++++++------------------ + 1 file changed, 40 insertions(+), 23 deletions(-) + +diff --git a/plugins/copr.py b/plugins/copr.py +index 1539c0d..721c010 100644 +--- a/plugins/copr.py ++++ b/plugins/copr.py +@@ -27,6 +27,8 @@ import re + import shutil + import stat + import sys ++import base64 ++import json + + from dnfpluginscore import _, logger + import dnf +@@ -70,10 +72,10 @@ NO = set([_('no'), _('n'), '']) + + if PY3: + from configparser import ConfigParser, NoOptionError, NoSectionError +- from urllib.request import urlopen, HTTPError ++ from urllib.request import urlopen, HTTPError, URLError + else: + from ConfigParser import ConfigParser, NoOptionError, NoSectionError +- from urllib2 import urlopen, HTTPError ++ from urllib2 import urlopen, HTTPError, URLError + + @dnf.plugin.register_command + class CoprCommand(dnf.cli.Command): +@@ -475,28 +477,40 @@ Bugzilla. In case of problems, contact the owner of this repository. + api_path = "/coprs/{0}/repo/{1}/dnf.repo?arch={2}".format(project_name, short_chroot, arch) + + try: +- f = self.base.urlopen(self.copr_url + api_path, mode='w+') +- except IOError as e: ++ response = urlopen(self.copr_url + api_path) + if os.path.exists(repo_filename): + os.remove(repo_filename) +- if '404' in str(e): +- try: +- res = urlopen(self.copr_url + "/coprs/" + project_name) +- status_code = res.getcode() +- except HTTPError as e: +- status_code = e.getcode() +- if str(status_code) != '404': +- raise dnf.exceptions.Error(_("This repository does not have" +- " any builds yet so you cannot enable it now.")) +- else: +- raise dnf.exceptions.Error(_("Such repository does not exist.")) +- raise +- +- for line in f: +- if re.match(r"\[copr:", line): +- repo_filename = os.path.join(self.base.conf.get_reposdir, +- "_" + line[1:-2] + ".repo") +- break ++ except HTTPError as e: ++ if e.code != 404: ++ error_msg = _("Request to {0} failed: {1} - {2}").format(self.copr_url + api_path, e.code, str(e)) ++ raise dnf.exceptions.Error(error_msg) ++ error_msg = _("It wasn't possible to enable this project.\n") ++ error_data = e.headers.get("Copr-Error-Data") ++ if error_data: ++ error_data_decoded = base64.b64decode(error_data).decode('utf-8') ++ error_data_decoded = json.loads(error_data_decoded) ++ error_msg += _("Repository '{0}' does not exist in project '{1}'.").format( ++ '-'.join(self.chroot_parts), project_name) ++ if error_data_decoded.get("available chroots"): ++ error_msg += _("\nAvailable repositories: ") + ', '.join( ++ "'{}'".format(x) for x in error_data_decoded["available chroots"]) ++ error_msg += _("\n\nIf you want to enable a non-default repository, use the following command:\n" ++ " 'dnf copr enable {0} '\n" ++ "But note that the installed repo file will likely need a manual " ++ "modification.").format(project_name) ++ raise dnf.exceptions.Error(error_msg) ++ else: ++ error_msg += _("Project {0} does not exist.").format(project_name) ++ raise dnf.exceptions.Error(error_msg) ++ except URLError as e: ++ error_msg = _("Failed to connect to {0}: {1}").format(self.copr_url + api_path, e.reason.strerror) ++ raise dnf.exceptions.Error(error_msg) ++ ++ # Try to read the first line, and detect the repo_filename from that (override the repo_filename value). ++ first_line = response.readline() ++ line = first_line.decode("utf-8") ++ if re.match(r"\[copr:", line): ++ repo_filename = os.path.join(self.base.conf.get_reposdir, "_" + line[1:-2] + ".repo") + + # if using default hub, remove possible old repofile + if self.copr_url == self.default_url: +@@ -507,7 +521,10 @@ Bugzilla. In case of problems, contact the owner of this repository. + if os.path.exists(old_repo_filename): + os.remove(old_repo_filename) + +- shutil.copy2(f.name, repo_filename) ++ with open(repo_filename, 'wb') as f: ++ f.write(first_line) ++ for line in response.readlines(): ++ f.write(line) + os.chmod(repo_filename, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH) + + def _runtime_deps_warning(self, copr_username, copr_projectname): +-- +2.36.1 + diff --git a/SOURCES/0022-copr-allow-specifying-protocol-as-part-of-hub.patch b/SOURCES/0022-copr-allow-specifying-protocol-as-part-of-hub.patch new file mode 100644 index 0000000..802fe2d --- /dev/null +++ b/SOURCES/0022-copr-allow-specifying-protocol-as-part-of-hub.patch @@ -0,0 +1,33 @@ +From b2d019658ebb40606e1a9efcb2233a8e38834410 Mon Sep 17 00:00:00 2001 +From: Alexander Sosedkin +Date: Thu, 7 Oct 2021 19:08:47 +0200 +Subject: [PATCH] copr: allow specifying protocol as part of --hub + +This way it doesn't try to connect to +https://http//url if --hub started with http://. +--- + plugins/copr.py | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/plugins/copr.py b/plugins/copr.py +index 721c010..297210b 100644 +--- a/plugins/copr.py ++++ b/plugins/copr.py +@@ -198,8 +198,12 @@ class CoprCommand(dnf.cli.Command): + self.copr_hostname += ":" + port + + if not self.copr_url: +- self.copr_hostname = copr_hub +- self.copr_url = self.default_protocol + "://" + copr_hub ++ if '://' not in copr_hub: ++ self.copr_hostname = copr_hub ++ self.copr_url = self.default_protocol + "://" + copr_hub ++ else: ++ self.copr_hostname = copr_hub.split('://', 1)[1] ++ self.copr_url = copr_hub + + def _read_config_item(self, config, hub, section, default): + try: +-- +2.36.1 + diff --git a/SOURCES/0023-copr-Guess-EPEL-chroots-for-CentOS-Stream-RhBug-2058.patch b/SOURCES/0023-copr-Guess-EPEL-chroots-for-CentOS-Stream-RhBug-2058.patch new file mode 100644 index 0000000..55d370c --- /dev/null +++ b/SOURCES/0023-copr-Guess-EPEL-chroots-for-CentOS-Stream-RhBug-2058.patch @@ -0,0 +1,37 @@ +From 4b0001d0f13598369ec2e6a800af519e8c3a334c Mon Sep 17 00:00:00 2001 +From: Carl George +Date: Mon, 27 Jun 2022 23:12:05 -0500 +Subject: [PATCH] copr: Guess EPEL chroots for CentOS Stream (RhBug:2058471) + +Packages built in epel-9 chroots are almost always compatible with +CentOS Stream 9. Not having the copr plugin guess this chroot is +causing user friction. Users are creating epel-9 chroots expecting them +to work for both CentOS Stream 9 and RHEL 9. When they get reports +about `dnf copr enable` not working, they try to add a centos-stream-9 +chroot, only to discover the dependencies they need from EPEL are not +available. + +Instead of making the majority of CentOS Stream users include an +explicit chroot argument, let's reserve that workaround only for the +people that don't want their CentOS Stream systems picking the EPEL +chroot. +--- + plugins/copr.py | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/plugins/copr.py b/plugins/copr.py +index 297210b..16946b7 100644 +--- a/plugins/copr.py ++++ b/plugins/copr.py +@@ -469,8 +469,6 @@ Bugzilla. In case of problems, contact the owner of this repository. + chroot = ("opensuse-tumbleweed-{}".format(distarch)) + else: + chroot = ("opensuse-leap-{0}-{1}".format(dist[1], distarch)) +- elif "CentOS Stream" in dist: +- chroot = ("centos-stream-{0}-{1}".format(dist[1], distarch)) + else: + chroot = ("epel-%s-x86_64" % dist[1].split(".", 1)[0]) + return chroot +-- +2.36.1 + diff --git a/SPECS/dnf-plugins-core.spec b/SPECS/dnf-plugins-core.spec index 78f18bc..1f2ae55 100644 --- a/SPECS/dnf-plugins-core.spec +++ b/SPECS/dnf-plugins-core.spec @@ -34,7 +34,7 @@ Name: dnf-plugins-core Version: 4.0.21 -Release: 10%{?dist} +Release: 14%{?dist} Summary: Core Plugins for DNF License: GPLv2+ URL: https://github.com/rpm-software-management/dnf-plugins-core @@ -50,6 +50,19 @@ Patch8: 0008-versionlock-fix-multi-pkg-lock-RhBug2013324.patch Patch9: 0009-Update-documentation-for-adding-specific-version-RhBug2013332.patch Patch10: 0010-needs-restarting-Fix-wrong-boot-time-RhBug1960437.patch Patch11: 0011-Add-new-command-modulesync-RhBug1868047.patch +Patch12: 0012-Update-translations-RhBug-2017271.patch +Patch13: 0013-repomanage-Use-modules-only-from-repo-they-are-handl.patch +Patch14: 0014-feat-repomanage-Add-new-option-oldonly.patch +Patch15: 0015-Skip-all-non-rpm-tsi-for-transaction_action-plugins-.patch +Patch16: 0016-Fix-dnf-copr-enable-on-Fedora-35.patch +Patch17: 0017-Disable-dnf-playground-command.patch +Patch18: 0018-Fix-baseurl-for-centos-stream-chroot.patch +Patch19: 0019-Silence-a-deprecation-warning-in-plugins-copr.py.patch +Patch20: 0020-Shorter-verification-that-the-project-exists.patch +Patch21: 0021-Better-error-message-for-dnf-copr-enable.patch +Patch22: 0022-copr-allow-specifying-protocol-as-part-of-hub.patch +Patch23: 0023-copr-Guess-EPEL-chroots-for-CentOS-Stream-RhBug-2058.patch + BuildArch: noarch BuildRequires: cmake @@ -793,6 +806,24 @@ ln -sf %{_mandir}/man1/%{yum_utils_subpackage_name}.1.gz %{buildroot}%{_mandir}/ %endif %changelog +* Tue Jul 19 2022 Lukas Hrazky - 4.0.21-14 +- [copr] Guess EPEL chroots for CentOS Stream + +* Tue Jun 14 2022 Lukas Hrazky - 4.0.21-13 +- [copr] Fix 'dnf copr enable' on Fedora 35 +- [copr] Disable dnf playground command +- [copr] Fix baseurl for centos stream chroot +- [copr] Silence a deprecation warning in plugins/copr.py +- [copr] Shorter verification that the project exists +- [copr] Better error message for dnf copr enable +- [copr] allow specifying protocol as part of --hub + +* Tue Jun 14 2022 Lukas Hrazky - 4.0.21-12 +- [repomanage] Use modules only from repo they are handling +- [repomanage] Add new option --oldonly +- Skip all non rpm tsi for transaction_action plugins +- Update translations + * Fri Jan 14 2022 Pavla Kratochvilova - 4.0.21-10 - Rebuild with new release number