From 429959a8094a504bf35af7ec344252f9b102748f Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 19 Nov 2013 14:30:21 +0100 Subject: [PATCH] Bug 11262: saeson, month name and day name are not translatable with the right way This patch removes the use of POSIX::strftime which is based on the locales of the system. The DateTime module translates month and day name with success, without any locale installed. For the saesons, I use the way used in Koha: write the word in templates. On this way the translate script will match them and allow translators to translate them. This patch adds a regression: the season names are not translated following the locale selected. This could be done when bug 8044 will be pushed. Test plan: 0/ Update your po files and translate the season name. 1/ Create a numbering pattern using season. example: Name: Seasonal Numbering formula: {X} X: Season, Add=1, Every=1, Set back to 0 when more than 3, formatting "name of season" And test the prediction pattern with: frequency: 1/3 month First issue : 2013-09-21 length: 12 months X begins with 2 (21th Septembre is Fall) 2/ Click on the test pattern button, you should get: Fall 21/09/2013 Winter 21/12/2013 Spring 21/03/2014 Summer 21/06/2014 Change the locale and verify the season names are *not* translated. Change the Koha language and verify the season names are translated. 3/ Create a numbering pattern using day or month name. example: Name: day Numbering formula: {X} X: day, Add=1, Every=1, Set back to 0 when more than 6, formatting "name of day" Frequency: 1/day First issue: 2013-11-18 length: 1 month X begins with 0 You should get: Monday 18/11/2013 Tuesday 19/11/2013 Wednesday 20/11/2013 [...] Sunday 15/12/2013 Monday 16/12/2013 Tuesday 17/12/2013 change the locale and verify the day names are translated. --- C4/Serials.pm | 48 +++++++++----------- .../prog/en/modules/serials/serials-collection.tt | 12 ++++- .../en/modules/serials/showpredictionpattern.tt | 14 +++++- .../modules/serials/subscription-numberpatterns.tt | 2 +- 4 files changed, 47 insertions(+), 29 deletions(-) diff --git a/C4/Serials.pm b/C4/Serials.pm index 6d188e7..59babbf 100644 --- a/C4/Serials.pm +++ b/C4/Serials.pm @@ -23,8 +23,9 @@ use Modern::Perl; use C4::Auth qw(haspermission); use C4::Context; use C4::Dates qw(format_date format_date_in_iso); +use DateTime; use Date::Calc qw(:all); -use POSIX qw(strftime setlocale LC_TIME); +use POSIX qw(strftime); use C4::Biblio; use C4::Log; # logaction use C4::Debug; @@ -2665,44 +2666,39 @@ num_type can take : sub _numeration { my ($value, $num_type, $locale) = @_; $value ||= 0; - my $initlocale = setlocale(LC_TIME); - if($locale and $locale ne $initlocale) { - $locale = setlocale(LC_TIME, $locale); - } - $locale ||= $initlocale; - my $string; $num_type //= ''; + $locale ||= 'en'; + my $string; given ($num_type) { when (/^dayname$/) { - $value = $value % 7; - $string = POSIX::strftime("%A",0,0,0,0,0,0,$value); + # 1970-06-01 was a monday + $value = $value % 7; + my $dt = DateTime->new( + year => 1970, + month => 6, + day => $value + 1, + locale => $locale, + ); + $string = $dt->strftime("%A"); } when (/^monthname$/) { - $value = $value % 12; - $string = POSIX::strftime("%B",0,0,0,1,$value,0,0,0,0); + $value = $value % 12; + my $dt = DateTime->new( + year => 1970, + month => $value + 1, + locale => $locale, + ); + $string = $dt->strftime("%B"); } when (/^season$/) { - my $seasonlocale = ($locale) - ? (substr $locale,0,2) - : "en"; - my %seasons=( - "en" => - [qw(Spring Summer Fall Winter)], - "fr"=> - [qw(Printemps Été Automne Hiver)], - ); + my @seasons= qw( Spring Summer Fall Winter ); $value = $value % 4; - $string = ($seasons{$seasonlocale}) - ? $seasons{$seasonlocale}->[$value] - : $seasons{'en'}->[$value]; + $string = $seasons[$value]; } default { $string = $value; } } - if($locale ne $initlocale) { - setlocale(LC_TIME, $initlocale); - } return $string; } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-collection.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-collection.tt index bd94f71..55e96ee 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-collection.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-collection.tt @@ -246,7 +246,17 @@ $(document).ready(function() { [% serial.planneddate | $KohaDates %] - [% serial.serialseq %] + [% IF ( matches = serial.serialseq.match('Spring(.*)') ) %] + Spring[% matches.join("") %] + [% ELSIF ( matches = serial.serialseq.match('Summer(.*)') ) %] + Summer[% matches.join("") %] + [% ELSIF ( matches = serial.serialseq.match('Fall(.*)') ) %] + Fall[% matches.join("") %] + [% ELSIF ( matches = serial.serialseq.match('Winter(.*)') ) %] + Winter[% matches.join("") %] + [% ELSE %] + [% serial.serialseq %] + [% END %] [% IF ( serial.status1 ) %]Expected[% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/showpredictionpattern.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/showpredictionpattern.tt index 5a12652..28f0bdd 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/showpredictionpattern.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/showpredictionpattern.tt @@ -56,7 +56,19 @@ [% FOREACH prediction IN predictions_loop %] - [% prediction.number %] + + [% IF ( matches = prediction.number.match('Spring(.*)') ) %] + Spring[% matches.join("") %] + [% ELSIF ( matches = prediction.number.match('Summer(.*)') ) %] + Summer[% matches.join("") %] + [% ELSIF ( matches = prediction.number.match('Fall(.*)') ) %] + Fall[% matches.join("") %] + [% ELSIF ( matches = prediction.number.match('Winter(.*)') ) %] + Winter[% matches.join("") %] + [% ELSE %] + [% prediction.number %] + [% END %] + [% IF (prediction.publicationdate) %] [% prediction.publicationdate | $KohaDates %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-numberpatterns.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-numberpatterns.tt index 932b54f..dbaae46 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-numberpatterns.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-numberpatterns.tt @@ -228,7 +228,7 @@ function show_blocking_subs() { If empty, English is used -- 1.7.10.4