]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
Extract comments meant for translators from Glade input files.
authorBruno Haible <bruno@clisp.org>
Sat, 16 May 2009 21:09:40 +0000 (21:09 +0000)
committerBruno Haible <bruno@clisp.org>
Tue, 23 Jun 2009 10:16:05 +0000 (12:16 +0200)
21 files changed:
gettext-tools/src/ChangeLog
gettext-tools/src/x-awk.c
gettext-tools/src/x-c.c
gettext-tools/src/x-csharp.c
gettext-tools/src/x-elisp.c
gettext-tools/src/x-glade.c
gettext-tools/src/x-java.c
gettext-tools/src/x-librep.c
gettext-tools/src/x-lisp.c
gettext-tools/src/x-perl.c
gettext-tools/src/x-php.c
gettext-tools/src/x-python.c
gettext-tools/src/x-rst.c
gettext-tools/src/x-scheme.c
gettext-tools/src/x-sh.c
gettext-tools/src/x-smalltalk.c
gettext-tools/src/x-tcl.c
gettext-tools/src/x-ycp.c
gettext-tools/src/xgettext.c
gettext-tools/src/xgettext.h
gettext-tools/tests/Makefile.am

index 1c43f5973ddcc9ee1b8e49f76fdc9470904db413..da763ea56a62df262e82614540e2f121a35e076d 100644 (file)
@@ -1,3 +1,32 @@
+2009-05-16  Bruno Haible  <bruno@clisp.org>
+
+       Extract comments meant for translators from Glade input files.
+       * xgettext.h (remember_a_message): Add 'extracted_comment' argument.
+       * xgettext.c (remember_a_message): Likewise.
+       (arglist_parser_done): Update.
+       * x-glade.c (struct element_state): Add field 'extracted_comment'.
+       (start_element_handler): Fill it.
+       (end_element_handler): Pass it to 'remember_a_message', free it.
+       * x-awk.c (extract_parenthesized): Update.
+       * x-c.c (extract_parenthesized): Update.
+       * x-csharp.c (extract_parenthesized): Update.
+       * x-elisp.c (read_object): Update.
+       * x-java.c (extract_parenthesized): Update.
+       * x-librep.c (read_object): Update.
+       * x-lisp.c (read_object): Update.
+       * x-perl.c (extract_variable, interpolate_keywords, extract_balanced):
+       Update.
+       * x-php.c (extract_balanced): Update.
+       * x-python.c (extract_balanced): Update.
+       * x-rst.c (extract_rst): Update.
+       * x-scheme.c (read_object): Update.
+       * x-sh.c (read_word, read_command): Update.
+       * x-smalltalk.c (extract_smalltalk): Update.
+       * x-tcl.c (read_command): Update.
+       * x-ycp.c (extract_parenthesized): Update.
+       Reported by <sandro.bonazzola@gmail.com>
+       at <https://savannah.gnu.org/bugs/?26570>.
+
 2009-03-29  Bruno Haible  <bruno@clisp.org>
 
        * message.h (format_type): New enum value 'format_gfc_internal'.
index 0e74852e9bdf6b3259dac2f979846fadc130bd6a..307952bdd1430bd769e5a307f9e394cee46609f0 100644 (file)
@@ -1,5 +1,5 @@
 /* xgettext awk backend.
-   Copyright (C) 2002-2003, 2005-2008 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2009 Free Software Foundation, Inc.
 
    This file was written by Bruno Haible <haible@clisp.cons.org>, 2002.
 
@@ -791,7 +791,7 @@ extract_parenthesized (message_list_ty *mlp,
 
            if (extract_all)
              remember_a_message (mlp, NULL, token.string, inner_context, &pos,
-                                 savable_comment);
+                                 NULL, savable_comment);
            else
              arglist_parser_remember (argparser, arg, token.string,
                                       inner_context,
@@ -810,7 +810,7 @@ extract_parenthesized (message_list_ty *mlp,
            pos.line_number = token.line_number;
 
            remember_a_message (mlp, NULL, token.string, inner_context, &pos,
-                               savable_comment);
+                               NULL, savable_comment);
          }
          next_is_argument = false;
          next_context_iter = null_context_list_iterator;
index 3a5b368e59b887a81a4e1b0abc6b752bdcbf79a7..14a5b3682f277170b2e7aec8644c84bfb8f7d778 100644 (file)
@@ -1888,7 +1888,7 @@ extract_parenthesized (message_list_ty *mlp,
        case xgettext_token_type_string_literal:
          if (extract_all)
            remember_a_message (mlp, NULL, token.string, inner_context,
-                               &token.pos, token.comment);
+                               &token.pos, NULL, token.comment);
          else
            arglist_parser_remember (argparser, arg, token.string,
                                     inner_context,
index 6a1a31efb83729a1ee67dd0f332bb98d4b8e9c8d..a307a64ec73b137ef0840d31a8074a9bbe2dea26 100644 (file)
@@ -1,5 +1,5 @@
 /* xgettext C# backend.
-   Copyright (C) 2003, 2005-2008 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2005-2009 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2003.
 
    This program is free software: you can redistribute it and/or modify
@@ -2078,7 +2078,7 @@ extract_parenthesized (message_list_ty *mlp, token_type_ty terminator,
            xgettext_current_source_encoding = po_charset_utf8;
            if (extract_all)
              remember_a_message (mlp, NULL, token.string, inner_context,
-                                 &pos, token.comment);
+                                 &pos, NULL, token.comment);
            else
              arglist_parser_remember (argparser, arg, token.string,
                                       inner_context,
index 076c8ee841bc7d17f5ff23922bc5b1bf2c3a4c9a..1884ce50694f876ec9f2527d3db3be8f6a33b41a 100644 (file)
@@ -1,5 +1,5 @@
 /* xgettext Emacs Lisp backend.
-   Copyright (C) 2001-2003, 2005-2008 Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2005-2009 Free Software Foundation, Inc.
 
    This file was written by Bruno Haible <haible@clisp.cons.org>, 2001-2002.
 
@@ -898,7 +898,7 @@ read_object (struct object *op, bool first_in_list, bool new_backquote_flag,
                pos.file_name = logical_file_name;
                pos.line_number = op->line_number_at_start;
                remember_a_message (mlp, NULL, string_of_object (op),
-                                   null_context, &pos, savable_comment);
+                                   null_context, &pos, NULL, savable_comment);
              }
            last_non_comment_line = line_number;
            return;
index 3d48e72e82e3f260392db51bef19d7c0fcdff9ef..e5a7a7766616afffacdfa411a161b326cc9c1d15 100644 (file)
@@ -1,5 +1,5 @@
 /* xgettext glade backend.
-   Copyright (C) 2002-2003, 2005-2008 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2009 Free Software Foundation, Inc.
 
    This file was written by Bruno Haible <haible@clisp.cons.org>, 2002.
 
@@ -385,6 +385,7 @@ static XML_Parser parser;
 struct element_state
 {
   bool extract_string;
+  char *extracted_comment;
   int lineno;
   char *buffer;
   size_t bufmax;
@@ -427,27 +428,36 @@ start_element_handler (void *userData, const char *name,
 
   p = &stack[stack_depth];
   p->extract_string = extract_all;
+  p->extracted_comment = NULL;
   /* In Glade 1, a few specific elements are translatable.  */
   if (!p->extract_string)
     p->extract_string =
       (hash_find_entry (&keywords, name, strlen (name), &hash_result) == 0);
   /* In Glade 2, all <property> and <atkproperty> elements are translatable
-     that have the attribute translatable="yes".  */
+     that have the attribute translatable="yes".
+     See <http://library.gnome.org/devel/libglade/unstable/libglade-dtd.html>.
+     The translator comment is found in the attribute comments="...".
+     See <http://live.gnome.org/TranslationProject/DevGuidelines/Use comments>.
+   */
   if (!p->extract_string
       && (strcmp (name, "property") == 0 || strcmp (name, "atkproperty") == 0))
     {
       bool has_translatable = false;
+      const char *extracted_comment = NULL;
       const char **attp = attributes;
       while (*attp != NULL)
        {
          if (strcmp (attp[0], "translatable") == 0)
-           {
-             has_translatable = (strcmp (attp[1], "yes") == 0);
-             break;
-           }
+           has_translatable = (strcmp (attp[1], "yes") == 0);
+         else if (strcmp (attp[0], "comments") == 0)
+           extracted_comment = attp[1];
          attp += 2;
        }
       p->extract_string = has_translatable;
+      p->extracted_comment =
+       (has_translatable && extracted_comment != NULL
+        ? xstrdup (extracted_comment)
+        : NULL);
     }
   if (!p->extract_string
       && strcmp (name, "atkaction") == 0)
@@ -465,7 +475,8 @@ start_element_handler (void *userData, const char *name,
                  pos.line_number = XML_GetCurrentLineNumber (parser);
 
                  remember_a_message (mlp, NULL, xstrdup (attp[1]),
-                                     null_context, &pos, savable_comment);
+                                     null_context, &pos,
+                                     NULL, savable_comment);
                }
              break;
            }
@@ -502,12 +513,14 @@ end_element_handler (void *userData, const char *name)
          pos.line_number = p->lineno;
 
          remember_a_message (mlp, NULL, p->buffer, null_context, &pos,
-                             savable_comment);
+                             p->extracted_comment, savable_comment);
          p->buffer = NULL;
        }
     }
 
   /* Free memory for this stack level.  */
+  if (p->extracted_comment != NULL)
+    free (p->extracted_comment);
   if (p->buffer != NULL)
     free (p->buffer);
 
index c8064c5340bde9c3fb6d3b85b5d705a8d6f45127..bb52f81a49e3b6c68bbc4bec7a7d317785c0848b 100644 (file)
@@ -1,5 +1,5 @@
 /* xgettext Java backend.
-   Copyright (C) 2003, 2005-2008 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2005-2009 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2003.
 
    This program is free software: you can redistribute it and/or modify
@@ -1427,7 +1427,7 @@ extract_parenthesized (message_list_ty *mlp, token_type_ty terminator,
            xgettext_current_source_encoding = po_charset_utf8;
            if (extract_all)
              remember_a_message (mlp, NULL, token.string, inner_context,
-                                 &pos, token.comment);
+                                 &pos, NULL, token.comment);
            else
              arglist_parser_remember (argparser, arg, token.string,
                                       inner_context,
index e2279a4f7352880f7ec4011c96cddbe1ded941ad..87b17e4cff04152a041ed19bb4bb54288aaea710 100644 (file)
@@ -1,5 +1,5 @@
 /* xgettext librep backend.
-   Copyright (C) 2001-2003, 2005-2008 Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2005-2009 Free Software Foundation, Inc.
 
    This file was written by Bruno Haible <haible@clisp.cons.org>, 2001.
 
@@ -834,7 +834,7 @@ read_object (struct object *op, flag_context_ty outer_context)
                pos.file_name = logical_file_name;
                pos.line_number = op->line_number_at_start;
                remember_a_message (mlp, NULL, string_of_object (op),
-                                   null_context, &pos, savable_comment);
+                                   null_context, &pos, NULL, savable_comment);
              }
            last_non_comment_line = line_number;
            return;
index 5495dffa7533da20f4e75bdcde410be7dfd0ce4e..d56722b51fafbdbeb557de5f312736a008929340 100644 (file)
@@ -1,5 +1,5 @@
 /* xgettext Lisp backend.
-   Copyright (C) 2001-2003, 2005-2008 Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2005-2009 Free Software Foundation, Inc.
 
    This file was written by Bruno Haible <haible@clisp.cons.org>, 2001.
 
@@ -1194,7 +1194,8 @@ read_object (struct object *op, flag_context_ty outer_context)
                    pos.file_name = logical_file_name;
                    pos.line_number = op->line_number_at_start;
                    remember_a_message (mlp, NULL, string_of_object (op),
-                                       null_context, &pos, savable_comment);
+                                       null_context, &pos,
+                                       NULL, savable_comment);
                  }
                last_non_comment_line = line_number;
                return;
index 3064b2c638e50f1f97a83982dbafbfc4a42b3e59..3f6e5498f17b41242ba68bb5d53d949b0d5b9bf5 100644 (file)
@@ -1,5 +1,5 @@
 /* xgettext Perl backend.
-   Copyright (C) 2002-2008 Free Software Foundation, Inc.
+   Copyright (C) 2002-2009 Free Software Foundation, Inc.
 
    This file was written by Guido Flohr <guido@imperia.net>, 2002-2003.
 
@@ -1554,7 +1554,7 @@ extract_variable (message_list_ty *mlp, token_ty *tp, int first)
 
                        xgettext_current_source_encoding = po_charset_utf8;
                        remember_a_message (mlp, NULL, xstrdup (t1->string),
-                                           context, &pos, savable_comment);
+                                           context, &pos, NULL, savable_comment);
                        xgettext_current_source_encoding = xgettext_global_source_encoding;
                        free_token (t2);
                        free_token (t1);
@@ -1984,7 +1984,7 @@ interpolate_keywords (message_list_ty *mlp, const char *string, int lineno)
              extract_quotelike_pass3 (&token, EXIT_FAILURE);
              xgettext_current_source_encoding = po_charset_utf8;
              remember_a_message (mlp, NULL, token.string, context, &pos,
-                                 savable_comment);
+                                 NULL, savable_comment);
              xgettext_current_source_encoding = xgettext_global_source_encoding;
              /* FALLTHROUGH */
            default:
@@ -3154,7 +3154,7 @@ extract_balanced (message_list_ty *mlp,
              pos.line_number = tp->line_number;
              xgettext_current_source_encoding = po_charset_utf8;
              remember_a_message (mlp, NULL, string, inner_context, &pos,
-                                 tp->comment);
+                                 NULL, tp->comment);
              xgettext_current_source_encoding = xgettext_global_source_encoding;
            }
          else if (!skip_until_comma)
index 0f7ad78af4a5c3359371c3e80c26249b65e788f5..344c1c5c55edbf372a42366fcd6a90c36ffbb3c4 100644 (file)
@@ -1,5 +1,5 @@
 /* xgettext PHP backend.
-   Copyright (C) 2001-2003, 2005-2008 Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2005-2009 Free Software Foundation, Inc.
 
    This file was written by Bruno Haible <bruno@clisp.org>, 2002.
 
@@ -1525,7 +1525,7 @@ extract_balanced (message_list_ty *mlp,
 
            if (extract_all)
              remember_a_message (mlp, NULL, token.string, inner_context,
-                                 &pos, token.comment);
+                                 &pos, NULL, token.comment);
            else
              arglist_parser_remember (argparser, arg, token.string,
                                       inner_context,
index af6a139c8015c127a710d6f4bb1e3441986767a7..0a7b2af03d49bc487f1573fcc482f432e0c4488a 100644 (file)
@@ -1,5 +1,5 @@
 /* xgettext Python backend.
-   Copyright (C) 2002-2003, 2005-2008 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2009 Free Software Foundation, Inc.
 
    This file was written by Bruno Haible <haible@clisp.cons.org>, 2002.
 
@@ -1795,7 +1795,7 @@ extract_balanced (message_list_ty *mlp,
            xgettext_current_source_encoding = po_charset_utf8;
            if (extract_all)
              remember_a_message (mlp, NULL, token.string, inner_context,
-                                 &pos, token.comment);
+                                 &pos, NULL, token.comment);
            else
              arglist_parser_remember (argparser, arg, token.string,
                                       inner_context,
index 160db65d76e4873412f24e19cd86a2de9ad73df2..c604941da143109f5694d87eae50146fedebe5cb 100644 (file)
@@ -1,5 +1,5 @@
 /* xgettext RST backend.
-   Copyright (C) 2001-2003, 2005-2008 Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2005-2009 Free Software Foundation, Inc.
 
    This file was written by Bruno Haible <haible@clisp.cons.org>, 2001.
 
@@ -220,7 +220,7 @@ extract_rst (FILE *f,
       pos.file_name = location;
       pos.line_number = (size_t)(-1);
 
-      remember_a_message (mlp, NULL, msgid, null_context, &pos, NULL);
+      remember_a_message (mlp, NULL, msgid, null_context, &pos, NULL, NULL);
 
       /* Here c is the last read character: EOF or '\n'.  */
       if (c == EOF)
index 5c8fdb0a005d6b7d82a29232c708eb685b2c4fc9..1e108211de573a272c1de589cfd24bc33f686fc1 100644 (file)
@@ -1,5 +1,5 @@
 /* xgettext Scheme backend.
-   Copyright (C) 2004-2008 Free Software Foundation, Inc.
+   Copyright (C) 2004-2009 Free Software Foundation, Inc.
 
    This file was written by Bruno Haible <bruno@clisp.org>, 2004-2005.
 
@@ -1133,7 +1133,7 @@ read_object (struct object *op, flag_context_ty outer_context)
                pos.file_name = logical_file_name;
                pos.line_number = op->line_number_at_start;
                remember_a_message (mlp, NULL, string_of_object (op),
-                                   null_context, &pos, savable_comment);
+                                   null_context, &pos, NULL, savable_comment);
              }
            last_non_comment_line = line_number;
            return;
index 8ebf10f8484a7460c00070453e40c3eba7d0652e..7cff65d3a80f75053015aeac5f4c60245864d449 100644 (file)
@@ -1,5 +1,5 @@
 /* xgettext sh backend.
-   Copyright (C) 2003, 2005-2008 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2005-2009 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2003.
 
    This program is free software: you can redistribute it and/or modify
@@ -1067,7 +1067,7 @@ read_word (struct word *wp, int looking_for, flag_context_ty context)
                      string.chars[string.charcount++] = (unsigned char) c;
                    }
                  remember_a_message (mlp, NULL, string_of_token (&string),
-                                     context, &pos, savable_comment);
+                                     context, &pos, NULL, savable_comment);
                  free_token (&string);
 
                  error_with_progname = false;
@@ -1233,7 +1233,7 @@ read_command (int looking_for, flag_context_ty outer_context)
              pos.file_name = logical_file_name;
              pos.line_number = inner.line_number_at_start;
              remember_a_message (mlp, NULL, string_of_word (&inner),
-                                 inner_context, &pos, savable_comment);
+                                 inner_context, &pos, NULL, savable_comment);
            }
        }
 
index 7da3a554212ff500c42e5112f73c4b459dc60810..06acd5ab9c4578544afc7dfbca69c8c7d5684de3 100644 (file)
@@ -1,5 +1,5 @@
 /* xgettext Smalltalk backend.
-   Copyright (C) 2002-2003, 2005-2008 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2009 Free Software Foundation, Inc.
 
    This file was written by Bruno Haible <haible@clisp.cons.org>, 2002.
 
@@ -542,7 +542,7 @@ extract_smalltalk (FILE *f,
                pos.file_name = logical_file_name;
                pos.line_number = token.line_number;
                remember_a_message (mlp, NULL, token.string, null_context,
-                                   &pos, savable_comment);
+                                   &pos, NULL, savable_comment);
                state = 0;
                break;
              }
@@ -553,7 +553,7 @@ extract_smalltalk (FILE *f,
                pos.line_number = token.line_number;
                plural_mp = remember_a_message (mlp, NULL, token.string,
                                                null_context, &pos,
-                                               savable_comment);
+                                               NULL, savable_comment);
                state = 4;
                break;
              }
index 52314774c4d7680f9677521c82002abc2d674d83..e9c05e750895a80b2ebe71f79ce2ed54ae2cc6be 100644 (file)
@@ -1,5 +1,5 @@
 /* xgettext Tcl backend.
-   Copyright (C) 2002-2003, 2005-2008 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2005-2009 Free Software Foundation, Inc.
 
    This file was written by Bruno Haible <haible@clisp.cons.org>, 2002.
 
@@ -887,7 +887,8 @@ read_command (int looking_for, flag_context_ty outer_context)
                pos.file_name = logical_file_name;
                pos.line_number = inner.line_number_at_start;
                remember_a_message (mlp, NULL, string_of_word (&inner),
-                                   inner_context, &pos, savable_comment);
+                                   inner_context, &pos,
+                                   NULL, savable_comment);
              }
          }
 
index 59e8e1402dde9d0da87a384a66203779f5e3543e..a63d20d357050289f6486fbdd0983f24c70a773c 100644 (file)
@@ -1,5 +1,5 @@
 /* xgettext YCP backend.
-   Copyright (C) 2001-2003, 2005-2008 Free Software Foundation, Inc.
+   Copyright (C) 2001-2003, 2005-2009 Free Software Foundation, Inc.
 
    This file was written by Bruno Haible <haible@clisp.cons.org>, 2001.
 
@@ -683,7 +683,7 @@ extract_parenthesized (message_list_ty *mlp,
                  /* Seen an msgid.  */
                  plural_mp = remember_a_message (mlp, NULL, token.string,
                                                  inner_context, &pos,
-                                                 token.comment);
+                                                 NULL, token.comment);
                  state = 2;
                }
              else
index 2b57c415b4cd215da8d328960b568fc52e9c8cf9..e96c44ced027ce0c5e2ff2e2bb327e352b55bbd4 100644 (file)
@@ -2086,6 +2086,7 @@ and a mapping instead of a tuple for the arguments.\n"),
 message_ty *
 remember_a_message (message_list_ty *mlp, char *msgctxt, char *msgid,
                    flag_context_ty context, lex_pos_ty *pos,
+                   const char *extracted_comment,
                    refcounted_string_list_ty *comment)
 {
   enum is_format is_format[NFORMATS];
@@ -2180,6 +2181,9 @@ meta information, not the empty string.\n")));
 
     nitems_before = (mp->comment_dot != NULL ? mp->comment_dot->nitems : 0);
 
+    if (extracted_comment != NULL)
+      message_comment_dot_append (mp, extracted_comment);
+
     add_all_remaining_comments = add_all_comments;
     for (j = 0; ; ++j)
       {
@@ -2868,7 +2872,7 @@ arglist_parser_done (struct arglist_parser *ap, int argnum)
            mp = remember_a_message (ap->mlp, best_cp->msgctxt, best_cp->msgid,
                                     msgid_context,
                                     &best_cp->msgid_pos,
-                                    best_cp->msgid_comment);
+                                    NULL, best_cp->msgid_comment);
            if (best_cp->msgid_plural != NULL)
              remember_a_message_plural (mp, best_cp->msgid_plural,
                                         msgid_plural_context,
index a54b81c867c8bf5ef77fe194b5e7d02ee287b6a6..53c9ce87c0613379d41c8ccfce3eb14a5d04d226 100644 (file)
@@ -243,6 +243,8 @@ extern void savable_comment_reset (void);
    to the callee.
    MSGID must be a malloc()ed string; its ownership is passed to the callee.
    POS->file_name must be allocated with indefinite extent.
+   EXTRACTED_COMMENT is a comment that needs to be copied into the POT file,
+   or NULL.
    COMMENT may be savable_comment, or it may be a saved copy of savable_comment
    (then add_reference must be used when saving it, and drop_reference while
    dropping it).  Clear savable_comment.  */
@@ -251,7 +253,9 @@ extern message_ty *remember_a_message (message_list_ty *mlp,
                                       char *msgid,
                                       flag_context_ty context,
                                       lex_pos_ty *pos,
+                                      const char *extracted_comment,
                                       refcounted_string_list_ty *comment);
+
 /* Add an msgid_plural to a message previously returned by
    remember_a_message.
    STRING must be a malloc()ed string; its ownership is passed to the callee.
index b877688bcaee22fa0749a079ea2e30b67d582c1d..9bc15931ce4a2ed5696e2aea971394e986354196 100644 (file)
@@ -79,7 +79,7 @@ TESTS = gettext-1 gettext-2 gettext-3 gettext-4 gettext-5 gettext-6 gettext-7 \
        xgettext-csharp-4 xgettext-csharp-5 xgettext-csharp-6 \
        xgettext-csharp-7 \
        xgettext-elisp-1 xgettext-elisp-2 \
-       xgettext-glade-1 xgettext-glade-2 xgettext-glade-3 \
+       xgettext-glade-1 xgettext-glade-2 xgettext-glade-3 xgettext-glade-4 \
        xgettext-java-1 xgettext-java-2 xgettext-java-3 xgettext-java-4 \
        xgettext-java-5 xgettext-java-6 xgettext-java-7 \
        xgettext-librep-1 xgettext-librep-2 \