From 606394bfeb78c71ccb8a617ee531d3db7603132c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Mon, 12 May 2014 17:13:40 +0200 Subject: [PATCH 1/2] adding transifex support and script for translation sync --- l10n/.tx/config | 11 ++++ l10n/l10n.pl | 165 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 176 insertions(+) create mode 100644 l10n/.tx/config create mode 100644 l10n/l10n.pl diff --git a/l10n/.tx/config b/l10n/.tx/config new file mode 100644 index 000000000000..76af3961d157 --- /dev/null +++ b/l10n/.tx/config @@ -0,0 +1,11 @@ +[main] +host = https://www.transifex.com +lang_map = ja_JP: ja + + +[owncloud.firstrunwizard] +file_filter = /firstrunwizard.po +source_file = templates/firstrunwizard.pot +source_lang = en +type = PO + diff --git a/l10n/l10n.pl b/l10n/l10n.pl new file mode 100644 index 000000000000..0084c65c189f --- /dev/null +++ b/l10n/l10n.pl @@ -0,0 +1,165 @@ +#!/usr/bin/perl +use strict; +use Locale::PO; +use Cwd; +use Data::Dumper; +use File::Path; +use File::Basename; + +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(){ + my $line = $_; + chomp($line); + $ignore{"./$line"}++; + } + close(IN); + return %ignore; +} + +sub getPluralInfo { + my( $info ) = @_; + + # get string + $info =~ s/.*Plural-Forms: (.+)\\n.*/$1/; + $info =~ s/^(.*)\\n.*/$1/g; + + return $info; +} + +my $app = shift( @ARGV ); +my $task = shift( @ARGV ); + +die( "Usage: l10n.pl app task\ntask: read, write\n" ) unless $task; + +# 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? +my $pwd = dirname(cwd()); + +my @dirs = (); +push(@dirs, $pwd); + +# 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\n"; + foreach my $dir ( @dirs ){ + my @temp = split( /\//, $dir ); + chdir( $dir ); + my @totranslate = crawlFiles('.'); + my %ignore = readIgnorelist(); + my $output = "${whereami}/templates/$app.pot"; + my $packageName = "ownCloud $app"; + print " Processing $app\n"; + + foreach my $file ( @totranslate ){ + next if $ignore{$file}; + my $keywords = ''; + if( $file =~ /\.js$/ ){ + $keywords = '--keyword=t:2 --keyword=n:2,3'; + } + else{ + $keywords = '--keyword=t --keyword=n:1,2'; + } + my $language = ( $file =~ /\.js$/ ? 'Python' : 'PHP'); + my $joinexisting = ( -e $output ? '--join-existing' : ''); + print " Reading $file\n"; + `xgettext --output="$output" $joinexisting $keywords --language=$language "$file" --add-comments=TRANSLATORS --from-code=UTF-8 --package-version="7.0.0" --package-name="$packageName" --msgid-bugs-address="translations\@owncloud.org"`; + } + chdir( $whereami ); + } +} +elsif( $task eq 'write' ){ + print "Mode: write\n"; + foreach my $dir ( @dirs ){ + my @temp = split( /\//, $dir ); + chdir( $dir.'/l10n' ); + print " Processing $app\n"; + foreach my $language ( @languages ){ + next if $language eq 'templates'; + + my $input = "${whereami}/$language/$app.po"; + next unless -e $input; + + print " Language $language\n"; + my $array = Locale::PO->load_file_asarray( $input ); + # Create array + my @strings = (); + my $plurals; + + foreach my $string ( @{$array} ){ + if( $string->msgid() eq '""' ){ + # Translator information + $plurals = getPluralInfo( $string->msgstr()); + } + elsif( defined( $string->msgstr_n() )){ + # plural translations + my @variants = (); + my $identifier = $string->msgid()."::".$string->msgid_plural(); + $identifier =~ s/"/_/g; + + foreach my $variant ( sort { $a <=> $b} keys( %{$string->msgstr_n()} )){ + push( @variants, $string->msgstr_n()->{$variant} ); + } + + push( @strings, "\"$identifier\" => array(".join(",", @variants).")"); + } + else{ + # singular translations + 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 " Date: Mon, 12 May 2014 14:32:25 -0400 Subject: [PATCH 2/2] [tx-robot] updated from transifex --- l10n/templates/firstrunwizard.pot | 69 +++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 l10n/templates/firstrunwizard.pot diff --git a/l10n/templates/firstrunwizard.pot b/l10n/templates/firstrunwizard.pot new file mode 100644 index 000000000000..ca7d3947ae71 --- /dev/null +++ b/l10n/templates/firstrunwizard.pot @@ -0,0 +1,69 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: ownCloud firstrunwizard 7.0.0\n" +"Report-Msgid-Bugs-To: translations@owncloud.org\n" +"POT-Creation-Date: 2014-05-12 14:32-0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: templates/wizard.php:6 +#, php-format +msgid "Welcome to %s" +msgstr "" + +#: templates/wizard.php:8 +msgid "" +"Your personal web services. All your files, contacts, calendar and more, in " +"one place." +msgstr "" + +#: templates/wizard.php:14 +msgid "Get the apps to sync your files" +msgstr "" + +#: templates/wizard.php:26 +#, php-format +msgid "Connect your desktop apps to %s" +msgstr "" + +#: templates/wizard.php:28 +msgid "Connect your Calendar" +msgstr "" + +#: templates/wizard.php:31 +msgid "Connect your Contacts" +msgstr "" + +#: templates/wizard.php:34 templates/wizard.php:42 +msgid "Access files via WebDAV" +msgstr "" + +#: templates/wizard.php:39 +msgid "Documentation" +msgstr "" + +#: templates/wizard.php:48 +#, php-format +msgid "" +"There’s more information in the documentation and on our website." +msgstr "" + +#: templates/wizard.php:49 +msgid "" +"If you like ownCloud, recommend it to your friends!" +msgstr ""