2010-11-06 14 views
7

Vorrei determinare, se c'è una traduzione nella lingua corrente per una determinata stringa. Mi piacerebbe scrivere qualcosa del tipo:In Django, come determinare se la traduzione per un determinato testo è disponibile?

if not translation_available("my string"): 
    log_warning_somewhere() 

Non ho trovato nulla di appropriato. La funzione ugettext restituisce solo la traduzione o la stringa originale (se la traduzione non è disponibile) ma senza alcuna opzione per determinare se la traduzione è presente o meno.

Grazie.

risposta

2

È possibile utilizzare polib per questo: https://bitbucket.org/izi/polib/wiki/Home

qualcosa del genere (non testati) righe di codice:

import polib 
po = polib.pofile('path/your_language.po') 
text == 'Your text' 
is_translated = any(e for e in po if e.msgid == text and (not e.translated() or 'fuzzy' in e.flags) and not e.obsolete) 

Questo vi darà vero quando un attiva la traduzione. 'e.translated()' restituisce True solo per entrambe le frasi, fuzzy e/o obsolete.

0

Poiché, come dici tu, ugettext restituirà la stringa originale se non è disponibile la traduzione, non puoi semplicemente confrontare il valore restituito con l'originale per vedere se sono identici?

+3

Grazie per la risposta, ma questo non è quello che stavo cercando. In alcune lingue alcune stringhe possono essere tradotte intenzionalmente in inglese, mentre in altre lingue, che tendono a tradurre tutto, esiste la traduzione. Quindi questo darebbe un falso avvertimento. Vorrei rilevare se manca la traduzione. – pcv

0
def translation_available(msg): return ugettext(msg) == msg 
+1

Grazie per la risposta, ma come ho scritto sopra: se traduco la stringa come intenzionalmente in inglese, questo darà un falso avviso. – pcv

+1

Questo dipende troppo dalle coincidenze. – kokociel

Problemi correlati