2011-11-27 13 views
6

Con gettext, il testo originale dei messaggi (di solito in inglese) serve come la chiave del messaggio ("msgid") per le traduzioni. Ciò significa che ogni volta che il testo originale di cambia, il msgid deve essere aggiornato in tutti i file .po.Posso aggiornare automaticamente msgids nei file .po di gettext per modifiche di testo banali?

Per veri e propri cambiamenti del testo, questo è ovviamente inevitabile, poiché il traduttore deve aggiornare la traduzione.

Tuttavia, se il cambiamento di originale non cambia il suo significato, ritraduzione è superfluo (ad esempio variazione punteggiatura, spaziatura modifiche o correzione di un errore di ortografia).

C'è un modo per aggiornare automaticamente i file .po in questo caso?

Ho cercato di usare xgettext & msgmerge (con fuzzy matching acceso), ma corrispondenza fuzzy a volte fallisce, oltre a questo produce un sacco di brutti "#, fuzzy" bandiere.

Nota: C'è una domanda simile: How to efficiently work with gettext PO files when making small edits to large text values Tuttavia, si tratta di stringhe di grandi dimensioni, in tal modo di un problema più specifico.

+0

Grazie per riferimento alla domanda simile; Sono d'accordo sul fatto che forse ci sono risposte diverse e non giocheremo a cop duplicati - tuttavia dirò che http://stackoverflow.com/a/3798064/179583 sembra applicarsi a questo altrettanto bene. – natevw

risposta

2

Un modo per evitare il problema è lasciare gli msgids da soli, avere un file .po per la lingua originale e apportare la correzione al suo interno.

Mi sembra sempre più un lavoro che una soluzione adeguata. Per la prossima iterazione (dove ci saranno sicuramente più modifiche msgid) il msgid viene cambiato e entrambi i traduttori lo traducono nel loro solito aggiornamento o ogni lingua viene aggiornata manualmente quando viene modificato il msgid.

2

Ho avuto esattamente questo problema quando si apportano modifiche minori a un progetto di Django. Quello che faccio è il seguente:

  1. Cambia messaggio nel codice.
  2. Esegui trova e sostituisci su tutti i file di traduzione ("django.po"), sostituendo il vecchio messaggio (msgid) con quello nuovo.
  3. Eseguire django-admin makemessages.

Se ho fatto le cose per bene, l'ultimo passaggio è superfluo (cioè, hai apportato la modifica per gettext). django usa le utilità gettext, quindi non dovrebbe importare come si creano i file dei messaggi.

mi trovare e sostituire in questo modo: find . -name "*.po" -print | xargs sed -i 's/oldmessageid/newmessageid/g' Per gentile concessione di http://rushi.vishavadia.com/blog/find-replace-across-multiple-files-in-linux

+1

Sì, usare search-and-replace è l'altra soluzione ovvia (insieme alla soluzione di dsas di usare msgids fissi). Tuttavia, la ricerca e la sostituzione possono diventare molto complesse, se alcuni msgids sono sottostringhe di altri o si verificano anche come parte delle traduzioni, se è necessario duplicare i msgids (stringa originale utilizzata in più posizioni e solo alcune modifiche). Quindi non è una soluzione generale. – sleske

Problemi correlati