2010-11-06 16 views
7

Belirli bir dize için geçerli bir dile çeviri varsa, belirlemek istiyorum. Bir şey yazmak istiyorum:Django'da, belirli bir metnin çevirisi olup olmadığını nasıl belirleyebilirim?

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

Uygun bir şey bulamadım. ugettext işlevi yalnızca çeviriyi veya orijinal dizeyi (çeviri mevcut değilse) döndürür, ancak çevirinin var olup olmadığını belirlemek için herhangi bir seçenek yoktur.

Teşekkürler.

cevap

2

Bunun için polib kullanabilirsiniz: kodun olanlar (denenmemiş) çizgisinde https://bitbucket.org/izi/polib/wiki/Home

şey: Bir aktif çeviri kullanılabilir olduğunda

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) 

Bu Gerçek verecektir. 'e.translated()' tek başına, hem bulanık hem de eski ifadeler için True değerini döndürür.

0

Kullandığınız gibi, çeviri bulunmuyorsa, ugettext özgün dizgiyi döndüreceğinden, aynı olup olmadığını görmek için döndürülen değeri orijinal ile karşılaştırmanız mümkün olmaz mı?

+3

Cevabınız için teşekkürler, ama aradığım şey bu değil. Bazı dillerde, bazı dizeler ingilizce dizgiler olarak kasıtlı olarak çevrilebilirken, diğer dillerde, her şeyi tercüme etme eğilimi vardır, çeviri vardır. Yani bu yanlış bir uyarı verirdi. Çevirinin eksik olup olmadığını tespit etmek istiyorum. – pcv

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

Cevabınız için teşekkürler, ama yukarıda yazdığım gibi: dizeyi İngilizce olarak bilerek çevirirseniz, bu yanlış bir uyarı verecektir. – pcv

+1

Bu, çok fazla rastlantıya dayanıyor. – kokociel

İlgili konular