On Mon, Oct 22, 2018 at 10:23 PM SZEDER Gábor <szeder....@gmail.com> wrote:
> [TODO: Fallout?
>        A 'printf(_("foo: %s"), var);' call includes the contents of
>        'var' unscrambled in the output.  Could that hide the
>        translation of a string that should not have been translated?
>        I'm afraid yes: to check the output of that printf() a sloppy
>        test could do:
>
>          git plumbing-cmd >out && grep "var's content" out
>
>        which would fail in a regular GETTEXT_POISON test run, but
>        would succeed in a scrambled test run.  Does this matter in
>        practice, do we care at all?

If var is supposed to be translated, _() must have been called before
the final string is stored in var and the content is already
scrambled. Whatever left unscrambled is machine-generated and should
be ok to grep, or we have found new strings that should be _() but
not.

PS. Another thing I'd like to have is to mark the beginning and end of
a scrambled text. For example, _("foo") produces "[f.o.o]" or
something like that. If we have it, it's easier to see "text legos"
(instead of full sentences) that makes translator's life harder. But
it could interfere with stuff (e.g. some strings must start with '#')
so let's forget it for now.

>
>        Does gettext_scramble() need a FORMAT_PRESERVING annotation?
>        Seems to work fine without it so far...]

I don't think you can. _() can be called on plain strings that just
happen to have '%' in them.
-- 
Duy

Reply via email to