bug-gettext
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug-gettext] msgattrib --previous


From: Ineiev
Subject: [bug-gettext] msgattrib --previous
Date: Fri, 26 Apr 2013 15:12:29 +0400
User-agent: Thunderbird 2.0.0.24 (X11/20100623)

Hello,

When localizing www.gnu.org, we use automatically generated compendia
for common strings; basically, a cron job compiles the strings that
repeat many times in a POT, and looks for them in existing
translations to build compendia; when such a string is
added to a page, it uses compendia to suggest a translation.

Since the same string may be used in a different context and may need
a different translation, we msgattrib --set-fuzzy the compendium
to give the translators a chance to check them before they come
to the translated page.

On the other hand, it is very useful to show the previous translation
to the translators; currently we post-process the compendium with a sed
script for that purpose, but I wonder whether adding an option
to msgattrib like in the attachment might be a clearer solution.

What do people think?
diff --git a/gettext-tools/src/msgattrib.c b/gettext-tools/src/msgattrib.c
index 75a9785..7732315 100644
--- a/gettext-tools/src/msgattrib.c
+++ b/gettext-tools/src/msgattrib.c
@@ -44,6 +44,7 @@
 #include "write-stringtable.h"
 #include "color.h"
 #include "propername.h"
+#include "xalloc.h"
 #include "gettext.h"
 
 #define _(str) gettext (str)
@@ -71,7 +72,8 @@ enum
   RESET_FUZZY           = 1 << 1,
   SET_OBSOLETE          = 1 << 2,
   RESET_OBSOLETE        = 1 << 3,
-  REMOVE_PREV           = 1 << 4
+  REMOVE_PREV           = 1 << 4,
+  ADD_PREV              = 1 << 5
 };
 static int to_change;
 
@@ -100,6 +102,7 @@ static const struct option long_options[] =
   { "only-fuzzy", no_argument, NULL, CHAR_MAX + 4 },
   { "only-obsolete", no_argument, NULL, CHAR_MAX + 6 },
   { "output-file", required_argument, NULL, 'o' },
+  { "previous", no_argument, NULL, CHAR_MAX + 21 },
   { "properties-input", no_argument, NULL, 'P' },
   { "properties-output", no_argument, NULL, 'p' },
   { "set-fuzzy", no_argument, NULL, CHAR_MAX + 7 },
@@ -324,6 +327,10 @@ main (int argc, char **argv)
         handle_style_option (optarg);
         break;
 
+      case CHAR_MAX + 21: /* --previous */
+        to_change |= ADD_PREV;
+        break;
+
       default:
         usage (EXIT_FAILURE);
         /* NOTREACHED */
@@ -459,6 +466,9 @@ Attribute manipulation:\n"));
       printf (_("\
       --clear-obsolete        set all messages non-obsolete\n"));
       printf (_("\
+      --previous              when setting 'fuzzy', keep previous msgids\n\
+                              of translated messages.\n"));
+      printf (_("\
       --clear-previous        remove the \"previous msgid\" from all 
messages\n"));
       printf (_("\
       --only-file=FILE.po     manipulate only entries listed in FILE.po\n"));
@@ -587,7 +597,22 @@ process_message_list (message_list_ty *mlp,
                   : true))
             {
               if (to_change & SET_FUZZY)
-                mp->is_fuzzy = true;
+                {
+                  if ((to_change & ADD_PREV) && !is_header (mp)
+                      && !mp->is_fuzzy && mp->msgstr[0] != '\0')
+                    {
+                      mp->prev_msgctxt =
+                        (mp->msgctxt != NULL ? xstrdup (mp->msgctxt) : NULL);
+                      mp->prev_msgid =
+                        (mp->msgid != NULL ? xstrdup (mp->msgid) : NULL);
+                      mp->prev_msgid_plural =
+                        (mp->msgid_plural != NULL
+                         ? xstrdup (mp->msgid_plural)
+                         : NULL);
+                    }
+                  mp->is_fuzzy = true;
+                }
+
               if (to_change & RESET_FUZZY)
                 mp->is_fuzzy = false;
               /* Always keep the header entry non-obsolete.  */

reply via email to

[Prev in Thread] Current Thread [Next in Thread]