1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
#!/usr/bin/perl -CDAS
use strict;
use warnings;
use XML::TreeBuilder;
my $file = 'zanata.xml';
my %mapping = (
'ar' => 'ar-SA',
'as' => 'as-IN',
'ast' => 'ast-ES',
'bg' => 'bg-BG',
'bn-IN' => 'bn-IN',
'bs' => 'bs-BA',
'ca' => 'ca-ES',
'cs' => 'cs-CZ',
'da' => 'da-DK',
'de-CH' => 'de-CH',
'de-DE' => 'de-DE',
'el' => 'el-GR',
'en-US' => 'en-US',
'es-ES' => 'es-ES',
'fa' => 'fa-IR',
'fi' => 'fi-FI',
'fr' => 'fr-FR',
'gu' => 'gu-IN',
'he' => 'he-IL',
'hi' => 'hi-IN',
'hr' => 'hr-HR',
'hu' => 'hu-HU',
'id' => 'id-ID',
'is' => 'is-IS',
'it' => 'it-IT',
'ja' => 'ja-JP',
'kn' => 'kn-IN',
'ko' => 'ko-KR',
'lv' => 'lv-LV',
'ml' => 'ml-IN',
'mr' => 'mr-IN',
'ms' => 'ms-MY',
'nb' => 'nb-NO',
'nl' => 'nl-NL',
'or' => 'or-IN',
'pa' => 'pa-IN',
'pl' => 'pl-PL',
'pt-BR' => 'pt-BR',
'pt-PT' => 'pt-PT',
'ru' => 'ru-RU',
'si' => 'si-LK',
'sk' => 'sk-SK',
'sr-Latn' => 'sr-Latn-RS',
'sr-Cyrl' => 'sr-RS',
'sv' => 'sv-SE',
'ta-IN' => 'ta-IN',
'te' => 'te-IN',
'th' => 'th-TH',
'tr' => 'tr-TR',
'uk' => 'uk-UA',
'zh-Hans-CN' => 'zh-CN',
'zh-Hant-TW' => 'zh-TW',
);
my $xml_doc = XML::TreeBuilder->new( { 'NoExpand' => "1", 'ErrorContext' => "2" } );
$xml_doc->store_comments(1);
$xml_doc->store_declarations(1);
$xml_doc->parse_file($file)
|| croak( maketext( "Can't open file '[_1]' [_2]", $file, $@ ) );
fix_mapping($xml_doc);
my $OUTDOC;
open( $OUTDOC, ">:encoding(UTF-8)", "$file" )
|| croak( maketext( "Could not open [_1] for output!", $file ) );
print( $OUTDOC $xml_doc->as_XML() );
close($OUTDOC);
exit;
#### code ###
sub fix_mapping {
my $xml_doc = shift;
$xml_doc->pos( $xml_doc->root() );
foreach my $node ( $xml_doc->look_down( "_tag", "locale" ) ) {
my $locale = $node->as_text();
if ( defined( $mapping{$locale} ) && $mapping{$locale} ne $locale ) {
$node->attr( 'map-from', $mapping{$locale} );
}
}
}
|