# NAME
I18N::Handle - A common i18n handler for web frameworks and applications.
# ***THIS MODULE IS STILL IN DEVELOPMENT***
# DESCRIPTION
[I18N::Handle](
http://search.cpan.org/perldoc?I18N::Handle) is a common handler for web frameworks and applications.
You can use [App::I18N](
http://search.cpan.org/perldoc?App::I18N) to generate po/mo files, then use this module
to handle these languages.
# SYNOPSIS
Ideas are welcome. just drop me a line.
option `import` takes the same arguments as [Locale::Maketext::Lexicon](
http://search.cpan.org/perldoc?Locale::Maketext::Lexicon) takes.
it's _language_ => [ _format_ => _source_ ].
use I18N::Handle;
my $handle = I18N::Handle->new(
import => {
en => [ Gettext => 'po/en.po' ],
fr => [ Gettext => 'po/fr.po' ],
jp => [ Gettext => 'po/jp.po' ],
})->accept( qw(en fr) )->speak( 'en' );
Or a simple way to import gettext po files:
This will transform the args to the args that `import` option takes:
use I18N::Handle;
my $handle = I18N::Handle->new(
Gettext => {
en => 'po/en.po',
fr => 'po/fr.po',
jp => [ 'po/jp.po' , 'po2/jp.po' ],
})->accept( qw(en fr) )->speak( 'en' );
print _('Hello world');
$handle->speak( 'fr' );
$handle->speak( 'jp' );
$handle->speaking; # return 'jp'
my @langs = $handle->can_speak(); # return 'en', 'fr', 'jp'
or
$handle = I18N::Handle->new(
po => 'path/to/po',
style => 'gettext' # use gettext style format (default)
)->speak( 'en' );
print _('Hello world');
or
$handle = I18N::Handle->new(
locale => 'path/to/locale'
)->speak( 'en_US' );
Connect to a translation server:
$handle = I18N::Handle->new(
server => 'translate.me' )->speak( 'en_US' );
Connect to a database:
$handle = I18N::Handle->new(
dsn => 'DBI:mysql:database=$database;host=$hostname;port=$port;'
);
Connect to google translation:
$handle = I18N::Handle->new( google => "" );
# OPTIONS
- _format_ => { _language_ => _source_ , ... }
Format could be _Gettext | Msgcat | Slurp | Tie_.
use I18N::Handle;
my $hl = I18N::Handle->new(
Gettext => {
en => 'po/en.po',
fr => 'po/fr.po',
jp => [ 'po/jp.po' , 'po2/jp.po' ],
});
$hl->speak( 'en' );
- po => '_path_' | [ _path1_ , _path2_ ]
Suppose you have these files:
po/en.po
po/zh_TW.po
When using:
I18N::Handle->new( po => 'po' );
will be found. can you can get these langauges:
[ en , zh-tw ]
- locale => 'path' | [ path1 , path2 ]
- import => Arguments to [Locale::Maketext::Lexicon](
http://search.cpan.org/perldoc?Locale::Maketext::Lexicon)
# OPTIONAL OPTIONS
- style => _style_ ... (Optional)
The style could be `gettext`.
- loc => _global loc function name_ (Optional)
The default loc function name is `_`.
# PUBLIC METHODS
## new
## speak( I<language> )
setup current language. _language_, can be `en`, `fr` and so on..
## speaking()
get current speaking language name.
## can_speak()
return a list that currently supported.
## accept( I<language name list> )
setup accept languages.
$hl->accpet( qw(en fr) );
## fallback( I<language> )
setup fallback language. when speak() fails , fallback to this language.
$hl->fallback( 'en' );
# PRIVATE METHODS
## _unify_langtag
## _scan_po_files
## _scan_locale_files
# AUTHOR
Yoan Lin <cornelius.howl {at} gmail.com>
# SEE ALSO
[App::I18N](
http://search.cpan.org/perldoc?App::I18N)
# LICENSE
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.