Translate Toolkit La boîte à outils Translate (http://toolkit.translatehouse.org/) est un ensemble de bibliothèques et d'outils de ligne de commande pour vous aider dans votre travail de traduction. Il est distribué sous licence GPLv2 et peut être utilisé librement par n'importe qui. Le développeur est Translate House, qui est implémenté en Python. Il prend en charge deux systèmes Python, et ne sera pas pris en charge avant Python 2.5 à partir de la prochaine 1.11.0. Translate House développe également la plateforme de traduction Pootle, qui utilise également cette boîte à outils Translate (Doc-ja Advent Calendar 2013 Day 1. / naruoga / 20131201/1385838237), Jour 3 La traduction de LibreOffice introduite dans se fait également sur Pocket).
Dans cet article, j'utiliserai la bibliothèque Translate Toolkit pour créer un outil de traduction simple. En particulier, nous traitons des outils qui automatisent l'édition des fichiers PO. Ceci est utile lorsque le processus d'édition est simple mais que la zone cible est immense. En parlant d'édition mécanique, les outils Unix existants tels que sed sont à l'origine bons dans ce domaine, mais PO n'est pas orienté ligne, il n'est donc pas compatible avec les outils Unix et ne peut pas être simple. Utilisons maintenant la boîte à outils Translate.
Dans cet article, PO by GNU gettext est considéré comme le format du catalogue de messages, mais Translate Toolkit n'est pas limité à PO. Il prend en charge divers formats tels que XLIFF. Le PO lui-même est expliqué dans l'article Jour 2 et ne sera pas mentionné ici.
$ pip install translate-toolkit
Sinon, si votre système d'exploitation fournit un package translate-toolkit, vous souhaiterez peut-être l'utiliser. Le code source est conservé sur github.
Par exemple, considérons l'exemple de travail suivant. "Trois points ajoutés comme suffixes au message d'origine (communs dans les parties de l'interface graphique, etc.) ont été remplacés par un lecteur à trois points, ce qui a provoqué une grande quantité de flou. La correction elle-même du côté de la traduction est simple, mais la zone cible est énorme. Je veux le traiter mécaniquement. "
Ce qui suit est un extrait du bon de commande à modifier. Imaginez qu'il y ait tellement d'exemples comme celui-ci que vous ne voulez pas les éditer à la main. Certaines descriptions artificielles sont également incluses pour rendre l'effet plus facile à comprendre.
#Mettre à jour la cible
#, fuzzy
#| msgid "Open..."
msgid "Open…"
msgstr "ouvert..."
#Mettre à jour la cible
#Il y a un saut de ligne au milieu de la période latérale de traduction...
#, fuzzy
#| msgid "Save As..."
msgid "Save As…"
msgstr "enregistrer sous."
".."
#Pour une raison quelconque, il est un leader depuis un certain temps. Aucune mise à jour requise
msgid "Print…"
msgstr "impression…"
#Pour une raison quelconque, je souhaite laisser la traduction sans suffixe. Drop seulement flou
#, fuzzy
#| msgid "Print Preview..."
msgid "Print Preview…"
msgstr "Aperçu avant impression"
#Pour une raison quelconque, le texte original reste une période(Pour le moment, la traduction la suit)
msgid "Preference..."
msgstr "Réglage..."
Le traducteur remplace également les trois points par un lecteur à trois points selon le texte original mis à jour. Les conditions du message cible sont les suivantes.
Ce script lit PO à partir de l'entrée standard et écrit le résultat édité dans la sortie standard.
# -*- 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
Le résultat du traitement du bon de commande ci-dessus est le suivant. Pouvez-vous voir que le traitement flou se fait sans excès ni défaut, et que le retour à la ligne au milieu du texte peut être géré de manière appropriée?
#Mettre à jour la cible
msgid "Open…"
msgstr "ouvert…"
#Mettre à jour la cible
#Il y a un saut de ligne au milieu de la période latérale de traduction...
msgid "Save As…"
msgstr "enregistrer sous…"
#Pour une raison quelconque, il est un leader depuis un certain temps. Aucune mise à jour requise
msgid "Print…"
msgstr "impression…"
#Pour une raison quelconque, je souhaite laisser la traduction sans suffixe. Drop seulement flou
msgid "Print Preview…"
msgstr "Aperçu avant impression"
#Pour une raison quelconque, le texte original reste une période(Pour le moment, la traduction la suit)
msgid "Preference..."
msgstr "Réglage..."
Dans l'ensemble, les mots source et cible apparaissent souvent, mais ce sont des termes souvent utilisés dans la communauté des traducteurs. Le texte source et le texte cible désignent respectivement le texte original et le texte traduit. Correspond à msgid et msgstr dans PO.
Les API liées aux PO seront disponibles en important le module translate.storage.po. Pour plus d'informations sur l'API, consultez la référence API (http://docs.translatehouse.org/projects/translate-toolkit/en/1.11.0-rc1/api/index.html).
Si vous analysez le bon de commande avec la méthode parsefile de la classe pofile, une série de messages sera dans la liste appelée unités. Chaque message qui est un élément de la liste peut être utilisé comme un objet de la classe pounit. pounit fournit une API pour la manipulation des messages, y compris msgid et msgid, ainsi que les précédents msgids, divers commentaires et formes plurielles attributs définis par gettext. Vous pouvez accéder à (/manual/gettext.html#PO-Files). Grâce à l'API de pounit, vous pouvez manipuler les messages sans être lié par une description physique ennuyeuse des fichiers PO.
Les 4 lignes de la première si correspondent aux 4 conditions ci-dessus. J'édite un message qui correspond aux conditions.
À la fin de la boucle for, print imprime chaque pounit sur la sortie standard. pounit définit la méthode str, et vous pouvez le sortir en tant que message PO dans un format raisonnable simplement en l'imprimant tel quel.
En tant que travail similaire, il peut être appliqué à diverses fins telles que la vérification mécanique de la faute de frappe et la correction des lots en raison du changement de style de traduction. Dans d'autres cas courants, vous pouvez facilement créer des outils tels que prendre la différence de mise à jour entre deux bons de commande et fusionner les différences en un seul.
En fait, j'ai aidé avec la Traduction japonaise du projet GNOME pour changer le style des longues notes (comme changer «utilisateur» en «utilisateur»). Même quand je l'ai fait, j'ai créé un outil d'édition avec Translate Toolkit et je l'ai tout traité en même temps. Le nombre de messages PO dans le projet GNOME est estimé à plus de 100 000 en termes de msgid. Ce n'était pas quelque chose qui pouvait être modifié manuellement, et la boîte à outils Traduire a vraiment aidé.
Cette fois, je n'ai présenté qu'une petite partie de la bibliothèque Translate Toolkit. Il existe de nombreuses autres fonctionnalités utiles. En plus de la bibliothèque, il existe également des outils de ligne de commande prêts à l'emploi. Pour plus de détails, reportez-vous à Divers documents comme la référence API. Essayez d'utiliser la boîte à outils Translate pour votre vie de traduction quotidienne. Bonne traduction!
Demain, c'est knok.
Recommended Posts