2011-10-20 16 views
5

Mam aplikację działającą w kilku procesach (jeden serwer WWW i kilka procesów używanych do ciężkich obliczeń). Celem jest, aby te procesy obliczeniowe zwróciły zlokalizowane błędy. Aby to zrobić, zrobiłem słownika, który będzie używany przez Babel:Jak zarejestrować obiekt tłumacz Pylony?

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

Ale gdy próbuję uruchomić aplikację, mam

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

Co to jest właściwa droga załadować obiekt tłumacza?

Z góry dzięki, Ivan.

Odpowiedz

1

Polecam tłumaczyć w głównym wątku serwera, ale można zarejestrować/użyć obiektu translator tak:

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) 

Jeśli chcesz, aby korzystanie ze środowiska pylony nieco więcej, można zrobić coś takiego:

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) 

Po tym, _ będzie działać jak w głównym wątku.

Powiązane problemy