$self->{xgettext} = `which xgettext`;
$self->{sed} = `which sed`;
$self->{po2json} = "$Bin/po2json";
+ $self->{gzip} = `which gzip`;
+ $self->{gunzip} = `which gunzip`;
chomp $self->{cp};
chomp $self->{msgmerge};
chomp $self->{msgfmt};
chomp $self->{msginit};
chomp $self->{xgettext};
chomp $self->{sed};
+ chomp $self->{gzip};
+ chomp $self->{gunzip};
unless ($self->{xgettext}) {
die "Missing 'xgettext' executable. Have you installed the gettext package?\n";
unlink "$Bin/$self->{domain}-js.pot";
}
+sub compress {
+ my ($self, $files) = @_;
+ my @langs = $self->{lang} ? ($self->{lang}) : $self->get_all_langs();
+ for my $lang ( @langs ) {
+ $self->set_lang( $lang );
+ opendir( my $dh, $self->{path_po} );
+ my @files = grep { $_ =~ /^$self->{lang}.*po$/ } readdir $dh;
+ foreach my $file ( @files ) {
+ say "Compress file $file" if $self->{verbose};
+ system "$self->{gzip} -9 $self->{path_po}/$file";
+ }
+ }
+}
+
+sub uncompress {
+ my ($self, $files) = @_;
+ my @langs = $self->{lang} ? ($self->{lang}) : $self->get_all_langs();
+ for my $lang ( @langs ) {
+ opendir( my $dh, $self->{path_po} );
+ $self->set_lang( $lang );
+ my @files = grep { $_ =~ /^$self->{lang}.*po.gz$/ } readdir $dh;
+ foreach my $file ( @files ) {
+ say "Uncompress file $file" if $self->{verbose};
+ system "$self->{gunzip} $self->{path_po}/$file";
+ }
+ }
+}
+
sub install {
my ($self, $files) = @_;
return unless $self->{lang};
+ $self->uncompress();
$self->install_tmpl($files) unless $self->{pref_only};
$self->install_prefs();
$self->install_messages();
sub get_all_langs {
my $self = shift;
opendir( my $dh, $self->{path_po} );
- my @files = grep { $_ =~ /-pref.po$/ }
+ my @files = grep { $_ =~ /-pref.(po|po.gz)$/ }
readdir $dh;
- @files = map { $_ =~ s/-pref.po$//; $_ } @files;
+ @files = map { $_ =~ s/-pref.(po|po.gz)$//; $_ } @files;
}
my @langs = $self->{lang} ? ($self->{lang}) : $self->get_all_langs();
for my $lang ( @langs ) {
$self->set_lang( $lang );
+ $self->uncompress();
$self->update_tmpl($files) unless $self->{pref_only};
$self->update_prefs();
$self->update_messages();
my ($cmd, $lang) = @ARGV;
$cmd = lc $cmd;
-if ( $cmd =~ /create|install|update/ ) {
+if ( $cmd =~ /^(create|install|update|compress|uncompress)$/ ) {
my $installer = LangInstaller->new( $lang, $pref, $verbose );
if ( $cmd ne 'create' and $lang and not grep( {$_ eq $lang} @{ $installer->{langs} } ) ) {
print "Unsupported language: $lang\n";
translate install fr-FR -f search -f memberentry
translate -p install fr-FR
translate install
+ translate compress [fr-FR]
+ translate uncompress [fr-FR]
=head1 DESCRIPTION
With -f parameter (repeatable) you can specify specific files to translate. For
example, -f search will translate all templates containing 'search'.
+=item translate compress F<lang>
+
+Compress .po files in F<po> directory, named F<lang>-*.po. Without F<lang>, files
+from all available languages are compressed.
+
+=item translate uncompress F<lang>
+
+Uncompress .po.gz files in F<po> directory, named F<lang>-*.po.gz. Without F<lang>,
+files from all available languages are uncompressed.
+
+
=back
=cut