Translate Toolkit Das Übersetzungs-Toolkit (http://toolkit.translatehouse.org/) besteht aus einer Reihe von Bibliotheken und Befehlszeilentools, die Sie bei Ihrer Übersetzungsarbeit unterstützen. Es wird unter der GPLv2-Lizenz vertrieben und kann von jedem frei verwendet werden. Der Entwickler ist Translate House, das in Python implementiert ist. Es unterstützt zwei Python-Systeme und wird ab Python 2.5 ab dem nächsten 1.11.0 nicht mehr unterstützt. Translate House entwickelt auch die Übersetzungsplattform Pootle, die auch dieses Übersetzungs-Toolkit verwendet (Doc-ja Adventskalender 2013 Tag 1). / naruoga / 20131201/1385838237), Tag 3 Die in eingeführte Übersetzung von LibreOffice erfolgt ebenfalls auf Pocket).
In diesem Artikel verwende ich die Translate Toolkit-Bibliothek, um ein einfaches Übersetzungstool zu erstellen. Insbesondere beschäftigen wir uns mit Tools, die die Bearbeitung von PO-Dateien automatisieren. Dies ist nützlich, wenn der Bearbeitungsprozess einfach ist, der Zielbereich jedoch sehr groß ist. In Bezug auf die mechanische Bearbeitung sind vorhandene Unix-basierte Tools wie sed ursprünglich gut darin, aber PO ist nicht zeilenorientiert, sodass es nicht mit Unix-basierten Tools kompatibel ist und nicht einfach sein kann. Verwenden wir nun das Translate Toolkit.
In diesem Artikel wird PO von GNU gettext als Nachrichtenkatalogformat angenommen, das Translate Toolkit ist jedoch nicht auf PO beschränkt. Es unterstützt verschiedene Formate wie XLIFF. Die Bestellung selbst wird im Artikel Tag 2 erläutert und hier nicht erwähnt.
$ pip install translate-toolkit
Wenn Ihr Betriebssystem ein Übersetzungs-Toolkit-Paket bereitstellt, können Sie es auch verwenden. Der Quellcode wird unter github verwaltet.
Betrachten Sie beispielsweise das folgende Arbeitsbeispiel. "Drei Punkte, die als Suffixe zur ursprünglichen Nachricht hinzugefügt wurden (häufig in GUI-Teilen usw.), wurden durch einen Dreipunktleser ersetzt, der eine große Menge an Fuzzy verursachte. Die Korrektur selbst auf der Übersetzungsseite ist einfach, aber der Zielbereich ist riesig. Ich möchte es mechanisch verarbeiten. "
Das Folgende ist ein Auszug aus der zu bearbeitenden Bestellung. Stellen Sie sich vor, es gibt so viele Beispiele wie dieses, dass Sie sie nicht von Hand bearbeiten möchten. Einige künstliche Beschreibungen sind ebenfalls enthalten, um das Verständnis des Effekts zu erleichtern.
#Ziel aktualisieren
#, fuzzy
#| msgid "Open..."
msgid "Open…"
msgstr "öffnen..."
#Ziel aktualisieren
#In der Mitte der übersetzungsseitigen Periode gibt es einen Zeilenumbruch...
#, fuzzy
#| msgid "Save As..."
msgid "Save As…"
msgstr "speichern als."
".."
#Aus irgendeinem Grund ist er seit einiger Zeit führend. Kein Update erforderlich
msgid "Print…"
msgstr "Drucken…"
#Aus irgendeinem Grund möchte ich die Übersetzung ohne Suffix belassen. Lass nur Fuzzy fallen
#, fuzzy
#| msgid "Print Preview..."
msgid "Print Preview…"
msgstr "Druckvorschau"
#Aus irgendeinem Grund bleibt der Originaltext ein Punkt(Die Übersetzung folgt vorerst darauf)
msgid "Preference..."
msgstr "Aufbau..."
Der Übersetzer ersetzt auch die drei Punkte durch einen Dreipunktleser gemäß dem aktualisierten Originaltext. Die Bedingungen der Zielnachricht sind wie folgt.
Dieses Skript liest PO von der Standardeingabe und schreibt das bearbeitete Ergebnis in die Standardausgabe.
# -*- coding: utf-8 -*-
import sys
from translate.storage.po import pofile
PREV_SUFFIX = '...'
NEW_SUFFIX = u'…'
for unit in pofile.parsefile(sys.stdin).units:
prev_source = unit.prev_source
new_source = unit.source
if unit.isfuzzy() and \
prev_source.endswith(PREV_SUFFIX) and \
new_source.endswith(NEW_SUFFIX) and \
prev_source.rstrip(PREV_SUFFIX) == new_source.rstrip(NEW_SUFFIX):
if unit.target.endswith(PREV_SUFFIX):
updated_target = unit.target.replace(PREV_SUFFIX, NEW_SUFFIX)
unit.settarget(updated_target)
unit.markfuzzy(False)
unit.prev_source = None
print unit
Das Verarbeitungsergebnis der obigen Bestellung ist wie folgt. Können Sie sehen, dass die Fuzzy-Verarbeitung ohne Übermaß oder Mangel erfolgt und der Zeilenumbruch in der Mitte des Textes angemessen gehandhabt werden kann?
#Ziel aktualisieren
msgid "Open…"
msgstr "öffnen…"
#Ziel aktualisieren
#In der Mitte der übersetzungsseitigen Periode gibt es einen Zeilenumbruch...
msgid "Save As…"
msgstr "speichern als…"
#Aus irgendeinem Grund ist er seit einiger Zeit führend. Kein Update erforderlich
msgid "Print…"
msgstr "Drucken…"
#Aus irgendeinem Grund möchte ich die Übersetzung ohne Suffix belassen. Lass nur Fuzzy fallen
msgid "Print Preview…"
msgstr "Druckvorschau"
#Aus irgendeinem Grund bleibt der Originaltext ein Punkt(Die Übersetzung folgt vorerst darauf)
msgid "Preference..."
msgstr "Aufbau..."
Insgesamt erscheinen die Wörter Quelle und Ziel häufig, aber dies sind Begriffe, die in der Übersetzungsgemeinschaft häufig verwendet werden. Quelltext und Zieltext bedeuten den Originaltext bzw. den übersetzten Text. Entspricht msgid und msgstr in PO.
PO-bezogene APIs werden durch Importieren des Moduls translate.storage.po verfügbar. Weitere Informationen zur API finden Sie in der API-Referenz (http://docs.translatehouse.org/projects/translate-toolkit/en/1.11.0-rc1/api/index.html).
Wenn Sie die Bestellung mit der Parsefile-Methode der Pofile-Klasse analysieren, befindet sich eine Reihe von Nachrichten in der Liste "Einheiten". Jede Nachricht, die ein Element der Liste ist, kann als Objekt der Pounit-Klasse betrieben werden. pounit bietet eine API für die Nachrichtenmanipulation, einschließlich msgid und msgid sowie früherer msgids, verschiedener Kommentare und Pluralformen durch gettext definierte Attribute. Sie können auf /manual/gettext.html#PO-Files zugreifen. Über die API von pounit können Sie Nachrichten bearbeiten, ohne an eine lästige physische Beschreibung von PO-Dateien gebunden zu sein.
Die 4 Zeilen von der ersten entsprechen den obigen 4 Bedingungen. Ich bearbeite eine Nachricht, die den Bedingungen entspricht.
Am Ende der for-Schleife druckt print jeden Pounit auf die Standardausgabe. pounit definiert die str- Methode, und Sie können sie als PO-Nachricht in einem angemessenen Format ausgeben, indem Sie sie einfach so drucken, wie sie ist.
Als ähnliche Arbeit kann sie auf verschiedene Zwecke angewendet werden, z. B. auf die mechanische Überprüfung von Tippfehlern und die Stapelkorrektur aufgrund einer Änderung des Übersetzungsstils. In anderen häufigen Fällen können Sie problemlos Tools erstellen, z. B. die Aktualisierungsdifferenz zwischen zwei Bestellungen und die Zusammenführung der Unterschiede zu einer.
Tatsächlich habe ich mit der japanischen Übersetzung des GNOME-Projekts geholfen, den Stil langer Notizen zu ändern (z. B. "Benutzer" in "Benutzer" zu ändern). Selbst als ich das tat, habe ich mit dem Translate Toolkit ein Bearbeitungswerkzeug erstellt und alles auf einmal verarbeitet. Die Anzahl der Bestellnachrichten im GNOME-Projekt wird in Bezug auf msgid auf ungefähr 100.000 geschätzt. Es konnte nicht manuell bearbeitet werden, und das Translate Toolkit hat wirklich geholfen.
Dieses Mal habe ich nur einen kleinen Teil der Translate Toolkit-Bibliothek vorgestellt. Es gibt viele andere nützliche Funktionen. Neben der Bibliothek gibt es auch einsatzbereite Befehlszeilentools. Weitere Informationen finden Sie unter Verschiedene Dokumente, z. B. API-Referenz. Versuchen Sie, das Übersetzungs-Toolkit für Ihr tägliches Übersetzungsleben zu verwenden. Viel Spaß beim Übersetzen!
Morgen ist knok.
Recommended Posts