+package Lirama::Loc2::Auto;
+
+use strict;
+use warnings;
+use utf8;
+
+use Lirama::Loc2;
+
+our $VERSION = '2.00';
+
+sub optimize {
+ my $self = shift;
+ $self->[1]{optimize} = $_[0] if @_;
+ return $self->[1]{optimize};
+} # optimize
+
+sub TIEHASH {
+ my ($class, $path, @langpref) = @_;
+
+ my $langs = @langpref>0; # languages specified
+ langpref(@langpref) if $langs; # set default language preference
+
+ my $node = [ # array for faster access to common [0]
+ {}, # files
+ { # configuration
+ path => $path,
+ optimize => $langs, # assume langpref won't change if specified
+ }
+ ];
+ return bless $node, $class;
+} # new
+
+sub FETCH {
+ my ($self, $file) = @_;
+
+ unless (exists $self->[0]{$file}) {
+ my $filename = $self->[1]{path}.'/'.$file; # perl file returning l10n hash
+ my $extlang = '.'.langpref(); # file tag for the preferred language
+ my $ext = ".pl"; # extension for $filename
+
+ $filename .= $extlang # get language-optimized file
+ if $self->[1]{optimize} and -r $filename.$extlang.$ext;
+
+ tie %{$self->[0]{$file}}, "Lirama::Loc2", do $filename.$ext;
+ } # initialize Loc for this file
+
+ return $self->[0]{$file}
+} # FETCH
+
+# Basically same as Tie::StdHash
+
+sub EXISTS { exists $_[0]->[0]{$_[1]} }
+sub FIRSTKEY { my $a = scalar keys %{$_[0]->[0]}; each %{$_[0]->[0]} }
+sub NEXTKEY { each %{$_[0]->[0]} }
+
+1;
+
+__END__
+
+
+=head1 NAME
+
+Lirama::Loc::Auto - Localize strings, initialize automatically
+
+=head1 SYNOPSIS
+
+ use Lirama::Loc::Auto;
+
+ tie my %L, "Lirama::Loc::Auto", "path/to/translation/files", "en";
+
+ print $L{numbers}{7}; # "seven"
+
+=head1 DESCRIPTION
+
+Setup a hash containing multiple L<Lirama::Loc|Lirama::Loc> objects, which
+open automatically on demand.
+
+=over 4
+
+=item C<tie %tie, "Lirama::Loc::Auto", $path, @languages>
+
+Will setup a hash to automatically load data files from P<$path/*.pl>.
+These files should only return an anonimous translation hash.
+
+If @languages is set, it will be taken as the default language preference.
+[todo:optimize]
+
+=item C<$tie{$file}{$string}>
+
+The first time a translation is accessed from C<$tie{$file}{$string}>, it will
+create a Lirama::Loc object from P<$path/$file.pl>.
+
+=item C<optimize>
+
+=item C<exists>
+
+bla
+
+=back
+
+=head1 EXAMPLE
+
+We'll create P<./includes/loc/index.pl> with the following contents:
+
+ {
+ welcome => {
+ en => "welcome",
+ eo => "bonvenon",
+ nl => "welkom",
+ },
+ "%d visits" => {
+ en => sub { "%d user".($_[0]!=1 && "s")." have visited this site." },
+ },
+ }
+
+Setup a hash with user defined language preferences, and a fallback to English.
+
+ my @langpref = split(',', $ENV{HTTP_ACCEPT_LANGUAGE});
+ tie my %loc, "Lirama::Loc::Auto", "includes/loc", @langpref, "en";
+
+And display the I<welcome> string:
+
+ print $loc{index}{welcome};
+
+If the user wanted Dutch texts, it will show I<welkom>. In case the user wanted
+French for example, it will fallback to English.
+
+ print $loc{index}{["%d visits", ++$counter]};
+
+=head1 SEE ALSO
+
+L<Lirama::Loc|Lirama::Loc>
+
+=head1 AUTHOR
+
+Mischa POSLAWSKY <shiar@shiar.org>
+
+Copyright 2005 Mischa POSLAWSKY. All rights reserved.
+
+=cut