diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2009-05-14 20:52:18 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2009-05-14 20:52:18 +0000 |
commit | 6948b6bc70456ab137463dc1b8520e6abc9480e3 (patch) | |
tree | 2ab760b432baf3f5a4fe287702de452c6e53581b | |
parent | 35e9998ec7fa1a0dd657b81ef8a93aec2433b02b (diff) |
build: add script for po to lua conversation
-rwxr-xr-x | build/i18n-po2lua.pl | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/build/i18n-po2lua.pl b/build/i18n-po2lua.pl new file mode 100755 index 000000000..38e6529bb --- /dev/null +++ b/build/i18n-po2lua.pl @@ -0,0 +1,69 @@ +#!/usr/bin/perl + +@ARGV == 2 || die "Usage: $0 <source-dir> <dest-dir>\n"; + +my $source_dir = shift @ARGV; +my $target_dir = shift @ARGV; + +if( ! -d $target_dir ) +{ + system('mkdir', '-p', $target_dir); +} + + +my %target_strings; + + +if( open F, "find $source_dir -type f -name '*.po' |" ) +{ + while( chomp( my $file = readline F ) ) + { + if( open L, "< $file" ) + { + my ( $basename ) = $file =~ m{.+/([^/]+\.[\w\-]+)\.po$}; + + if( open D, "> $target_dir/$basename.lua" ) + { + printf "Generating %-40s ", "$target_dir/$basename.lua"; + + my ( $k, $v ); + + while( chomp( my $line = readline L ) ) + { + if( $line =~ /^msgid "(.+)"/ ) + { + $k = $1; + } + elsif( $k && $line =~ /^msgstr "(.*)"/ ) + { + $v = $1; + } + elsif( $k && defined($v) && $line =~ /^"(.+)"/ ) + { + $v .= $1; + } + else + { + if( $k && defined($v) ) + { + $v =~ s/\\(['"\\])/$1/g; + $v =~ s/(['\\])/\\$1/g; + + printf D "%s%s='%s'\n", $v ? '' : '--', $k, $v; + } + + $k = $v = undef; + } + } + + print "done\n"; + + close D; + } + + close L; + } + } + + close F; +} |