Blame view

sources/apps/contacts/l10n/l10n.pl 3.08 KB
42e4f8d60   Kload   add all apps
1
2
3
4
5
6
  #!/usr/bin/perl
  use strict;
  use Locale::PO;
  use Cwd;
  use Data::Dumper;
  use File::Path;
923852aa1   Kload   Official Owncloud...
7
  use File::Basename;
42e4f8d60   Kload   add all apps
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
  
  sub crawlFiles{
  	my( $dir ) = @_;
  	my @found = ();
  
  	opendir( DIR, $dir );
  	my @files = readdir( DIR );
  	closedir( DIR );
  	@files = sort( @files );
  
  	foreach my $i ( @files ){
  		next if substr( $i, 0, 1 ) eq '.';
  		next if $i eq 'l10n';
  		
  		if( -d $dir.'/'.$i ){
  			push( @found, crawlFiles( $dir.'/'.$i ));
  		}
  		else{
  			push(@found,$dir.'/'.$i) if $i =~ /\.js$/ || $i =~ /\.php$/;
  		}
  	}
  
  	return @found;
  }
  
  sub readIgnorelist{
  	return () unless -e 'l10n/ignorelist';
  	my %ignore = ();
  	open(IN,'l10n/ignorelist');
  	while(<IN>){
  		my $line = $_;
  		chomp($line);
  		$ignore{"./$line"}++;
  	}
  	close(IN);
  	return %ignore;
  }
923852aa1   Kload   Official Owncloud...
45
  my $app = shift( @ARGV );
42e4f8d60   Kload   add all apps
46
  my $task = shift( @ARGV );
42e4f8d60   Kload   add all apps
47

923852aa1   Kload   Official Owncloud...
48
49
50
  die( "Usage: l10n.pl app task
  task: read, write
  " ) unless $task;
42e4f8d60   Kload   add all apps
51
52
53
54
55
56
  
  # Our current position
  my $whereami = cwd();
  die( "Program must be executed in a l10n-folder called 'l10n'" ) unless $whereami =~ m/\/l10n$/;
  
  # Where are i18n-files?
923852aa1   Kload   Official Owncloud...
57
58
59
60
  my $pwd = dirname(cwd());
  
  my @dirs = ();
  push(@dirs, $pwd);
42e4f8d60   Kload   add all apps
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
  
  # Languages
  my @languages = ();
  opendir( DIR, '.' );
  my @files = readdir( DIR );
  closedir( DIR );
  foreach my $i ( @files ){
  	push( @languages, $i ) if -d $i && substr( $i, 0, 1 ) ne '.';
  }
  
  if( $task eq 'read' ){
  	rmtree( 'templates' );
  	mkdir( 'templates' ) unless -d 'templates';
  	print "Mode: reading
  ";
  	foreach my $dir ( @dirs ){
  		my @temp = split( /\//, $dir );
42e4f8d60   Kload   add all apps
78
79
80
81
  		chdir( $dir );
  		my @totranslate = crawlFiles('.');
  		my %ignore = readIgnorelist();
  		my $output = "${whereami}/templates/$app.pot";
923852aa1   Kload   Official Owncloud...
82
  		my $packageName = "ownCloud $app";
42e4f8d60   Kload   add all apps
83
84
85
86
87
  		print "  Processing $app
  ";
  
  		foreach my $file ( @totranslate ){
  			next if $ignore{$file};
923852aa1   Kload   Official Owncloud...
88
  			# TODO: add support for twig templates
42e4f8d60   Kload   add all apps
89
90
91
92
93
  			my $keyword = ( $file =~ /\.js$/ ? 't:2' : 't');
  			my $language = ( $file =~ /\.js$/ ? 'Python' : 'PHP');
  			my $joinexisting = ( -e $output ? '--join-existing' : '');
  			print "    Reading $file
  ";
923852aa1   Kload   Official Owncloud...
94
  			`xgettext --output="$output" $joinexisting --keyword=$keyword --language=$language "$file" --from-code=UTF-8 --package-version="5.0.0" --package-name="$packageName" --msgid-bugs-address="translations\@owncloud.org"`;
42e4f8d60   Kload   add all apps
95
96
97
98
99
100
101
102
103
  		}
  		chdir( $whereami );
  	}
  }
  elsif( $task eq 'write' ){
  	print "Mode: write
  ";
  	foreach my $dir ( @dirs ){
  		my @temp = split( /\//, $dir );
42e4f8d60   Kload   add all apps
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
  		chdir( $dir.'/l10n' );
  		print "  Processing $app
  ";
  		foreach my $language ( @languages ){
  			next if $language eq 'templates';
  			
  			my $input = "${whereami}/$language/$app.po";
  			next unless -e $input;
  
  			print "    Language $language
  ";
  			my $array = Locale::PO->load_file_asarray( $input );
  			# Create array
  			my @strings = ();
  			foreach my $string ( @{$array} ){
  				next if $string->msgid() eq '""';
  				next if $string->msgstr() eq '""';
  				push( @strings, $string->msgid()." => ".$string->msgstr());
  			}
  			next if $#strings == -1; # Skip empty files
  
  			# Write PHP file
  			open( OUT, ">$language.php" );
  			print OUT "<?php \$TRANSLATIONS = array(
  ";
  			print OUT join( ",
  ", @strings );
  			print OUT "
  );
  ";
  			close( OUT );
  		}
  		chdir( $whereami );
  	}
  }
  else{
  	print "unknown task!
  ";
  }