From 96c6cff1ee564d029c954edebc7964b6c1593c2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Demians?= Date: Wed, 17 Oct 2012 17:14:17 +0200 Subject: [PATCH] [SIGNED-OFF] Bug 8942 Fix translation of JS strings containing simple/double quote Content-Type: text/plain; charset="utf-8" With this patch, translated strings containing simple or double quotes are escaped. This prevent breaking JavaScript strings. For example: Today, translated in French is Aujourd'hui. And so this JS line: var m = _('Today'); become in French: var m = _('Aujourd'hui'); It breaks the whole JS code. With this patch: var m = _('Ajourd\'hui'); Same issue with ", and JS strings like "foo". Signed-off-by: Owen Leonard Confirmed that the example above is handled correctly after applying the patch and generating a fresh set of French templates. --- misc/translator/tmpl_process3.pl | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/misc/translator/tmpl_process3.pl b/misc/translator/tmpl_process3.pl index 89c993f..3d38af7 100755 --- a/misc/translator/tmpl_process3.pl +++ b/misc/translator/tmpl_process3.pl @@ -117,8 +117,10 @@ sub text_replace (**) { for my $t (@{$s->js_data}) { # FIXME for this whole block if ($t->[0]) { - printf $output "%s%s%s", $t->[2], find_translation $t->[3], - $t->[2]; + my $translation = find_translation $t->[3]; + $translation =~ s/'/\\'/g; + $translation =~ s/"/\\"/g; + printf $output "%s%s%s", $t->[2], $translation, $t->[2]; } else { print $output $t->[1]; } -- 1.7.9.5