Beispiel: Wie übersetze ich Erweiterungen?

  • UPDATE: Da meine Anleitung was in die Jahre gekommen ist (also eigendlich fast ein Jahr alt...), mal ein kleines Update mit ein paar zusätzlichen Bemerkungen

    Eine Frage, die oft gestellt, aber schwer zu beantworten ist.

    Ich erstelle hier ein kurzes bebildertes Beispiel, so dass sich jede(r) Willige ein Bild des Aufwands machen kann.

    Der Aufwand ist natürlich abhängig vom Umfang des Extention/Erweiterung.

    Um mich nicht zusehr in spezifische Problematiken zu verstricken, werde ich für das Beispiel die Copy Image-Erweiterung benutzen. Diese Ist klein und leicht zu übersetzen, zeig aber die meisten wichtigen Punkte auf, auf die man achten muss.

    Zu aller erst sei gesagt, dass ich für dieses Beispiel die beiden Win-Programme Ultraedit10 (Ein Plain-Text-Editor mit Uni-Code unterstüzung) und Winrar3.0 (Packprogramm) benutzt habe.

    [EDIT]Solltet Ihr Probleme haben mit der Konvertierung in UTF-8 haben, benutzt einfach «UniRed». Die gewünschte Datei öffnen, und beim "Speichern unter"-Dialog als Zeichensatz UTF-8 wählen und so speichern. Das file sollte jetzt die richtige Codierung aufweisen.[/EDIT]

    [EDIT2]Alternativ kann man auch UniPad benutzen.[/EDIT2]

    TIPP: Übersetzungen gehen natürlich auch mit Hilfe anderer Programme, die die gleichen Leitungen/Funktionen bieten.

    Und bevor wir loslegen: Ihr solltet die Erweiterung die Ihr übersetzen wollte vorher genau kennen, damit Ihr wisst wonach Ihr zum Übersetzen Ausschau halten müsst!

    Auch wichtig ist: Ihr könnt mit fehlerhaften Dateien, die durch die Übersetzungen enstehen können, euren Browser schrotten! Eine Deinstalltions-Erweiterung hilft zwar häuftig, aber nicht immer! Manchmal lässt sich Firefox nichtmehr starten und Ihr müsst alles neu installieren! Richtet Euch also auf viel Arbeit beim Testen ein!

    • Schritt 1
      Wir besorgen uns das Orginal der Erweiterung, die wir übersetzen möchten. Im Falle der Copy Image-Erweiterung wäre das bei Jordan Callicat (gratisdei.com/FB.htm). Gesucht wird dabei eine Datei die auf .xpi endet.

      [Blockierte Grafik: http://www.bugcatcher.de/files/translation/translation_01.png]

    • Schritt 2
      Als nächstes müssen wir die .xpi-Datei entpacken.

      [Blockierte Grafik: http://www.bugcatcher.de/files/translation/translation_02.png]

      In der .xpi-Datei finden sich immer eine *.jar- und eine install.js-Datei. XPI-Dateien sine faktisch nur die Installationsdateien, die die Erweiterung beinhalten, die JAR-Datei.

      [update] Die Struktur hat sich inzwischen verändert. Im Stammverzeichnis des Archivs findt sich in der Regel nun Ffolgendes:

      • install.rdf (in dieser Datei stehen die grundsätzlichen Informationen zu einer Erweiterung. Z.B. für welche Firefox-Versionen sie geeignet ist und wie die Erweiterung heisst, usw.)
      • install.js (hat die selbe funktion wie früher auch.. kann enthalten sein, muss aber nicht. Ist glaub ich für die Mozilla-Suite bzw. älteren Versionen vom Firefox gedacht)
      • /chrome/ (beinhaltet jetzt die jar-datei!)


      [/update]

      Die JAR-Datei entpacken wir auch. Darin sind meist mehrere Ordner und/oder Dateien. Die eigendliche Erweiterungsdatei.

      Nach dem entpacken benötigen wir die JAR und die XPI-Datei nichtmehr. Diese können gelöscht werden. Nach der Entpack-Aktion sollte es bei Euch aussehen wie auf dem folgenden Bild (Die Verzeichnis-Struktur ist sehr wichtig! Achtet also darauf, dass Euer Packprogramm nicht noch irgendwelche dazuzaubert!):

      [Blockierte Grafik: http://www.bugcatcher.de/files/translation/translation_03.png]

      TIPP: XPI- und JAR-Dateien sind per Zip kompremierte Dateien. Lassen sich also mit jedem Programm entpacken, dass mit Zip-Datein umgehen kann.

      HINWEIS: Manchmal gibt es Erweiterungen die eine amerikanische Kennung haben ("en-US") und dies auch in der Orderstruktur beibehalten. Solche Ordner sollte man dann auf "de-DE" ändern. Hierbei ist Klein- und Grosschreibung zu unterscheiden! Also anders als bei Windows selber!

      [update] Anständig geschriebene Erweiterungen führen immer diesen Sprachunterordner mit Die Struktur ist wie folgt:

      Code
      extension.xpi --+--> /chrome/    --> extension.jar --+--> /content/ -----> (Programmdateien der Erweiterung)
                      +--> install.rdf                     +--> /locale/  --+--> /en-US/ (Sprachdateien)
                      +--> install.js                                       +--> /de-DE/ --+--> extension.dtd
                                                                                           +--> extension.properties
                                                                                           +--> contents.rdf


      [/update]

    • Schritt 3
      Und nun auf zur eigendlichen Übersetzung!

      In unserem Beispiel findet Ihr im Ordner "content" einen Ordner "copyimage" in dem die beiden Dateien "copyimageOverlay.xul" und "contents.rdf" liegen.
      [Blockierte Grafik: http://www.bugcatcher.de/files/translation/translation_04.png]

      Die "contents.rdf" ist eine Datei die immer wieder auftaucht. Sie ist quasi die Registierungs-Datei der Erweiterungen.

      In userem Beispiel machen wir aus:
      [Blockierte Grafik: http://www.bugcatcher.de/files/translation/translation_05.png]

      das hier:
      [Blockierte Grafik: http://www.bugcatcher.de/files/translation/translation_06.png]

      Die "contents.rdf" ist im Zeichencode UTF-8 gehalten (.dtd-dateien werden manchmal zur Auslagerungen der Benamung der Schaltflächen benutz. Auch diese sind in UTF-8 gehalten). Achtet also darauf, dass Ihr sie richtig speichert! Es gibt noch mehr Dateitypen, die in UTF-8 geschrieben sind. Sollten bei der Übersetzung am schluss im Browser komische Zeichen statt Umlaute zu finden sein, dann liegt es daran, dass Ihr eine Datei in falscher Codierung gespeichert habt!
      [Blockierte Grafik: http://www.bugcatcher.de/files/translation/translation_07.png]

      [update]Für die eigendliche übersetzung sollte man nur die dtd's, properties's und die contents.rdf anpassen, die finger aber von den content-bereichen lassen. und natürlich den passenden Ordner im "locale"-Verzeichnis erstellen. Am besten einfach eine kopie des "en-US" Ordners erstellen und in "de-DE" umbenennen. Die enthaltenden dateien übersetzen wir dann. [/update]

      ALLGEMEIN: Leider gibt es keine einheitliche Regelung WIE Übersetzungen gemacht werden sollen. Das fängt an bei, ob man "Tab" oder doch lieber "Registerkarte" benutzen soll und geht weiter bis zur Form der Namengebung. Ich hab bei mir zum Beispiel es so gehalten, dass ich den Orginalnamen der Erweiterung beibehalten, aber ein "- Deutsch" dahintergestellt hab ("Copy Image 0.1" -> "Copy Image 0.1 - Deutsch"). Gebt Euch Mühe, damit keine Verwechslungen auftreten können. Auch tragt euch nicht selber alleinig als Author ein und Informiert den eigendlichen Programmierer.

      [update]
      BITTE: Ändert nicht zwanghaft Ausdrücke oder Bezeichnungen. Schaut euch auch ähnliche Übersetzungen an und passt euch entsprechent an. Oder setzt euch mit dem anderen über zusammen um unstimmigkeiten zu vermeiden. Um mein Anliegen genauer klar zu machen, hier ein aktuelles Beispiel:

      Es gibt die Beiden Erweiterungen "IE-View" und "Opera-View". Faktisch müsste Opera-View auf IE-View basieren, nur das halt die Pfade für Opera geändert wurden. Soweit so gut. Aber die Übersetzer waren sich reichlich uneins... denn wärend bei IE-View im Kontextmenu "Link-Adresse im Internet Explorer öffnen" steht, bekommt man bei Opera-View "Öffne Link in Opera" zu lesen. Sowas sieht sau doof aus und sollte vermieden werden. Also schaut euch Übersetzungen von artverwante Erweiterungen an und passt euch gegebenfalls an.
      [/update]

      Jetzt auf zur "copyimageOverlay.xul". Hier findet Ihr XML-artige Notierungen vor. Zumeist muss man nur auf label="blah"-Einträge achten. Zwischen den Anführungszeichen findet sich der Teil der übersetzt werden möchte. Wenn ein accesskey dabei steht, sollte man darauf achten, dass der orginale "Hotkey" zur Übersetzung passt und gegebenfalls anpassen. Auch sollten die jeweiligen Menus vorher geprüft werden, damit der Buchstabe nicht doppelt vergeben wird. Sowas ist unschön.

      [Blockierte Grafik: http://www.bugcatcher.de/files/translation/translation_08.png]

      Wie bei den Ordnern sollte man alle Länderkennungen die man in den Dateien findet (meist "en-US") auf "de-DE" ändern.

      In unserem Beispiel gibt es nur 2 Dateien. Aber es gibt Erweiterungen, die haben Unmengen an Dateien. Die muss man dann alle einmal durchgehen.

      TIPP: Die install.js kann bei bedarf auch übersetzt werden, muss aber nicht, da diese nur bei der Installation einmal gebraucht wird. Hierbei gelten die normalen Notations-Regel von Javascript. Wer sich nicht damit auskennt, sollte vorsichtig sein. Normalerweise sind die Texte in Anführungszeichen ("lalala") gehalten und man sollte tunlichst in diesen Bereichen bleiben. Ausserhalb fängt die Programmierung an und wer da rumfingert, sollte wissen was er tut. Auch sollte man vermeiden in den Anführungszeichen-Bereichen weitere Anführungszeichen einzubauen! In jedem Fall sollte man sicherheitshalber sich einige JS-Kenntnisse per SelfHTML erwerben. *.js-Dateien sind Plain-Text und nicht UTF-8. Man muss sie also nicht konvertieren.

      [update]

    • Zusatzschritt!
      Vergesst nicht, dass eure neuen Sprachfiles auch in der install.rdf des Hauptverzeichnisses registriert werden müssen:

      Code
      <em:locale>locale/de-DE/extensionname/</em:locale>


      Auch könnte ihr euch dort als Mitwirkender eintragen

      Code
      <em:contributor>Martin Muster (martin@muster.de) [de-DE]</em:contributor>


      [/update]

    • Schritt 4
      Nachdem wir alles übersetzt haben, müssen wir die Erweiterung wieder packen. Dazu packen wir (im Zip-Format) alle Ordner und Dateien (ausser der install.js) zusammen und nennen diese dann so wie die JAR-Datei aus der wir am Anfang alles herausgeholt haben. In unserem Beispiel also copyimage.jar :
      [Blockierte Grafik: http://www.bugcatcher.de/files/translation/translation_09.png]
      [Blockierte Grafik: http://www.bugcatcher.de/files/translation/translation_10.png]

      Danach packen wir nach dem selben System die install.js und die gerade erstellte *.jar-Datei zusammen in eine XPI-Datei.
      [Blockierte Grafik: http://www.bugcatcher.de/files/translation/translation_11.png]
      [Blockierte Grafik: http://www.bugcatcher.de/files/translation/translation_12.png]

      Fertig ist unsere übersetzte Erweiterung.
      [Blockierte Grafik: http://www.bugcatcher.de/files/translation/translation_13.png]

      [update]Immer darauf achten, dass die Stuktur sich verändert hat! Vom prinzip bleibt aber alles beim Alten.[/update]


    • Schritt 5
      Nun müssen wir die Erweiterung nurnoch installieren. Wenn alles geklappt hat, könnt Ihr Euch freuen... wenn nicht, müsst Ihr wieder zurück zu der Stelle, an der der Fehler aufgetreten ist.
      [Blockierte Grafik: http://www.bugcatcher.de/files/translation/translation_14.png]

    Ihr seht also. Eigendlich nur ganz einfach. Aber der Teufel steckt im Detail. Also macht euch vorher klar, dass Ihr manchmal auf Probleme stossen werdet.

    PS: Ich wollte das zwar in das Forum "Übersetzung stecken... ist hier aber wohl besser aufgehoben. ; )


    [update]
    WICHTIGER HINWEIS!
    Man kann übersetzte Erweiterungen natürlich auch selber anbieten. Aber es wäre sehr viel besser, wenn man die sprach-dateien (die im "de-DE"-Verzeichnis vom "locale"-ordner) dem orgnial-autor der erweiterung zur verfügung stellt, damit dieser die dateien in seine xpis übernehmen kann. so wird die übersicht gewahrt (welche version ist die die ich brauche? egal! gibt nur eine, die alle sprachen bedient! yeah!) und es kommt zu keinen zeitlichen abständen zwischen englischer und deutscher version. Man kann sich dann auch als übersetzer anbieten. natürlich kann man auch xpi-dateien anbieten, die nur für de-DE sind (und sonst keine sprachen enthalten sind), aber das sollte nur ein zusatzangebot sein. die komplette übersetzung sollte man weiterhin den extension-schreibern zukommen lassen. Danke für mehr Übersichtlichkeit!
    [/update]

    Wohin mit meinen übersetzten Erweiterungen?

    Falls Ihr nicht wisst, wohin ihr mit den Übersetzungen sollt, wendet Euch doch einfach an die Webmaster von http://www.erweiterungen.de.

    6 Mal editiert, zuletzt von bugcatcher (3. Juni 2005 um 09:53)

  • Mir war langweilig, außerdem bin ich gerade dabei mir TeX anzueignen, deshalb habe ich aus deinem Tutorial ein formatiertes PDF erstellt:

    Linux: *.tar.gz

    Windows und Mac (?): *.zip

    http://nizzer.de/public/ext-de-tutorial

    PS.: Und nicht vergessen: Es ist mein allererster Versuch mit TeX / LyX , dementsprechend wird es auch aussehen ; )

    PPS.: 18 Seiten übrigens!

    //edit: Die neue Version (1.5.1) des PDF's ist online.

  • Mit Version 0.9 kommt auch ein neues Erweiterungssystem.
    Hier die Abweichungen zum Beispiel oben (erklärt anhand der E. Browser-Uptime):


    1. Die XPI besteht nun aus den Dateien..

    • install.js (Installation für Firefox 0.8 u. niedriger)
    • install.rdf (Installation für Firefox 0.9 und höher. Siehe weiter unten)
    • readme.txt (optional, Lizenz, Hinweise usw.)
    • /chrome/name.jar
      |_>
    • /content/name/ (Hier ist die Erweiterung hinterlegt)
    • /locale/en-US/ (Die für uns wichtigen Dateien befinden sich hier. Siehe bugcatchers Beispiel: Wie übersetz ich eine Erweiterung?)
    • /skin/classic/ (optional, Icons, CSS usw.)

    2. install.rdf
    Die install.rdf lässt sich mit jedem besseren Editor bearbeiten. Die Datei muss in UTF-8 abgespeichert werden, wegen den deutschen Sonderzeichen und Umlauten!
    Die install.rdf installiert die Erweiterung (ähnlich der install.js), und sorgt gleichzeitig für die richtige Beschriftung der E. im EM.

    Angepasst werden muss (wie oben zu sehen):

    • Code
      <em:name>Browser Uptime</em:name>

      in

      Code
      <em:name>Browser Uptime DE</em:name>
    • Code
      <em:description>BLABLABLALALALA</em:description>

      in

      Code
      <em:description>Zaehlt die Laufzeit des Browsers mit.</em:description>
    • <em:creator>Cosmic Cat Creations</em:creator> in <em:creator>Cosmic Cat Creations (Deutsche Version von Patrick Ruh)</em:creator>
    • Wenn die Zeile <em:contributor>Cat 2</em:contributor> vorhanden ist, kann man diese kopieren und direkt unten darunter einfügen: <em:contributor>Nizzer (Deutsche Version</em:contributor>. Dann entfällt der vorige Punkt.
    • <em:homepageURL>http://www.comsiccatcreation.com</em:homepageURL> in <em:homepageURL>http://www.nizzer.de/extgermany/#browseruptime</em:homepageURL>
    • Die Zeile <em:updateURL>http://www.nizzer.de/extgermany/ext…es/uptime-u.rdf</em:updateURL> ist noch ganz "frisch". Ob sie funzt weiß ich nicht. Meistens steht dort schon die URL zu einer "update.rdf". Einfach diese Datei auf den eigenen Space kopieren und die URL anpassen. Die update.rdf selber muss auch editiert werden. Wie genau ergibt sich von selbst.

    Wurde das Icon im Ordner /skin/ umbenannt oder verschoben muss die Zeile


    <em:iconURL>chrome://uptime/skin/icon.png</em:iconURL>

    entsprechend angepasst werden.

    Den Ordner /locale/en-US haben wir umbenannt in de-DE (und die entsprechende contents.rdf in diesem Ordner angepasst). Auch das müssen wir Firefox sagen:


    <Description about="urn:mozilla:extension:file:uptime.jar">
    <em:package>content/uptime/</em:package>
    <em:locale>locale/de-DE/uptime/</em:locale>
    <em:skin>skin/classic/uptime/</em:skin>


    Das waren die wesentliche unterschiede.
    Mit der install.rdf fällt endlich auch die komplz. install.js weg, die Installations-Nachrichten wie "Sie müssen ihren Browser neu starten" sind nun aber vorgegeben und lassen sich nicht verändern.

  • Eins ist mir aufgefallen.
    Wenn man mit UniRed in der Extension-Manager-Beschreibung Umlaute benutzt und auch in UTF-8 speichert, funktioniert die Erweiterung nachher nicht, wegen den Umlauten. Mit UltraEdit dagegen keine Probleme. :?

    Warum ist das so? Anscheinend ist UTF-8 nicht gleich UTF-8, anders könnte ich es mir nicht erklären.

  • Das ist aber normal so, denn man konvertiert eine Datei nach UTF-8, aber editiert sie nicht so !
    Das heißt, das Programm öffnet die Datei und übersetzt z.B. nicht die Umlaute. Wenn man dann wieder konvertiert, entstehen kryptische Zeichen ! Entweder man setzt bei jedem editieren wieder die Umlaute oder man testet erstmal mit ue usw. Am Ende kann man ja immer noch die richtigen Umlaute einsetzen und konvertieren !

    Linux
    The Computer is Fun again ;)

  • also ich hab grad nochmal ein bisschen was getestet:

    1. editiere ich rdf-dateien mit umlauten mit unired->erweiterung funzt nicht
    2. editiere ich rdf-dateien mit umlauten mit ultra-edit->erweiterung funzt

    3. editiere ich dtd-dateien mit unired->erweiterung funzt
    4. editiere ich dtd-dateien mit ultra-edit->erweiterung funzt nicht, egal wie ich in utf-8 konvertiere

    das heisst ich muss jetzt für eine funzende erweiterung, die auch umlaute in der extensions-manager-beschreibung hat, die rdfs mit ultra-edit bearbeiten und die dtds mit unired, anders klappts bei mir einfach nicht. :?

  • Code
    Ä -> &#x00C4; 
    ä -> &#x00E4; ä
    Ö -> &#x00D6; 
    ö -> &#x00F6; ö
    Ü -> &#x00DC; Ãœ
    ü -> &#x00FC; &# 252; ü
    ß -> &#x00DF;        ß
    & ->          &

    Leider nicht vollständig weil ich nicht alles durchsuche.

    Was mir aufgefallen ist, dass einige Dateien mit XUL drin die Info "UTF-8" enthalten,
    das wären dann die erste zeile der Liste oben.
    Auf die DTD-Dateien gehören dazu (steht allerdings kein "UTF-8" drin).
    Die ".properties" sind dann wiederum die mit den 2 Zeichen.
    JS finde ich meistens als UNIX/ANSI.

    Unter Windows ist das manchmal egal, ob PC/ANSI oder UNIX/ANSI,
    allerdings habe ich Zweifel, ob das dann auch unetr Linux so mit den
    Umlauten aussieht.

    Ich nutze übrigens Textpad, UE ist mir zu kompliziert, selbst beim Umwandeln.
    Das macht TP dann beim Speichern, denk ich mal so.

    Vielleicht kann man ja hier mal die Liste der Datei-Erweiterungen mit Format auflisten.

    zB

    JS -> UNIX/ANSI
    DTD -> PC/UTF-8
    XUL -> ?

    PS Manche JS benutzen Variablen, trotzdem sind meistens doch irgendwo noch Texte
    darin versteckt, zB Quicknote. Immer fleissig testen ;)

  • Noch ein wichtiger Hinweis für die Übersetzer:

    In der Datei install.rdf findet sich immer häufiger ein Eintrag "updateURL". Dieser Eintrag muss gelöscht oder verändert werden, falls der Autor der Originalerweiterung keine deutsche Sprachversion in die nächste Version integriert. Ansonsten kann es zu massiven Problemen beim Autoupdate kommen!

    Man hat also zwei Möglichkeiten:

    a) Zeileneintrag mit updateURL komplett löschen. Dann lässt sich die deutsche Version nur noch manuell updaten.

    b) Eintrag für automatische Updates auf den eigenen Webspace abstimmen (Original .rdf vom Autor herunterladen, entsprechend anpassen und auf den Webserver packen).

    Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2

    Einmal editiert, zuletzt von Electroluchs (12. März 2005 um 19:17)

  • Hallo,

    Zitat von Nizzer im Beitrag http://firefox.uni-duisburg.de/forum/viewtopic.php?p=96029#96029

    Die Datei muss in UTF-8 abgespeichert werden, wegen den deutschen Sonderzeichen und Umlauten!

    Eventuell wird das Umlauten-Problem dadurch gelöst, dass im XML-Header dem Parser die Zeichencodierung explizit mitgeteilt wird:

    Zitat

    <?xml version="1.0" encoding="ISO-8859-1"?>

    ISO-8859-1 steht für westeuropäische und amerikanische Sprachen. Dann können vermutlich die Umlaute und andere Sonderzeichen im Klartext in der XML-Datei stehen. Leider kann ich das selbst nicht testen, da ich nicht weiss, wie man die geänderte Dateien wieder in eine funktionierende *.jar packt (s. http://firefox.uni-duisburg.de/forum/viewtopic.php?t=7578 ) :(