App-I18N
view release on metacpan or search on metacpan
lib/App/I18N/Command/Server.pm view on Meta::CPAN
package App::I18N::Command::Server;
use warnings;
use strict;
use base qw(App::I18N::Command);
use App::I18N::Web;
use App::I18N::Web::View;
use App::I18N::Web::Handler;
use Tatsumaki::Application;
use Plack::Runner;
use File::Basename;
use File::ShareDir qw();
use File::Path qw(mkpath);
use Locale::Language;
use constant debug => 1;
sub options { (
'l|lang=s' => 'language',
'f|file=s' => 'pofile',
'dir=s@' => 'directories',
'podir=s' => 'podir',
'mo' => 'mo',
'verbose' => 'verbose',
'locale' => 'locale',
) }
# %podata
#
# {
# [lang_code] => {
# name => 'Language Name',
# path => 'po file path',
# },
# ...
# }
#
sub run {
my ($self) = @_;
$self->{mo} = 1 if $self->{locale};
my $podir = $self->{podir};
$podir = App::I18N->guess_podir( $self ) unless $podir;
my @dirs = @{ $self->{directories} || [] };
my $logger = App::I18N->logger;
# pre-process messages
my $lme = App::I18N->lm_extract;
if( @dirs ) {
App::I18N->extract_messages( @dirs );
mkpath [ $podir ];
App::I18N->update_catalog(
File::Spec->catfile( $podir,
App::I18N->pot_name . ".pot") );
if ( $self->{language} ) {
App::I18N->update_catalog(
File::Spec->catfile( $podir, $self->{'language'} . ".po") );
}
else {
App::I18N->update_catalogs( $podir );
}
}
# init po database in memory
my $db;
eval {
require App::I18N::DB;
};
if( $@ ) {
warn $@;
}
$db = App::I18N::DB->new();
# $lang = code2language('en'); # $lang gets 'English'
$logger->info("Importing messages to sqlite memory database.");
my @pofiles = ( $self->{pofile} ) || File::Find::Rule->file()->name("*.po")->in( $podir );
my %podata = ();
for my $file ( @pofiles ) {
my $langname;
my $code;
if( $self->{locale} ) {
($langname) = ( $file =~ m{/([a-zA-Z-_]+)/LC_MESSAGES} );
($code) = ( $langname =~ m{^([a-zA-Z]+)} );
}
else {
($langname) = ( $file =~ m{([a-zA-Z-_]+)\.po$} );
($code) = ( $langname =~ m{^([a-zA-Z]+)} );
}
$logger->info( "Importing $langname: $file" );
$db->import_po( $langname , $file );
$podata{ $langname } = {
code => $code,
name => code2language( $code ),
path => $file,
( run in 0.884 second using v1.01-cache-2.11-cpan-ceb78f64989 )