[Koha-patches] [PATCH] [3.4] New wrapper script for handling translation process
Chris Cormack
chrisc at catalyst.net.nz
Wed Feb 17 08:16:43 CET 2010
From: Frédéric Demians <f.demians at tamil.fr>
Signed-off-by: Chris Cormack <chrisc at catalyst.net.nz>
---
misc/translator/LangInstaller.pm | 432 ++++++++++++++++++++++++++++++++++++++
misc/translator/install-code.pl | 47 ----
misc/translator/install.pl | 32 ---
misc/translator/pref-trans | 312 ---------------------------
misc/translator/rebuild_lang.sh | 9 -
misc/translator/translate | 126 +++++++++++
6 files changed, 558 insertions(+), 400 deletions(-)
create mode 100755 misc/translator/LangInstaller.pm
delete mode 100755 misc/translator/install-code.pl
delete mode 100755 misc/translator/install.pl
delete mode 100755 misc/translator/pref-trans
delete mode 100755 misc/translator/rebuild_lang.sh
create mode 100755 misc/translator/translate
diff --git a/misc/translator/LangInstaller.pm b/misc/translator/LangInstaller.pm
new file mode 100755
index 0000000..dbad9ea
--- /dev/null
+++ b/misc/translator/LangInstaller.pm
@@ -0,0 +1,432 @@
+package LangInstaller;
+
+use strict;
+use warnings;
+
+use C4::Context;
+use YAML::Syck qw( Dump LoadFile );
+use Locale::PO;
+
+
+sub set_lang {
+ my ($self, $lang) = @_;
+
+ $self->{lang} = $lang;
+ $self->{po_path_lang} = $self->{context}->config('intrahtdocs') .
+ "/prog/$lang/modules/admin/preferences";
+}
+
+
+sub new {
+ my ($class, $lang, $pref_only) = @_;
+
+ my $self = { };
+
+ my $context = C4::Context->new();
+ $self->{context} = $context;
+ $self->{path_pref_en} = $context->config('intrahtdocs') .
+ '/prog/en/modules/admin/preferences';
+ set_lang( $self, $lang ) if $lang;
+ $self->{pref_only} = $pref_only;
+ $self->{translator_path} = $context->config('intranetdir') . "/misc/translator";
+ $self->{path_po} = $self->{translator_path} . "/po";
+ $self->{po} = {};
+
+ # Get all .pref file names
+ opendir my $fh, $self->{path_pref_en};
+ my @pref_files = grep { /.pref/ } readdir($fh);
+ close $fh;
+ $self->{pref_files} = \@pref_files;
+
+ # Get all available language codes
+ opendir $fh, $self->{path_po};
+ my @langs = map { ($_) =~ /(.*)-i-opac/ }
+ grep { $_ =~ /.*-opac-/ } readdir($fh);
+ closedir $fh;
+ $self->{langs} = \@langs;
+
+ # Map for both interfaces opac/intranet
+ $self->{interface} = {
+ opac => {
+ dir => $context->config('opachtdocs') . '/prog',
+ suffix => '-i-opac-t-prog-v-3002000.po',
+ },
+ intranet => {
+ dir => $context->config('intrahtdocs') . '/prog',
+ suffix => '-i-staff-t-prog-v-3002000.po',
+ }
+ };
+
+ bless $self, $class;
+}
+
+
+sub po_filename {
+ my $self = shift;
+
+ my $context = C4::Context->new;
+ my $trans_path = $context->config('intranetdir') . '/misc/translator/po';
+ my $trans_file = "$trans_path/" . $self->{lang} . "-pref.po";
+ return $trans_file;
+}
+
+
+sub po_append {
+ my ($self, $id, $comment) = @_;
+ my $po = $self->{po};
+ my $p = $po->{$id};
+ if ( $p ) {
+ $p->comment( $p->comment . "\n" . $comment );
+ }
+ else {
+ $po->{$id} = Locale::PO->new(
+ -comment => $comment,
+ -msgid => $id,
+ -msgstr => ''
+ );
+ }
+}
+
+
+sub add_prefs {
+ my ($self, $comment, $prefs) = @_;
+
+ for my $pref ( @$prefs ) {
+ my $pref_name = '';
+ for my $element ( @$pref ) {
+ if ( ref( $element) eq 'HASH' ) {
+ $pref_name = $element->{pref};
+ last;
+ }
+ }
+ for my $element ( @$pref ) {
+ if ( ref( $element) eq 'HASH' ) {
+ while ( my ($key, $value) = each(%$element) ) {
+ next unless $key eq 'choices';
+ next unless ref($value) eq 'HASH';
+ for my $ckey ( keys %$value ) {
+ my $id = $self->{file} . "#$pref_name# " . $value->{$ckey};
+ $self->po_append( $id, $comment );
+ }
+ }
+ }
+ elsif ( $element ) {
+ $self->po_append( $self->{file} . "#$pref_name# $element", $comment );
+ }
+ }
+ }
+}
+
+
+sub get_trans_text {
+ my ($self, $id) = @_;
+
+ my $po = $self->{po}->{$id};
+ return unless $po;
+ return Locale::PO->dequote($po->msgstr);
+}
+
+
+sub update_tab_prefs {
+ my ($self, $pref, $prefs) = @_;
+
+ for my $p ( @$prefs ) {
+ my $pref_name = '';
+ next unless $p;
+ for my $element ( @$p ) {
+ if ( ref( $element) eq 'HASH' ) {
+ $pref_name = $element->{pref};
+ last;
+ }
+ }
+ for my $i ( 0..@$p-1 ) {
+ my $element = $p->[$i];
+ if ( ref( $element) eq 'HASH' ) {
+ while ( my ($key, $value) = each(%$element) ) {
+ next unless $key eq 'choices';
+ next unless ref($value) eq 'HASH';
+ for my $ckey ( keys %$value ) {
+ my $id = $self->{file} . "#$pref_name# " . $value->{$ckey};
+ my $text = $self->get_trans_text( $id );
+ $value->{$ckey} = $text if $text;
+ }
+ }
+ }
+ elsif ( $element ) {
+ my $text = $self->get_trans_text( $self->{file} . "#$pref_name# $element" );
+ $p->[$i] = $text if $text;
+ }
+ }
+ }
+}
+
+
+sub get_po_from_prefs {
+ my $self = shift;
+
+ for my $file ( @{$self->{pref_files}} ) {
+ my $pref = LoadFile( $self->{path_pref_en} . "/$file" );
+ $self->{file} = $file;
+ #print Dump($pref), "\n";
+ while ( my ($tab, $tab_content) = each %$pref ) {
+ if ( ref($tab_content) eq 'ARRAY' ) {
+ $self->add_prefs( $tab, $tab_content );
+ next;
+ }
+ while ( my ($section, $sysprefs) = each %$tab_content ) {
+ my $comment = "$tab > $section";
+ $self->po_append( $self->{file} . " " . $section, $comment );
+ $self->add_prefs( $comment, $sysprefs );
+ }
+ }
+ }
+}
+
+
+sub save_po {
+ my $self = shift;
+ # Write .po entries into a file put in Koha standard po directory
+ Locale::PO->save_file_fromhash( $self->po_filename, $self->{po} );
+ print "Saved in file: ", $self->po_filename, "\n";
+}
+
+
+sub update_prefs {
+ my $self = shift;
+
+ print "Update '", $self->{lang}, "' preferences .po file from 'en' .pref files\n";
+ # Get po from current 'en' .pref files
+ $self->get_po_from_prefs();
+ my $po_current = $self->{po};
+
+ # Get po from previous generation
+ my $po_previous = Locale::PO->load_file_ashash( $self->po_filename );
+
+ for my $id ( keys %$po_current ) {
+ my $po = $po_previous->{'"'.$id.'"'};
+ next unless $po;
+ my $text = Locale::PO->dequote( $po->msgstr );
+ $po_current->{$id}->msgstr( $text );
+ }
+
+ $self->save_po();
+}
+
+
+sub install_prefs {
+ my $self = shift;
+
+ unless ( -r $self->{po_path_lang} ) {
+ print "Koha directories hierarchy for ", $self->{lang}, " must be created first\n";
+ exit;
+ }
+
+ # Update the language .po file with last modified 'en' preferences
+ # and load it.
+ $self->update_prefs();
+
+ for my $file ( @{$self->{pref_files}} ) {
+ my $pref = LoadFile( $self->{path_pref_en} . "/$file" );
+ $self->{file} = $file;
+ while ( my ($tab, $tab_content) = each %$pref ) {
+ if ( ref($tab_content) eq 'ARRAY' ) {
+ $self->update_tab_prefs( $pref, $tab_content );
+ next;
+ }
+ while ( my ($section, $sysprefs) = each %$tab_content ) {
+ $self->update_tab_prefs( $pref, $sysprefs );
+ }
+ my $ntab = {};
+ for my $section ( keys %$tab_content ) {
+ my $text = $self->get_trans_text($self->{file} . " $section");
+ my $nsection = $text ? $text : $section;
+ $ntab->{$nsection} = $tab_content->{$section};
+ }
+ $pref->{$tab} = $ntab;
+ }
+ my $file_trans = $self->{po_path_lang} . "/$file";
+ print "Write $file\n";
+ open my $fh, ">", $file_trans;
+ print $fh Dump($pref);
+ }
+}
+
+
+sub install_tmpl {
+ my $self = shift;
+
+ print
+ "Install templates\n";
+ while ( my ($interface, $tmpl) = each %{$self->{interface}} ) {
+ print
+ " Install templates '$interface\n",
+ " From: $tmpl->{dir}/en/\n",
+ " To : $tmpl->{dir}/$self->{lang}\n",
+ " With: $self->{path_po}/$self->{lang}$tmpl->{suffix}\n";
+ my $lang_dir = "$tmpl->{dir}/$self->{lang}";
+ mkdir $lang_dir unless -d $lang_dir;
+ system
+ "$self->{translator_path}/tmpl_process3.pl install " .
+ "-i $tmpl->{dir}/en/ " .
+ "-o $tmpl->{dir}/$self->{lang} ".
+ "-s $self->{path_po}/$self->{lang}$tmpl->{suffix} -r"
+ }
+}
+
+
+sub update_tmpl {
+ my $self = shift;
+
+ print
+ "Update templates\n";
+ while ( my ($interface, $tmpl) = each %{$self->{interface}} ) {
+ print
+ " Update templates '$interface'\n",
+ " From: $tmpl->{dir}/en/\n",
+ " To : $self->{path_po}/$self->{lang}$tmpl->{suffix}\n";
+ my $lang_dir = "$tmpl->{dir}/$self->{lang}";
+ mkdir $lang_dir unless -d $lang_dir;
+ system
+ "$self->{translator_path}/tmpl_process3.pl update " .
+ "-i $tmpl->{dir}/en/ " .
+ "-s $self->{path_po}/$self->{lang}$tmpl->{suffix} -r"
+ }
+}
+
+
+sub create_prefs {
+ my $self = shift;
+
+ $self->get_po_from_prefs();
+ $self->save_po();
+}
+
+
+sub create_tmpl {
+ my $self = shift;
+
+ print
+ "Create templates\n";
+ while ( my ($interface, $tmpl) = each %{$self->{interface}} ) {
+ print
+ " Create templates .po files for '$interface'\n",
+ " From: $tmpl->{dir}/en/\n",
+ " To : $self->{path_po}/$self->{lang}$tmpl->{suffix}\n";
+ system
+ "$self->{translator_path}/tmpl_process3.pl create " .
+ "-i $tmpl->{dir}/en/ " .
+ "-s $self->{path_po}/$self->{lang}$tmpl->{suffix} -r"
+ }
+}
+
+
+sub install {
+ my $self = shift;
+ return unless $self->{lang};
+ $self->install_tmpl() unless $self->{pref_only};
+ $self->install_prefs();
+}
+
+
+sub update {
+ my $self = shift;
+ return unless $self->{lang};
+ $self->update_tmpl() unless $self->{pref_only};
+ $self->update_prefs();
+}
+
+
+sub create {
+ my $self = shift;
+ return unless $self->{lang};
+ $self->create_tmpl() unless $self->{pref_only};
+ $self->create_prefs();
+}
+
+
+
+1;
+
+
+=head1 NAME
+
+LangInstaller.pm - Handle templates and preferences translation
+
+=head1 SYNOPSYS
+
+ my $installer = LangInstaller->new( 'fr-FR' );
+ $installer->create();
+ $installer->update();
+ $installer->install();
+ for my $lang ( @{$installer->{langs} ) {
+ $installer->set_lang( $lan );
+ $installer->install();
+ }
+
+=head1 METHODS
+
+=head2 new
+
+Create a new instance of the installer object.
+
+=head2 create
+
+For the current language, create .po files for templates and preferences based
+of the english ('en') version.
+
+=head2 update
+
+For the current language, update .po files.
+
+=head2 install
+
+For the current langage C<$self->{lang}, use .po files to translate the english
+version of templates and preferences files and copy those files in the
+appropriate directory.
+
+=over
+
+=item translate create F<lang>
+
+Create 3 .po files in F<po> subdirectory: (1) from opac pages templates, (2)
+intranet templates, and (3) from preferences.
+
+=over
+
+=item F<lang>-opac.po
+
+Contains extracted text from english (en) OPAC templates found in
+<KOHA_ROOT>/koha-tmpl/opac-tmpl/prog/en/ directory.
+
+=item F<lang>-intranet.po
+
+Contains extracted text from english (en) intranet templates found in
+<KOHA_ROOT>/koha-tmpl/intranet-tmpl/prog/en/ directory.
+
+=item F<lang>-pref.po
+
+Contains extracted text from english (en) preferences. They are found in files
+located in <KOHA_ROOT>/koha-tmpl/intranet-tmpl/prog/en/admin/preferences
+directory.
+
+=back
+
+=item pref-trans update F<lang>
+
+Update .po files in F<po> directory, named F<lang>-*.po.
+
+=item pref-trans install F<lang>
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright 2010 by Tamil, s.a.r.l.
+
+L<http://www.tamil.fr>
+
+This script is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License, version 2.1.
+
+=cut
+
diff --git a/misc/translator/install-code.pl b/misc/translator/install-code.pl
deleted file mode 100755
index 23aa3e3..0000000
--- a/misc/translator/install-code.pl
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-
-=head1 NAME
-
-install-code.pl
-
-=head1 USAGE
-
-Install templates and preferences for given language codes.
-
-For example:
-
- ./install-code fr-FR en-ES
-
-creates templates for languages: fr-FR and en-ES
-
-=cut
-
-
-sub install_code {
- my $code = shift;
- opendir(PO_DIR, "po") or die "Unable to open po directory";
- my @po_files = grep { /^$code-i-opac|^$code-i-staff/ } readdir PO_DIR;
- closedir PO_DIR;
-
- foreach ( @po_files ) {
- my ($interface) = /(staff|opac)/;
- $interface =~ s/staff/intranet/;
- mkdir "../../koha-tmpl/$interface-tmpl/prog/$code";
- print $_, " : ", $interface, "\n";
- my $cmd = "./tmpl_process3.pl install -r " .
- "-i ../../koha-tmpl/$interface-tmpl/prog/en/ " .
- "-o ../../koha-tmpl/$interface-tmpl/prog/$code " .
- "-s po/$_";
- system $cmd;
- }
-
- system "./pref-trans install $code";
-}
-
-
-# Main
-
-install_code ( $_ ) foreach ( @ARGV );
-
diff --git a/misc/translator/install.pl b/misc/translator/install.pl
deleted file mode 100755
index b526a6c..0000000
--- a/misc/translator/install.pl
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/perl
-# script to update all translations
-use strict;
-use warnings;
-
-# Doesn't' handle anymore 'themes' since there is no theme .po files at all
-
-# Get all available language codes
-opendir my $fh, "po";
-my @langs = map { ($_) =~ /(.*)-i-opac/ }
- grep { $_ =~ /.*-opac-/ } readdir($fh);
-closedir DIR;
-
-# Map interface name to .po file suffix
-my %its = (
- opac => '-i-opac-t-prog-v-3002000.po',
- intranet => '-i-staff-t-prog-v-3002000.po',
-);
-for my $lang ( @langs ) {
- print "Language: $lang\n";
- while ( my ($interface, $suffix) = each %its ) {
- my $cmd = "mkdir ../../koha-tmpl/$interface-tmpl/prog/$lang";
- system $cmd;
- $cmd =
- "./tmpl_process3.pl install " .
- "-i ../../koha-tmpl/$interface-tmpl/prog/en/ " .
- "-o ../../koha-tmpl/$interface-tmpl/prog/$lang ".
- "-s po/$lang$suffix -r";
- system $cmd;
- }
- system "./pref-trans install $lang";
-}
diff --git a/misc/translator/pref-trans b/misc/translator/pref-trans
deleted file mode 100755
index 9474a98..0000000
--- a/misc/translator/pref-trans
+++ /dev/null
@@ -1,312 +0,0 @@
-#!/usr/bin/perl
-
-
-package Tokenizer;
-
-use strict;
-use warnings;
-
-use C4::Context;
-use YAML::Syck qw( Dump LoadFile );
-use Data::Dumper;
-use Locale::PO;
-
-
-sub new {
- my ($class, $lang) = @_;
-
- my $self = { lang => $lang };
- my $context = C4::Context->new();
- $self->{path_en} = $context->config('intrahtdocs') .
- '/prog/en/modules/admin/preferences';
- $self->{path_lang} = $context->config('intrahtdocs') .
- "/prog/$lang/modules/admin/preferences";
- $self->{po} = {};
-
- bless $self, $class;
-}
-
-
-sub po_filename {
- my $self = shift;
-
- my $context = C4::Context->new;
- my $trans_path = $context->config('intranetdir') . '/misc/translator/po';
- my $trans_file = "$trans_path/" . $self->{lang} . "-pref.po";
- return $trans_file;
-}
-
-
-sub po_append {
- my ($self, $id, $comment) = @_;
- my $po = $self->{po};
- my $p = $po->{$id};
- if ( $p ) {
- $p->comment( $p->comment . "\n" . $comment );
- }
- else {
- $po->{$id} = Locale::PO->new(
- -comment => $comment,
- -msgid => $id,
- -msgstr => ''
- );
- }
-}
-
-
-sub add_prefs {
- my ($self, $comment, $prefs) = @_;
-
- for my $pref ( @$prefs ) {
- my $pref_name = '';
- for my $element ( @$pref ) {
- if ( ref( $element) eq 'HASH' ) {
- $pref_name = $element->{pref};
- last;
- }
- }
- for my $element ( @$pref ) {
- if ( ref( $element) eq 'HASH' ) {
- while ( my ($key, $value) = each(%$element) ) {
- next unless $key eq 'choices';
- next unless ref($value) eq 'HASH';
- for my $ckey ( keys %$value ) {
- my $id = $self->{file} . "#$pref_name# " . $value->{$ckey};
- $self->po_append( $id, $comment );
- }
- }
- }
- elsif ( $element ) {
- $self->po_append( $self->{file} . "#$pref_name# $element", $comment );
- }
- }
- }
-}
-
-
-sub get_trans_text {
- my ($self, $id) = @_;
-
- my $po = $self->{po}->{$id};
- return unless $po;
- return Locale::PO->dequote($po->msgstr);
-}
-
-
-sub update_prefs {
- my ($self, $pref, $prefs) = @_;
-
- for my $p ( @$prefs ) {
- my $pref_name = '';
- next unless $p;
- my @pref_array = @$p;
- for my $element ( @pref_array ) {
- if ( ref( $element) eq 'HASH' ) {
- $pref_name = $element->{pref};
- last;
- }
- }
- for my $i ( 0..$#pref_array ) {
- my $element = $pref_array[$i];
- if ( ref( $element) eq 'HASH' ) {
- while ( my ($key, $value) = each(%$element) ) {
- next unless $key eq 'choices';
- next unless ref($value) eq 'HASH';
- for my $ckey ( keys %$value ) {
- my $id = $self->{file} . "#$pref_name# " . $value->{$ckey};
- my $text = $self->get_trans_text( $id );
- $value->{$ckey} = $text if $text;
- }
- }
- }
- elsif ( $element ) {
- my $text = $self->get_trans_text( $self->{file} . "#$pref_name# $element" );
- $p->[$i] = $text if $text;
- }
- }
- }
-}
-
-
-sub get_po_from_prefs {
- my $self = shift;
-
- chdir( $self->{path_en} );
- for my $file ( <*.pref> ) {
- my $pref = LoadFile($file);
- $self->{file} = $file;
- #print Dump($pref), "\n";
- while ( my ($tab, $tab_content) = each %$pref ) {
- if ( ref($tab_content) eq 'ARRAY' ) {
- $self->add_prefs( $tab, $tab_content );
- next;
- }
- while ( my ($section, $sysprefs) = each %$tab_content ) {
- my $comment = "$tab > $section";
- $self->po_append( $self->{file} . " " . $section, $comment );
- $self->add_prefs( $comment, $sysprefs );
- }
- }
- }
-}
-
-
-sub save_po {
- my $self = shift;
- # Write .po entries into a file put in Koha standard po directory
- Locale::PO->save_file_fromhash( $self->po_filename, $self->{po} );
- print "Saved in file: ", $self->po_filename, "\n";
-}
-
-
-sub init {
- my $self = shift;
-
- $self->get_po_from_prefs();
- $self->save_po();
-}
-
-
-sub update {
- my $self = shift;
-
- print "Update '", $self->{lang}, "' preferences .po file from 'en' .pref files\n";
- # Get po from current 'en' .pref files
- $self->get_po_from_prefs();
- my $po_current = $self->{po};
-
- # Get po from previous generation
- my $po_previous = Locale::PO->load_file_ashash( $self->po_filename );
-
- for my $id ( keys %$po_current ) {
- my $po = $po_previous->{'"'.$id.'"'};
- next unless $po;
- my $text = Locale::PO->dequote( $po->msgstr );
- $po_current->{$id}->msgstr( $text );
- }
-
- $self->save_po();
-}
-
-
-sub install {
- my $self = shift;
-
- unless ( -r $self->{path_lang} ) {
- print "Koha directories hierarchy for ", $self->{lang}, " must be created first\n";
- exit;
- }
-
- # Update the language .po file with last modified 'en' preferences
- # and load it.
- $self->update();
-
- chdir( $self->{path_en} );
- for my $file ( <*.pref> ) {
- my $pref = LoadFile($file);
- $self->{file} = $file;
- while ( my ($tab, $tab_content) = each %$pref ) {
- if ( ref($tab_content) eq 'ARRAY' ) {
- $self->update_prefs( $pref, $tab_content );
- next;
- }
- while ( my ($section, $sysprefs) = each %$tab_content ) {
- $self->update_prefs( $pref, $sysprefs );
- }
- my $ntab = {};
- for my $section ( keys %$tab_content ) {
- my $text = $self->get_trans_text($self->{file} . " $section");
- my $nsection = $text ? $text : $section;
- $ntab->{$nsection} = $tab_content->{$section};
- }
- $pref->{$tab} = $ntab;
- }
- my $file_trans = $self->{path_lang} . "/$file";
- print "Write $file\n";
- open my $fh, ">", $file_trans;
- print $fh Dump($pref);
- }
-}
-
-
-package Main;
-
-use strict;
-use warnings;
-
-use Pod::Usage;
-
-sub usage {
- pod2usage( -verbose => 2 );
- exit;
-}
-
-
-usage() if $#ARGV != 1;
-
-my ($cmd, $lang) = @ARGV;
-if ( $cmd =~ /init|install|update/i ) {
- my $tokenizer = Tokenizer->new( $lang );
- $tokenizer->init( ) if $cmd =~ /init/i;
- $tokenizer->update( ) if $cmd =~ /update/i;
- $tokenizer->install( ) if $cmd =~ /install/i;
-}
-else {
- usage();
-}
-
-
-
-=head1 NAME
-
-pref-trans - Handle preferences translation
-
-=head1 SYNOPSYS
-
- pref-trans init fr-FR
- pref-trans update fr-FR
- pref-trans install fr-FR
-
-=head1 USAGE
-
-=over
-
-=item pref-trans init F<lang>
-
-Create a .po file in po directory, named F<lang>-pref.po. This file contains
-text to translate extracted from .pref files.
-
-=item pref-trans update F<lang>
-
-Update a .po file in po directory, named F<lang>-pref.po. This file contains
-new text to translate extracted from .pref files. Previous translated text are
-kept. There is a minor bug, which can't be fixed due to preferences data
-struture: preferences tab subsection labels are lost when updating .po file.
-
-=item pref-trans install F<lang>
-
-Use F<lang>-pref.po file to translate the english version of preferences files
-and copy those files in the appropriate directory.
-
-=back
-
-=head1 DESCRIPTION
-
-Koha preferences are stored in a data structure found in
-koha-tmpl/intranet-tmpl/en/module/admin/preferences/ files. Depending of user
-language, other files are used. This script extract text from 'en' preference
-files, and put them in one .po file. This .po file can be updated. When
-completed, a .po file can be applied to create localized versions of
-preferences templates.
-
-=head1 COPYRIGHT AND LICENSE
-
-Copyright 2010 by Tamil, s.a.r.l.
-
-L<http://www.tamil.fr>
-
-This script is free software; you can redistribute it and/or modify it under
-the terms of the GNU Lesser General Public License, version 2.1.
-
-=cut
-
diff --git a/misc/translator/rebuild_lang.sh b/misc/translator/rebuild_lang.sh
deleted file mode 100755
index 5821e98..0000000
--- a/misc/translator/rebuild_lang.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-#./tmpl_process3.pl install -r -s po/prog_opac_fr_FR.po -i ../../koha-tmpl/opac-tmpl/prog/en -o ../../koha-tmpl/opac-tmpl/prog/fr
-./tmpl_process3.pl install -r -s po/prog_intranet_fr_FR.po -i ../../koha-tmpl/intranet-tmpl/prog/en -o ../../koha-tmpl/intranet-tmpl/prog/fr
-
-#./tmpl_process3.pl install -r -s po/prog_opac_zh_TW.po -i ../../koha-tmpl/opac-tmpl/prog/en -o ../../koha-tmpl/opac-tmpl/prog/zh-TW
-#./tmpl_process3.pl install -r -s po/default_intranet_zh_TW.po -i ../../koha-tmpl/intranet-tmpl/default/en -o ../../koha-tmpl/intranet-tmpl/default/zh-TW
-
-# ./tmpl_process3.pl install -r -s po/css_opac_es_AR.po -i ../../koha-tmpl/opac-tmpl/css/zh_TW -o ../../koha-tmpl/opac-tmpl/css/es_AR
-#./tmpl_process3.pl install -r -s po/default_intranet_es_AR.po -i ../../koha-tmpl/intranet-tmpl/default/en -o ../../koha-tmpl/intranet-tmpl/default/es
diff --git a/misc/translator/translate b/misc/translator/translate
new file mode 100755
index 0000000..bfa93f3
--- /dev/null
+++ b/misc/translator/translate
@@ -0,0 +1,126 @@
+#!/usr/bin/perl
+
+package Main;
+
+use strict;
+use warnings;
+
+use LangInstaller;
+use Getopt::Long;
+use Pod::Usage;
+
+
+my $verbose = 0;
+my $pref = 0;
+my $all = 0;
+GetOptions(
+ 'v|verbose' => \$verbose,
+ 'p' => \$pref,
+ 'a|all' => \$all,
+);
+
+
+sub usage {
+ pod2usage( -verbose => 2 );
+ exit;
+}
+
+
+usage() if $#ARGV != 1 && $#ARGV != 0;
+
+my ($cmd, $lang) = @ARGV;
+$cmd = lc $cmd;
+if ( $cmd =~ /create|install|update/ ) {
+ my $installer = LangInstaller->new( $lang, $pref );
+ if ( $all ) {
+ usage() if $cmd eq 'create';
+ for my $lang ( @{$installer->{langs}} ) {
+ $installer->set_lang( $lang );
+ $installer->$cmd();
+ }
+ }
+ else {
+ $installer->$cmd();
+ }
+}
+else {
+ usage();
+}
+
+
+
+=head1 NAME
+
+translate - Handle templates and preferences translation
+
+=head1 SYNOPSYS
+
+ translate create fr-FR
+ translate update fr-FR
+ translate install fr-FR
+ translate -p install fr-FR
+ translate install
+
+=head1 DESCRIPTION
+
+In Koha, three categories of information are translated based on standard GNU
+.po files: opac templates pages, intranet templates and system preferences. The
+script is a wrapper. It allows to quickly create/update/install .po files for a
+given language or for all available languages.
+
+=head1 USAGE
+
+=over
+
+=item translate create F<lang>
+
+Create 3 .po files in F</misc/translator/po> subdirectory: (1) from opac pages
+templates, (2) intranet templates, and (3) from preferences. English 'en'
+version of templates and preferences are used as references.
+
+=over
+
+=item F<lang>-opac.po
+
+Contains extracted text from english (en) OPAC templates found in
+<KOHA_ROOT>/koha-tmpl/opac-tmpl/prog/en/ directory.
+
+=item F<lang>-intranet.po
+
+Contains extracted text from english (en) intranet templates found in
+<KOHA_ROOT>/koha-tmpl/intranet-tmpl/prog/en/ directory.
+
+=item F<lang>-pref.po
+
+Contains extracted text from english (en) preferences. They are found in files
+located in <KOHA_ROOT>/koha-tmpl/intranet-tmpl/prog/en/admin/preferences
+directory.
+
+=back
+
+=item translate [-p] update F<lang>
+
+Update .po files in F<po> directory, named F<lang>-*.po. Without F<lang>, all
+available languages are updated. With -p option, only preferences .po file is
+updated.
+
+=item translate [-p] install F<lang>
+
+Use .po files to translate the english version of templayes and preferences files
+and copy those files in the appropriate directory. Without F<lang>, all
+available languages are installed. With -p option, only preferences .po file is
+updated.
+
+=back
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright 2010 by Tamil, s.a.r.l.
+
+L<http://www.tamil.fr>
+
+This script is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License, version 2.1.
+
+=cut
+
--
1.6.3.3
More information about the Koha-patches
mailing list