2011-11-27 24 views
6

W przypadku gettext oryginalny (zazwyczaj angielski) tekst wiadomości służy jako tłumaczenie klucza wiadomości ("msgid"). Oznacza to, że za każdym razem, gdy oryginalny tekst zmienia się, msgid musi być aktualizowany we wszystkich plikach .po.Czy mogę automatycznie zaktualizować pliki msgids do plików .po gettext, aby uzyskać proste zmiany tekstu?

Dla prawdziwych zmian tekstu jest to oczywiście nieuniknione, ponieważ tłumacz musi zaktualizować tłumaczenie.

Jeśli jednak zmiana oryginału nie zmienia swojego znaczenia, to ponowne tłumaczenie jest superflouzyjne (np. Zmiana w punctation, białe znaki zmiany lub korekta błędu pisowni).

Czy istnieje sposób automatycznego aktualizowania plików .po w takim przypadku?

Próbowałem użyć xgettext & programowi msgmerge (z rozmyte dopasowanie włączony), ale rozmyty dopasowanie czasami nie, plus ten produkuje dużo brzydkich "#, fuzzy" flagi.

Uwaga: Jest to podobne pytanie: How to efficiently work with gettext PO files when making small edits to large text values jednak, że chodzi o duże ciągi, a tym samym o bardziej konkretnego problemu.

+0

Dzięki za odwoływania się podobne pytanie; Zgadzam się, że być może istnieją różne odpowiedzi i nie zagrasz w duplikacie gliniarza - jednak powiem, że http://stackoverflow.com/a/3798064/179583 zdaje się odnosić do tego równie dobrze. – natevw

Odpowiedz

2

Jednym ze sposobów uniknięcia problemu jest pozostawienie samych msgids, posiadanie pliku .po dla oryginalnego języka i wprowadzenie w nim poprawki.

Zawsze wydaje mi się, że jest to bardziej praca niż poprawna naprawa. Dla następnej iteracji (w której z pewnością będą więcej zmian w msgid), msgid zostanie zmieniony i albo tłumacze przetłumaczyli go w swojej zwykłej aktualizacji, albo każdy język jest aktualizowany ręcznie, gdy zmieniany jest msgid.

2

Miałem dokładnie ten problem, wykonując drobne zmiany w projekcie django. Co mogę zrobić, to:

  1. Zmiana wiadomości w kodzie.
  2. Wyszukuj i zamień na wszystkie pliki tłumaczeń ("django.po"), zastępując starą wiadomość (msgid) nową.
  3. Uruchamiaj makraessage django-admin.

Jeśli zrobiłem wszystko dobrze, ostatni krok jest niesamowity (tzn. Wykonałeś zmianę dla gettext). django używa narzędzi gettext, więc nie powinno mieć znaczenia, w jaki sposób tworzysz pliki wiadomości.

znaleźć i zastąpić tak: find . -name "*.po" -print | xargs sed -i 's/oldmessageid/newmessageid/g' Dzięki uprzejmości http://rushi.vishavadia.com/blog/find-replace-across-multiple-files-in-linux

+1

Tak, przy użyciu wyszukiwania i zamiany jest inne oczywiste rozwiązanie (wraz z rozwiązaniem dsas za pomocą stałych msgids). Jednak wyszukiwanie i zamienianie może być bardzo skomplikowane, jeśli niektóre msgoidy są podciągami innych lub występują również jako część tłumaczeń, jeśli potrzebujesz zduplikować msgidy (oryginalny ciąg używany w wielu miejscach i tylko niektóre zmiany). Więc to nie jest ogólne rozwiązanie. – sleske