Как зарегистрировать объект транслятора Pylons? - PullRequest
6 голосов
/ 20 октября 2011

У меня есть приложение, которое работает в нескольких процессах (один веб-сервер и несколько процессов, которые используются для тяжелых вычислений).Цель состоит в том, чтобы эти вычислительные процессы возвращали локализованные ошибки.Для этого я создал словарь, который будет использовать Бабель:

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

Но когда я пытаюсь запустить приложение, я получаю

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

Чтоправильный способ загрузить объект-переводчик?

Заранее спасибо, Иван.

1 Ответ

2 голосов
/ 18 ноября 2011

Я бы порекомендовал вам переводить в главном потоке сервера, но вы можете зарегистрировать / использовать объект переводчика, например, так:

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)

Если вы хотите использовать среду пилонов немного больше,может сделать что-то вроде этого:

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)

После этого _ будет работать как в основном потоке.

...