2010-11-06 12 views
7

Me gustaría determinar, si hay una traducción al lenguaje actual para una cadena dada. Me gustaría escribir algo como:En Django, ¿cómo determinar si la traducción de un texto dado está disponible?

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

No encontré nada apropiado. La función ugettext simplemente devuelve la traducción o la cadena original (si la traducción no está disponible) pero sin ninguna opción para determinar si la traducción está allí o no.

Gracias.

Respuesta

2

Puede utilizar Polib para ello: https://bitbucket.org/izi/polib/wiki/Home

algo por el estilo (no probado) de código:

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) 

Este será el que dará cuando un activo la traducción. 'e.translated()' solo devuelve True para frases difusas y/u obsoletas también.

0

Dado que, como dices, ugettext devolverá la cadena original si no hay traducción disponible, ¿no puedes simplemente comparar el valor devuelto con el original para ver si son idénticos?

+3

Gracias por la respuesta, pero esto no es lo que he estado buscando. En algunos idiomas, algunas cadenas pueden traducirse intencionalmente como cadenas de caracteres en inglés, mientras que en otros idiomas, que tienden a traducir todo, la traducción existe. Entonces esto daría una advertencia falsa. Me gustaría detectar si falta la traducción. – pcv

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

Gracias por la respuesta, pero como escribí arriba: si traduzco la cadena como inglés intencionalmente, esto dará una advertencia falsa. – pcv

+1

Esto depende demasiado de las coincidencias. – kokociel

Cuestiones relacionadas