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
