From b37b8556384a541f03046bfc16febf32098c3a3e Mon Sep 17 00:00:00 2001 From: Kevin Carnes Date: Wed, 28 Sep 2022 10:39:30 +0200 Subject: [PATCH] Bug 31640: Fuzzy translations of preferences can cause missing sections and inaccurate translations This patch ignores fuzzy translations for preferences and warns if there are multiple sections with the same translated name. Test Plan: 1) Install English United Kingdom translations (./misc/translator/translate install en-GB) 2) Go to Koha administration in the staff interface 3) Click Global system preferences 4) Select I18N/L10N preferences 5) Enable English United Kingdom in the language preference for staff interface 6) Save all I18N/L10N preferences 7) Return to Koha administration 8) Select English United Kingdom as the language at the bottom of the screen 9) Click on Global system preferences 10) Select Circulation 11) Observe that there is only SelfCheckInMainUserBlock or StockRotation, but not both 12) Apply the patch 13) Install English United Kingdom translations (./misc/translator/translate install en-GB) 14) Go to Koha administration 15) Select English United Kingdom as the language at the bottom of the screen 16) Click on Global system preferences 17) Select Circulation 18) Observe that SelfCheckInMainUserBlock and StockRotation are both present Signed-off-by: Caroline Cyr La Rose Signed-off-by: Jonathan Druart Signed-off-by: Tomas Cohen Arazi (cherry picked from commit 5fdc436119803a08f7c52f9aedf054a7c59988cd) Signed-off-by: Jacob O'Mara --- misc/translator/LangInstaller.pm | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/misc/translator/LangInstaller.pm b/misc/translator/LangInstaller.pm index 8a990e334f..a0f323121e 100644 --- a/misc/translator/LangInstaller.pm +++ b/misc/translator/LangInstaller.pm @@ -147,7 +147,7 @@ sub get_trans_text { my ($self, $msgid, $default) = @_; my $po = $self->{po}->{Locale::PO->quote($msgid)}; - if ($po) { + if ( $po and not defined( $po->fuzzy() ) ) { my $msgstr = Locale::PO->dequote($po->msgstr); if ($msgstr and length($msgstr) > 0) { return $msgstr; @@ -174,6 +174,18 @@ sub get_translated_tab_content { } keys %$tab_content }; + if ( keys %$translated_tab_content != keys %$tab_content ) { + my %duplicates; + for my $section (keys %$tab_content) { + push @{$duplicates{$self->get_trans_text("$file $section", $section)}}, $section; + } + for my $translation (keys %duplicates) { + if (@{$duplicates{$translation}} > 1) { + warn qq(In file "$file", "$translation" is a translation for sections ") . join('", "', @{$duplicates{$translation}}) . '"'; + } + } + } + return $translated_tab_content; } @@ -251,6 +263,17 @@ sub install_prefs { } keys %$pref }; + if ( keys %$translated_pref != keys %$pref ) { + my %duplicates; + for my $tab (keys %$pref) { + push @{$duplicates{$self->get_trans_text($file, $tab)}}, $tab; + } + for my $translation (keys %duplicates) { + if (@{$duplicates{$translation}} > 1) { + warn qq(In file "$file", "$translation" is a translation for tabs ") . join('", "', @{$duplicates{$translation}}) . '"'; + } + } + } my $file_trans = $self->{po_path_lang} . "/$file"; print "Write $file\n" if $self->{verbose}; -- 2.39.5