LP#1544723: i18n - Add webstaff to update_pofiles
[working/Evergreen.git] / build / i18n / scripts / update_pofiles
1 #!/usr/bin/perl
2 # Copyright (C) 2011 Laurentian University
3 # Author: Dan Scott <dscott@laurentian.ca>
4 #
5 # This program is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU General Public License
7 # as published by the Free Software Foundation; either version 2
8 # of the License, or (at your option) any later version.
9
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 # ---------------------------------------------------------------
15
16 use strict;
17 use warnings;
18 use File::Spec;
19 use Getopt::Long;
20 use Pod::Usage qw/ pod2usage /;
21
22 my $lp_base_dir;
23 my $eg_base_dir;
24 my $help = 0;
25
26 GetOptions(
27     'launchpad-base-dir=s' => \$lp_base_dir,
28     'evergreen-base-dir=s' => \$eg_base_dir,
29     'help' => \$help,
30 );
31
32 if ($help) {
33     pod2usage(0);
34 }
35
36 check_options();
37
38 my %locs = (
39     ar => "ar-AR",
40     cs => "cs-CZ",
41     de => "de-DE",
42     en_CA => "en-CA",
43     en_GB => "en-GB",
44     es => "es-ES",
45     fi => "fi-FI",
46     fr => "fr-CA",
47     he => "he-IL",
48     hu => "hu-HU",
49     hy => "hy-AM",
50     oc => "oc-FR",
51     pt_BR => "pt-BR",
52     ru => "ru-RU",
53     sv => "sv-SE",
54     tr => "tr-TR",
55 );
56
57 my @pofiles = qw/
58     acq.js
59     admin.properties
60     authority.js
61     auth.properties
62     AutoFieldWidget.js
63     capture.js
64     cat.properties
65     circ.properties
66     common.properties
67     conify.dtd
68     conify.js
69     db.seed
70     FlattenerGrid.js
71     fm_IDL.dtd
72     ils_events.xml
73     lang.dtd
74     match_set.js
75     multiclass_search_help.html
76     offline.properties
77     opac.dtd
78     opac.js
79     patron.properties
80     PCrudFilterPane.js
81     pickup_and_return.js
82     pull_list.js
83     register.js
84     reports.dtd
85     reports.js
86     reservation.js
87     Searcher.js
88     selfcheck.js
89     serial.js
90     serial.properties
91     tpac
92     TranslatorPopup.js
93     URLVerify.js
94     User.js
95     vandelay.dtd
96     vandelay.js
97     webstaff
98     XULTermLoader.js
99 /;
100
101 foreach my $pofile (@pofiles) {
102     foreach my $lang (keys %locs) {
103         my $src_file = File::Spec->catfile(
104             ($lp_base_dir, 'build/i18n/po', $pofile), "$lang.po"
105         );
106         my $dest_file = File::Spec->catfile(
107             ($eg_base_dir, 'build/i18n/po', $pofile), "$locs{$lang}.po"
108         );
109
110         # If the source file doesn't exist, move on
111         next if ! -f $src_file;
112
113         # Check for actual changed strings
114         if (-f $dest_file) {
115             my $diff = `diff -u $dest_file $src_file`;
116
117             # Ignore changes to the PO header
118             $diff =~ s/^\+#.*?$//ms;
119             $diff =~ s/^\+"PO-Revision-Date:.*?$//ms;
120             $diff =~ s/^\+"Report-Msgid-Bugs-To:.*?$//ms;
121             $diff =~ s/^\+"X-Launchpad-Export-Date:.*?$//ms;
122             $diff =~ s/^\+"X-Generator:.*?$//ms;
123
124             if ($diff =~ /^\+/sm) {
125                 `cp $src_file $dest_file`;
126             }
127         } else {
128             # Copy brand new translations into place
129             `cp $src_file $dest_file`;
130         }
131     }
132 }
133
134 sub check_options {
135     if (!($lp_base_dir && $eg_base_dir)) {
136         pod2usage(1);
137     }
138
139     if (!-d $lp_base_dir) {
140         print STDERR "$lp_base_dir does not exist; exiting\n";
141         pod2usage(1);
142     }
143
144     if (!-d $eg_base_dir) {
145         print STDERR "$eg_base_dir does not exist; exiting\n";
146         pod2usage(1);
147     }
148
149     if (!-d File::Spec->catdir($lp_base_dir, '.bzr')) {
150         print STDERR "$lp_base_dir is not a bzr branch; exiting\n";
151         pod2usage(1);
152     }
153
154     if (!-f File::Spec->catfile(($eg_base_dir, '.git'), 'config')) {
155         print STDERR "$eg_base_dir is not a git clone; exiting\n";
156         pod2usage(1);
157     }
158 }
159
160 __END__
161
162 =head1 NAME
163
164 update_pofiles - Updates translations from Launchpad
165
166 =head1 SYNOPSIS
167
168 B<update_pofile> B<--launchpad-base-dir>=I<translation-export-directory>
169                 B<--evergreen-base-dir>=I<evergreen-git-clone-directory>
170
171 =head1 DESCRIPTION
172
173 Assuming that you have an updated bzr checkout of the translation-export
174 to satisfy the 'launchpad-base-dir' argument, and an updated git clone
175 of Evergreen master to satisfy the 'evergreen-base-dir' argument,
176 this script attempts to copy only the new or changed translations
177 from the Launchpad directory into the Evergreen directory. It
178 converts the Launchpad I<ll> and I<ll_LL> locale names into Evergreen's
179 I<ll-LL> locale names.
180
181 Note that the user is still required to build, test, and check in the
182 updated translations.
183
184 =head1 OPTIONS
185
186 =over
187
188 =item * B<-l> I<translation-export-directory>, B<--launchpad-base-dir>=I<translation-export-directory>
189
190 Specifies the directory holding the updated bzr checkout of
191 https://code.launchpad.net/~denials/evergreen/translation-export - which
192 you can create via "bzr lp:~denials/evergreen/translation-export".
193
194 =item * B<-e> I<evergreen-directory>, B<--evergreen-base-dir>=I<evergreen-directory>
195
196 Specifies the directory holding the updated git clone of Evergreen, which you
197 can create via "git clone git://git.evergreen-ils.org/Evergreen.git".
198
199 =back
200
201 =head1 AUTHOR
202
203 Dan Scott <dscott@laurentian.ca>
204
205 =head1 COPYRIGHT AND LICENSE
206
207 Copyright 2011 by Dan Scott
208
209 This program is free software; you can redistribute it and/or
210 modify it under the terms of the GNU General Public License
211 as published by the Free Software Foundation; either version 2
212 of the License, or (at your option) any later version.
213
214 This program is distributed in the hope that it will be useful,
215 but WITHOUT ANY WARRANTY; without even the implied warranty of
216 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
217 GNU General Public License for more details.
218
219 You should have received a copy of the GNU General Public License
220 along with this program; if not, write to the Free Software
221 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
222
223 =cut
224