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 )