Thread (5 messages) flat view 5 messages, 3 authors, 2016-06-15

Re: Buglet in i18n?

From: Ævar Arnfjörð Bjarmason <hidden>
Date: 2016-06-15 22:49:51

On Fri, Oct 22, 2010 at 08:34, Jonathan Nieder [off-list ref] wrote:
Ævar Arnfjörð Bjarmason wrote:
quoted
        gettext () {
            printf "%s" "$1"
        }

        eval_gettext () {
            gettext_eval="printf '%s' \"$1\""
            printf "%s" "`eval \"$gettext_eval\"`"
        }
This looks wrong.  Consider a simplified example:

       eval_gettext 'foo "bar baz"'

Now eval_gettext is supposed to just interpolate $variable
substitutions, right?  In particular, the quotation marks
ought to be preserved.

But instead, what gets evaluated is:

       printf '%s' "foo "bar baz""

which splits as

       printf '%s' 'foo bar' 'baz'

which is equivalent to

       printf '%s' 'foo bar'
       printf '%s' 'baz'

with output

       foo barbaz
Indeed. It's a bug.
Maybe something like this would do it?

       gettext_eval=$(
               printf '%s\n' "$1" |
               sed '
                       s/[`\\"]/\\&/g
                       1 s/^/printf "%s" "/
                       $ s/$/"/
               '
       ) &&
       eval "$gettext_eval"
That prints:

    foo "bar baz"

(with double quotes)

But what we want is:

    foo bar baz

But what we're getting is:

    foo barbaz

Have I got that right, sorry, not thinking clearly right now :)
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help