The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
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 '', <FP>;
        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<Petal>, 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 <domain>.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<Locale::MakeText::Gettext>.

 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 <lbedubourg@motion-twin.com>.

  This module is free software, it is distributed under the
  same license as Perl itself.

=cut


__END__