2011-10-20 18 views
5

Tôi có một ứng dụng chạy trong một số quy trình (một máy chủ web và một vài quy trình được sử dụng để tính toán nặng). Mục đích là để làm cho các quá trình tính toán này trả về lỗi được bản địa hóa. Để làm được điều đó, tôi đã thực hiện một cuốn từ điển đó sẽ được sử dụng bởi Babel:Làm thế nào để đăng ký một đối tượng dịch giả Pylons?

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

Nhưng khi tôi cố gắng để khởi động ứng dụng, tôi nhận được

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

đúng cách là gì để tải đối tượng dịch?

Cảm ơn trước, Ivan.

Trả lời

1

Tôi muốn giới thiệu bạn dịch trong thread máy chủ chính, nhưng bạn có thể đăng ký/sử dụng một đối tượng dịch như sau:

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) 

Nếu bạn muốn tận dụng các môi trường giá treo hơn một chút, bạn có thể làm điều gì đó như sau:

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) 

Sau đó, _ sẽ hoạt động như trong chuỗi chính.

Các vấn đề liên quan