# run locales.pl from this directory to rebuild the translation files
$self{texts} = {
+ ' Date missing!' => ' Datum fehlt!',
+ ' Number' => '',
+ ' Part Number missing!' => ' Artikelnummer fehlt!',
+ ' missing!' => ' fehlt!',
'AP' => 'Einkauf',
'AP Aging' => 'Offene Verbindlichkeiten',
'AP Transaction' => 'Kreditorenbuchung',
'Accrual' => 'Bilanzierung',
'Active' => 'Aktiv',
'Add' => 'Erfassen',
+ 'Add ' => '',
'Add AP Transaction' => 'Kreditorenbuchung',
'Add AR Transaction' => 'Debitorenbuchung',
'Add Account' => 'Konto erfassen',
'ELSTER-Steuernummer: ' => 'ELSTER-Steuernummer: ',
'EUR' => 'E/Ü-Rechnung',
'Edit' => 'Bearbeiten',
+ 'Edit ' => '',
'Edit Account' => 'Kontodaten bearbeiten',
'Edit Accounts Payables Transaction' => 'Kreditorenbuchung bearbeiten',
'Edit Accounts Receivables Transaction' => 'Debitorenbuchung bearbeiten',
'Edit Warehouse' => 'Lager bearbeiten',
'Employee' => 'Bearbeiter',
'Enforce transaction reversal for all dates' => 'Gegenbuchungen für jeden Zeitraum aktualisieren',
- 'Enter up to 3 letters separated by a colon (i.e CAD:USD:EUR) for your native and foreign currencies' => 'Durch Doppelpunkte getrennte Währungskürzel mit maximal 3 Buchstaben aufführen; Ihre eigene LandesWährung zuerst (z.B. EUR:USD:CAD)',
+ 'Enter up to 3 letters separated by a colon (i.e CAD:USD:EUR) for your native and foreign currencies' => 'Geben Sie Ihre und weitere Währungen mit bis zu drei Buchstaben pro Währung und Währungen durch Doppelpunkte getrennt ein (z.B. EUR:USD:CAD)',
'Equity' => 'Passiva',
+ 'Es fehlen Angaben zur Versteuerung.
+ Wenn Sie Ist Versteuert sind, wählen Sie die Einnahmen/Überschuß-Rechnung aus.
+ Sind Sie Soll-Versteuert und Bilanzverpflichtet, dann wählen Sie Bilanz aus.' => '',
'Exch' => 'Wechselkurs.',
'Exchangerate' => 'Wechselkurs',
'Exchangerate Difference' => 'Wechselkursunterschied',
'N/A' => 'N.Z.',
'Name' => 'Name',
'Name missing!' => 'Name fehlt!',
- 'New Account' => '',
+ 'New Account' => 'Neues Konto',
'New Templates' => 'neue Vorlagen',
'No' => 'Nein',
'No Database Drivers available!' => 'Kein Datenbanktreiber verfügbar!',
'number' => 'Nummer',
'posted!' => 'gebucht',
'quarter' => 'vierteljährliche (quartalsweise) Abgabe',
+ 's' => '',
'save' => 'speichern',
'saved' => 'gespeichert',
'saved!' => 'gespeichert',
'Edit Template' => 'Vorlage bearbeiten',
'Edit Warehouse' => 'Lager bearbeiten',
'Enforce transaction reversal for all dates' => 'Gegenbuchungen für jeden Zeitraum aktualisieren',
- 'Enter up to 3 letters separated by a colon (i.e CAD:USD:EUR) for your native and foreign currencies' => 'Durch Doppelpunkte getrennte Währungskürzel mit maximal 3 Buchstaben aufführen; Ihre eigene LandesWährung zuerst (z.B. EUR:USD:CAD)',
+ 'Enter up to 3 letters separated by a colon (i.e CAD:USD:EUR) for your native and foreign currencies' => 'Geben Sie Ihre und weitere Währungen mit bis zu drei Buchstaben pro Währung und Währungen durch Doppelpunkte getrennt ein (z.B. EUR:USD:CAD)',
'Equity' => 'Passiva',
'Expense' => 'Aufwandskonto',
'Expense Account' => 'Aufwandskonto',
$self{texts} = {
+ ' Number' => ' Number',
'Abteilung' => 'Abteilung',
'Account Number' => 'Kontonummer',
'Accounting Menu' => 'Kontoverwaltung',
'Vendors' => 'Lieferanten',
'Zipcode' => 'PLZ',
'days' => 'Tage',
+ 's' => 's',
};
$self{subs} = {
'May ' => 'Mai',
'Mitarbeiter' => 'Mitarbeiter',
'MwSt. inkl.' => 'MwSt. inkl.',
- 'New Account' => 'New Account',
+ 'New Account' => 'Neues Konto',
'Notes' => 'Bemerkungen',
'Nov' => 'Nov',
'November' => 'November',
'weiter' => 'continue',
'löschen' => 'delete',
'dialogbuchung' => 'gl_transaction',
- 'new_account' => 'new_account',
+ 'neues_konto' => 'new_account',
'buchen' => 'post',
'neu_buchen' => 'post_as_new',
'rechnung' => 'sales_invoice',
$self{texts} = {
+ ' Date missing!' => ' Datum fehlt!',
+ ' Part Number missing!' => ' Artikelnummer fehlt!',
'Accounting Menu' => 'Kontoverwaltung',
'Active' => 'Aktiv',
'Add' => 'Erfassen',
+ 'Add ' => 'Add ',
'Add Assembly' => 'Erzeugnis erfassen',
'Add Part' => 'Ware erfassen',
'Add Purchase Order' => 'Lieferantenauftrag erfassen',
'E-mail' => 'eMail',
'E-mail address missing!' => 'eMailadresse fehlt!',
'E-mailed' => 'eMail gesendet.',
+ 'Edit ' => 'Edit ',
'Edit Assembly' => 'Erzeugnis bearbeiten',
'Edit Part' => 'Ware bearbeiten',
'Edit Service' => 'Dienstleistung bearbeiten',
'button' => '?',
'choice' => 'auswählen',
'choice part' => 'Artikel auswählen',
- 'ea' => 'Stk',
'emailed to' => 'gemailt an',
'hr' => 'Stunde',
'list' => 'auflisten',
$self{texts} = {
+ ' Date missing!' => ' Datum fehlt!',
'Add Purchase Order' => 'Lieferantenauftrag erfassen',
'Add Quotation' => 'Angebot erfassen',
'Add Request for Quotation' => 'Anfrage erfassen',
$self{texts} = {
+ ' Date missing!' => ' Datum fehlt!',
'Account' => 'Konto',
'Accounting Menu' => 'Kontoverwaltung',
'Add Purchase Order' => 'Lieferantenauftrag erfassen',
$self{texts} = {
+ ' Date missing!' => ' Datum fehlt!',
'Account' => 'Konto',
'Accounting Menu' => 'Kontoverwaltung',
'Add Purchase Order' => 'Lieferantenauftrag erfassen',
use FileHandle;
-
-$basedir = "../..";
-$bindir = "$basedir/bin/mozilla";
+$basedir = "../..";
+$bindir = "$basedir/bin/mozilla";
$menufile = "menu.ini";
foreach $item (@ARGV) {
unshift @menufiles, $menufile;
}
-
# slurp the translations in
if (-f 'all') {
require "all";
}
-
foreach $file (@progfiles) {
-
+
%locale = ();
%submit = ();
- %subrt = ();
-
+ %subrt = ();
+
&scanfile("$bindir/$file");
# scan custom_{module}.pl or {login}_{module}.pl files
foreach $customfile (@customfiles) {
if ($customfile =~ /_$file/) {
if (-f "$bindir/$customfile") {
- &scanfile("$bindir/$customfile");
+ &scanfile("$bindir/$customfile");
}
}
}
-
+
# if this is the menu.pl file
if ($file eq 'menu.pl') {
foreach $item (@menufiles) {
$file =~ s/\.pl//;
-
eval { require 'missing'; };
unlink 'missing';
foreach $text (keys %$missing) {
if ($locale{$text}) {
unless ($self{texts}{$text}) {
- $self{texts}{$text} = $missing->{$text};
+ $self{texts}{$text} = $missing->{$text};
}
}
}
-
open FH, ">$file" or die "$! : $file";
print FH q|$self{texts} = {
$keytext = $key;
$keytext =~ s/'/\\'/g;
$keytext =~ s/\\$/\\\\/;
-
- print FH qq| '$keytext'|.(' ' x (27-length($keytext))).qq| => '$text',\n|;
+
+ print FH qq| '$keytext'|
+ . (' ' x (27 - length($keytext)))
+ . qq| => '$text',\n|;
}
print FH q|};
$self{subs} = {
|;
-
+
foreach $key (sort keys %subrt) {
$text = $key;
$text =~ s/'/\\'/g;
$text =~ s/\\$/\\\\/;
- print FH qq| '$text'|.(' ' x (27-length($text))).qq| => '$text',\n|;
+ print FH qq| '$text'| . (' ' x (27 - length($text))) . qq| => '$text',\n|;
}
foreach $key (sort keys %submit) {
$english_sub =~ s/'/\\'/g;
$english_sub =~ s/\\$/\\\\/;
$english_sub = lc $key;
-
+
$translated_sub = lc $text;
- $english_sub =~ s/( |-|,)/_/g;
+ $english_sub =~ s/( |-|,)/_/g;
$translated_sub =~ s/( |-|,)/_/g;
- print FH qq| '$translated_sub'|.(' ' x (27-length($translated_sub))).qq| => '$english_sub',\n|;
+ print FH qq| '$translated_sub'|
+ . (' ' x (27 - length($translated_sub)))
+ . qq| => '$english_sub',\n|;
}
-
+
print FH q|};
1;
close FH;
}
-
# now print out all
open FH, ">all" or die "$! : all";
$self{texts} = {
|;
-
foreach $key (sort keys %alllocales) {
$text = $self{texts}{$key};
$count++;
-
+
$text =~ s/'/\\'/g;
$text =~ s/\\$/\\\\/;
- $key =~ s/'/\\'/g;
- $key =~ s/\\$/\\\\/;
+ $key =~ s/'/\\'/g;
+ $key =~ s/\\$/\\\\/;
unless ($text) {
$notext++;
push @missing, $key;
}
- print FH qq| '$key'|.(' ' x (27-length($key))).qq| => '$text',\n|;
+ print FH qq| '$key'| . (' ' x (27 - length($key))) . qq| => '$text',\n|;
}
close FH;
-
if (@missing) {
open FH, ">missing" or die "$! : missing";
|;
foreach $text (@missing) {
- print FH qq| '$text'|.(' ' x (27-length($text))).qq| => '',\n|;
+ print FH qq| '$text'| . (' ' x (27 - length($text))) . qq| => '',\n|;
}
print FH q|};
|;
close FH;
-
+
}
open(FH, "LANGUAGE");
print "\n$trlanguage - ${per}%\n";
exit;
+
# eom
+sub extract_text_between_parenthesis {
+ my ($fh, $line) = @_;
+ my ($inside_string, $pos, $text, $quote_next) = (undef, 0, "", 0);
+
+ while (1) {
+ if (length($line) <= $pos) {
+ $line = <$fh>;
+ return ($text, "") unless ($line);
+ $pos = 0;
+ }
+
+ my $cur_char = substr($line, $pos, 1);
+
+ if (!$inside_string) {
+ if ((length($line) >= ($pos + 3)) && (substr($line, $pos, 2)) eq "qq") {
+ $inside_string = substr($line, $pos + 2, 1);
+ $pos += 2;
+
+ } elsif ((length($line) >= ($pos + 2)) &&
+ (substr($line, $pos, 1) eq "q")) {
+ $inside_string = substr($line, $pos + 1, 1);
+ $pos++;
+
+ } elsif (($cur_char eq '"') || ($cur_char eq '\'')) {
+ $inside_string = $cur_char;
+
+ } elsif ($cur_char eq ")") {
+ return ($text, substr($line, $pos + 1));
+ }
+
+ } else {
+ if ($quote_next) {
+ $text .= $cur_char;
+ $quote_next = 0;
+
+ } elsif ($cur_char eq '\\') {
+ $text .= $cur_char;
+ $quote_next = 1;
+
+ } elsif ($cur_char eq $inside_string) {
+ undef($inside_string);
+
+ } else {
+ $text .= $cur_char;
+
+ }
+ }
+ $pos++;
+ }
+}
sub scanfile {
my $file = shift;
return unless (-f "$file");
-
+
my $fh = new FileHandle;
open $fh, "$file" or die "$! : $file";
my ($is_submit, $line_no, $sub_line_no) = (0, 0, 0);
-
+
while (<$fh>) {
$line_no++;
+
# is this another file
if (/require\s+\W.*\.pl/) {
my $newfile = $&;
$newfile =~ s/\$form->{path}\///;
&scanfile("$bindir/$newfile");
}
-
+
# is this a sub ?
if (/^sub /) {
($null, $subrt) = split / +/;
$subrt{$subrt} = 1;
next;
}
-
+
my $rc = 1;
-
+
while ($rc) {
if (/Locale/) {
- unless (/^use /) {
- my ($null, $country) = split /,/;
- $country =~ s/^ +[\"\']//;
- $country =~ s/[\"\'].*//;
- }
+ unless (/^use /) {
+ my ($null, $country) = split /,/;
+ $country =~ s/^ +[\"\']//;
+ $country =~ s/[\"\'].*//;
+ }
}
my $postmatch = "";
+
# is it a submit button before $locale->
if (/type\s*=\s*submit/i) {
$postmatch = $';
if ($` !~ /\$locale->text/) {
- $is_submit = 1;
+ $is_submit = 1;
$sub_line_no = $line_no;
}
}
- my ($found) = /\$locale->text.*?\W\)/;
+ my ($found) = /\$locale->text.*?\(/;
my $postmatch = $';
if ($found) {
- my $string = $&;
- $string =~ s/\$locale->text\(\s*[\'\"(q|qq)][\'\/\\\|~]*//;
- $string =~ s/\W\)+.*$//;
+ my $string;
+ ($string, $_) = extract_text_between_parenthesis($fh, $postmatch);
+ $postmatch = $_;
# if there is no $ in the string record it
- unless ($string =~ /\$\D.*/) {
- # this guarantees one instance of string
- $locale{$string} = 1;
+ unless (($string =~ /\$\D.*/) || ("" eq $string)) {
+
+ # this guarantees one instance of string
+ $locale{$string} = 1;
# this one is for all the locales
- $alllocales{$string} = 1;
+ $alllocales{$string} = 1;
# is it a submit button before $locale->
if ($is_submit) {
- $submit{$string} = 1;
+ $submit{$string} = 1;
}
- }
+ }
} elsif ($postmatch =~ />/) {
$is_submit = 0;
}
# exit loop if there are no more locales on this line
($rc) = ($postmatch =~ /\$locale->text/);
+
# strip text
s/^.*?\$locale->text.*?\)//;
- if (($postmatch =~ />/) ||
- (!$found && ($sub_line_no != $line_no) && />/)) {
+ if ( ($postmatch =~ />/)
+ || (!$found && ($sub_line_no != $line_no) && />/)) {
$is_submit = 0;
}
}
}
-
sub scanmenu {
my $file = shift;
# strip []
grep { s/(\[|\])//g } @a;
-
+
foreach my $item (@a) {
@b = split /--/, $item;
foreach $string (@b) {
chomp $string;
- $locale{$string} = 1;
+ $locale{$string} = 1;
$alllocales{$string} = 1;
}
}
-
-}
+}
$self{texts} = {
+ ' Date missing!' => ' Datum fehlt!',
+ ' missing!' => ' fehlt!',
'Accounting Menu' => 'Kontoverwaltung',
'Add' => 'Erfassen',
'Add Exchangerate' => 'Wechselkurs erfassen',
'Description' => 'Beschreibung',
'ELSTER Export nach Winston' => 'ELSTER Export nach Winston',
'ELSTER-Steuernummer: ' => 'ELSTER-Steuernummer: ',
+ 'Es fehlen Angaben zur Versteuerung.
+ Wenn Sie Ist Versteuert sind, wählen Sie die Einnahmen/Überschuß-Rechnung aus.
+ Sind Sie Soll-Versteuert und Bilanzverpflichtet, dann wählen Sie Bilanz aus.' => 'Es fehlen Angaben zur Versteuerung.
+ Wenn Sie Ist Versteuert sind, wählen Sie die Einnahmen/Überschuß-Rechnung aus.
+ Sind Sie Soll-Versteuert und Bilanzverpflichtet, dann wählen Sie Bilanz aus.',
'Fax' => 'Fax',
'Fax. : ' => 'Fax. : ',
'Fax.: ' => 'Fax.: ',