You are viewing a plain text version of this content. The canonical link for it is here.
Posted to embperl@perl.apache.org by Gerald Richter <ri...@ecos.de> on 2005/01/17 07:25:38 UTC

RE: Multilingual support / was Re: Urgent: MsgIdExtract problem

Hi Robert,

I have fixed/changed the points you requested in your mail below. It's now
in the CVS, you might give it a try...

Gerald


> -----Original Message-----
> From: RobertCZ [mailto:robert@robert.cz] 
> Sent: Wednesday, December 15, 2004 12:49 PM
> To: embperl@perl.apache.org
> Cc: Gerald Richter
> Subject: Multilingual support / was Re: Urgent: MsgIdExtract problem
> 
> Gerald Richter wrote: 
> 
> 		
> '$Embperl::Syntax::MsgIdExtract::Ids{scalar(%#0%)} = q{} if (!exists
> 		($Embperl::Syntax::MsgIdExtract::Ids{scalar(%#0%)})) ;',
> 		    
> 
> 	
> 	Try to change %#0% to %#\'0%
> 	  
> 
> 
> OK, now I got it working and it's really cool (with the 
> exception of the last couple of bugs). Here are my comments 
> (relevant for 2.0RC2):
> 
> 
> - I changed MsgIdExtract syntax from %#0% to %#\'0%, now it 
> correctly extracts more complex expressions, but it adds 
> superflous quotes and a space to the extracted expressions, 
> it looks like this  '\'Test \'' => '', This can be hacked in 
> the extract script with something like
> 
> foreach my $fn (@files) {
> ...
>     Embperl::Execute ({use_env => 1, use_redirect_env => 1, 
> syntax => 'MsgIdExtract', inputfile => $fn, output => \$out, 
> errors => \@errors}) ; ...
> }
> my @correct_keys = map { /^\'\s*(.*?)\s*\'$/ } keys 
> %Embperl::Syntax::MsgIdExtract::Ids;
> 
> but I think it's a bug
> 
> 
> - MsgIdExtract ignores [- $epreq->gettext(expr) -] I don't 
> know how to modify the syntax, but it's clearly a bug
> 
> 
> - when messages are dumped with $Data::Dumper::Useqq  = 1 it 
> break 8bit chars (dump as octal, but translators would go mad 
> should they see it)
> 
> 
> - I find it more practical to dump sorted messages with 
> something like $Data::Dumper::Sortkeys  = \&{ sub {[ sort { 
> $a cmp $b } keys %{$_[0]} ]} } 
> 
> 
> - app file must delete empty (missing) translations to force 
> EP use message in the default language, this is quite 
> impractical because translators need it in the dictionary 
> file and so during the development I need to modify the 
> dictionary either for EP or for translators. Now I delete it 
> in app file but it's stupid performance-wise
> 
> - Robert
> 
> -------------------------------------
> 
> Just in case somebody needs it, below are necessary files
> 
> _app.eo
> 
> -------------------------------------
> 
> @ISA = ('Embperl::App') ;
> 
> sub init {
>         my $self = shift ;
>         my $r = $self->curr_req ;
>     my $fdat = $r->thread->form_hash;        
>         my $lang = $fdat->{lang} || 'en' ;
>     my %messages = %{ do '/home/www/germic/etc/dict/dict.dump' };
> 
>     foreach my $l (keys %messages) {
>         foreach my $t (keys %{ $messages{$l} }) {
>             delete $messages{$l}{$t} unless $messages{$l}{$t};
>         }
>     }
> 
> #use Data::Dumper; print STDERR "\n\n", Dumper(\%messages), "\n\n";
>         
>         push @{$r->messages}, $messages{$lang} ;
>         push @{$r->default_messages}, $messages{'en'} if 
> ($lang ne 'en') ;
> 
>     return 0;
> 
> }
>  
> 1 ;
> 
> -------------------------------------
> 
> extract
> 
> -------------------------------------
> 
> BEGIN 
>     {
>     %Embperl::initparam = (use_env => 1, use_redirect_env => 1) ;
>     $ENV{EMBPERL_SESSION_HANDLER_CLASS} = 'no' ;
>     }    
>     
> use Embperl;
> use Data::Dumper ;
> 
> use strict;
> use vars qw{$srcpath $dictpath @files @languages $msgids 
> @correct_keys};
> 
> $srcpath    = '/home/www/germic';
> $dictpath    = '/home/www/germic/etc/dict';
> @files        = split ' ', `find $srcpath -name *.html 
> -printf "%p " -or -name *.eo -printf "%p "`;
> @languages    = qw(cz de); # en not listed, it's default!
> 
> $msgids = do "$dictpath/dict.dump" ;
> die $@ if ($@) ;
> #print Dumper($msgids);
> 
> foreach my $fn (@files) {
>     my ( $out, @errors );
>     Embperl::Execute ({use_env => 1, use_redirect_env => 1, 
> syntax => 'MsgIdExtract', inputfile => $fn, output => \$out, 
> errors => \@errors}) ;
>     if (@errors) {
>         print join ("\n", @errors) ;
>         last ;
>     }
> }
> #print Dumper(\%Embperl::Syntax::MsgIdExtract::Ids);
> 
> @correct_keys = map { /^\'\s*(.*?)\s*\'$/ } keys 
> %Embperl::Syntax::MsgIdExtract::Ids;
> #print Dumper(\@correct_keys);
> 
> foreach my $lang (@languages) {
>     foreach my $k (@correct_keys) {
>         $msgids -> {en}{$k} = $k ;
>         $msgids -> {$lang}{$k} = '' if (!exists $msgids -> 
> {$lang}{$k}) ;
>     }
> }
> #print Dumper($msgids);
> 
> rename "$dictpath/dict.dump", "$dictpath/dict.bak" ; open FH, 
> ">$dictpath/dict.dump" or die "Cannot open 
> $dictpath/dict.dump ($!)" ; # $Data::Dumper::Indent = 1 ; # 
> default is nicer # $Data::Dumper::Useqq  = 1 ; # breaks 8bit 
> chars $Data::Dumper::Sortkeys  = \&{ sub {[ sort { $a cmp $b 
> } keys %{$_[0]} ]} }  ; # more practical print FH 
> Data::Dumper -> Dump  ([$msgids], ['msgids']) ; close FH ;
> 
> -------------------------------------
> 
> test
> 
> -------------------------------------
> 
> <h1>trans test</h1>
> 
> <p>Test: <b>[= Test =]</b>
> <p>Hi!: <b>[= Hi! =]</b>
> <p>Thank You!: <b>[= Thank You! =]</b>
> <p>Athos, Porthos, Aramis & d'Artagnan: <b>[=  Athos, 
> Porthos, Aramis & d'Artagnan =]</b> <p>How's life?: <b>[+ 
> $epreq->gettext(qq{How's life?}) +]<b>
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-help@perl.apache.org


Re: Multilingual support / was Re: Urgent: MsgIdExtract problem

Posted by RobertCZ <ro...@robert.cz>.
Gerald Richter wrote:

>I have fixed/changed the points you requested in your mail below. It's now
>in the CVS, you might give it a try...
>  
>
Great, thanks, I'm going to test it, but I remember there were some 
special procedure necessary to use CVS version for EP2 and docs
http://perl.apache.org/embperl/pod/doc/CVS.htm is empty - so please 
where can I get CVS tarball and is there something special to do to install?

- Robert




---------------------------------------------------------------------
To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-help@perl.apache.org