Commit from LuCI Translation Portal by user jow.: 137 of 175 messages translated...
[project/luci.git] / build / i18n-lua2po.pl
index 262b427..d72d2e9 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl
 
-@ARGV == 3 || die "Usage: $0 <source-dir> <dest-dir> <target-language>\n";
+@ARGV >= 2 || die "Usage: $0 <source-dir> <dest-dir> [<target-language>]\n";
 
 my $source_dir  = shift @ARGV;
 my $target_dir  = shift @ARGV;
@@ -8,22 +8,21 @@ my $target_lang = shift @ARGV;
 my $master_lang = "en";
 
 
-if( ! -d $target_dir )
+if( ! -d "$target_dir/" . ( $target_lang || 'templates' ) )
 {
-       system('mkdir', '-p', $target_dir);
+       system('mkdir', '-p', "$target_dir/" . ( $target_lang || 'templates' ));
 }
 
 
 my %target_strings;
 
-
-if( open F, "find $source_dir -path '*/luasrc/i18n/*' -name '*.$target_lang.lua' |" )
+if( $target_lang && open F, "find $source_dir -path '*/luasrc/i18n/*' -name '*.$target_lang.lua' |" )
 {
        while( chomp( my $file = readline F ) )
        {
                if( open L, "< $file" )
                {
-                       my ( $basename ) = $file =~ m{.+/([^/]+)\.\w+\.lua$};
+                       my ( $basename ) = $file =~ m{.+/([^/]+)\.[\w\-]+\.lua$};
                        $target_strings{$basename} = { };
 
                        while( chomp( my $entry = readline L ) )
@@ -45,6 +44,7 @@ if( open F, "find $source_dir -path '*/luasrc/i18n/*' -name '*.$target_lang.lua'
                                if( $k && $v )
                                {
                                        $v =~ s/"/\\"/g;
+                                       $v =~ s/\\\\"/\\"/g;
                                        $target_strings{$basename}{$k} = $v;
                                }
                        }
@@ -59,20 +59,26 @@ if( open F, "find $source_dir -path '*/luasrc/i18n/*' -name '*.$target_lang.lua'
 
 if( open F, "find . -path '*/luasrc/i18n/*' -name '*.$master_lang.lua' |" )
 {
+       my $destfile = sprintf '%s/%s/%%s.%s',
+               $target_dir,
+               $target_lang || 'templates',
+               $target_lang ? 'po' : 'pot'
+       ;
+
        while( chomp( my $file = readline F ) )
        {
                if( open L, "< $file" )
                {
                        my ( $basename ) = $file =~ m{.+/([^/]+)\.\w+\.lua$};
+                       my $filename = sprintf $destfile, $basename;
 
-                       if( open T, "> $target_dir/$basename.$target_lang.po" )
+                       if( open T, "> $filename" )
                        {
-                               printf "Generating %-40s ",
-                                       "$target_dir/$basename.$target_lang.po";
-               
-                               printf T "#  %s.%s.po\n#  generated from %s\n\nmsgid \"\"\n" .
+                               printf "Generating %-40s ", $filename;
+
+                               printf T "#  %s.%s\n#  generated from %s\n\nmsgid \"\"\n" .
                                         "msgstr \"Content-Type: text/plain; charset=UTF-8\"\n\n",
-                                       $basename, $target_lang, $file;
+                                       $basename, $target_lang ? 'po' : 'pot', $file;
                
                                while( chomp( my $entry = readline L ) )
                                {
@@ -93,10 +99,11 @@ if( open F, "find . -path '*/luasrc/i18n/*' -name '*.$master_lang.lua' |" )
                                        if( $k && $v )
                                        {
                                                $v =~ s/"/\\"/g;
-                                               printf T "#: %s:%d\n#. \"%s\"\nmsgid \"%s\"\nmsgstr \"%s\"\n\n",
+                                               $v =~ s/\\\\"/\\"/g;
+                                               printf T "#: %s:%d\n#. %s\nmsgid \"%s\"\nmsgstr \"%s\"\n\n",
                                                        $file, $., $v, $k,
                                                        ( $target_strings{$basename} && $target_strings{$basename}{$k} )
-                                                               ? $target_strings{$basename}{$k} : $v;
+                                                               ? $target_strings{$basename}{$k} : "";
                                        }
                                }