From 0f85f4a973448710890da7238b01c670e7301f0b Mon Sep 17 00:00:00 2001 From: Bernardo Gonzalez Kriegel Date: Sun, 23 Mar 2014 19:01:43 -0300 Subject: [PATCH] Bug 7939 - Separate po files for different MARC dialects This patch implements separate PO files for different MARC dialects. It depends on correct filenames, i.e. it will build PO files using files with/without "unimarc|normarc|marc21" on their names. Also depends on Bug 12061 Changes: A) LangInstaller.pm Added definitions to create or update xx-YY-{MARCFLAVOR}.po, minor change to create and install procedure, and modification of install procedure to handle multiple target dirs. Updated documentation. B) Standarization of filenames OPAC prog po file is now xx-YY-opac-prog.po STAFF po file is now xx-YY-staff-prog.po MARC dialects po files are xx-YY-marc-{MARCFLAVOUR}.po [renaming not related, can be in it's own bug] To test: 1) Update po files for your preferred language, ej. nn-NO cd misc/translator perl translate update nn-NO (do it twice if there are warnings) 2) Do some copying/renaming cp po/nn-NO-i-staff-t-prog-v-3006000.po po/nn-NO-marc-UNIMARC.po cp po/nn-NO-i-staff-t-prog-v-3006000.po po/nn-NO-marc-NORMARC.po cp po/nn-NO-i-staff-t-prog-v-3006000.po po/nn-NO-marc-MARC21.po mv po/nn-NO-i-staff-t-prog-v-3006000.po po/nn-NO-staff-prog.po mv po/nn-NO-i-opac-t-prog-v-3006000.po po/nn-NO-opac-prog.po (most MARC dialect strings are on staff, so we use that as basis) 3) Apply the patch 4) Update again to fix translation files, verbose perl translate update nn-NO -v 5) Install language, verbose, verify translations perl translate install nn-NO -v 6) Create translation files rm po/nn-NO* perl translate create nn-NO we must have this list: po/nn-NO-marc-MARC21.po po/nn-NO-marc-NORMARC.po po/nn-NO-marc-UNIMARC.po po/nn-NO-opac-bootstrap.po po/nn-NO-opac-ccsr.po po/nn-NO-opac-prog.po po/nn-NO-pref.po po/nn-NO-staff-help.po po/nn-NO-staff-prog.po [staff-help could be more properly staff-prog-help, another rename] Additional tests: 7) Number of msgids 7.a) Before patch and after upgrade, extract and count msgids for i in $(ls po/nn-NO-*po); \ do msginit -i $i -o nn-old.po --no-translator --no-wrap --locale=nn_NO; \ egrep ^msgid nn-old.po >> old; \ done sort old | uniq | tee s-old | wc -l > n-old s-old: have all msgids n-old: number of msgids 7.b) After patch and after creation of new files Repeat procedure, diferent files (s-new, n-new) 7.c) Compare (diff s-old snew), they are the same (save for a strange UNIMARC char in my case, but it's present on corresponding PO file) 8) Installed dirs/files 8.a) List of EN dirs/files cd koha-tmpl find | egrep "/en/" > en 8.b) List of nn-NO dirs/files. After patch and language install cd koha-tmpl find | egrep "/nn-NO/" | sed 's|/nn-NO/|/en/|' > nn 8.c) Compare (diff en nn), they are the same --- misc/translator/LangInstaller.pm | 118 ++++++++++++++++++++++++++------------ 1 file changed, 80 insertions(+), 38 deletions(-) diff --git a/misc/translator/LangInstaller.pm b/misc/translator/LangInstaller.pm index 158ca22..7bdd51e 100644 --- a/misc/translator/LangInstaller.pm +++ b/misc/translator/LangInstaller.pm @@ -75,8 +75,8 @@ sub new { # Get all available language codes opendir $fh, $self->{path_po}; - my @langs = map { ($_) =~ /(.*)-i-opac/ } - grep { $_ =~ /.*-opac-t-prog/ } readdir($fh); + my @langs = map { ($_) =~ /(.*)-pref/ } + grep { $_ =~ /.*-pref/ } readdir($fh); closedir $fh; $self->{langs} = \@langs; @@ -86,12 +86,12 @@ sub new { { name => 'OPAC prog', dir => "$opachtdocs/prog", - suffix => '-i-opac-t-prog-v-3006000.po', + suffix => '-opac-prog.po', }, { name => 'Intranet prog UI', dir => $context->config('intrahtdocs') . '/prog', - suffix => '-i-staff-t-prog-v-3006000.po', + suffix => '-staff-prog.po', }, { name => 'Intranet prog help', @@ -110,6 +110,20 @@ sub new { }; } + # MARC flavours (hardcoded list) + for ( "MARC21", "UNIMARC", "NORMARC" ) { + my $dirs = $context->config('intrahtdocs') . '/prog'; + opendir $fh, $context->config('opachtdocs'); + for ( grep { not /^\.|\.\.|lib$/ } readdir($fh) ) { + $dirs .= ' ' . "$opachtdocs/$_"; + } + push @{$self->{interface}}, { + name => "$_", + dir => $dirs, + suffix => "-marc-$_.po", + }; + } + bless $self, $class; } @@ -329,29 +343,37 @@ sub install_tmpl { my ($self, $files) = @_; say "Install templates" if $self->{verbose}; for my $trans ( @{$self->{interface}} ) { - print - " Install templates '$trans->{name}'\n", - " From: $trans->{dir}/en/\n", - " To : $trans->{dir}/$self->{lang}\n", - " With: $self->{path_po}/$self->{lang}$trans->{suffix}\n" + my @t_dirs = split(" ", $trans->{dir}); + for my $t_dir ( @t_dirs ) { + print + " Install templates '$trans->{name}'\n", + " From: $t_dir/en/\n", + " To : $t_dir/$self->{lang}\n", + " With: $self->{path_po}/$self->{lang}$trans->{suffix}\n" if $self->{verbose}; - my $trans_dir = ( $trans->{name} =~ /help/ )?"$trans->{dir}":"$trans->{dir}/en/"; - my $lang_dir = ( $trans->{name} =~ /help/ )?"$trans->{dir}":"$trans->{dir}/$self->{lang}"; - $lang_dir =~ s|/en/|/$self->{lang}/|; - mkdir $lang_dir unless -d $lang_dir; - my $excludes = ( $trans->{name} =~ /UI/ )?"-x 'help'":""; - - system - "$self->{process} install " . - "-i $trans_dir " . - "-o $lang_dir ". - "-s $self->{path_po}/$self->{lang}$trans->{suffix} -r $excludes" . - ( - @$files - ? ' -f ' . join ' -f ', @$files - : '' - ) + my $trans_dir = ( $trans->{name} =~ /help/ )?"$t_dir":"$t_dir/en/"; + my $lang_dir = ( $trans->{name} =~ /help/ )?"$t_dir":"$t_dir/$self->{lang}"; + $lang_dir =~ s|/en/|/$self->{lang}/|; + mkdir $lang_dir unless -d $lang_dir; + my $excludes = ( $trans->{name} !~ /help/ )?"":"-x 'help'"; + my $match = ( $trans->{name} =~ /MARC/ )?"-m \"$trans->{name}\"":""; # for MARC translations + my $nomatch = ( $trans->{name} !~ /MARC/ )?"-n \"marc21|unimarc|normarc\"":""; # hardcoded MARC variants + + system + "$self->{process} install " . + "-i $trans_dir " . + "-o $lang_dir ". + "-s $self->{path_po}/$self->{lang}$trans->{suffix} -r " . + "$excludes " . + "$match " . + "$nomatch " . + ( + @$files + ? ' -f ' . join ' -f ', @$files + : '' + ) + } } } @@ -366,16 +388,21 @@ sub update_tmpl { " From: $trans->{dir}/en/\n", " To : $self->{path_po}/$self->{lang}$trans->{suffix}\n" if $self->{verbose}; - my $lang_dir = "$trans->{dir}/$self->{lang}"; - mkdir $lang_dir unless -d $lang_dir; my $trans_dir = ( $trans->{name} =~ /help/ )?"$trans->{dir}":"$trans->{dir}/en/"; - my $excludes = ( $trans->{name} =~ /UI/ )?"-x 'help'":""; + my $excludes = ( $trans->{name} !~ /help/ )?"":"-x 'help'"; + my $dirs = join(" -i ",split(" ",$trans->{dir})); # multiple source dirs + my $match = ( $trans->{name} =~ /MARC/ )?"-m \"$trans->{name}\"":""; # for MARC translations + my $nomatch = ( $trans->{name} !~ /MARC/ )?"-n \"marc21|unimarc|normarc\"":""; # hardcoded MARC variants + system "$self->{process} update " . - "-i $trans_dir " . - "-s $self->{path_po}/$self->{lang}$trans->{suffix} -r $excludes" . + "-i $dirs " . + "-s $self->{path_po}/$self->{lang}$trans->{suffix} -r " . + "$excludes " . + "$match " . + "$nomatch " . ( @$files ? ' -f ' . join ' -f ', @$files @@ -409,12 +436,18 @@ sub create_tmpl { if $self->{verbose}; my $trans_dir = ( $trans->{name} =~ /help/ )?"$trans->{dir}":"$trans->{dir}/en/"; - my $excludes = ( $trans->{name} =~ /UI/ )?"-x 'help'":""; + my $excludes = ( $trans->{name} !~ /help/ )?"":"-x 'help'"; + my $dirs = join(" -i ",split(" ",$trans->{dir})); # multiple source dirs + my $match = ( $trans->{name} =~ /MARC/ )?"-m \"$trans->{name}\"":""; # for MARC translations + my $nomatch = ( $trans->{name} !~ /MARC/ )?"-n \"marc21|unimarc|normarc\"":""; # hardcoded MARC variants system "$self->{process} create " . - "-i $trans_dir " . - "-s $self->{path_po}/$self->{lang}$trans->{suffix} -r $excludes" . + "-i $dirs " . + "-s $self->{path_po}/$self->{lang}$trans->{suffix} -r " . + "$excludes " . + "$match " . + "$nomatch " . ( @$files ? ' -f ' . join ' -f ', @$files @@ -504,17 +537,21 @@ appropriate directory. =item translate create F -Create 3 .po files in F subdirectory: (1) from opac pages templates, (2) -intranet templates, and (3) from preferences. +Create 4 kinds of .po files in F subdirectory: +(1) one from each theme on opac pages templates, +(2) intranet templates and help, +(3) preferences, and +(4) one for each MARC dialect. + =over -=item F-opac.po +=item F-opac-{theme}.po Contains extracted text from english (en) OPAC templates found in -/koha-tmpl/opac-tmpl/prog/en/ directory. +/koha-tmpl/opac-tmpl/{theme}/en/ directory. -=item F-intranet.po +=item F-staff-prog.po and F-staff-help.po Contains extracted text from english (en) intranet templates found in /koha-tmpl/intranet-tmpl/prog/en/ directory. @@ -525,6 +562,11 @@ Contains extracted text from english (en) preferences. They are found in files located in /koha-tmpl/intranet-tmpl/prog/en/admin/preferences directory. +=item F-marc-{MARC}.po + +Contains extracted text from english (en) files from opac and intranet, +related with MARC dialects. + =back =item pref-trans update F -- 1.7.9.5