-
-
23 May 2013 08:27:44 UTC
- Distribution: Amon2-Plugin-L10N
- Module version: v0.1.4
- Source (raw)
- Browse (raw)
- Changes
- Homepage
- How to Contribute
- Repository
- Issues (0)
- Testers
- Kwalitee
Bus factor: 0- License: perl_5
- Perl: v5.8.5
- Activity
24 month- Tools
- Download (14.41KB)
- MetaCPAN Explorer
- Permissions
- Subscribe to distribution
- Permalinks
- This version
- Latest version
and 2 contributors- Kazuhiro Osawa <yappo {at} shibuya {dot} pl>
-
Kazuhiro Osawa
- NAME
- DESCRIPTION
- Implementation L10N for your App
- Translation Step
- Add Amon2 Context Method
- AUTHOR
- COPYRIGHT
- LICENSE
- SEE ALSO
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
Module Install Instructions
To install Amon2::Plugin::L10N, copy and paste the appropriate command in to your terminal.
cpanm Amon2::Plugin::L10N
perl -MCPAN -e shell install Amon2::Plugin::L10N
For more information on module installation, please visit the detailed CPAN module installation guide.