Commits

Burak Gürsoy committed ba175e2

Split language data

Comments (0)

Files changed (4)

 use Carp qw(croak confess);
 use Cwd;
 use Encode;
+use File::Basename qw( dirname );
 use File::Copy;
 use File::Find;
+use File::HomeDir;
 use File::Path;
-use File::HomeDir;
 use File::Spec::Functions qw( catfile catdir );
 use File::Temp qw( tempfile tempdir );
 use Getopt::Long;
 use Time::HiRes qw( time );
 use Text::Template::Simple;
 
-use constant IS_WINDOWS         => $^O =~ m{ \A MSWin }xmsi;
-use constant IS_OSX             => $^O eq 'darwin';
-use constant BASE               => $ENV{BURAK_BUILD_BASE};
-use constant MAX_MODNAME_LENGTH => 3;
-use constant RAMGB              => 1024**2;
+use constant {
+    IS_WINDOWS         => $^O =~ m{ \A MSWin }xmsi ? 1 : 0,
+    IS_OSX             => $^O eq 'darwin'          ? 1 : 0,
+    BURAK_BUILD_BASE   => $ENV{BURAK_BUILD_BASE},
+    MAX_MODNAME_LENGTH => 3,
+    RAMGB              => 1024**2,
+    BASE_DIR           => dirname( __FILE__ ),
+};
+
+use lib catdir( BASE_DIR, qw( builder builder lib ) );
+use Build::Util qw( slurp );
 
 BEGIN {
     if ( ! defined &_print ) {
 our $VERSION = q(1.20);
 
 our $MAKE = IS_WINDOWS ? 'dmake' : 'make';
-our $LANG = defined &LANG_ID       ? LANG_ID()
-          : $ENV{BURAK_BUILD_LANG} ? $ENV{BURAK_BUILD_LANG}
-          :                          'EN';
+our($LANG, $LANG_ID) = load_lang();
 
 our $TTS  = Text::Template::Simple->new(
     header => 'my %p = @_;',
     $p
 } : $^X;
 
-my %L10N = (
-    EN => { lang_en() },
-    TR => { lang_tr() },
-);
-
 #--------------------------------------------------------------#
 
 my( %path, $target, $modname, $source_dir, $START_TIME, $ALIEN );
     my $eok = eval { require Time::Elapsed; 1; };
     my $t   = $START_TIME ? time - $START_TIME : 0;
     $@ ? _print( sprintf L('bench.error'), $t )
-       : _print( sprintf L('bench.ok'), Time::Elapsed::elapsed( $t, $LANG ) );
+       : _print( sprintf L('bench.ok'), Time::Elapsed::elapsed( $t, $LANG_ID ) );
     system q(echo "\033]0;\007\c") if IS_OSX;
 }
 
 sub L {
     my $id = shift;
-    return $L10N{$LANG}->{$id};
+    return $LANG->{$id};
 }
 
 sub run {
     build();
     copy_dist();
     finish();
+
     return;
 }
 
         ]
     );
 
-    #_print L('pause');<STDIN>;
     return;
 }
 
 sub get_path {
     my %p = (
-        source  => catfile( BASE, qw( CPAN ) ),
+        source  => catfile( BURAK_BUILD_BASE, qw( CPAN ) ),
         build   => tempdir( CLEANUP => $O{keep} ? 0 : 1 ),
         archive => File::HomeDir->my_desktop,
         cwd     => catdir(cwd),
-        tools   => catfile( BASE, qw( CPAN tools ) ),
-        builder => catfile( BASE, qw( CPAN tools builder ) ),
+        tools   => catfile( BURAK_BUILD_BASE, qw( CPAN tools ) ),
+        builder => catfile( BURAK_BUILD_BASE, qw( CPAN tools builder ) ),
     );
 
     if ( ! -e $p{source} ) {
     return;
 }
 
-sub lang_tr {
-    return
-        'pause'           => 'Devam etmek için bir tuşa basın ...',
-        'bench.error'     => "\nİşlem %.4f saniye sürdü\n",
-        'bench.ok'        => "\nİşlem %s sürdü\n",
-        'start.message'   => "%s sürüm %s başlıyor ...\n",
-        'exit.message'    => "\n\n\tŞu güzel ortamı bozuyorsun!\n\n",
-        'error.notnumber' => "\n\tGirilen veri numara değil!\n\n",
-        'error.length'    => "\n\tGeçersiz numara girildi!\n\n",
-        'error.notexists' => "\n\tVarolmayan bir şeyi seçmeye çalışıyorsunuz!\n\n",
-        'ask.selection'   => 'Paketlemek için bir modül seçin [1]: ',
-        'finish.report'   => <<'INFO',
-Bu oturumda kullanılan dizinler:
-   Kaynak    : <%= $p{source} %>
-   Modül     : <%= $p{source_dir} %>
-   Paketleme : <%= $p{build} %> (sakla: <%= $p{keep} %>)
-   Arşiv     : <%= $p{archive} %>
-   CWD       : <%= $p{cwd} %>
-INFO
-        'get_path.source' => 'Bilinmeyen kaynak dizini: <%=      $p{source} %>',
-        'get_path.build'  => 'Bilinmeyen paketleme dizini: <%=   $p{build}  %>',
-        'get_path.build'  => 'Bilinmeyen arşiv dizini: <%=       $p{build}  %>',
-        'duplicate.copy'  => '<%= $p{file} %> kopyalanamadı: <%= $p{error}  %>',
-        'build.buildpl'   => '[OOOPS!] Build.PL, <%=    $p{target} %> içinde bulunamadı !!!' . "\n",
-        'build.makefilepl'=> '[OOOPS!] Makefile.PL, <%= $p{target} %> içinde bulunamadı !!!' . "\n",
-        'build.nobuilder' => '<%=   $p{target} %> içinde herhangi bir kurulum aracı bulunamadı!' . "\n",
-        'ask.nobuilder'   => '! <%= $p{path}   %> içinde bir kurulum aracı olmadığından atlanıyor ...'."\n",
-        'ask.nomodules'   => 'Kaynak dizinde modül(ler) bulunamadı!' . "\n",
-        'ask.found'       => "\nBulunan dağıtımlar:\n\n" . "\n",
-        'ask.ok'          => <<'MESSAGE',
+sub load_lang {
+    my $lang = defined &LANG_ID       ? LANG_ID()
+             : $ENV{BURAK_BUILD_LANG} ? $ENV{BURAK_BUILD_LANG}
+             :                          'en';
 
-    OYE!
+    my $lang_dir = catdir( BASE_DIR, 'lang' );
+    opendir my $DIR, $lang_dir or die "Can't read base dir: $!";
+    my %valid;
+    while ( my $dir = readdir $DIR ) {
+        next if $dir =~ m{ \A [.] }xms || ! -d catdir( $lang_dir, $dir );
+        $valid{ $dir } = 1;
+    }
+    closedir $DIR;
 
-Paketlemek için <%= $p{target} %> (<%= $p{modname} %>) seçildi ...
+    $lang = lc $lang;
+    if ( ! $valid{ $lang } ) {
+        warn "'$lang' is not a valid language in identifier. 'en' will be used.";
+        $lang = 'en';
+    }
 
-MESSAGE
-        'hello.hello'     => <<'MESSAGE',
-<%=$p{os}%> altında perl <%=$p{perl}%> kullanıyorum, mutluyum, gururluyum!
-Sonuna kadar sömürebileceğim <%=$p{cpu}%> işlemcim ve <%=$p{ram}%> belleğim var.
-Bir modül paketlemek için güzel bir ortam, güzel bir zaman ;)
+    my $file = catfile( BASE_DIR, 'lang', $lang, 'build.lng' );
+    my %lang;
+    my $raw = slurp $file;
+    eval $raw;
+    die "Can't load language file $file: $!" if $@;
+    die "%lang hash is empty (loaded from $file)" if ! %lang;
 
-MESSAGE
-        'hello.ram'        => '%.2f cigaboy',
-        '_chdir.noparam'   => 'Dizin belirtilmedi!',
-        '_chdir.error'     => 'Geçerli dizin <%= $p{dir} %> olarak değiştirilemiyor: <%= $p{error} %>',
-        'call.error'       => <<'MESSAGE',
-Paketleme işlemi başarısız oldu :
-Son komut: <%= $p{cmd}   %>
-Sonuç: <%=     $p{error} %>
-MESSAGE
-        'write_file.error' => '<%= $p{file} %> dosyası açılamıyor: <%= $p{error} %>',
-        'unix.nofile'      => 'Dosya belirtilmedi!',
-        'unix.eread'       => 'Okuma hatası (<%= $p{file} %>): <%= $p{error} %>',
-        'unix.ewrite'      => 'Yazma hatası (<%= $p{file} %>): <%= $p{error} %>',
-}
-
-sub lang_en {
-    return
-        'pause'           => 'Press enter to continue ...',
-        'bench.error'     => "\nOperation took %.4f seconds\n",
-        'bench.ok'        => "\nOperation completed in %s\n",
-        'start.message'   => "%s version %s starting ...\n",
-        'exit.message'    => "\n\n\tSession terminated!\n\n",
-        'error.notnumber' => "\n\tInput is not a number!\n\n",
-        'error.length'    => "\n\tInput is too big!\n\n",
-        'error.notexists' => "\n\tYou wanted to select something that does not exist!\n\n",
-        'ask.selection'   => 'Select a module to build [1]: ',
-        'finish.report'   => <<'INFO',
-Directories used in this session:
-   Source    : <%= $p{source} %>
-   Module    : <%= $p{source_dir} %>
-   Package   : <%= $p{build} %> (keep: <%= $p{keep} %>)
-   Archive   : <%= $p{archive} %>
-   CWD       : <%= $p{cwd} %>
-INFO
-        'get_path.source' => 'Unknown source dir: <%=      $p{source} %>',
-        'get_path.build'  => 'Unknown packaging dir: <%=   $p{build}  %>',
-        'get_path.build'  => 'Unknown archive dir: <%=     $p{build}  %>',
-        'duplicate.copy'  => '<%= $p{file} %> can not be copied: <%= $p{error}  %>',
-        'build.buildpl'   => '[OOOPS!] Build.PL, can not be found inside <%=    $p{target} %> !!!',
-        'build.makefilepl'=> '[OOOPS!] Makefile.PL, can not be found inside <%=    $p{target} %> !!!',
-        'build.nobuilder' => '<%=   $p{target} %> has no build tool in it!',
-        'ask.nobuilder'   => '! <%= $p{path}   %> is skipped because it has no build tool in it ...'."\n",
-        'ask.nomodules'   => 'No module(s) can be found in the source dir!',
-        'ask.found'       => "\nFound distros:\n\n",
-        'ask.ok'          => <<'MESSAGE',
-
-    OH YEAH!
-
-You've selected: <%= $p{target} %> (<%= $p{modname} %>) ...
-
-MESSAGE
-        'hello.hello'     => <<'MESSAGE',
-I'm using <%=$p{os}%> with perl <%=$p{perl}%>!
-I have <%=$p{cpu}%> CPU and <%=$p{ram}%> memory.
-
-MESSAGE
-        'hello.ram'        => '%.2f GB',
-        '_chdir.noparam'   => 'No directory specified!',
-        '_chdir.error'     => 'CWD can not be changed into <%= $p{dir} %>: <%= $p{error} %>',
-        'call.error'       => <<'MESSAGE',
-Packaging failed :
-Last cmd: <%= $p{cmd}   %>
-Result  : <%= $p{error} %>
-MESSAGE
-        'write_file.error' => '<%= $p{file} %> can not be opened: <%= $p{error} %>',
-        'unix.nofile'      => 'No file specified!',
-        'unix.eread'       => 'Read error (<%=  $p{file} %>): <%= $p{error} %>',
-        'unix.ewrite'      => 'Write error (<%= $p{file} %>): <%= $p{error} %>',
+    return \%lang, $lang;
 }
 
 1;

builder/builder/lib/Build/Spec.pm

 use constant OS_ERROR       => qr{OS \s+ unsupported}xms;
 use base qw( Exporter );
 
-# since this is a builder we don't care about warnings.pm to support older perl
-## no critic (RequireUseWarnings)
-
 BEGIN {
    our $VERSION   = '0.80';
    our @EXPORT    = qw( spec    );

lang/en/build.lng

+%lang = (
+   'pause'           => 'Press enter to continue ...',
+   'bench.error'     => "\nOperation took %.4f seconds\n",
+   'bench.ok'        => "\nOperation completed in %s\n",
+   'start.message'   => "%s version %s starting ...\n",
+   'exit.message'    => "\n\n\tSession terminated!\n\n",
+   'error.notnumber' => "\n\tInput is not a number!\n\n",
+   'error.length'    => "\n\tInput is too big!\n\n",
+   'error.notexists' => "\n\tYou wanted to select something that does not exist!\n\n",
+   'ask.selection'   => 'Select a module to build [1]: ',
+   'finish.report'   => <<'INFO',
+Directories used in this session:
+   Source    : <%= $p{source} %>
+   Module    : <%= $p{source_dir} %>
+   Package   : <%= $p{build} %> (keep: <%= $p{keep} %>)
+   Archive   : <%= $p{archive} %>
+   CWD       : <%= $p{cwd} %>
+INFO
+   'get_path.source' => 'Unknown source dir: <%=      $p{source} %>',
+   'get_path.build'  => 'Unknown packaging dir: <%=   $p{build}  %>',
+   'get_path.build'  => 'Unknown archive dir: <%=     $p{build}  %>',
+   'duplicate.copy'  => '<%= $p{file} %> can not be copied: <%= $p{error}  %>',
+   'build.buildpl'   => '[OOOPS!] Build.PL, can not be found inside <%=    $p{target} %> !!!',
+   'build.makefilepl'=> '[OOOPS!] Makefile.PL, can not be found inside <%=    $p{target} %> !!!',
+   'build.nobuilder' => '<%=   $p{target} %> has no build tool in it!',
+   'ask.nobuilder'   => '! <%= $p{path}   %> is skipped because it has no build tool in it ...'."\n",
+   'ask.nomodules'   => 'No module(s) can be found in the source dir!',
+   'ask.found'       => "\nFound distros:\n\n",
+   'ask.ok'          => <<'MESSAGE',
+
+    OH YEAH!
+
+You've selected: <%= $p{target} %> (<%= $p{modname} %>) ...
+
+MESSAGE
+   'hello.hello'     => <<'MESSAGE',
+I'm using <%=$p{os}%> with perl <%=$p{perl}%>!
+I have <%=$p{cpu}%> CPU and <%=$p{ram}%> memory.
+
+MESSAGE
+   'hello.ram'        => '%.2f GB',
+   '_chdir.noparam'   => 'No directory specified!',
+   '_chdir.error'     => 'CWD can not be changed into <%= $p{dir} %>: <%= $p{error} %>',
+   'call.error'       => <<'MESSAGE',
+Packaging failed :
+Last cmd: <%= $p{cmd}   %>
+Result  : <%= $p{error} %>
+MESSAGE
+   'write_file.error' => '<%= $p{file} %> can not be opened: <%= $p{error} %>',
+   'unix.nofile'      => 'No file specified!',
+   'unix.eread'       => 'Read error (<%=  $p{file} %>): <%= $p{error} %>',
+   'unix.ewrite'      => 'Write error (<%= $p{file} %>): <%= $p{error} %>',
+);

lang/tr/build.lng

+%lang = (
+   'pause'           => 'Devam etmek için bir tuşa basın ...',
+   'bench.error'     => "\nİşlem %.4f saniye sürdü\n",
+   'bench.ok'        => "\nİşlem %s sürdü\n",
+   'start.message'   => "%s sürüm %s başlıyor ...\n",
+   'exit.message'    => "\n\n\tŞu güzel ortamı bozuyorsun!\n\n",
+   'error.notnumber' => "\n\tGirilen veri numara değil!\n\n",
+   'error.length'    => "\n\tGeçersiz numara girildi!\n\n",
+   'error.notexists' => "\n\tVarolmayan bir şeyi seçmeye çalışıyorsunuz!\n\n",
+   'ask.selection'   => 'Paketlemek için bir modül seçin [1]: ',
+   'finish.report'   => <<'INFO',
+Bu oturumda kullanılan dizinler:
+   Kaynak    : <%= $p{source} %>
+   Modül     : <%= $p{source_dir} %>
+   Paketleme : <%= $p{build} %> (sakla: <%= $p{keep} %>)
+   Arşiv     : <%= $p{archive} %>
+   CWD       : <%= $p{cwd} %>
+INFO
+   'get_path.source' => 'Bilinmeyen kaynak dizini: <%=      $p{source} %>',
+   'get_path.build'  => 'Bilinmeyen paketleme dizini: <%=   $p{build}  %>',
+   'get_path.build'  => 'Bilinmeyen arşiv dizini: <%=       $p{build}  %>',
+   'duplicate.copy'  => '<%= $p{file} %> kopyalanamadı: <%= $p{error}  %>',
+   'build.buildpl'   => '[OOOPS!] Build.PL, <%=    $p{target} %> içinde bulunamadı !!!' . "\n",
+   'build.makefilepl'=> '[OOOPS!] Makefile.PL, <%= $p{target} %> içinde bulunamadı !!!' . "\n",
+   'build.nobuilder' => '<%=   $p{target} %> içinde herhangi bir kurulum aracı bulunamadı!' . "\n",
+   'ask.nobuilder'   => '! <%= $p{path}   %> içinde bir kurulum aracı olmadığından atlanıyor ...'."\n",
+   'ask.nomodules'   => 'Kaynak dizinde modül(ler) bulunamadı!' . "\n",
+   'ask.found'       => "\nBulunan dağıtımlar:\n\n" . "\n",
+   'ask.ok'          => <<'MESSAGE',
+
+    OYE!
+
+Paketlemek için <%= $p{target} %> (<%= $p{modname} %>) seçildi ...
+
+MESSAGE
+   'hello.hello'     => <<'MESSAGE',
+<%=$p{os}%> altında perl <%=$p{perl}%> kullanıyorum, mutluyum, gururluyum!
+Sonuna kadar sömürebileceğim <%=$p{cpu}%> işlemcim ve <%=$p{ram}%> belleğim var.
+Bir modül paketlemek için güzel bir ortam, güzel bir zaman ;)
+
+MESSAGE
+   'hello.ram'        => '%.2f cigaboy',
+   '_chdir.noparam'   => 'Dizin belirtilmedi!',
+   '_chdir.error'     => 'Geçerli dizin <%= $p{dir} %> olarak değiştirilemiyor: <%= $p{error} %>',
+   'call.error'       => <<'MESSAGE',
+Paketleme işlemi başarısız oldu :
+Son komut: <%= $p{cmd}   %>
+Sonuç: <%=     $p{error} %>
+MESSAGE
+   'write_file.error' => '<%= $p{file} %> dosyası açılamıyor: <%= $p{error} %>',
+   'unix.nofile'      => 'Dosya belirtilmedi!',
+   'unix.eread'       => 'Okuma hatası (<%= $p{file} %>): <%= $p{error} %>',
+   'unix.ewrite'      => 'Yazma hatası (<%= $p{file} %>): <%= $p{error} %>',
+);