From 53ca5b35909db916bbce00ab750fe5c07605758a Mon Sep 17 00:00:00 2001
From: Jonathan Druart <jonathan.druart@biblibre.com>
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                                      |   50 +++++++++-----------
 .../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(+), 31 deletions(-)

diff --git a/C4/Serials.pm b/C4/Serials.pm
index ee28a85..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,46 +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)],
-                 "de"=>
-                    [qw(Frühling Sommer Herbst Winter)],
-              );
+              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() {
                     <span title="[% serial.planneddate %]">[% serial.planneddate | $KohaDates %]</span>
                 </td>
                 <td>
-                    [% 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 %]
                 </td>
                 <td>
                     [% 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..9a586dc 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 @@
   <tbody>
     [% FOREACH prediction IN predictions_loop %]
       <tr>
-        <td>[% prediction.number %]</td>
+        <td>
+            [% 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 %]
+        </td>
         <td>
           [% 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() {
                   <select id="locale" name="locale">
                       <option value=""></option>
                       [% FOREACH locale IN locales %]
-                        <option value="[% locale %]">[% locale %]</option>
+                        <option value="[% locale.language %]">[% locale.description %]</option>
                       [% END %]
                     </select>
                   <span class="hint">If empty, English is used</span>
-- 
1.7.10.4