On 02/03/2013 08:41 PM, Benno Schulenberg wrote:
> Hi,
> 
> In the POT file for findutils-4.5.11 the help text for xargs
> appeared as one big msgid.  Please divide this large text
> into some twenty separate strings, each encompassing
> a single paragraph or option.  This is much friendlier for
> translators, especially when in the future something in
> this help text changes.
> 
> (Also, please do not use capitals at the start of the option
> descriptions, nor periods at their end; they are not the
> common way; please use semicolons where needed.)
> 
> Regards,
> Benno

I played a bit with separating the option descriptions, and
the most readable solution in the code seems the be to define
an array of strings - one per option, and to define them like
this:

...
  "), _("\
    -X, --xyz     some text\n\
  "), _("\
    -Y            another option with a longer\n\
                  description message\n\
  "), _("\
  ...

With other styles, the interjacent fputs(..., stream) calls
would make reading and a proper columnar layout harder.
Afterward, a simple loop prints out the array.

WDYT?

Have a nice day,
Berny
>From 532889fa085353875cd4a747f35ab9c8e8d559ac Mon Sep 17 00:00:00 2001
From: Bernhard Voelker <[email protected]>
Date: Thu, 7 Feb 2013 00:10:50 +0100
Subject: [PATCH] xargs: split usage text to help translators

Smaller chunks are easier to handle for translators, ideally
one msgid per option.  Separate them.

Clarify -l option: separate from -L to emphasize that MAX-LINES
is optional for the -l option.

* xargs/xargs.c (usage): Define optdescr as array of message
strings with one item per option.  Refine the messages to adapt
to the common way: change the start of each option's description
to lower case, and do not use periods at the end, use semicolons
where needed.
Loop over the above array to output the usage text of each option.

Reported by Benno Schulenberg in
http://lists.gnu.org/archive/html/bug-findutils/2013-02/msg00017.html
---
 xargs/xargs.c |  101 ++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 65 insertions(+), 36 deletions(-)

diff --git a/xargs/xargs.c b/xargs/xargs.c
index 5fd93cd..b93e71d 100644
--- a/xargs/xargs.c
+++ b/xargs/xargs.c
@@ -1584,46 +1584,75 @@ parse_num (char *str, int option, long int min, long int max, int fatal)
 static void
 usage (FILE *stream)
 {
-  fprintf (stream, _("\
-Usage: %s [OPTION]... COMMAND INITIAL-ARGS...\n\
-Run COMMAND with arguments INITIAL-ARGS and more arguments read from input.\n"),
-	   program_name);
-  fprintf (stream, _("\n\
-Mandatory arguments to long options are mandatory for short options too.\n\
-Non-mandatory arguments are indicated by [square brackets]\n\
-  -0, --null                   Items are separated by a null, not whitespace.\n\
-                               Disables quote and backslash processing\n\
-  -a, --arg-file=FILE          Read arguments from FILE, not standard input\n\
-  -d, --delimiter=CHARACTER    Input items are separated by CHARACTER, not by\n\
-                               blank space. Disables quote and backslash\n\
+  char *optdescr[] = {
+    _("\
+  -0, --null                   items are separated by a null, not whitespace;\n\
+                               disables quote and backslash processing\n\
+"), _("\
+  -a, --arg-file=FILE          read arguments from FILE, not standard input\n\
+"), _("\
+  -d, --delimiter=CHARACTER    input items are separated by CHARACTER, not by\n\
+                               blank space; disables quote and backslash\n\
                                processing\n\
-  -E END                       If END occurs as a line of input, the rest of\n\
-                               the input is ignored.\n\
-  -e [END], --eof[=END]        Equivalent to -E END if END is specified.\n\
-                               Otherwise, there is no end-of-file string\n\
-  --help                       Print a summary of the options to xargs.\n\
+"), _("\
+  -E END                       if END occurs as a line of input, the rest of\n\
+                               the input is ignored\n\
+"), _("\
+  -e [END], --eof[=END]        equivalent to -E END if END is specified;\n\
+                               otherwise, there is no end-of-file string\n\
+"), _("\
+      --help                   print a summary of the options to xargs\n\
+"), _("\
   -I R                         same as --replace=R (R must be specified)\n\
-  -i,--replace=[R]             Replace R in initial arguments with names\n\
-                               read from standard input. If R is\n\
+"), _("\
+  -i, --replace=[R]            replace R in initial arguments with names\n\
+                               read from standard input; if R is\n\
                                unspecified, assume {}\n\
-  -L,-l, --max-lines=MAX-LINES Use at most MAX-LINES nonblank input lines per\n\
-                               command line\n\
-  -l                           Use at most one nonblank input line per\n\
+"), _("\
+  -L, --max-lines=MAX-LINES    use at most MAX-LINES nonblank input lines per\n\
                                command line\n\
-  -n, --max-args=MAX-ARGS      Use at most MAX-ARGS arguments per command\n\
+"), _("\
+  -l [MAX-LINES]               similar to -L but defaults to at most one\n\
+                               nonblank input line if MAX-LINES not specified\n\
+"), _("\
+  -n, --max-args=MAX-ARGS      use at most MAX-ARGS arguments per command\n\
                                line\n\
-  -P, --max-procs=MAX-PROCS    Run up to max-procs processes at a time\n\
-  -p, --interactive            Prompt before running commands\n\
-  --process-slot-var=VAR       Set environment variable VAR in child\n\
+"), _("\
+  -P, --max-procs=MAX-PROCS    run up to max-procs processes at a time\n\
+"), _("\
+  -p, --interactive            prompt before running commands\n\
+"), _("\
+      --process-slot-var=VAR   set environment variable VAR in child\n\
                                processes\n\
-  -r, --no-run-if-empty        If there are no arguments, run no command.\n\
-                               If this option is not given, COMMAND will be\n\
-                               run at least once.\n\
-  -s, --max-chars=MAX-CHARS    Limit commands to MAX-CHARS at most\n\
-  --show-limits                Show limits on command-line length.\n\
-  -t, --verbose                Print commands before executing them\n\
-  --version                    Print the version number\n\
-  -x, --exit                   Exit if the size (see -s) is exceeded\n\
-"));
-  fputs (_("\nReport bugs to <[email protected]>.\n"), stream);
+"), _("\
+  -r, --no-run-if-empty        if there are no arguments, run no command;\n\
+                               if this option is not given, COMMAND will be\n\
+                               run at least once\n\
+"), _("\
+  -s, --max-chars=MAX-CHARS    limit commands to MAX-CHARS at most\n\
+"), _("\
+      --show-limits            show limits on command-line length\n\
+"), _("\
+  -t, --verbose                print commands before executing them\n\
+"), _("\
+      --version                print the version number\n\
+"), _("\
+  -x, --exit                   exit if the size (see -s) is exceeded\n\
+"), NULL
+  };
+  char **s = optdescr;
+
+  fprintf (stream, _("\
+Usage: %s [OPTION]... COMMAND INITIAL-ARGS...\n\
+Run COMMAND with arguments INITIAL-ARGS and more arguments read from input.\n"),
+	   program_name);
+  fputs (_("\n\
+Mandatory arguments to long options are mandatory for short options too.\n\
+Non-mandatory arguments are indicated by [square brackets].\n\
+"), stream);
+  fputs("\n", stream);
+  for( ; *s; s++)
+    fputs(*s, stream);
+  fputs("\n", stream);
+  fputs (_("Report bugs to <[email protected]>.\n"), stream);
 }
-- 
1.7.7

Reply via email to