2010-05-26 4 views
10

Avec les utilitaires gettext Babel basés sur Python, existe-t-il des techniques pour conserver les commentaires des traducteurs et les anciennes traductions ("obsolètes") (#~) dans les fichiers .po parmis les mises à jour du fichier .pot?Utilisation de Babel: comment protéger les commentaires des traducteurs (et les anciennes traductions) dans les fichiers GNU gettext PO?

La première fois une traduction obsolète est dans un fichier .po et pybabel update est exécuté, la traduction est marquée par #~. D'une part, il est traité comme un commentaire et n'est pas utilisé jusqu'à ce qu'un traducteur le regarde et le modifie, mais d'autre part, il n'est pas supprimé, donc un traducteur peut y faire référence, ou copier du texte de cela dans leurs autres traductions.

Cependant, la prochaine fois que pybabel update est exécuté, tous les commentaires sont définitivement supprimés du fichier. Cela signifie que les traductions marquées #~ sont également supprimées.

Par exemple, avec la version 0.9.6 Babel et Jinja2 version 2.6 et les fichiers suivants:

./babel.ini:

[jinja2: **/templates/**.html] 
encoding = utf-8 

./templates/test.html:

<html><body> 
<h1>{% trans %}My website{% endtrans %}</h1> 
</body></html> 

./i18n/pt_PT/LC_MESSAGES/messages.po:

# ... header stuff generated from 
#  pybabel init -l pt_PT -d i18n -i i18n/messages.pot ... 

# Don't forget, I want to remember something about this! 
#~ msgid "My web page" 
#~ msgstr "A minha página de web" 

Après les commandes suivantes sont exécutées:

$ pybabel extract -F babel.ini -o i18n/messages.pot . 
$ pybabel update -l pt_PT -d i18n -i i18n/messages.pot 

Le fichier portugais messages.po perd tous ses anciens commentaires, et ne contient que:

./i18n/pt_PT/LC_MESSAGES/messages.po:

# ... similar header stuff ... 

#: templates/test.html:2 
msgid "My web site" 
msgstr "" 

Comment puis-je mettre à jour mes fichiers de traduction sans perdre mes commentaires et mes anciennes traductions?

+0

Pouvez-vous spécifier les bibliothèques que vous utilisez et fournir un exemple de fichier? –

+0

@JamieCockburn Est-ce que cela aide? –

Répondre

6

Au lieu d'utiliser pybabel mise à jour l'utilisation msgmerge de gettext utilities

Dans votre cas, il serait:

msgmerge ./i18n/pt_PT/LC_MESSAGES/messages.po ./i18n/messages.pot -o ./i18n/pt_PT/LC_MESSAGES/messages.po

Exemple:

ayant reference.pot fichier:

msgid "" 
msgstr "" 
"Content-Type: text/plain; charset=utf-8\n" 
"Content-Transfer-Encoding: 8bit\n" 

#: templates/test.html:2 
msgid "My web site" 
msgstr "" 

et pt_previous.po fichier avec vos traductions précédentes:

msgid "" 
msgstr "" 
"Language-Team: \n" 
"Content-Type: text/plain; charset=utf-8\n" 
"Content-Transfer-Encoding: 8bit\n" 
"Language: pt\n" 

# Don't forget, I want to remember something about this! 
#~ msgid "My web site" 
#~ msgstr "A minha página de web" 

Exécution d'une commande:

msgmerge pt_previous.po reference.pot -o pt_new.po

Est-ce que faire ./pt_new.po fichier qui ont l'air s comme ceci:

msgid "" 
msgstr "" 
"Language-Team: \n" 
"Language: pt\n" 
"Content-Type: text/plain; charset=UTF-8\n" 
"Content-Transfer-Encoding: 8bit\n" 

# Don't forget, I want to remember something about this! 
#: templates/test.html:2 
msgid "My web site" 
msgstr "A minha página de web" 
Questions connexes