package I18NFool; use I18NFool::Extractor; use I18NFool::ExtractorMerger; use Getopt::Long; use Locale::PO; use warnings; use strict; our $VERSION = 0.31; sub create_potfiles { my $class = shift; my $args = { @_ }; my $target = $args->{'target'}; my @files = @{$args->{'files'}}; my @domain_hashes = (); foreach my $file (@files) { print "Extracting $file.\n"; open FP, "<$file" or do { print STDERR "Cannot read-open $file. Reason: $!\n"; next; }; my $data = join '', ; close FP; my $domain_hash = eval { I18NFool::Extractor->process ($data) }; if ($@) { print STDERR "I18NFool::Extractor died parsing $file. Reason:\n\n$@\n\n" } else { push @domain_hashes, $domain_hash } } print "Merging...\n"; my $domain_hash = I18NFool::ExtractorMerger->process (@domain_hashes); foreach my $domain_key (keys %{$domain_hash}) { my $file = "$target/$domain_key.pot"; print "Writing $file.\n"; my $hash = $domain_hash->{$domain_key}; my $po = Locale::PO->new(); Locale::PO->save_file_fromhash ($file, $hash); } } 1; =head1 NAME I18NFool - Internationalization File Object Oriented Leech =head1 SYNOPSIS =head2 Creating a locale directory This toolkit is mainly targetted at L, but it should work with other templating language which implement the ZPT i18n specification. First you need a locale directory somewhere for your web app. cd /opt/myapp mkdir locale cd locale =head2 Extracting i18n: strings. Then you need to extract a bunch of .pot files from your internationalized templates. I18NFool assumes that your templates are properly localized. In the future it will include a tool to find strings which potentially need localization. I18NFool creates one .pot file per domain which is defined in the templates. The format is .pot. If no i18n:domain is specified, I18NFool assumes the domain is called 'default'. find /opt/myapp/templates |egrep '\.html$' |xargs i18nfool-extract =head2 Building / syncing the .po files Create one directory for each language which will need to be translated. cd /opt/myapp/locale mkdir en_GB mkdir en_US mkdir fr_FR mkdir fr_CA mkdir ja Then run the i18n-update tool. cd /opt/myapp/locale i18nfool-update i18n-update will *not* erase your existing .po files, it will update them nicely using gettext's msgmerge tool. If the .po file does not exist, it will create a new one. =head2 Building .mo files Once you are happy with your set of .po files, it's time to build the .mo files which are going to be used by your application, for example using L. cd /opt/myapp/locale i18nfool-build =head1 BUGS. This is a totally *alpha* release, so I'd say 'plenty'. Bug reports are welcome. Patches will do your karma real good. AUTHORS & LICENSE (C) Copyright 2004 MKDoc Ltd. and Laurent Bedubourg Authors Jean-Michel Hiver and Laurent Bedubourg . This module is free software, it is distributed under the same license as Perl itself. =cut __END__