Hello

This patch add ngettext() support to allow localization with plural
form, e.g. in folded line count message.

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.
From 672a2c7562c8e1a31ae776ad2027e402d3a5217c Mon Sep 17 00:00:00 2001
From: Sergey Alyoshin <[email protected]>
Date: Wed, 3 Aug 2016 14:55:23 +0300
Subject: [PATCH] Add ngettext() support

---
 src/GvimExt/gvimext.cpp | 10 ++++++++++
 src/evalfunc.c          |  3 ++-
 src/fold.c              |  4 +++-
 src/os_win32.c          |  2 ++
 src/vim.h               |  3 +++
 5 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/src/GvimExt/gvimext.cpp b/src/GvimExt/gvimext.cpp
index b682b74..47e4b18 100644
--- a/src/GvimExt/gvimext.cpp
+++ b/src/GvimExt/gvimext.cpp
@@ -258,6 +258,16 @@ null_libintl_gettext(const char *msgid)
 }
 
     static char *
+null_libintl_ngettext(const char *msgid, const char *msgid_plural,
+			unsigned long int n)
+{
+    if (n == 1)
+	return (char *)msgid;
+    else
+	return (char *)msgid_plur;
+}
+
+    static char *
 null_libintl_bindtextdomain(const char * /* domainname */, const char * /* dirname */)
 {
     return NULL;
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 68a8b16..f41903c 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -3478,7 +3478,8 @@ f_foldtext(typval_T *argvars UNUSED, typval_T *rettv)
 		    s = skipwhite(s + 1);
 	    }
 	}
-	txt = _("+-%s%3ld lines: ");
+	txt = ngettext("+-%s%3ld line: ", "+-%s%3ld lines: ",
+			(long)(foldend - foldstart + 1));
 	r = alloc((unsigned)(STRLEN(txt)
 		    + STRLEN(dashes)	    /* for %s */
 		    + 20		    /* for %3ld */
diff --git a/src/fold.c b/src/fold.c
index 35ceceb..7ad9b63 100644
--- a/src/fold.c
+++ b/src/fold.c
@@ -1960,7 +1960,9 @@ get_foldtext(
     if (text == NULL)
 #endif
     {
-	sprintf((char *)buf, _("+--%3ld lines folded "),
+	sprintf((char *)buf, ngettext("+--%3ld line folded ",
+						    "+--%3ld lines folded ",
+						    (long)(lnume - lnum + 1)),
 						    (long)(lnume - lnum + 1));
 	text = buf;
     }
diff --git a/src/os_win32.c b/src/os_win32.c
index 7122177..797454a 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -478,6 +478,8 @@ static char *null_libintl_bind_textdomain_codeset(const char *, const char *);
 
 static HINSTANCE hLibintlDLL = NULL;
 char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext;
+char *(*dyn_libintl_ngettext)(const char *, const char *, unsigned long int n)
+						= null_libintl_ngettext;
 char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain;
 char *(*dyn_libintl_bindtextdomain)(const char *, const char *)
 						= null_libintl_bindtextdomain;
diff --git a/src/vim.h b/src/vim.h
index 18c3ff8..9d310a6 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -561,6 +561,7 @@ typedef unsigned long u8char_T;	    /* long should be 32 bits or more */
 # endif
 /* These are in os_win32.c */
 extern char *(*dyn_libintl_gettext)(const char *msgid);
+extern char *(*dyn_libintl_ngettext)(const char *msgid, const char *msgid_plural, unsigned long int n);
 extern char *(*dyn_libintl_bindtextdomain)(const char *domainname, const char *dirname);
 extern char *(*dyn_libintl_bind_textdomain_codeset)(const char *domainname, const char *codeset);
 extern char *(*dyn_libintl_textdomain)(const char *domainname);
@@ -574,6 +575,7 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
 #ifdef FEAT_GETTEXT
 # ifdef DYNAMIC_GETTEXT
 #  define _(x) (*dyn_libintl_gettext)((char *)(x))
+#  define ngettext(x, xs, n) (*dyn_libintl_ngettext)((char *)(x), (char *)(xs), n)
 #  define N_(x) x
 #  define bindtextdomain(domain, dir) (*dyn_libintl_bindtextdomain)((domain), (dir))
 #  define bind_textdomain_codeset(domain, codeset) (*dyn_libintl_bind_textdomain_codeset)((domain), (codeset))
@@ -592,6 +594,7 @@ extern char *(*dyn_libintl_textdomain)(const char *domainname);
 # endif
 #else
 # define _(x) ((char *)(x))
+# define ngettext(x, xs, n) ((n == 1)?(char *)(x):(char *)(xs))
 # define N_(x) x
 # ifdef bindtextdomain
 #  undef bindtextdomain
-- 
2.1.4

Raspunde prin e-mail lui