Patch 7.4.2152
Problem:    No proper translation of messages with a count.
Solution:   Use ngettext(). (Sergey Alyoshin)
Files:      src/evalfunc.c, src/fold.c, src/os_win32.c, src/screen.c, src/vim.h


*** ../vim-7.4.2151/src/evalfunc.c      2016-08-01 15:40:24.179878441 +0200
--- src/evalfunc.c      2016-08-03 21:49:31.786227537 +0200
***************
*** 3448,3453 ****
--- 3448,3454 ----
      char_u    *r;
      int               len;
      char      *txt;
+     long      count;
  #endif
  
      rettv->v_type = VAR_STRING;
***************
*** 3478,3491 ****
                    s = skipwhite(s + 1);
            }
        }
!       txt = _("+-%s%3ld lines: ");
        r = alloc((unsigned)(STRLEN(txt)
                    + STRLEN(dashes)        /* for %s */
                    + 20                    /* for %3ld */
                    + STRLEN(s)));          /* concatenated */
        if (r != NULL)
        {
!           sprintf((char *)r, txt, dashes, (long)(foldend - foldstart + 1));
            len = (int)STRLEN(r);
            STRCAT(r, s);
            /* remove 'foldmarker' and 'commentstring' */
--- 3479,3493 ----
                    s = skipwhite(s + 1);
            }
        }
!       count = (long)(foldend - foldstart + 1);
!       txt = ngettext("+-%s%3ld line: ", "+-%s%3ld lines: ", count);
        r = alloc((unsigned)(STRLEN(txt)
                    + STRLEN(dashes)        /* for %s */
                    + 20                    /* for %3ld */
                    + STRLEN(s)));          /* concatenated */
        if (r != NULL)
        {
!           sprintf((char *)r, txt, dashes, count);
            len = (int)STRLEN(r);
            STRCAT(r, s);
            /* remove 'foldmarker' and 'commentstring' */
***************
*** 3505,3511 ****
  #ifdef FEAT_FOLDING
      linenr_T  lnum;
      char_u    *text;
!     char_u    buf[51];
      foldinfo_T  foldinfo;
      int               fold_count;
  #endif
--- 3507,3513 ----
  #ifdef FEAT_FOLDING
      linenr_T  lnum;
      char_u    *text;
!     char_u    buf[FOLD_TEXT_LEN];
      foldinfo_T  foldinfo;
      int               fold_count;
  #endif
***************
*** 3520,3527 ****
      fold_count = foldedCount(curwin, lnum, &foldinfo);
      if (fold_count > 0)
      {
!       text = get_foldtext(curwin, lnum, lnum + fold_count - 1,
!                                                             &foldinfo, buf);
        if (text == buf)
            text = vim_strsave(text);
        rettv->vval.v_string = text;
--- 3522,3528 ----
      fold_count = foldedCount(curwin, lnum, &foldinfo);
      if (fold_count > 0)
      {
!       text = get_foldtext(curwin, lnum, lnum + fold_count - 1, &foldinfo, 
buf);
        if (text == buf)
            text = vim_strsave(text);
        rettv->vval.v_string = text;
*** ../vim-7.4.2151/src/fold.c  2016-07-01 18:16:47.493936250 +0200
--- src/fold.c  2016-08-03 21:49:04.982474748 +0200
***************
*** 1853,1860 ****
  /* get_foldtext() {{{2 */
  /*
   * Return the text for a closed fold at line "lnum", with last line "lnume".
!  * When 'foldtext' isn't set puts the result in "buf[51]".  Otherwise the
!  * result is in allocated memory.
   */
      char_u *
  get_foldtext(
--- 1853,1860 ----
  /* get_foldtext() {{{2 */
  /*
   * Return the text for a closed fold at line "lnum", with last line "lnume".
!  * When 'foldtext' isn't set puts the result in "buf[FOLD_TEXT_LEN]".
!  * Otherwise the result is in allocated memory.
   */
      char_u *
  get_foldtext(
***************
*** 1960,1967 ****
      if (text == NULL)
  #endif
      {
!       sprintf((char *)buf, _("+--%3ld lines folded "),
!                                                   (long)(lnume - lnum + 1));
        text = buf;
      }
      return text;
--- 1960,1971 ----
      if (text == NULL)
  #endif
      {
!       long count = (long)(lnume - lnum + 1);
! 
!       vim_snprintf((char *)buf, FOLD_TEXT_LEN,
!                    ngettext("+--%3ld line folded ",
!                                              "+--%3ld lines folded ", count),
!                    count);
        text = buf;
      }
      return text;
*** ../vim-7.4.2151/src/os_win32.c      2016-08-03 20:54:53.360238783 +0200
--- src/os_win32.c      2016-08-03 21:54:38.807398375 +0200
***************
*** 472,483 ****
--- 472,486 ----
  # endif
  /* Dummy functions */
  static char *null_libintl_gettext(const char *);
+ static char *null_libintl_ngettext(const char *, const char *, unsigned long 
n);
  static char *null_libintl_textdomain(const char *);
  static char *null_libintl_bindtextdomain(const char *, const char *);
  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 n)
+                                               = null_libintl_ngettext;
  char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain;
  char *(*dyn_libintl_bindtextdomain)(const char *, const char *)
                                                = null_libintl_bindtextdomain;
***************
*** 495,500 ****
--- 498,504 ----
      } libintl_entry[] =
      {
        {"gettext", (FARPROC*)&dyn_libintl_gettext},
+       {"ngettext", (FARPROC*)&dyn_libintl_ngettext},
        {"textdomain", (FARPROC*)&dyn_libintl_textdomain},
        {"bindtextdomain", (FARPROC*)&dyn_libintl_bindtextdomain},
        {NULL, NULL}
***************
*** 553,558 ****
--- 557,563 ----
        FreeLibrary(hLibintlDLL);
      hLibintlDLL                       = NULL;
      dyn_libintl_gettext               = null_libintl_gettext;
+     dyn_libintl_ngettext      = null_libintl_ngettext;
      dyn_libintl_textdomain    = null_libintl_textdomain;
      dyn_libintl_bindtextdomain        = null_libintl_bindtextdomain;
      dyn_libintl_bind_textdomain_codeset = 
null_libintl_bind_textdomain_codeset;
***************
*** 566,571 ****
--- 571,586 ----
  }
  
  /*ARGSUSED*/
+     static char *
+ null_libintl_ngettext(
+       const char *msgid,
+       const char *msgid_plural,
+       unsigned long n)
+ {
+     return n == 1 ? msgid : msgid_plural;
+ }
+ 
+ /*ARGSUSED*/
      static char *
  null_libintl_bindtextdomain(const char *domainname, const char *dirname)
  {
*** ../vim-7.4.2151/src/screen.c        2016-07-27 23:26:00.782222261 +0200
--- src/screen.c        2016-08-03 21:49:44.262112484 +0200
***************
*** 2424,2430 ****
      linenr_T  lnum,
      int               row)
  {
!     char_u    buf[51];
      pos_T     *top, *bot;
      linenr_T  lnume = lnum + fold_count - 1;
      int               len;
--- 2424,2430 ----
      linenr_T  lnum,
      int               row)
  {
!     char_u    buf[FOLD_TEXT_LEN];
      pos_T     *top, *bot;
      linenr_T  lnume = lnum + fold_count - 1;
      int               len;
*** ../vim-7.4.2151/src/vim.h   2016-08-01 15:40:24.167878553 +0200
--- src/vim.h   2016-08-03 21:55:55.966688060 +0200
***************
*** 561,566 ****
--- 561,567 ----
  # 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 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,579 ****
--- 575,581 ----
  #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,597 ****
--- 594,600 ----
  # 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
***************
*** 1501,1506 ****
--- 1504,1511 ----
  # define MSG_BUF_CLEN  MSG_BUF_LEN        /* cell length */
  #endif
  
+ #define FOLD_TEXT_LEN  51     /* buffer size for get_foldtext() */
+ 
  /* Size of the buffer used for tgetent().  Unfortunately this is largely
   * undocumented, some systems use 1024.  Using a buffer that is too small
   * causes a buffer overrun and a crash.  Use the maximum known value to stay
*** ../vim-7.4.2151/src/version.c       2016-08-03 21:04:47.858847794 +0200
--- src/version.c       2016-08-03 21:43:27.913586672 +0200
***************
*** 765,766 ****
--- 765,768 ----
  {   /* Add new patch number below this line */
+ /**/
+     2152,
  /**/

-- 
FIRST SOLDIER:  So they wouldn't be able to bring a coconut back anyway.
SECOND SOLDIER: Wait a minute! Suppose two swallows carried it together?
FIRST SOLDIER:  No, they'd have to have it on a line.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
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.

Raspunde prin e-mail lui