Seite 4 von 4

Interesse angemeldet

Verfasst: Mi 7. Jun 2006, 10:00
von ruetolo
Hallo Zusammen

Meine Kunden sprechen oft italienisch, daher wäre ich auch interessiert daran das Backend in Italienisch benutzen zu können und ein Forum in dessen Sprache wäre natürlich auch super!

Wenn man nun noch Spanisch und Französisch hinzufügen würde, wäre das CMS International gesehen extrem tauglich! :D

Liebe Grüsse
Rodolfo

Verfasst: Mi 7. Jun 2006, 15:23
von knb
Eine neue Französisch -Version ist gerade in Arbeit! Kann aber noch ein paar Tage oder wochen dauern da dies von einer Praktikantin (und mir) so nebenbei erledigt wird.

Es gab zwar schon mal ein Lokalisierungsprojekt für 4.4.4 aber die seite mit dem .po file mit den nach FR übersetzten Strings ist nicht mehr online. (Kann notfalls aber bei mir "angefordert" werden).

Nur ist das aktuelle Release ja 4.6.8, und wir haben festgestellt dass die Anzahl der Strings sich mal aben verdoppelt hat. Also das 4.4.4 er .po File enthält ca 500 zu übersetzende Strings, die 4.6.8 er Version ca 1000.

Daran kann man vielleicht sehen was für ein grosser Schritt der Releasewechsel von 4.4. nach 4.6. eigentlich war. (Wenn man annimmt dass die anzahl zu übersetzender Strings direkt proportional zur gesamtanzahl der Codezeilen ist.)

Der größte Brocken Arbeit ist aber die Übersetzung der Handbücher in weitere Sprachen. Das müßte 4fb machen.

Verfasst: Mi 7. Jun 2006, 15:41
von mvf
knb hat geschrieben:... Der größte Brocken Arbeit ist aber die Übersetzung der Handbücher in weitere Sprachen. Das müßte 4fb machen.
vor monaten hatte ich mich angeboten die contenido-translation auf italienisch weiterzuführen ein erstes draft hatte ich bereits erstellt, allerdings kam von 4fb auch auf eine mailanfarge keine antwort. etwas später würde dann auch von timo geposted was stand der dinge ist. mal bisis rückwärts lesen.

Verfasst: Do 8. Jun 2006, 09:31
von knb
Was wir nach französisch übersetzen ist die Italienischversion von Forum-User Alessandro, siehe download link in diesem Thread.

Also alle italienischen msgstr "..." Einträge raus, ersetzt durch franz.Übersetzung, und in den Konfig-Metadaten it_IT durch fr_FR ersetzt.

Ich ging einfach davon aus dass diese Version vollständig ist.
Wie vollständig ist die Italienischversion (das .po File) denn nun? Fehlt noch was substanzielles?

Verfasst: Do 8. Jun 2006, 10:33
von mvf
knb hat geschrieben:Ich ging einfach davon aus dass diese Version vollständig ist.
Wie vollständig ist die Italienischversion (das .po File) denn nun? Fehlt noch was substanzielles?
ich hatte mit der 4.6.4 begonnen und einen ersten draft erstellt, http://contenido.funjumping.de/front_co ... 7&idart=83, alles weitere habe ich dann aufgrund der aussage con timo eingestellt

Verfasst: Sa 17. Jun 2006, 15:16
von mvf
@knb:

es geht vieleicht doch weiter ;)
http://contenido.org/forum/viewtopic.ph ... highlight=

Verfasst: Mo 19. Jun 2006, 09:16
von knb
Die neue französisch-version ist inzwischen komplett übersetzt, aber die Qualitätssicherung dauert noch an.
Scheint unabdingbar zu sein, da ich einige 100 Strings von Google/Babelfish habe übersetzen lassen, und die maschinell generierten Übersetzungen nur zum Teil brauchbar sind. (Je länger der String desto dubioser die Übersetzung. War aber für sich genommen ein ganz interessantes Programmierprojekt.) Diese werden also allmählich von uns noch korrigiert.

Wahrscheinlich muss ich noch mal den Code der 4.6.8.5 neu durchforsten da wohl inzwischen ein paar neue Strings hinzugekommen sind und bei dem Hin-und Hertransferieren zwischen den verschiedenen Editoren ein paar (multiline-) Strings verloren gegangen sein könnten.

Wer ein französisches po- und mo file unbedingt sofort braucht kann sich ja bei mir melden. Das XML File mit Menüeinträgen hatte ich hier im Forum schon mal gepostet.

Ich könnte auch das Script posten das Google, Yahoo, Babelfish Übersetzungen macht, andere Sprachpaarungen als en => fr habe ich noch nicht ausprobiert. Wär doch mal interessant in ein paar minuten ein .po file in Portugiesisch zu erstellen, nicht wahr?! Wäre allerdings ein perlscript.

Verfasst: Mo 19. Jun 2006, 09:18
von MichFress
lohnt sich die automatisierte Übersetzung denn trotz Nacharbeitens?
Vielleicht würde damit meine polnische Version also noch in diesem Jahrhundert fertig...

das Script könntest du auf jeden Fall mal zur Verfügung stellen... danke!

Verfasst: Mo 19. Jun 2006, 11:11
von knb
von dem was der "Übersetzerwebservice" liefert geht so ca 30% sofort (da viele Strings sehr kurz und eindeutig sind) , 30% mit kleinen Korrekturen und der rest erfordert grössere Korrekturen oder ist ganz unbrauchbar.

Ich hatte Google, Babelfish und Yahoo ausprobiert. Mit Screenscraping, kein Webservice-mit-SOAP-Api.

Fazit: Alle drei benutzen intern die Babelfish-Technologie; Yahoo und Google machen sich noch etwas zusätzliche Arbeit um das Ergebnis aufzuhübschen.

Google ist schnell/blockiert nicht und liefert das am leichtesten zu parsende UTF-8.
Babelfish hat etwas mehr sprachpaare aber ich glaube Polnisch ist auch da nicht dabei.
Yahoo liefert ein UTF-8 zurück mit dem ich nicht zurechtgekommen bin.

Google bietet anscheinend kein Polnisch an, weiss nicht ob Du bei deinem Projekt damit weiterkommst.

Verfasst: Mo 19. Jun 2006, 11:32
von knb
Hier das erwähnte Perlscript. Im Code wird noch eine Datenbank aufgerufen, das habe ich aber auskommentiert.

Das Script liest hier aus dem DATA Block und schreibt mit Print nach STDOUT. Viele Terminals mit UTF-8 nicht richtig klar kommen, kann die Ausgabe von Zeichen mit Akzent ggf. schlecht aussehen.

Wie gesagt ich habe eine andere Version im Einsatz mit Lesen und Zurückschreiben in Access-DB, und ein zweites Script was aus einem po File liest und ein neues po file schreibt, aber das hab ich gerade nicht hier.

Code: Alles auswählen


#!/usr/bin/perl
##############################################################################
# read strings from a database, or a __DATA__ section
# get eng-french translations from web services,
# write it back to the database (this code is commented out)
##############################################################################
use strict;
use WWW::Babelfish;

#use DBI;
use DBI qw(:utils);
#use DBD::ADO;
#Win32::OLE->Option( CP => Win32::OLE::CP_UTF8 );

#use Devel::Peek;
#  use utf8;

use Text::Unidecode;
use Encode;
use constant NOTRANS => "*** not translated ***";

#database connection; use ADO because it works better with UTF-8
#our $dbh = DBI->connect( "dbi:ADO:Provider=Microsoft." . "Jet.OLEDB.4.0;Data Source=G:\\someDir\\translation-french.mdb" );

#some variables
my ( $i, $j, $c, $u, $sql, $msgid, $msgstr, $srv, $bab_tr, $goog_tr, $yahoo_tr, $sth, $dat );

# what must be translated? we read from a database
#$sql = qq{select ID, msgid , msgstr from [eng-italian] where msgid like "msgid%" order by ID};


#enable slurp mode
undef $/;

# we read from the __DATA__ block
# we are dealing with pairs of strings, eng-fr
# some of which are untranslated
# make a hash of
my $file = <DATA>;
my %str  =  map { /msgid "(.*)"\nmsgstr "(.*)"/; $1 => $2 } split /\n\n/msi, $file;

#counters
$i = $j = 1;

# count untranslated strings
foreach my $k ( keys %str ) {
    $u++ unless $str{$k};
    $c++;
}

# the web sites return unicode / utf8, thus make print happy
binmode( STDOUT, ":utf8" );

#translate untranslated strings
#for ( my $j = 0 ; $j < @$dat ; $j++ ) {
foreach my $k ( sort { length($a) <=> length($b) } keys %str ){
    #my $k  =  $dat->[$j]{msgid} ;
    #my $id = $dat->[$j]{ID};
    $i = sprintf( "%03d", $j );
    $j++;
    chomp $k;
    if ($k) {
        $sql = ""; 
        my $id = 0;

        print "\n$i of $c  ($u total untranslated)\n";
        print "\t$k\t" . data_string_desc($k) . "\n";

        $srv = "Babelfish";
        $bab_tr = translate_string( $k, $srv );
        update_db( $srv, qq{"$bab_tr"}, $id);

        $srv = "Google";
        $goog_tr = translate_string( $k, $srv );
        update_db( $srv, qq{"$goog_tr"}, $id );

        $srv      = "Yahoo";
        $yahoo_tr = translate_string( $k, $srv );
        #$yahoo_tr = unidecode($yahoo_tr);           #remove weird chars
        update_db( $srv, $yahoo_tr, $id );

    } else {
        print "\t### $sql\n";
        $sql = "";
    }
    $k = "";

    #print "$k\t$str{$k}\n";
    $i++;
}



#######################################
# End of "main program"
#######################################
sub update_db {
    my ( $srv, $tr, $id) = @_;
    #my $sql = qq{ update [eng-italian] set [msgstr-fr-$srv] = 'msgstr $tr' where ID = $id};    #and [msgstr-fr-google]  is null

    #$dbh->do($sql) or warn "$srv: can't execute $sql: $! \ndb said: " . $dbh->errstr unless (index($tr, NOTRANS) || $tr =~ /UNAVAIL/i);

    print "\t" . data_string_desc($tr) . "\n";
    print "\t$srv:\t$tr\n";
    #print "\t$sql\n";
}


sub translate_string {
    my ( $text, $objstr ) = @_;

    # define translator objects
    my $obj = new WWW::Babelfish( service => $objstr, agent => 'Mozilla/8.0' );    
    return "$objstr Translation server unavailable\n" unless defined($obj) && ref($obj) eq "WWW::Babelfish";

    my $french_text = $obj->translate(
        'source'      => 'English',
        'destination' => 'French',
        'text'        => Encode::decode_utf8($text),
        'delimiter'   => "\n\t"
    );
    sleep(1);
    warn( "Could not translate: " . $obj->error ) unless defined($french_text);

    #Encode::_utf8_on($french_text) if $objstr eq "Yahoo";
    
    chomp($french_text);
    $french_text =~ s/(?:l')?\s*identification\s+de\s+message\s*//ig;    #cleanup
    $french_text =~ s/'/''/g;
    $french_text =~ s/^(\W+)(.*)$/$1\u$2/;                               #uppercase first char, even with nonword chars at first position


    if ( Encode::is_utf8($french_text) ) {

        #Dump $french_text;
        #eval{$french_text = Encode::from_to($french_text, "utf8", "iso-8859-15")};
        #Encode::_utf8_on($french_text);
        #print "$objstr: UTF-8 text found\n";
        #Dump $french_text;
    } else {
        #print "\t $objstr: text not UTF-8\n";
        Encode::decode_utf8($french_text);                               # decode it to utf-8, DBD:ADO wants it this way
    }

    $french_text ||= NOTRANS;
    undef $obj;

    #return $dbh->quote($french_text);
    return $french_text;
}


#######################################
# test data
#######################################
__DATA__

msgid "OK"
msgstr ""

msgid "Cancel"
msgstr ""

msgid "Colorpicker"
msgstr ""

msgid "Insert Link"
msgstr ""

msgid "Internal link"
msgstr ""

msgid "Please choose"
msgstr ""

msgid "None"
msgstr ""

msgid "PDF"
msgstr ""

msgid "Media"
msgstr ""

msgid "External link"
msgstr ""

msgid "Target"
msgstr ""

msgid "Open in same window"
msgstr ""

msgid "Open in new window"
msgstr ""

msgid "Open in parent frame"
msgstr ""

msgid "Open in top frame"
msgstr ""






Verfasst: Mi 4. Okt 2006, 22:29
von HerrB
Gibt es denn schon weitere Sprachen?

Gruß
HerrB

Verfasst: Mi 4. Okt 2006, 22:35
von mvf
HerrB hat geschrieben:Gibt es denn schon weitere Sprachen?

Gruß
HerrB
ich habe immernoch ne 4.6.4 italiano hier rumzuliegen und (auch wenn halber italiener) bräuchte noch 'nen native-italian der das bereinigt

andererseits habe ich grosses interesse an einer französichen version, falls schon was rumschwirrt :?

kollege djavet hatte sichper pm angeboten, allerdings habe ich es noch nicht weiter verfolgt