Re: Buglet in i18n?
On Fri, Oct 22, 2010 at 08:34, Jonathan Nieder <jrnieder@gmail.com> wrote:
Show 35 quoted lines
> Ævar Arnfjörð Bjarmason wrote:
>
>> 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 barbazShow 11 quoted lines
> 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 :)