On Sun, May 03, 2015 at 12:55:00PM +0300, Andrej N. Gritsenko wrote:
> Hello!
>
> I have written on Sunday, 3 May, at 12:14:
> >Eike Rathke has written on Saturday, 2 May, at 23:58:
> >>On Saturday, 2015-05-02 13:32:23 +0100, acefael wrote:
>
> >>> [...]
> >>> +"Many others not mentioned here contributed code, fixes," ,
> >>> +"and suggestions." };
> >>>
> >>> - puts (_(Copyright));
> >>> + {
> >>> + int csize = sizeof(Copyright)/sizeof(Copyright[0]);
> >>> + int i;
> >>> + for( i = 0 ; i < csize ; ++i ) {
> >>> + puts (_(Copyright[i]));
> >>> + }
> >>> + }
>
> >>What you may not be aware of, the _() underscore function is a special
> >>function for the gettext() translation process. AFAIK it does not work
> >>with array elements this way (someone correct me if I'm wrong).
>
> > You are wrong. It works exactly that way. Although strings which are
> >passed to invocation of _() should be marked for translation elsewhere by
> >enclosing them into N_() which cannot translate static string, of course,
> >but only marks the string. In the case above each element of Copyright[]
> >array should be enclosed in N_() to be translated by _().
>
> Although looking at the code again I'm afraid it will never work
> since _(Copyright) and _(Copyright[i]) cannot be called at the same
> program, because _() requires (char *) argument and if Copyright is a
> (char *) array then _(Copyright[i]) will not work but if Copyright is
> a (char **) array then _(Copyright) will not work. Therefore a whole
> quoted code will fail to compile unless you supress errors, but if it
> compiles then it would crash at runtime.
the diff removes "puts (_(Copyright));"
and it adds the loop wherein it calls "puts (_(Copyright[i]));".
agreed?
>
> With best regards,
> Andriy.