2010-05-26 9 views
10

Con le utilità gettext basate su Python Babel, esistono delle tecniche per conservare i commenti del traduttore e le traduzioni obsolete ("obsolete") contrassegnate con #~ nei file .po tra gli aggiornamenti del file .pot?Uso di Babel: come proteggere i commenti del traduttore (e le traduzioni precedenti) nei file PO gettext di GNU?

La prima volta che una traduzione obsoleta si trova in un file .po e pybabel update viene eseguita, la traduzione è contrassegnata con #~. Questo è così che da un lato viene trattato come un commento e non viene utilizzato fino a quando un traduttore non lo guarda e lo modifica, ma d'altra parte non viene rimosso, quindi un traduttore può fare riferimento ad esso o copiare il testo da esso nelle loro altre traduzioni.

Tuttavia, la volta successiva che viene eseguito pybabel update, tutti i commenti vengono definitivamente rimossi dal file. Ciò significa che anche le traduzioni contrassegnate con #~ vengono rimosse.

Ad esempio, con Babel versione 0.9.6 e Jinja2 versione 2.6, ed i seguenti file:

./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" 

Dopo i seguenti comandi vengono eseguiti:

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

Il file portoghese messages.po perde tutti i suoi vecchi commenti, e contiene solo:

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

# ... similar header stuff ... 

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

Come posso aggiornare i miei file di traduzione senza perdere i miei commenti e le vecchie traduzioni?

+0

Puoi specificare quali librerie stai usando e fornire un file di esempio? –

+0

@JamieCockburn Ti aiuta? –

risposta

6

Invece di usare pybabel utilizzo aggiornamento msgmerge da gettext utilities

Nel tuo caso sarebbe:

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

Esempio:

avere reference.pot di file:

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

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

e pt_previous.po file con le traduzioni precedenti:

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" 

esecuzione di un comando:

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

farà ./pt_new.po di file che guardano Così:

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" 
Problemi correlati