NAME
   Amon2::Plugin::L10N - L10N support for Amon2

DESCRIPTION
   Amon2::Plugin::L10N is L10N support plugin for Amon2.

Implementation L10N for your App
 in YourProj.pm
     __PACKAGE__->load_plugins('L10N' => {
         default_lang => 'en',                                  # default is en
         accept_langs => [qw/ en ja zh-tw zh-cn fr /],          # default is ['en']
         po_dir       => 'po',                                  # default is po
     });

 in your YourProj::Web::ViewFunction
     use Text::Xslate ();
     sub l {
         my $string = shift;
         my @args = map { Text::Xslate::html_escape($_) } @_; # escape arguments
         Text::Xslate::mark_raw( YourProj->context->loc($string, @args) );
     }

 in your tmpl/foo.tt
     [% l('Hello! %1', 'username') %]

 in your some class
     package YourProj::M::Foo;

     sub bar {
         YourProj->context->loc('hello! %1', $username);
     }

 hook of before language detection
     __PACKAGE__->load_plugins('L10N' => {
         accept_langs          => [qw/ en ja zh-tw zh-cn fr /],
         before_detection_hook => sub {
             my $c = shift;
             return unless ref($c);

             my $accept_re = qr/\A(?:en|ja|zh-tw)\z/;
             my $lang = $c->req->param('lang');
             if ($lang && $lang =~ $accept_re) {
                 $c->session->set( lang => $lang );
                 return $lang;
             } elsif (! defined $lang) {
                 $lang = $c->session->get('lang');
                 if ($lang && $lang =~ $accept_re) {
                     return $lang;
                 }
             }
             $c->session->set( lang => '' );
             return; # through
         },
     });

 hook of after language detection
     __PACKAGE__->load_plugins('L10N' => {
         accept_langs         => [qw/ en ja zh zh-tw zh-cn fr /],
         after_detection_hook => sub {
             my($c, $lang) = shift;
             return 'zh' if $lang =~ /\Azh(?:-.+)\z/;
             return $lang;
         },
     });

 you can customize the po files name
     __PACKAGE__->load_plugins('L10N' => {
         accept_langs         => [qw/ zh-tw zh-cn zh /],
         po_file_langs        => [qw/ zh-tw zh-cn /],    # zh.po is not exists file
         after_detection_hook => sub {
             my($c, $lang) = shift;
             return 'zh-cn' if $lang eq 'zh'; # use zh-cn.po file
             return $lang;
         },
     });

 for your CLI
     __PACKAGE__->load_plugins('L10N' => {
         default_lang          => 'ja',
         accept_langs          => [qw/ en ja /],
         before_detection_hook => sub {
             my $c = shift;
             return unless $NEV{CLI_MODE}; # CLI_MODE is example key
             return 'ja' if $ENV{LANG} =~ /ja/i;
             return 'en' if $ENV{LANG} =~ /en/i;
             return; # use default lang
         },
     });

 you can set Locale::Maketext::Lexicon options
     # in your MyApp.pm
     __PACKAGE__->load_plugins('L10N' => {
         accept_langs   => [qw/ ja /],
         lexicon_options => {
             _auto => 0,
         },
     });

 you can implement L10N class yourself
     package L10N;
     use strict;
     use warnings;
     use parent 'Locale::Maketext';
     use File::Spec;

     use Locale::Maketext::Lexicon +{
         'ja'     => [ Gettext => File::Spec->catfile('t', 'po', 'ja.po') ],
         _preload => 1,
         _style   => 'gettext',
         _decode  => 1,
     };

     # in your MyApp.pm
     __PACKAGE__->load_plugins('L10N' => {
         accept_langs => [qw/ ja /],
         l10n_class   => 'L10N',
     });

Translation Step
 installing dependent module of amon2-xgettext.pl
     $ cpanm --with-suggests Amon2::Plugin::L10N

   dependnt module list in the cpanfile file.

 write your application
 run amon2-xgettext.pl
     $ cd your_amon2_proj_base_dir
     $ perl amon2-xgettext.pl en ja fr zh-tw

 edit .po files
     $ vim po/ja.po
     $ vim po/zh-tw.po

Add Amon2 Context Method
 $c->l10n_language_detection
   Language that is detected will return.

 $c->loc($message), $c->loc('foo %1 .. %2 ...', @args);
   It will return the text in the appropriate language.

AUTHOR
   Kazuhiro Osawa <yappo {at} shibuya {dot} pl>

COPYRIGHT
   Copyright 2013- Kazuhiro Osawa

LICENSE
   This library is free software; you can redistribute it and/or modify it
   under the same terms as Perl itself.

SEE ALSO
   Amon2, Locale::Maketext::Lexicon, HTTP::AcceptLanguage,
   amon2-xgettext.pl