2011-10-20 8 views
5

Tengo una aplicación que se ejecuta en varios procesos (un servidor web y algunos procesos que se usan para cálculos pesados). El objetivo es hacer que estos procesos de cálculo devuelvan errores localizados. Con el fin de hacer eso, he hecho un diccionario que será utilizado por Babel:¿Cómo registrar un objeto traductor de Pylons?

errors = { 
    'ERR_REQUEST_FORMAT': (1, _('ERR_REQUEST_FORMAT')), 
    'ERR_REQUEST_TYPE': (2, _('ERR_REQUEST_TYPE')), 
} 

Pero cuando trato de poner en marcha la aplicación, me sale

TypeError: No object (name: translator) has been registered for this thread 

¿Cuál es la manera correcta cargar el objeto traductor?

Gracias de antemano, Ivan.

Respuesta

1

recomendaría a traducir en el hilo principal del servidor, pero puede inscribirse/utilizar un objeto traductor de este modo:

import gettext 
str_to_translate = u'String to Translate' 
DOMAIN = 'example' # name of your translation babel translation file, here would be example.po 
LOCALE_DIR = '/path/to/locale/dir' # directory containing language subdirectories 
LANGUAGES = ['es'] 
CODESET = 'utf8' 
translator = gettext.translation(DOMAIN, localedir=LOCALE_DIR, languages=LANGUAGES, codeset=CODESET) 
translated_str = translator.gettext(str_to_translate) 

Si desea hacer uso del medio ambiente torres de alta tensión un poco más, se puede hacer algo como esto:

from pylons import config 
from pylons.i18n.translation import set_lang 
conf = config.current_conf() 
if not conf['pylons.paths']['root']: 
    conf['pylons.paths']['root'] = os.path.abspath(NAME_OF_YOUR_PROJECT) 
if not conf.get('pylons.package'): 
    conf['pylons.package'] = 'example' # same as domain above 
set_lang(LANG, pylons_config=conf) 

Después de eso, _ funcionará como en el hilo principal.

Cuestiones relacionadas