Development/Tutorials/Localization/i18n Mistakes (de)

    From KDE TechBase
    The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.


    Häufige Fehler vermeiden
    Anleitungsserie   Lokalisation
    Voriges Kapitel   Beim Schreiben der Applikation an die Lokalisation denken
    Nächstes Kapitel   i18n in das Build System einbinden
    Weiterführende Texte   n/a
    Navigation   Deutsche Startseite

    Zusammenfassung

    Es gibt ein paar häufige Fehler, die es unmöglich machen, eine Applikation angemessen zu übersetzen oder anderweitig zu lokalisieren. Das beinhaltet Pixel basierte Layouts, "Wort Puzzles" und Code, der Unicode Zeichen nicht adäquat behandelt. Diese Anleitung beschäftigt sich mit diesen Fällen und erklärt wie man sie verhindert.

    Falle #1: Pixel basierte Layouts

    Englischer Text ist verglichen mit anderen Sprachen häufig sehr kompakt, der übersetze Text kann oft deutlich länger sein. Daher muß die Benutzerschnittstelle in der Lage sein, die Größe aufgrund der Länge der Übersetzung zur Laufzeit anzupassen. Kann sie das nicht, wird Text falsch angeordnet und/oder abgeschnitten.

    Die Antwort darauf ist die Benutzung von Layoutmanagern. Qt bietet eine Anzahl von solchen Managern wie geschaffen für diesen Zweck. Darunter sind QHBoxLayout, QVBoxLayout, QGridLayout und QStackedLayout, alles Unterklassen von QLayout. Sie können auch eigene Klassen abgeleitet von QLayout erzeugen, das ist aber in der Regel nicht nötig.

    Diese Layoutklassen kümmern sich um die Positionierung von Widgets zur Laufzeit, so macht es keinen Unterschied wie lang die übersetzten Zeichenketten sind. Die Benutzerschnittstelle passt sich entsprechend an. Für mehr Informationen siehe auch QLayout (in englisch).

    Falle #2: Wort Puzzles

    Eine andere Sache ist es, zu beachten, nicht mehrere Teilsätze wie folgt zu verknüpfen:

    QString msg=i18n("Do you want to replace ") + 
                     oldFile+i18n(" with ") + 
                     newFile + "?"
    

    Solche "Wort Puzzle" sind sehr schwer oder überhaupt nicht zu übersetzen. Das liegt daran, dass die Struktur eines Satzes in anderen Sprachen komplett anders sein kann und daher vom Übersetzer kontrolliert werden muss. Wenn die Reihenfolge der Worte und Satzteile wie oben festkodiert ist, kann der Übersetzer keine entsprechende Übersetzung erzeugen.

    Zusätzlich zu diesem Problem erhhält der Übersetzung nur Teile des Satzes während der Übersetzung und muss daher raten, was zusammengehört.

    Die Lösung ist denkbar einfach: Benutzen Sie %number Platzhalterersetzungen, die dem Übersetzer nicht nur gute Übersetzungen aufgrund der Möglichkeit den ganzen Satz zu sehen ermöglichen, sondern es ihm oder ihr auch erlaubt auch die Reihenfolge der Argumente frei zu ändern. Die Argumente selber werden als Extraparameter an i18n() übergeben.

    Das obige Beispiel sollte daher korrekterweise folgendermaßen aussehen:

    QString msg = i18n("Do you want to replace %1 with %2?",
                       oldFile, newFile)
    
    noframe
    noframe
    Vermeiden Sie es etwas anderes als Zahlen oder Nomen mit dieser Methode einzufügen, da in einigen Sprachen die Übersetzung von den eingefügten Worten abhängt. Daher sollten möglichst komplette Sätze erzeugt werden.
    Anmerkung


    Ein ähnlicher Fehler ist es, im zu übersetzenden Text keine Markup Tags wie <b></b> or <i></i> als Rich Text einzufügen. Nicht alle Sprachen benutzen solche Markups in gleicher Weise wie im Englischen, so es kann für den Übersetzer notwendig sein, diese ebenfalls zu "übersetzen".

    Weiterhin sollten Zeichenketten, die häufig ändernde Zeichenketten enthalten (wie zum Beispiel Versionen) statt dessen als Platzhalter (siehe oben) eingefügt werden. Das verhindert unnötige Änderungen an den Zeichenketten, die die Übersetzer zwingen, die Übersetzungen zu überarbeiten.

    Da KDE in mehr als 65 Sprachen übersetzt wird, kann die Änderung einer einzelenen Zeichenkette mindesten 65 Personen dazu zwingen, die Datei zu öffnen, die geänderte Zeichenkette zu finden, sorgfältig sicherzustellen, dass das wirklich das einzige ist, was sich geändert hat, die Neuübersetzung vorzunehemen, die Datei zu speichern und die geänderte Datei in das Repository hochzuladen. Alles in allem kann so eine kleine Änderung Stunden von Arbeit erzeugen, die einfach vermieden werden könnte.

    Falle #3: Fehlende Unicode Unterstützung

    Immer dann wenn im Quellcode Datentypen oder Klassen für Zeichenketten benutzt werden, die kein Unicode unterstützen (z.B. char oder std::string), ist eine Übersetzung nicht mehr möglich.

    Um das zu vermeiden, rufen Sie niemals QString::latin1() oder QString::ascii() für übersetze Zeichenketten auf. Das gilt auch für Informationen, die Sie von Benutzereingaben wie Passworten, URLs und Dateinamen erhalten. Benötigen Sie wirklich eine einfache char* Darstellung einer Zeichenkette benutzen Sie lieber QString::utf8().

    noframe
    noframe
    Für mehr Informationen über Zeichensätze und Unicode siehe Einführung in Unicode.
    Anmerkung


    KIO slaves können Pfade und Dateinamen in UTF-8 codiert zur Verfügung stellen. Es liegt jedoch am Programmierer, entsprechend codierte Dateinamen an KIO Methoden zu übergeben. Der richtige Weg das zu tun, ist nicht zu raten, welches Codierungssystem das Dateisystem des Benutzers hat sondern statt dessen die Methoden QFile::encodeName() und QFile::decodeName() zu benutzen.

    Tip
    Sie können testweise die UTF-8 Dateinamenunterstützung von KIO einschalten, indem Sie die Umgebungsvariable KDE_UTF8_FILENAMES (z.B. in ~/.bashrc) exportieren.


    Geschafft!

    Wenn Sie diese drei häufigen Fehler verhindern, so wie es in dieser Anleitung beschrieben ist, wird Ihre Applikation von den verschiedenen KDE Übersetzerteams vollständig lokalisierbar sein und Ihre Applikation der Mehrheit der Menschheit zugänglich machen.