Bugzilla – Attachment 13728 Details for
Bug 9161
Translate only specific files
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 9161: translate only 1 specific file
Bug-9161-translate-only-1-specific-file.patch (text/plain), 7.83 KB, created by
Jonathan Druart
on 2012-11-28 10:16:39 UTC
(
hide
)
Description:
Bug 9161: translate only 1 specific file
Filename:
MIME Type:
Creator:
Jonathan Druart
Created:
2012-11-28 10:16:39 UTC
Size:
7.83 KB
patch
obsolete
>From 6904f8bd29ca70fe9d73e4f5d06a9953b04ebe09 Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@biblibre.com> >Date: Wed, 28 Nov 2012 11:04:35 +0100 >Subject: [PATCH] Bug 9161: translate only 1 specific file > >The previous version of tmpl_process3.pl says in the pod: > -i, --input=SOURCE Get or update strings from SOURCE file. > SOURCE is a directory if -r is also specified. >But is was not possible to specify one or more file. > >This patch allows us to give one or more specific file with the -f >parameter. > >for eg.: >perl tmpl_process3.pl install -i /home/koha/koha-tmpl/opac-tmpl/prog/en/modules/ > -o /home/koha/koha-tmpl/opac-tmpl/prog/fr-FR/modules/ > -s /home/koha/misc/translator/po/fr-FR-i-opac-t-prog-v-3006000.po > -r > -f opac-account.tt > -f opac-main.tt >--- > misc/translator/tmpl_process3.pl | 87 ++++++++++++++++++-------------------- > 1 file changed, 42 insertions(+), 45 deletions(-) > >diff --git a/misc/translator/tmpl_process3.pl b/misc/translator/tmpl_process3.pl >index 3d38af7..f1ae0b0 100755 >--- a/misc/translator/tmpl_process3.pl >+++ b/misc/translator/tmpl_process3.pl >@@ -13,6 +13,7 @@ using gettext-compatible translation files > > use strict; > #use warnings; FIXME - Bug 2505 >+use File::Basename; > use Getopt::Long; > use Locale::PO; > use File::Temp qw( :POSIX ); >@@ -21,7 +22,7 @@ use VerboseWarnings qw( :warn :die ); > > ############################################################################### > >-use vars qw( @in_files $in_dir $str_file $out_dir $quiet ); >+use vars qw( $in_dir @filenames $str_file $out_dir $quiet ); > use vars qw( @excludes $exclude_regex ); > use vars qw( $recursive_p ); > use vars qw( $pedantic_p ); >@@ -133,25 +134,28 @@ sub text_replace (**) { > } > } > >-sub listfiles ($$$) { >- my($dir, $type, $action) = @_; >+sub listfiles { >+ my($dir, $type, $action, $filenames) = @_; > my @it = (); > if (opendir(DIR, $dir)) { >- my @dirent = readdir DIR; # because DIR is shared when recursing >- closedir DIR; >- for my $dirent (@dirent) { >- my $path = "$dir/$dirent"; >- if ($dirent =~ /^\./ || $dirent eq 'CVS' || $dirent eq 'RCS' >- || (defined $exclude_regex && $dirent =~ /^(?:$exclude_regex)$/)) { >- ; >- } elsif (-f $path) { >- push @it, $path if (!defined $type || $dirent =~ /\.(?:$type)$/) || $action eq 'install'; >- } elsif (-d $path && $recursive_p) { >- push @it, listfiles($path, $type, $action); >+ my @dirent = readdir DIR; # because DIR is shared when recursing >+ closedir DIR; >+ for my $dirent (@dirent) { >+ my $path = "$dir/$dirent"; >+ if ($dirent =~ /^\./ || $dirent eq 'CVS' || $dirent eq 'RCS' >+ || (defined $exclude_regex && $dirent =~ /^(?:$exclude_regex)$/)) { >+ ; >+ } elsif (-f $path) { >+ my $basename = basename $path; >+ push @it, $path >+ if ( not @$filenames or ( grep {/$basename/} @$filenames ) ) >+ and (!defined $type || $dirent =~ /\.(?:$type)$/) || $action eq 'install'; >+ } elsif (-d $path && $recursive_p) { >+ push @it, listfiles($path, $type, $action, $filenames); >+ } > } >- } > } else { >- warn_normal "$dir: $!", undef; >+ warn_normal "$dir: $!", undef; > } > return @it; > } >@@ -183,12 +187,13 @@ Usage: $0 create [OPTION] > or: $0 --help > Create or update PO files from templates, or install translated templates. > >- -i, --input=SOURCE Get or update strings from SOURCE file. >- SOURCE is a directory if -r is also specified. >+ -i, --input=SOURCE Get or update strings from SOURCE directory. > -o, --outputdir=DIRECTORY Install translation(s) to specified DIRECTORY > --pedantic-warnings Issue warnings even for detected problems > which are likely to be harmless > -r, --recursive SOURCE in the -i option is a directory >+ -f, --filename=FILE FILE is a specific filaneme. >+ If given, only these files will be processed. > -s, --str-file=FILE Specify FILE as the translation (po) file > for input (install) or output (create, update) > -x, --exclude=REGEXP Exclude files matching the given REGEXP >@@ -214,7 +219,8 @@ sub usage_error (;$) { > ############################################################################### > > GetOptions( >- 'input|i=s' => \@in_files, >+ 'input|i=s' => \$in_dir, >+ 'filename|f=s' => \@filenames, > 'outputdir|o=s' => \$out_dir, > 'recursive|r' => \$recursive_p, > 'str-file|s=s' => \$str_file, >@@ -235,36 +241,29 @@ $SIG{__WARN__} = sub { > > my $action = shift or usage_error('You must specify an ACTION.'); > usage_error('You must at least specify input and string list filenames.') >- if !@in_files || !defined $str_file; >+ if !$in_dir || !defined $str_file; > > # Type match defaults to *.tt plus *.inc if not specified > $type = "tt|inc|xsl" if !defined($type); > >-# Check the inputs for being files or directories >-for my $input (@in_files) { >- usage_error("$input: Input must be a file or directory.\n" >- . "(Symbolic links are not supported at the moment)") >- unless -d $input || -f $input;; >-} >+# Check the inputs for being directories >+usage_error("$in_dir: Input must be a directory.\n" >+ . "(Symbolic links are not supported at the moment)") >+ unless -d $in_dir; > > # Generates the global exclude regular expression > $exclude_regex = '(?:'.join('|', @excludes).')' if @excludes; > >+my @in_files; > # Generate the list of input files if a directory is specified >-if (-d $in_files[0]) { >- die "If you specify a directory as input, you must specify only it.\n" >- if @in_files > 1; >- >- # input is a directory, generates list of files to process >- $in_dir = $in_files[0]; >- $in_dir =~ s/\/$//; # strips the trailing / if any >- @in_files = listfiles($in_dir, $type, $action); >-} else { >- for my $input (@in_files) { >+# input is a directory, generates list of files to process >+$in_dir =~ s/\/$//; # strips the trailing / if any >+ >+for my $fn ( @filenames ) { > die "You cannot specify input files and directories at the same time.\n" >- unless -f $input; >- } >+ if -d $fn; > } >+@in_files = listfiles($in_dir, $type, $action, \@filenames); > > # restores the string list from file > $href = Locale::PO->load_file_ashash($str_file); >@@ -407,23 +406,21 @@ if ($action eq 'create') { > for my $input (@in_files) { > die "Assertion failed" > unless substr($input, 0, length($in_dir) + 1) eq "$in_dir/"; >-# print "$input / $type\n"; >+ >+ my $target = $out_dir . substr($input, length($in_dir)); >+ my $targetdir = $` if $target =~ /[^\/]+$/s; >+ > if (!defined $type || $input =~ /\.(?:$type)$/) { > my $h = TmplTokenizer->new( $input ); > $h->set_allow_cformat( 1 ); > VerboseWarnings::set_input_file_name $input; >- >- my $target = $out_dir . substr($input, length($in_dir)); >- my $targetdir = $` if $target =~ /[^\/]+$/s; > mkdir_recursive($targetdir) unless -d $targetdir; > print STDERR "Creating $target...\n" unless $quiet; >- open( OUTPUT, ">$target" ) || die "$target: $!\n"; >+ open( OUTPUT, ">$target" ) || die "$target: $!\n"; > text_replace( $h, *OUTPUT ); > close OUTPUT; > } else { > # just copying the file >- my $target = $out_dir . substr($input, length($in_dir)); >- my $targetdir = $` if $target =~ /[^\/]+$/s; > mkdir_recursive($targetdir) unless -d $targetdir; > system("cp -f $input $target"); > print STDERR "Copying $input...\n" unless $quiet; >-- >1.7.10.4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 9161
:
13728
|
13729
|
13731
|
14208
|
14914
|
14997
|
15207
|
18362
|
18363