#!/usr/bin/env perl ########################################################################### # ts2cpp.pl # --------------------- # begin : April 2009 # copyright : (C) 2009 by Juergen E. Fischer # email : jef at norbit dot de ########################################################################### # # # This program is free software; you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # # the Free Software Foundation; either version 2 of the License, or # # (at your option) any later version. # # # ########################################################################### use strict; use warnings; use Carp qw/croak/; use XML::Simple; use Data::Dumper; sub xmlescape { my $data = shift; $data =~ s/&/&/sg; $data =~ s//>/sg; $data =~ s/"/"/sg; return $data; } $SIG{__WARN__} = sub { croak @_; }; die "usage: $0 source.ts destdir\n" unless @ARGV==2 && -f $ARGV[0] && -d $ARGV[1]; my $xml = XMLin($ARGV[0], ForceArray=>1); open CPP, ">$ARGV[1]/numerus-i18n.cpp"; binmode(CPP, ":utf8"); print CPP <{context}; my $i = 0; foreach my $context ( @{ $xml->{context} } ) { $i++; my $name = $context->{name}->[0]; open UI, ">$ARGV[1]/$name-$i-i18n.ui"; binmode(UI, ":utf8"); print UI < $name; EOF foreach my $message ( @{ $context->{message} } ) { if( exists $message->{numerus} && $message->{numerus} eq "yes" ) { $message->{source}->[0] =~ s/"/\\"/g; $message->{source}->[0] =~ s/\n/\\n/g; print CPP "translate( \"$context->{name}->[0]\", \"$message->{source}->[0]\""; if( exists $message->{comment} && $message->{comment}->[0] ne "") { $message->{comment}->[0] =~ s/"/\\"/g; $message->{comment}->[0] =~ s/\n/\\n/g; print CPP ", \"$message->{comment}->[0]\""; } print CPP '"",' unless exists $message->{comment} && $message->{comment}->[0] ne ""; print CPP ", 1);\n" } else { print UI " {comment}->[0]) . "\"" if exists $message->{comment} && $message->{comment}->[0] ne ""; print UI ">" . xmlescape($message->{source}->[0]) . "\n"; print UI "\n"; } } print UI "\n"; close UI; } close CPP;