source: subversion/applications/editors/potlatch/localise2.pl @ 16526

Last change on this file since 16526 was 16504, checked in by avar, 10 years ago

Some lame caching mechanism on the wiki server will sometimes keep me
from getting the latest translations. Uniq-ify the url to smash the
cache.

  • Property svn:executable set to *
File size: 2.4 KB
Line 
1#!/usr/bin/perl -w
2
3        # Generate localisation files for Potlatch
4        # v2, creates separate directories for each language
5        # (will be expanded to read help files, too)
6
7        use LWP::Simple;
8        use LWP::UserAgent;
9        use HTTP::Request;
10        $ua=LWP::UserAgent->new;
11        $ua->agent("localise.pl");
12
13        unless ($config=shift @ARGV) { $config="../../../sites/rails_port/config/potlatch"; }
14       
15        # ----- Get index page 
16
17        $index=get("http://wiki.openstreetmap.org/index.php/Category:Potlatch_translation");
18        die "Couldn't fetch category index" unless defined $index;
19       
20        # ----- Get each page
21       
22        %translations=();
23
24        while ($index=~/\/wiki\/([^:]+):Potlatch\/Translation/gs) {
25                $lang=lc $1; next if $lang eq 'template';
26                $req=HTTP::Request->new(GET=>"http://wiki.openstreetmap.org/index.php?title=$1:Potlatch/Translation&smashcache=" . rand);
27                $res=$ua->request($req);
28                if ($res->is_success) { $wiki=$res->content; }
29                                                 else { die "Bugger! ".$res->status_line."\n"; }
30                print "Reading $lang\n";
31                $lang=~s/[\-_](.+)/\-\U$1\E/;   # dialect in uppercase
32                $ct=0;
33                while ($wiki=~/^<td>\s*([^<]+)<\/td><td>\s*([^<]+)<\/td><td>\s*(.+)$/gm) {
34                        $id=$1; $en=$2; $tr=$3; $ct++;
35                        $id=~s/\s+$//g;
36                        $en=~s/\s+$//g;
37                        $tr=~s/&nbsp;/ /g; $tr=~s/^\s+//;
38                        if ($tr=~/^".+[^"]$/) { $tr.='"'; }
39                        if ($tr=~/[:']/ and $tr!~/"/) { $tr="\"$tr\""; }
40                        $substitute=1;
41                        next if ($id eq '');
42                        next if ($tr eq '...');
43                        while ($tr=~/\%([^%]+)\%/g) { $tr=~s/\%([^%]+)\%/\$$substitute/;
44                                                                                  $substitute++; }
45                        unless (exists $translations{$lang}) { $translations{$lang}=''; }
46                        $translations{$lang}.="\"$id\": $tr\n";
47                }
48                unless ($ct) { print "WARNING: no translations read\n"; }
49        }
50
51        # ----- Output translation file
52       
53        print "Writing output files\n";
54        foreach $lang (sort keys %translations) {
55                unless (-d "$config/localised/$lang") { mkdir "$config/localised/$lang"; print "Creating $config/localised/$lang\n"; }
56                open (OUTFILE,">$config/localised/$lang/localised.yaml") or die "Can't open output file: $!\n";
57                print "Writing $config/localised/$lang/localised.yaml\n";
58                print OUTFILE chr(0xEF).chr(0xBB).chr(0xBF);    # utf8 BOM
59                print OUTFILE $translations{$lang};
60                close OUTFILE;
61        }
62
63       
64        # Potlatch 'intText' routine needs to:
65        # - replace '\n' with a real line-break
66        # - replace $1 etc. with parameters passed
67
68        # Change /lib/potlatch.rb to read this in as a YAML file
69        # (the parameters at the end will still be passed back via AMF as is,
70        #  so nothing else needs to be changed other than the SWF)
Note: See TracBrowser for help on using the repository browser.