[Jifty-commit] r4279 - jifty/trunk/lib/Jifty/Script
jifty-commit at lists.jifty.org
jifty-commit at lists.jifty.org
Sat Oct 20 05:15:37 EDT 2007
Author: clkao
Date: Sat Oct 20 05:15:33 2007
New Revision: 4279
Modified:
jifty/trunk/lib/Jifty/Script/Po.pm
Log:
bin/jifty po now takes two more options:
* --dir for additional directories to look at so javascript
files can be scanned.
* --js for generating json dictionaries for messages appeared
in javascript files declared with Jifty::Web.
Modified: jifty/trunk/lib/Jifty/Script/Po.pm
==============================================================================
--- jifty/trunk/lib/Jifty/Script/Po.pm (original)
+++ jifty/trunk/lib/Jifty/Script/Po.pm Sat Oct 20 05:15:33 2007
@@ -5,6 +5,7 @@
use base qw(App::CLI::Command Class::Accessor::Fast);
use File::Copy ();
+use File::Path 'mkpath';
use Jifty::Config ();
use Jifty::YAML ();
use Locale::Maketext::Extract ();
@@ -28,14 +29,25 @@
=head2 options
-This script only takes one option, C<--language>, which is optional; it is
-the name of a message catalog to create.
+This script an option, C<--language>, which is optional; it is the
+name of a message catalog to create.
+
+It also takes C<--dir> to specify additional directories to extract
+from.
+
+If C<--js> is given, other options are ignored and the script will
+generate json files for each language under
+F<share/web/static/js/dict> from the current po files. Before doing
+so, you might want to run C<jifty po> with C<--dir share/web/static/js>
+to include messages from javascript in your po files.
=cut
sub options {
(
'l|language=s' => 'language',
+ 'dir=s@' => 'directories',
+ 'js' => 'js',
)
}
@@ -48,9 +60,46 @@
sub run {
- my $self = shift;
- Jifty->new(no_handle => 1);
- $self->update_catalogs;
+ my $self = shift;
+ Jifty->new(no_handle => 1);
+
+ return $self->_js_gen if $self->{js};
+
+ $self->update_catalogs;
+}
+
+sub _js_gen {
+ my $self = shift;
+ my $static_handler = Jifty::View::Static::Handler->new;
+ my $logger =Log::Log4perl->get_logger("main");
+ for my $file ( @{ Jifty::Web->javascript_libs } ) {
+ next if $file =~ m/^ext/;
+ next if $file =~ m/^yui/;
+ next if $file =~ m/^rico/;
+ my $path = $static_handler->file_path( File::Spec->catdir( 'js', $file ) ) or next;
+
+ $logger->info("Extracting messages from '$path'");
+
+ $LMExtract->extract_file( $path );
+ }
+
+ $LMExtract->set_compiled_entries;
+ $LMExtract->compile(USE_GETTEXT_STYLE);
+
+ Jifty::I18N->new;
+ mkpath ['share/web/static/js/dict'];
+ for my $lang (Jifty::I18N->available_languages) {
+ my $file = "share/web/static/js/dict/$lang.json";
+ $logger->info("Generating $file");
+ open my $fh, '>', $file or die "$file: $!";
+
+ no strict 'refs';
+ print $fh
+ Jifty::JSON::objToJson( { map { my $text = ${"Jifty::I18N::".$lang."::Lexicon"}{$_};
+ defined $text ? ( $_ => $text ) : () }
+ keys %{$LMExtract->lexicon} },
+ { singlequote => 1 } );
+ }
}
=head2 _check_mime_type FILENAME
@@ -124,7 +173,7 @@
sub extract_messages {
my $self = shift;
# find all the .pm files in @INC
- my @files = File::Find::Rule->file->in( Jifty->config->framework('Web')->{'TemplateRoot'}, 'lib', 'bin' );
+ my @files = File::Find::Rule->file->in( Jifty->config->framework('Web')->{'TemplateRoot'}, 'lib', 'bin', @{ $self->{directories} || [] } );
my $logger =Log::Log4perl->get_logger("main");
foreach my $file (@files) {
More information about the Jifty-commit
mailing list