From 0553d59e38b1661d80ba6ab4e6aa5361d31a89e5 Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Wed, 14 Jun 2017 15:37:55 +0200 Subject: [PATCH] Bug 18634: Handle colliding translation for preference sections Problem on this report was caused by translating the tabs Privacy and Payments by the same string. This caused overwriting a hash entry. This patch tests if the key already exists and if so, it merges the entries instead of overwriting the old contents. Test plan: [1] Make sure that e.g. Privacy and Payments translate to e.g Vie privee. [2] Run translate install fr-CA (or the language you altered) [3] Without this patch you should loose preferences from either Privacy or Payments. With this patch, they should be merged. Signed-off-by: Marcel de Rooy Tested with fr-CA. Signed-off-by: Blou Reset the .po files, reproduced the problem. Applied the patch and suddenly 'paypal' appeared. Signed-off-by: Julian Maurice --- misc/translator/LangInstaller.pm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/misc/translator/LangInstaller.pm b/misc/translator/LangInstaller.pm index 683897ddf1..460a4487b9 100644 --- a/misc/translator/LangInstaller.pm +++ b/misc/translator/LangInstaller.pm @@ -336,7 +336,12 @@ sub install_prefs { my $id = $self->{file} . " $section"; my $text = $self->get_trans_text($id); my $nsection = $text ? $text : $section; - $ntab->{$nsection} = $tab_content->{$section}; + if( exists $ntab->{$nsection} ) { + # When translations collide (see BZ 18634) + push @{$ntab->{$nsection}}, @{$tab_content->{$section}}; + } else { + $ntab->{$nsection} = $tab_content->{$section}; + } } $pref->{$tab} = $ntab; } -- 2.11.0