2010-05-26 21 views
10

Z narzędziami tekstowymi opartymi na języku Python Babel istnieją jakieś techniki zachowywania komentarzy tłumacza i starych ("przestarzałych") tłumaczeń (oznaczonych #~) w plikach .po dla aktualizacji z pliku .pot?Używanie Babel: Jak chronić komentarze tłumacza (i stare tłumaczenia) w plikach PO GNU gettext?

Po pierwszym nieaktualnym tłumaczeniu w pliku .po i pybabel update tłumaczenie jest oznaczone jako #~. Jest tak, że z jednej strony jest traktowany jako komentarz i nie jest używany, dopóki tłumacz nie przejrzy go i nie zmieni go, ale z drugiej strony nie zostanie usunięty, więc tłumacz może się do niego odnieść lub skopiować tekst z niego do innych tłumaczeń.

Jednak po następnym uruchomieniu pybabel update wszystkie komentarze zostaną trwale usunięte z pliku. Oznacza to, że tłumaczenia oznaczone jako #~ również zostaną usunięte.

Na przykład, w wersji 0.9.6 i Jinja2 Babel wersji 2.6 oraz następujące pliki:

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

Po uruchom następujące polecenia:

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

Plik portugalski messages.po traci wszystkie swoje stare komentarze i zawiera tylko:

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

# ... similar header stuff ... 

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

Jak mogę zaktualizować moje pliki tłumaczeniowe bez utraty moich komentarzy i starych tłumaczeń?

+0

Czy możesz określić, których bibliotek używasz i podać przykładowy plik? –

+0

@JamieCockburn Czy to pomaga? –

Odpowiedz

6

Zamiast używania aktualizacji pybabel msgmerge z gettext utilities

W twoim przypadku będzie to:

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

Przykład:

mający reference.pot pliku:

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

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

i pt_previous.po plik z wcześniejszych przekładów:

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" 

Uruchomienie polecenia:

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

uczyni ./pt_new.po plik, który zajrzeć s to:

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"