View | Details | Raw Unified | Return to bug 15395
Collapse All | Expand All

(-)a/misc/translator/LangInstaller.pm (-48 / +54 lines)
Lines 78-83 sub new { Link Here
78
    $self->{msgmerge}        = `which msgmerge`;
78
    $self->{msgmerge}        = `which msgmerge`;
79
    $self->{msgfmt}          = `which msgfmt`;
79
    $self->{msgfmt}          = `which msgfmt`;
80
    $self->{msgcat}          = `which msgcat`;
80
    $self->{msgcat}          = `which msgcat`;
81
    $self->{msginit}         = `which msginit`;
81
    $self->{xgettext}        = `which xgettext`;
82
    $self->{xgettext}        = `which xgettext`;
82
    $self->{sed}             = `which sed`;
83
    $self->{sed}             = `which sed`;
83
    $self->{po2json}         = "$Bin/po2json";
84
    $self->{po2json}         = "$Bin/po2json";
Lines 85-90 sub new { Link Here
85
    chomp $self->{msgmerge};
86
    chomp $self->{msgmerge};
86
    chomp $self->{msgfmt};
87
    chomp $self->{msgfmt};
87
    chomp $self->{msgcat};
88
    chomp $self->{msgcat};
89
    chomp $self->{msginit};
88
    chomp $self->{xgettext};
90
    chomp $self->{xgettext};
89
    chomp $self->{sed};
91
    chomp $self->{sed};
90
92
Lines 475-514 sub create_tmpl { Link Here
475
    }
477
    }
476
}
478
}
477
479
478
sub create_messages {
480
sub locale_name {
479
    my $self = shift;
481
    my $self = shift;
480
482
481
    my ($language, $country) = split /-/, $self->{lang};
483
    my ($language, $region, $country) = split /-/, $self->{lang};
484
    $country //= $region;
482
    my $locale = $language;
485
    my $locale = $language;
483
    if ($country) {
486
    if ($country && length($country) == 2) {
484
        $locale .= '_' . $country;
487
        $locale .= '_' . $country;
485
    }
488
    }
486
    my $podir = "$self->{path_po}/$locale/LC_MESSAGES";
487
489
488
    make_path($podir);
490
    return $locale;
489
    say "Create messages ($locale)" if $self->{verbose};
491
}
490
    system
492
491
        "$self->{cp} $self->{domain}.pot " .
493
sub create_messages {
492
        "$podir/$self->{domain}.po";
494
    my $self = shift;
495
496
    my $pot = "$self->{domain}.pot";
497
    my $po = "$self->{path_po}/$self->{lang}-messages.po";
498
499
    unless ( -f $pot ) {
500
        $self->extract_messages();
501
    }
502
503
    say "Create messages ($self->{lang})" if $self->{verbose};
504
    my $locale = $self->locale_name();
505
    system "$self->{msginit} -i $pot -o $po -l $locale --no-translator";
506
507
    # If msginit failed to correctly set Plural-Forms, set a default one
508
    system "$self->{sed} --in-place $po "
509
        . "--expression='s/Plural-Forms: nplurals=INTEGER; plural=EXPRESSION/Plural-Forms: nplurals=2; plural=(n != 1)/'";
493
}
510
}
494
511
495
sub update_messages {
512
sub update_messages {
496
    my $self = shift;
513
    my $self = shift;
497
514
498
    my ($language, $country) = split /-/, $self->{lang};
515
    my $pot = "$self->{domain}.pot";
499
    my $locale = $language;
516
    my $po = "$self->{path_po}/$self->{lang}-messages.po";
500
    if ($country) {
517
501
        $locale .= '_' . $country;
518
    unless ( -f $pot ) {
519
        $self->extract_messages();
502
    }
520
    }
503
    my $podir = "$self->{path_po}/$locale/LC_MESSAGES";
504
    my $pofile = "$podir/$self->{domain}.po";
505
521
506
    say "Update messages ($locale)" if $self->{verbose};
522
    if ( -f $po ) {
507
    if ( not -f $pofile ) {
523
        say "Update messages ($self->{lang})" if $self->{verbose};
508
        say "File $pofile does not exist" if $self->{verbose};
524
        system "$self->{msgmerge} -U $po $pot";
525
    } else {
509
        $self->create_messages();
526
        $self->create_messages();
510
    }
527
    }
511
    system "$self->{msgmerge} -U $pofile $self->{domain}.pot";
512
}
528
}
513
529
514
sub extract_messages_from_templates {
530
sub extract_messages_from_templates {
Lines 519-524 sub extract_messages_from_templates { Link Here
519
    my $parser = Template::Parser->new();
535
    my $parser = Template::Parser->new();
520
536
521
    foreach my $file (@files) {
537
    foreach my $file (@files) {
538
        say "Extract messages from $file" if $self->{verbose};
522
        my $template = read_file("$intranetdir/$file");
539
        my $template = read_file("$intranetdir/$file");
523
        my $data = $parser->parse($template);
540
        my $data = $parser->parse($template);
524
        my $document = PPI::Document->new(\$data->{BLOCK});
541
        my $document = PPI::Document->new(\$data->{BLOCK});
Lines 576-581 sub extract_messages_from_templates { Link Here
576
sub extract_messages {
593
sub extract_messages {
577
    my $self = shift;
594
    my $self = shift;
578
595
596
    say "Extract messages into POT file" if $self->{verbose};
597
579
    my $intranetdir = $self->{context}->config('intranetdir');
598
    my $intranetdir = $self->{context}->config('intranetdir');
580
    my @files_to_scan;
599
    my @files_to_scan;
581
    my @directories_to_scan = ('.');
600
    my @directories_to_scan = ('.');
Lines 649-685 sub extract_messages { Link Here
649
        die "system call failed: $msgcat_cmd";
668
        die "system call failed: $msgcat_cmd";
650
    }
669
    }
651
670
652
    if ( -f "$Bin/$self->{domain}.pot" ) {
671
    my $replace_charset_cmd = "$self->{sed} --in-place " .
653
        my $replace_charset_cmd = "$self->{sed} --in-place " .
672
        "$Bin/$self->{domain}.pot " .
654
            "$Bin/$self->{domain}.pot " .
673
        "--expression='s/charset=CHARSET/charset=UTF-8/'";
655
            "--expression='s/charset=CHARSET/charset=UTF-8/'";
674
    if (system($replace_charset_cmd) != 0) {
656
        if (system($replace_charset_cmd) != 0) {
675
        die "system call failed: $replace_charset_cmd";
657
            die "system call failed: $replace_charset_cmd";
658
        }
659
    } else {
660
        say "No messages found" if $self->{verbose};
661
        return;
662
    }
676
    }
663
    return 1;
664
}
677
}
665
678
666
sub install_messages {
679
sub install_messages {
667
    my ($self) = @_;
680
    my ($self) = @_;
668
681
669
    my ($language, $country) = split /-/, $self->{lang};
682
    my $locale = $self->locale_name();
670
    my $locale = $language;
683
    my $modir = "$self->{path_po}/$locale/LC_MESSAGES";
671
    if ($country) {
684
    my $pofile = "$self->{path_po}/$self->{lang}-messages.po";
672
        $locale .= '_' . $country;
685
    my $mofile = "$modir/$self->{domain}.mo";
673
    }
674
    my $podir = "$self->{path_po}/$locale/LC_MESSAGES";
675
    my $pofile = "$podir/$self->{domain}.po";
676
    my $mofile = "$podir/$self->{domain}.mo";
677
686
678
    say "Install messages ($locale)" if $self->{verbose};
679
    if ( not -f $pofile ) {
687
    if ( not -f $pofile ) {
680
        say "File $pofile does not exist" if $self->{verbose};
681
        $self->create_messages();
688
        $self->create_messages();
682
    }
689
    }
690
    say "Install messages ($locale)" if $self->{verbose};
691
    make_path($modir);
683
    system "$self->{msgfmt} -o $mofile $pofile";
692
    system "$self->{msgfmt} -o $mofile $pofile";
684
693
685
    my $js_locale_data = 'var json_locale_data = {"Koha":' . `$self->{po2json} $pofile` . '};';
694
    my $js_locale_data = 'var json_locale_data = {"Koha":' . `$self->{po2json} $pofile` . '};';
Lines 712-717 sub install { Link Here
712
    $self->install_tmpl($files) unless $self->{pref_only};
721
    $self->install_tmpl($files) unless $self->{pref_only};
713
    $self->install_prefs();
722
    $self->install_prefs();
714
    $self->install_messages();
723
    $self->install_messages();
724
    $self->remove_pot();
715
}
725
}
716
726
717
727
Lines 727-740 sub get_all_langs { Link Here
727
sub update {
737
sub update {
728
    my ($self, $files) = @_;
738
    my ($self, $files) = @_;
729
    my @langs = $self->{lang} ? ($self->{lang}) : $self->get_all_langs();
739
    my @langs = $self->{lang} ? ($self->{lang}) : $self->get_all_langs();
730
    my $extract_ok = $self->extract_messages();
731
    for my $lang ( @langs ) {
740
    for my $lang ( @langs ) {
732
        $self->set_lang( $lang );
741
        $self->set_lang( $lang );
733
        $self->update_tmpl($files) unless $self->{pref_only};
742
        $self->update_tmpl($files) unless $self->{pref_only};
734
        $self->update_prefs();
743
        $self->update_prefs();
735
        $self->update_messages() if $extract_ok;
744
        $self->update_messages();
736
    }
745
    }
737
    $self->remove_pot() if $extract_ok;
746
    $self->remove_pot();
738
}
747
}
739
748
740
749
Lines 743-752 sub create { Link Here
743
    return unless $self->{lang};
752
    return unless $self->{lang};
744
    $self->create_tmpl($files) unless $self->{pref_only};
753
    $self->create_tmpl($files) unless $self->{pref_only};
745
    $self->create_prefs();
754
    $self->create_prefs();
746
    if ($self->extract_messages()) {
755
    $self->create_messages();
747
        $self->create_messages();
756
    $self->remove_pot();
748
        $self->remove_pot();
749
    }
750
}
757
}
751
758
752
759
753
- 

Return to bug 15395