]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1581: translation does not work for plural argument v9.0.1581
authorBram Moolenaar <Bram@vim.org>
Sat, 27 May 2023 12:40:11 +0000 (13:40 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 27 May 2023 12:40:11 +0000 (13:40 +0100)
Problem:    Translation does not work for plural argument.
Solution:   Use PLURAL_MSG() for errors and with xgettext. (closes #12443)

src/errors.h
src/po/Make_all.mak
src/po/Make_cyg.mak
src/po/Make_ming.mak
src/po/Make_mvc.mak
src/po/Makefile
src/version.c

index fcdc9aba004e0f3821bbb51650723ddb2002d8d5..c0ee908665703d4b88781a5e23235bd66a7070ed 100644 (file)
@@ -6,6 +6,18 @@
  * Do ":help credits" in Vim to see a list of people who contributed.
  */
 
+// Use PLURAL_MSG() for messages that are passed to ngettext(), so that the
+// second one uses msgid_plural.
+#ifdef DO_INIT
+# define PLURAL_MSG(var1, msg1, var2, msg2) \
+       char var1[] = msg1; \
+       char var2[] = msg2;
+#else
+# define PLURAL_MSG(var1, msg1, var2, msg2) \
+       extern char var1[]; \
+       extern char var2[];
+#endif
+
 /*
  * Definition of error messages, sorted on error number.
  */
@@ -398,10 +410,10 @@ EXTERN char e_missing_endif[]
 EXTERN char e_missing_marker[]
        INIT(= N_("E172: Missing marker"));
 #endif
-EXTERN char e_nr_more_file_to_edit[]
-       INIT(= N_("E173: %d more file to edit"));
-EXTERN char e_nr_more_files_to_edit[]
-       INIT(= N_("E173: %d more files to edit"));
+
+PLURAL_MSG(e_nr_more_file_to_edit, "E173: %d more file to edit",
+               e_nr_more_files_to_edit, "E173: %d more files to edit")
+
 EXTERN char e_command_already_exists_add_bang_to_replace_it_str[]
        INIT(= N_("E174: Command already exists: add ! to replace it: %s"));
 EXTERN char e_no_attribute_specified[]
@@ -2832,10 +2844,10 @@ EXTERN char e_missing_gt[]
        INIT(= N_("E1104: Missing >"));
 EXTERN char e_cannot_convert_str_to_string[]
        INIT(= N_("E1105: Cannot convert %s to string"));
-EXTERN char e_one_argument_too_many[]
-       INIT(= N_("E1106: One argument too many"));
-EXTERN char e_nr_arguments_too_many[]
-       INIT(= N_("E1106: %d arguments too many"));
+
+PLURAL_MSG(e_one_argument_too_many, "E1106: One argument too many",
+               e_nr_arguments_too_many, "E1106: %d arguments too many")
+
 EXTERN char e_string_list_dict_or_blob_required[]
        INIT(= N_("E1107: String, List, Dict or Blob required"));
 EXTERN char e_list_item_nr_is_not_list[]
@@ -3019,10 +3031,10 @@ EXTERN char e_cannot_open_terminal_from_command_line_window[]
 #ifdef FEAT_EVAL
 EXTERN char e_cannot_use_legacy_with_command_str[]
        INIT(= N_("E1189: Cannot use :legacy with this command: %s"));
-EXTERN char e_one_argument_too_few[]
-       INIT(= N_("E1190: One argument too few"));
-EXTERN char e_nr_arguments_too_few[]
-       INIT(= N_("E1190: %d arguments too few"));
+
+PLURAL_MSG(e_one_argument_too_few, "E1190: One argument too few",
+               e_nr_arguments_too_few, "E1190: %d arguments too few")
+
 EXTERN char e_call_to_function_that_failed_to_compile_str[]
        INIT(= N_("E1191: Call to function that failed to compile: %s"));
 EXTERN char e_empty_function_name[]
index 7a6144e64c95acddfe3fcf062ddfa5f505057751..f5f8e131b6beabeee4894b7915ba1b29d718e1a6 100644 (file)
@@ -188,3 +188,5 @@ PO_VIM_JSLIST = \
        optwin.js \
        defaults.js
 
+# Arguments for xgettext to pick up messages to translate from the source code.
+XGETTEXT_KEYWORDS = --keyword=_ --keyword=N_ --keyword=NGETTEXT:1,2 --keyword=PLURAL_MSG:2,4
index 2969d1e872b621bc94889484b4c4190c3c8992cf..705858da584efb90e48dd94adcfe3f77eed66019 100644 (file)
@@ -66,14 +66,14 @@ PO_INPUTLIST = \
 first_time: $(PO_INPUTLIST) $(PO_VIM_INPUTLIST)
        $(VIM) -u NONE --not-a-term -S tojavascript.vim $(LANGUAGE).pot $(PO_VIM_INPUTLIST)
        $(XGETTEXT) --default-domain=$(LANGUAGE) \
-               --add-comments --keyword=_ --keyword=N_ --keyword=NGETTEXT:1,2 $(PO_INPUTLIST) $(PO_VIM_JSLIST)
+               --add-comments $(XGETTEXT_KEYWORDS) $(PO_INPUTLIST) $(PO_VIM_JSLIST)
        $(VIM) -u NONE --not-a-term -S fixfilenames.vim $(LANGUAGE).pot $(PO_VIM_INPUTLIST)
        $(RM) *.js
 
 $(PACKAGE).pot: $(PO_INPUTLIST) $(PO_VIM_INPUTLIST)
        $(VIM) -u NONE --not-a-term -S tojavascript.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
        $(XGETTEXT) --default-domain=$(PACKAGE) \
-               --add-comments --keyword=_ --keyword=N_ --keyword=NGETTEXT:1,2 $(PO_INPUTLIST) $(PO_VIM_JSLIST)
+               --add-comments $(XGETTEXT_KEYWORDS) $(PO_INPUTLIST) $(PO_VIM_JSLIST)
        $(MV) $(PACKAGE).po $(PACKAGE).pot
        $(VIM) -u NONE --not-a-term -S fixfilenames.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
        $(RM) *.js
index 1912bc51ad0b05e4dab27de121fad07e536fdf6a..42dab84449d36ccf6d4c0480400e10743264b23f 100644 (file)
@@ -79,14 +79,14 @@ PO_INPUTLIST = \
 first_time: $(PO_INPUTLIST) $(PO_VIM_INPUTLIST)
        $(VIM) -u NONE --not-a-term -S tojavascript.vim $(LANGUAGE).pot $(PO_VIM_INPUTLIST)
        $(XGETTEXT) --default-domain=$(LANGUAGE) \
-               --add-comments --keyword=_ --keyword=N_ --keyword=NGETTEXT:1,2 $(PO_INPUTLIST) $(PO_VIM_JSLIST)
+               --add-comments $(XGETTEXT_KEYWORDS) $(PO_INPUTLIST) $(PO_VIM_JSLIST)
        $(VIM) -u NONE --not-a-term -S fixfilenames.vim $(LANGUAGE).pot $(PO_VIM_INPUTLIST)
        $(RM) *.js
 
 $(PACKAGE).pot: $(PO_INPUTLIST) $(PO_VIM_INPUTLIST)
        $(VIM) -u NONE --not-a-term -S tojavascript.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
        $(XGETTEXT) --default-domain=$(PACKAGE) \
-               --add-comments --keyword=_ --keyword=N_ --keyword=NGETTEXT:1,2 $(PO_INPUTLIST) $(PO_VIM_JSLIST)
+               --add-comments $(XGETTEXT_KEYWORDS) $(PO_INPUTLIST) $(PO_VIM_JSLIST)
        $(MV) $(PACKAGE).po $(PACKAGE).pot
        $(VIM) -u NONE --not-a-term -S fixfilenames.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
        $(RM) *.js
index bdb6dcce49a90f8c61d7dffa9fc39beb0ff1feb2..9cfa408f28c299c8c1935f76b638528fd911581e 100644 (file)
@@ -60,7 +60,7 @@ first_time: files
        $(VIM) -u NONE --not-a-term -S tojavascript.vim $(LANGUAGE).pot $(PO_VIM_INPUTLIST)
        set OLD_PO_FILE_INPUT=yes
        set OLD_PO_FILE_OUTPUT=yes
-       $(XGETTEXT) --default-domain=$(LANGUAGE) --add-comments --keyword=_ --keyword=N_ --keyword=NGETTEXT:1,2 --files-from=.\files $(PO_VIM_JSLIST)
+       $(XGETTEXT) --default-domain=$(LANGUAGE) --add-comments $(XGETTEXT_KEYWORDS) --files-from=.\files $(PO_VIM_JSLIST)
        $(VIM) -u NONE --not-a-term -S fixfilenames.vim $(LANGUAGE).pot $(PO_VIM_INPUTLIST)
        $(RM) *.js
 
@@ -68,7 +68,7 @@ $(PACKAGE).pot: files
        $(VIM) -u NONE --not-a-term -S tojavascript.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
        set OLD_PO_FILE_INPUT=yes
        set OLD_PO_FILE_OUTPUT=yes
-       $(XGETTEXT) --default-domain=$(PACKAGE) --add-comments --keyword=_ --keyword=N_ --keyword=NGETTEXT:1,2 --files-from=.\files $(PO_VIM_JSLIST)
+       $(XGETTEXT) --default-domain=$(PACKAGE) --add-comments $(XGETTEXT_KEYWORDS) --files-from=.\files $(PO_VIM_JSLIST)
        $(MV) $(PACKAGE).po $(PACKAGE).pot
        $(VIM) -u NONE --not-a-term -S fixfilenames.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
        $(RM) *.js
index 2b17fead3871ebb1ac2d76b5588869d88b513138..b637f121389be9395735fb6a32048ed6beafcbc5 100644 (file)
@@ -208,8 +208,7 @@ $(PACKAGE).pot: $(PO_INPUTLIST) $(PO_VIM_INPUTLIST)
        $(VIM) -u NONE --not-a-term -S tojavascript.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
        # create vim.pot
        $(XGETTEXT) --default-domain=$(PACKAGE) --add-comments \
-               --keyword=_ --keyword=N_ --keyword=NGETTEXT:1,2 \
-               $(PO_INPUTLIST) $(PO_VIM_JSLIST)
+               $(XGETTEXT_KEYWORDS) $(PO_INPUTLIST) $(PO_VIM_JSLIST)
        mv -f $(PACKAGE).po $(PACKAGE).pot
        # Fix Vim scripts names, so that "gf" works
        $(VIM) -u NONE --not-a-term -S fixfilenames.vim $(PACKAGE).pot $(PO_VIM_INPUTLIST)
index da4eed75364bb522aca416deb461482819f4867c..330914da786566d57137a1230c14d3316aadef7b 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1581,
 /**/
     1580,
 /**/