[pacman-dev] [PATCH] Use the plural features of gettext

Dan McGee dan at archlinux.org
Tue Jul 27 16:52:44 EDT 2010


Gettext has this whole 'Plural-Form' thing that until now we haven't taken
advantage of. Given that not all languages have the same plural form rules
as English, take advantage of it by defining a new _n() macro which will
normally define to ngettext(), and adjust a few messages as an example of
how to use.

There are surely other places where we do singular/plural logic without me
having noticed, so further patches are welcome to fix those up too.

Signed-off-by: Dan McGee <dan at archlinux.org>
---
 src/pacman/callback.c |   13 +++++++++----
 src/pacman/query.c    |    6 ++++--
 src/pacman/util.h     |    2 ++
 3 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/src/pacman/callback.c b/src/pacman/callback.c
index 23804d7..3696d3c 100644
--- a/src/pacman/callback.c
+++ b/src/pacman/callback.c
@@ -283,11 +283,16 @@ void cb_trans_conv(pmtransconv_t event, void *data1, void *data2,
 					namelist = alpm_list_add(namelist,
 							(char *)alpm_pkg_get_name(i->data));
 				}
-				printf(_(":: the following package(s) cannot be upgraded due to "
-						"unresolvable dependencies:\n"));
+				printf(_n(
+							":: The following package cannot be upgraded due to unresolvable dependencies:\n",
+							":: The following packages cannot be upgraded due to unresolvable dependencies:\n",
+							alpm_list_count(namelist)));
 				list_display("     ", namelist);
-				*response = noyes(_("\nDo you want to skip the above "
-							"package(s) for this upgrade?"));
+				printf("\n");
+				*response = noyes(_n(
+							"Do you want to skip the above package for this upgrade?",
+							"Do you want to skip the above packages for this upgrade?",
+							alpm_list_count(namelist)));
 				alpm_list_free(namelist);
 			}
 			break;
diff --git a/src/pacman/query.c b/src/pacman/query.c
index 7f064f2..5538e81 100644
--- a/src/pacman/query.c
+++ b/src/pacman/query.c
@@ -406,8 +406,10 @@ static int check(pmpkg_t *pkg)
 	}
 
 	if(!config->quiet) {
-		printf(_("%s: %d total files, %d missing file(s)\n"),
-				pkgname, allfiles, errors);
+		printf(_n("%s: %d total file, ", "%s: %d total files, ", allfiles),
+				pkgname, allfiles);
+		printf(_n("%d missing file\n", "%d missing files\n", errors),
+				errors);
 	}
 
 	return(errors != 0 ? 1 : 0);
diff --git a/src/pacman/util.h b/src/pacman/util.h
index bbf4382..d85ba7b 100644
--- a/src/pacman/util.h
+++ b/src/pacman/util.h
@@ -30,8 +30,10 @@
 #include <libintl.h> /* here so it doesn't need to be included elsewhere */
 /* define _() as shortcut for gettext() */
 #define _(str) gettext(str)
+#define _n(str1, str2, ct) ngettext(str1, str2, ct)
 #else
 #define _(str) str
+#define _n(str1, str2, ct) (ct == 1 ? str1 : str2)
 #endif
 
 /* update speed for the fill_progress based functions */
-- 
1.7.2



More information about the pacman-dev mailing list